-----------------------------------------------------------------------------
 MANIFEST                  |  248 -
 Makefile                  |   56 
 aclocal.m4                |  414 +
 config.guess              |  504 +-
 config.sub                |   37 
 configure                 | 3563 ++++++++---------
 configure.in              |   45 
 doc/CHANGES               |   62 
 doc/CREDITS               |  116 
 doc/TODO                  |   97 
 doc/WHATSNEW              |    2 
 doc/config-anomalies      |    1 
 doc/keymap.sample         |   27 
 doc/rcvars.txt            |    2 
 doc/tin.1                 |  104 
 doc/tin.5                 |   49 
 include/extern.h          |   15 
 include/keymap.h          |   20 
 include/nntplib.h         |   42 
 include/policy.h          |    4 
 include/proto.h           |   35 
 include/tin.h             |   28 
 include/tinrc.h           |    5 
 include/version.h         |    8 
 libcanlock/Build          |    2 
 mkdirs.sh                 |    3 
 pcre/AUTHORS              |   21 
 pcre/COPYING              |   35 
 pcre/ChangeLog            |  186 
 pcre/LICENCE              |   35 
 pcre/Makefile.in          |   46 
 pcre/Makefile.in-old      |  382 +
 pcre/NEWS                 |   32 
 pcre/NON-UNIX-USE         |   71 
 pcre/README               |  186 
 pcre/RunTest.in           |  150 
 pcre/configure.in         |   55 
 pcre/dftables.c           |   33 
 pcre/doc/pcre.3           |   57 
 pcre/doc/pcrepattern.3    |   42 
 pcre/get.c                |  357 -
 pcre/internal.h           |  752 ---
 pcre/maketables.c         |  146 
 pcre/pcre.c               | 9195 --------------------------------------------
 pcre/pcre.def             |   22 
 pcre/pcre.in              |  121 
 pcre/pcre_chartables.c    |  183 
 pcre/pcre_compile.c       | 5034 ++++++++++++++++++++++++
 pcre/pcre_config.c        |  112 
 pcre/pcre_dfa_exec.c      | 1922 +++++++++
 pcre/pcre_exec.c          | 3632 +++++++++++++++++
 pcre/pcre_fullinfo.c      |  149 
 pcre/pcre_get.c           |  352 +
 pcre/pcre_globals.c       |   69 
 pcre/pcre_info.c          |   89 
 pcre/pcre_internal.h      |  905 ++++
 pcre/pcre_maketables.c    |  145 
 pcre/pcre_ord2utf8.c      |   78 
 pcre/pcre_printint.c      |  451 ++
 pcre/pcre_refcount.c      |   77 
 pcre/pcre_study.c         |  482 ++
 pcre/pcre_tables.c        |  129 
 pcre/pcre_try_flipped.c   |  132 
 pcre/pcre_ucp_findchar.c  |   53 
 pcre/pcre_valid_utf8.c    |  130 
 pcre/pcre_version.c       |   61 
 pcre/pcre_xclass.c        |  121 
 pcre/pcregrep.c           |  685 ++-
 pcre/pcreposix.c          |  150 
 pcre/pcreposix.h          |    6 
 pcre/pcretest.c           |  255 -
 pcre/printint.c           |  461 --
 pcre/study.c              |  484 --
 pcre/testdata/testinput1  |    8 
 pcre/testdata/testinput2  |   36 
 pcre/testdata/testinput7  | 4013 +++++++++++++++++++
 pcre/testdata/testinput8  |  540 ++
 pcre/testdata/testinput9  |  599 ++
 pcre/testdata/testoutput1 |   14 
 pcre/testdata/testoutput2 |  118 
 pcre/testdata/testoutput3 |    2 
 pcre/testdata/testoutput4 |    2 
 pcre/testdata/testoutput5 |    2 
 pcre/testdata/testoutput6 |    2 
 pcre/testdata/testoutput7 | 6516 +++++++++++++++++++++++++++++++
 pcre/testdata/testoutput8 | 1033 ++++
 pcre/testdata/testoutput9 | 1234 +++++
 pcre/ucp.c                |  150 
 pcre/ucp.h                |   10 
 pcre/ucp_findchar.c       |  160 
 pcre/ucptypetable.c       |   93 
 pcre/version.sh           |    6 
 po/de.gmo                 |binary
 po/de.po                  | 2058 +++++----
 po/en_GB.gmo              |binary
 po/en_GB.po               | 2000 +++++----
 po/et.gmo                 |binary
 po/et.po                  | 2043 +++++----
 po/fr.gmo                 |binary
 po/fr.po                  | 2162 +++++-----
 po/ru.gmo                 |binary
 po/ru.po                  | 6150 +++++++++++++++++++++++++++++
 po/rw.gmo                 |binary
 po/rw.po                  | 6952 +++++++++++++++++++++++++++++++++
 po/tin.pot                | 2037 +++++----
 po/tr.gmo                 |binary
 po/tr.po                  | 2153 +++++-----
 src/Makefile.in           |   42 
 src/art.c                 |  108 
 src/attrib.c              |   49 
 src/config.c              |   13 
 src/cook.c                |    2 
 src/curses.c              |    6 
 src/debug.c               |   29 
 src/feed.c                |   10 
 src/filter.c              |   90 
 src/global.c              |    3 
 src/group.c               |   74 
 src/help.c                |   60 
 src/init.c                |   50 
 src/keymap.c              |  349 +
 src/lang.c                |   25 
 src/lock.c                |   10 
 src/main.c                |   13 
 src/makecfg.c             |  116 
 src/memory.c              |    4 
 src/misc.c                |   15 
 src/my_tmpfile.c          |    4 
 src/newsrc.c              |   28 
 src/nntplib.c             |  428 +-
 src/options_menu.c        |   37 
 src/page.c                |   35 
 src/parsdate.y            |   14 
 src/pgp.c                 |   79 
 src/pgp.c.o               |  488 ++
 src/post.c                |  170 
 src/prompt.c              |   14 
 src/read.c                |    6 
 src/refs.c                |    6 
 src/rfc1524.c             |    4 
 src/rfc2045.c             |   10 
 src/rfc2046.c             |    1 
 src/save.c                |    7 
 src/search.c              |   30 
 src/select.c              |    8 
 src/signal.c              |    4 
 src/string.c              |   34 
 src/tags.c                |   10 
 src/thread.c              |   44 
 src/tincfg.tbl            |    3 
 src/tmpfile.c             |    4 
 src/xref.c                |    4 
 tools/tinews.pl           |    2 
 153 files changed, 55013 insertions(+), 21382 deletions(-)
-----------------------------------------------------------------------------
diff -Nurp tin-1.7.8/MANIFEST tin-1.7.9/MANIFEST
--- tin-1.7.8/MANIFEST	2005-03-21 13:44:06.000000000 +0100
+++ tin-1.7.9/MANIFEST	2005-06-29 11:47:04.842233960 +0200
@@ -1,43 +1,43 @@
-MANIFEST for tin-1.7.8 (Mon Mar 21 13:44:05 CET 2005)
+MANIFEST for tin-1.7.9 (Wed Jun 29 11:47:03 CEST 2005)
 ----------------------------------------------------
-  13138 ./Makefile
-   7617 ./MANIFEST
+  13794 ./Makefile
+   8324 ./MANIFEST
    1440 ./README
     564 ./README.MAC
    2209 ./README.VMS
    1006 ./README.WIN
- 138874 ./aclocal.m4
+ 146871 ./aclocal.m4
     882 ./conf-tin
-  43545 ./config.guess
-  31442 ./config.sub
- 487325 ./configure
-  30864 ./configure.in
+  44272 ./config.guess
+  31584 ./config.sub
+ 485952 ./configure
+  30869 ./configure.in
    7123 ./install.sh
-    777 ./mkdirs.sh
+    838 ./mkdirs.sh
    1505 ./tin.spec
   18847 ./doc/ABOUT-NLS
-  20601 ./doc/CHANGES
+  23359 ./doc/CHANGES
  226345 ./doc/CHANGES.old
-   4709 ./doc/CREDITS
+   4766 ./doc/CREDITS
    1469 ./doc/DEBUG_REFS
   29900 ./doc/INSTALL
-  31578 ./doc/TODO
-    963 ./doc/WHATSNEW
+  32278 ./doc/TODO
+    995 ./doc/WHATSNEW
    2618 ./doc/art_handling.txt
    1700 ./doc/article.txt
    3862 ./doc/auth.txt
-   5346 ./doc/config-anomalies
+   5377 ./doc/config-anomalies
   11237 ./doc/filtering
   35304 ./doc/good-netkeeping-seal
    3803 ./doc/internals.txt
   23621 ./doc/iso2asc.txt
-   3728 ./doc/keymap.sample
+   3488 ./doc/keymap.sample
     660 ./doc/mailcap.sample
    3365 ./doc/mime.types
    1541 ./doc/nov_tests
    5155 ./doc/opt-case.1
    3984 ./doc/pgp.txt
-   2711 ./doc/rcvars.txt
+   2726 ./doc/rcvars.txt
    1525 ./doc/reading-mail.txt
    4947 ./doc/umlaute.txt
    4246 ./doc/umlauts.txt
@@ -48,104 +48,104 @@ MANIFEST for tin-1.7.8 (Mon Mar 21 13:44
    4168 ./doc/mmdf.5
    2128 ./doc/newsoverview.5
    6963 ./doc/plp_snprintf.3
- 118104 ./doc/tin.1
-  72104 ./doc/tin.5
+ 118332 ./doc/tin.1
+  72129 ./doc/tin.5
    4733 ./doc/w2r.1
    2196 ./doc/wildmat.3
     344 ./tools/expiretover
    3815 ./tools/metamutt
    2787 ./tools/opt-case.pl
    1410 ./tools/tinlock
-  25034 ./tools/tinews.pl
+  25041 ./tools/tinews.pl
    1561 ./tools/url_handler.sh
    3347 ./tools/w2r.pl
    1661 ./tools/expand_aliases.tgz
    2778 ./include/bool.h
    2039 ./include/bugrep.h
    9502 ./include/oldconfig.h
-  58587 ./include/extern.h
-  13218 ./include/keymap.h
+  58526 ./include/extern.h
+  12950 ./include/keymap.h
    6340 ./include/newsrc.h
-   6566 ./include/nntplib.h
+   8333 ./include/nntplib.h
     665 ./include/plp_snprintf.h
-  12245 ./include/policy.h
-  30651 ./include/proto.h
+  12242 ./include/policy.h
+  31052 ./include/proto.h
    5047 ./include/rfc2046.h
    3373 ./include/stpwatch.h
    5756 ./include/tcurses.h
-  62940 ./include/tin.h
-  13273 ./include/tinrc.h
+  63019 ./include/tin.h
+  13398 ./include/tinrc.h
    5670 ./include/tnntp.h
    2264 ./include/trace.h
-   2562 ./include/version.h
+   2561 ./include/version.h
   25899 ./src/active.c
-  55767 ./src/art.c
-  31826 ./src/attrib.c
+  58372 ./src/art.c
+  31930 ./src/attrib.c
   12354 ./src/auth.c
   13712 ./src/charset.c
    8220 ./src/color.c
-  57811 ./src/config.c
-  20063 ./src/cook.c
-  30473 ./src/curses.c
-   9895 ./src/debug.c
+  58079 ./src/config.c
+  20064 ./src/cook.c
+  30471 ./src/curses.c
+  10378 ./src/debug.c
    3408 ./src/envarg.c
-  26421 ./src/feed.c
-  54846 ./src/filter.c
+  26435 ./src/feed.c
+  56657 ./src/filter.c
   18114 ./src/getline.c
-   8991 ./src/global.c
-  45162 ./src/group.c
+   9002 ./src/global.c
+  47367 ./src/group.c
    3900 ./src/hashstr.c
    8763 ./src/header.c
-  28809 ./src/help.c
+  28794 ./src/help.c
   13890 ./src/inews.c
-  32645 ./src/init.c
+  33844 ./src/init.c
    2216 ./src/joinpath.c
-  82376 ./src/keymap.c
- 116795 ./src/lang.c
+  88879 ./src/keymap.c
+ 117365 ./src/lang.c
    4486 ./src/langinfo.c
    7033 ./src/list.c
-   6662 ./src/lock.c
+   6667 ./src/lock.c
   13352 ./src/mail.c
-  21101 ./src/main.c
-  10197 ./src/makecfg.c
-  12278 ./src/memory.c
+  21194 ./src/main.c
+  10814 ./src/makecfg.c
+  12319 ./src/memory.c
    5257 ./src/mimetypes.c
-  89594 ./src/misc.c
-  40317 ./src/newsrc.c
-  39786 ./src/nntplib.c
+  89841 ./src/misc.c
+  40030 ./src/newsrc.c
+  43933 ./src/nntplib.c
    7125 ./src/nrctbl.c
-  41462 ./src/options_menu.c
-  58511 ./src/page.c
-  24133 ./src/parsdate.y
+  41967 ./src/options_menu.c
+  58661 ./src/page.c
+  24138 ./src/parsdate.y
   16966 ./src/plp_snprintf.c
-  12669 ./src/pgp.c
- 132988 ./src/post.c
-  17070 ./src/prompt.c
-  10661 ./src/read.c
-  25568 ./src/refs.c
+  12777 ./src/pgp.c
+ 133229 ./src/post.c
+  17135 ./src/prompt.c
+  10627 ./src/read.c
+  25566 ./src/refs.c
    5276 ./src/regex.c
-  14545 ./src/rfc1524.c
-  15062 ./src/rfc2045.c
-  29727 ./src/rfc2046.c
+  14538 ./src/rfc1524.c
+  15046 ./src/rfc2045.c
+  29728 ./src/rfc2046.c
   32672 ./src/rfc2047.c
-  37371 ./src/save.c
+  37434 ./src/save.c
   11382 ./src/screen.c
-  16552 ./src/search.c
-  30892 ./src/select.c
+  16593 ./src/search.c
+  30871 ./src/select.c
    7590 ./src/sigfile.c
-  12655 ./src/signal.c
+  12667 ./src/signal.c
    7215 ./src/strftime.c
-  22954 ./src/string.c
-  13874 ./src/tags.c
+  23262 ./src/string.c
+  13852 ./src/tags.c
   16944 ./src/tcurses.c
    3071 ./src/tmpfile.c
    3364 ./src/my_tmpfile.c
-  40147 ./src/thread.c
+  40429 ./src/thread.c
    2472 ./src/trace.c
    4407 ./src/version.c
    5453 ./src/wildmat.c
    7153 ./src/xface.c
-   7775 ./src/xref.c
+   7784 ./src/xref.c
    3013 ./vms/dir.h
     424 ./vms/filetypes.h
   21451 ./vms/getopt.c
@@ -168,61 +168,79 @@ MANIFEST for tin-1.7.8 (Mon Mar 21 13:44
    1772 ./vms/vmsfile.c
    5652 ./vms/vmspwd.c
     389 ./vms/vmstimval.h
-    179 ./pcre/AUTHORS
-   2067 ./pcre/COPYING
-  71737 ./pcre/ChangeLog
+    422 ./pcre/AUTHORS
+   2515 ./pcre/COPYING
+  80365 ./pcre/ChangeLog
    8049 ./pcre/INSTALL
-   2067 ./pcre/LICENCE
-   2639 ./pcre/Makefile.in
-  12953 ./pcre/Makefile.in-old
-   8460 ./pcre/NEWS
-   9665 ./pcre/NON-UNIX-USE
-  19589 ./pcre/README
-   4742 ./pcre/RunTest.in
+   2515 ./pcre/LICENCE
+   2938 ./pcre/Makefile.in
+  24569 ./pcre/Makefile.in-old
+   9915 ./pcre/NEWS
+  10767 ./pcre/NON-UNIX-USE
+  22105 ./pcre/README
+   5924 ./pcre/RunTest.in
     138 ./pcre/config.h
-   5847 ./pcre/configure.in
-   5808 ./pcre/dftables.c
-  12072 ./pcre/get.c
-  32928 ./pcre/internal.h
-   5173 ./pcre/maketables.c
+   7486 ./pcre/configure.in
+   5875 ./pcre/dftables.c
    1171 ./pcre/pcre-config.in
- 282536 ./pcre/pcre.c
-    271 ./pcre/pcre.def
-   9530 ./pcre/pcre.in
+  10608 ./pcre/pcre.in
+ 159122 ./pcre/pcre_compile.c
+   3391 ./pcre/pcre_config.c
+  66541 ./pcre/pcre_dfa_exec.c
+ 110756 ./pcre/pcre_exec.c
+   4924 ./pcre/pcre_fullinfo.c
+  11915 ./pcre/pcre_get.c
+   3159 ./pcre/pcre_globals.c
+   3836 ./pcre/pcre_info.c
+  36859 ./pcre/pcre_internal.h
+   5310 ./pcre/pcre_maketables.c
+   2980 ./pcre/pcre_ord2utf8.c
+  12105 ./pcre/pcre_printint.c
+   3306 ./pcre/pcre_refcount.c
+  14371 ./pcre/pcre_study.c
+   4503 ./pcre/pcre_tables.c
+   5343 ./pcre/pcre_try_flipped.c
+   2468 ./pcre/pcre_ucp_findchar.c
+   4477 ./pcre/pcre_valid_utf8.c
+   2568 ./pcre/pcre_version.c
+   4139 ./pcre/pcre_xclass.c
   11707 ./pcre/pcredemo.c
-  17061 ./pcre/pcregrep.c
-  11279 ./pcre/pcreposix.c
-   3983 ./pcre/pcreposix.h
-  51609 ./pcre/pcretest.c
+  33424 ./pcre/pcregrep.c
+  10356 ./pcre/pcreposix.c
+   4086 ./pcre/pcreposix.h
+  52916 ./pcre/pcretest.c
    5234 ./pcre/perltest
-  12606 ./pcre/printint.c
-  14414 ./pcre/study.c
-   4196 ./pcre/ucp.c
-   1831 ./pcre/ucp.h
+   4389 ./pcre/ucp_findchar.c
+   1663 ./pcre/ucp.h
    3547 ./pcre/ucpinternal.h
  453166 ./pcre/ucptable.c
-   3267 ./pcre/ucptypetable.c
     395 ./pcre/version.sh
-   8305 ./pcre/doc/pcre.3
-  61694 ./pcre/doc/pcrepattern.3
-  73940 ./pcre/testdata/testinput1
-  24195 ./pcre/testdata/testinput2
+   9507 ./pcre/doc/pcre.3
+  63013 ./pcre/doc/pcrepattern.3
+  74037 ./pcre/testdata/testinput1
+  24750 ./pcre/testdata/testinput2
     596 ./pcre/testdata/testinput3
    8401 ./pcre/testdata/testinput4
    3516 ./pcre/testdata/testinput5
    7432 ./pcre/testdata/testinput6
-  98299 ./pcre/testdata/testoutput1
- 115639 ./pcre/testdata/testoutput2
+  74550 ./pcre/testdata/testinput7
+   8795 ./pcre/testdata/testinput8
+   8762 ./pcre/testdata/testinput9
+  98443 ./pcre/testdata/testoutput1
+ 117618 ./pcre/testdata/testoutput2
    1513 ./pcre/testdata/testoutput3
   14738 ./pcre/testdata/testoutput4
   22902 ./pcre/testdata/testoutput5
   16226 ./pcre/testdata/testoutput6
+ 103487 ./pcre/testdata/testoutput7
+  51419 ./pcre/testdata/testoutput8
+  24236 ./pcre/testdata/testoutput9
   19899 ./include/autoconf.hin
    5800 ./pcre/pcre.mms
-  20900 ./src/Makefile.in
-   7634 ./src/tincfg.tbl
+  21094 ./src/Makefile.in
+   7657 ./src/tincfg.tbl
    8747 ./src/descrip.mms
-    954 ./libcanlock/Build
+    946 ./libcanlock/Build
     882 ./libcanlock/CHANGES
     789 ./libcanlock/MANIFEST
    1351 ./libcanlock/README
@@ -282,15 +300,19 @@ MANIFEST for tin-1.7.8 (Mon Mar 21 13:44
      41 ./intl/VERSION
    4962 ./po/Makefile.inn
     847 ./po/POTFILES.in
- 120552 ./po/tin.pot
- 165376 ./po/de.gmo
- 196302 ./po/de.po
+ 123015 ./po/tin.pot
+ 166483 ./po/de.gmo
+ 199247 ./po/de.po
    7359 ./po/en_GB.gmo
- 123229 ./po/en_GB.po
- 156862 ./po/et.gmo
- 187287 ./po/et.po
- 162872 ./po/fr.gmo
- 193473 ./po/fr.po
+ 125599 ./po/en_GB.po
+ 155976 ./po/et.gmo
+ 189623 ./po/et.po
+ 162044 ./po/fr.gmo
+ 195993 ./po/fr.po
+  72197 ./po/ru.gmo
+ 151996 ./po/ru.po
+   2081 ./po/rw.gmo
+ 169224 ./po/rw.po
    5889 ./po/tr.gmo
- 188501 ./po/tr.po
-6975169 total
+ 189990 ./po/tr.po
+7844221 total
diff -Nurp tin-1.7.8/Makefile tin-1.7.9/Makefile
--- tin-1.7.8/Makefile	2005-03-21 13:44:03.000000000 +0100
+++ tin-1.7.9/Makefile	2005-06-29 11:47:02.577652789 +0200
@@ -1,15 +1,15 @@
 # Top level Makefile for tin
 # - for configuration options read the doc/INSTALL file.
 #
-# Updated: 2005-03-06
+# Updated: 2005-06-17
 #
 
 PROJECT	= tin
 LVER	= 1
 PVER	= 7
-SVER	= 8
+SVER	= 9
 VER	= $(LVER).$(PVER).$(SVER)
-DVER	= 20050321
+DVER	= 20050629
 EXE	= tin
 
 # directory structure
@@ -220,26 +220,38 @@ PCRE	= \
 	$(PCREDIR)/config.h \
 	$(PCREDIR)/configure.in \
 	$(PCREDIR)/dftables.c \
-	$(PCREDIR)/get.c \
-	$(PCREDIR)/internal.h \
-	$(PCREDIR)/maketables.c \
 	$(PCREDIR)/pcre-config.in \
-	$(PCREDIR)/pcre.c \
-	$(PCREDIR)/pcre.def \
 	$(PCREDIR)/pcre.in \
+	$(PCREDIR)/pcre_compile.c \
+	$(PCREDIR)/pcre_config.c \
+	$(PCREDIR)/pcre_dfa_exec.c \
+	$(PCREDIR)/pcre_exec.c \
+	$(PCREDIR)/pcre_fullinfo.c \
+	$(PCREDIR)/pcre_get.c \
+	$(PCREDIR)/pcre_globals.c \
+	$(PCREDIR)/pcre_info.c \
+	$(PCREDIR)/pcre_internal.h \
+	$(PCREDIR)/pcre_maketables.c \
+	$(PCREDIR)/pcre_ord2utf8.c \
+	$(PCREDIR)/pcre_printint.c \
+	$(PCREDIR)/pcre_refcount.c \
+	$(PCREDIR)/pcre_study.c \
+	$(PCREDIR)/pcre_tables.c \
+	$(PCREDIR)/pcre_try_flipped.c \
+	$(PCREDIR)/pcre_ucp_findchar.c \
+	$(PCREDIR)/pcre_valid_utf8.c \
+	$(PCREDIR)/pcre_version.c \
+	$(PCREDIR)/pcre_xclass.c \
 	$(PCREDIR)/pcredemo.c \
 	$(PCREDIR)/pcregrep.c \
 	$(PCREDIR)/pcreposix.c \
 	$(PCREDIR)/pcreposix.h \
 	$(PCREDIR)/pcretest.c \
 	$(PCREDIR)/perltest \
-	$(PCREDIR)/printint.c \
-	$(PCREDIR)/study.c \
-	$(PCREDIR)/ucp.c \
+	$(PCREDIR)/ucp_findchar.c \
 	$(PCREDIR)/ucp.h \
 	$(PCREDIR)/ucpinternal.h \
 	$(PCREDIR)/ucptable.c \
-	$(PCREDIR)/ucptypetable.c \
 	$(PCREDIR)/version.sh \
 	$(PCREDIR)/doc/pcre.3 \
 	$(PCREDIR)/doc/pcrepattern.3 \
@@ -249,12 +261,18 @@ PCRE	= \
 	$(PCREDIR)/testdata/testinput4 \
 	$(PCREDIR)/testdata/testinput5 \
 	$(PCREDIR)/testdata/testinput6 \
+	$(PCREDIR)/testdata/testinput7 \
+	$(PCREDIR)/testdata/testinput8 \
+	$(PCREDIR)/testdata/testinput9 \
 	$(PCREDIR)/testdata/testoutput1 \
 	$(PCREDIR)/testdata/testoutput2 \
 	$(PCREDIR)/testdata/testoutput3 \
 	$(PCREDIR)/testdata/testoutput4 \
 	$(PCREDIR)/testdata/testoutput5 \
-	$(PCREDIR)/testdata/testoutput6
+	$(PCREDIR)/testdata/testoutput6 \
+	$(PCREDIR)/testdata/testoutput7 \
+	$(PCREDIR)/testdata/testoutput8 \
+	$(PCREDIR)/testdata/testoutput9
 
 CAN	= \
 	$(CANDIR)/Build \
@@ -337,6 +355,10 @@ POFILES = \
 	$(PODIR)/et.po \
 	$(PODIR)/fr.gmo \
 	$(PODIR)/fr.po \
+	$(PODIR)/ru.gmo \
+	$(PODIR)/ru.po \
+	$(PODIR)/rw.gmo \
+	$(PODIR)/rw.po \
 	$(PODIR)/tr.gmo \
 	$(PODIR)/tr.po
 
@@ -403,6 +425,7 @@ clean:
 	@-if $(TEST) -r $(INTLDIR)/Makefile ; then $(CD) $(INTLDIR) && $(MAKE) clean ; fi
 	@-if $(TEST) -r $(PODIR)/Makefile ; then $(CD) $(PODIR) && $(MAKE) clean ; fi
 	@-if $(TEST) -r $(SRCDIR)/Makefile ; then $(CD) $(SRCDIR) && $(MAKE) clean ; fi
+	@-if $(TEST) -r $(CANDIR)/hmactest ; then $(CD) $(CANDIR) && ./Build clean ; fi
 
 man:
 	@$(MAKE) manpage
@@ -511,12 +534,7 @@ distclean:
 	$(INCDIR)/autoconf.h \
 	$(SRCDIR)/Makefile \
 	$(PCREDIR)/Makefile \
-	$(INTLDIR)/po2tbl.sed \
-	$(CANDIR)/*.[oa] \
-	$(CANDIR)/endian.h \
-	$(CANDIR)/canlocktest \
-	$(CANDIR)/endian \
-	$(CANDIR)/hmactest
+	$(INTLDIR)/po2tbl.sed
 
 configure: configure.in aclocal.m4
 	autoconf
diff -Nurp tin-1.7.8/aclocal.m4 tin-1.7.9/aclocal.m4
--- tin-1.7.8/aclocal.m4	2004-12-30 14:34:24.000000000 +0100
+++ tin-1.7.9/aclocal.m4	2005-06-29 11:18:14.387457051 +0200
@@ -2,7 +2,7 @@ dnl Project   : tin - a Usenet reader
 dnl Module    : aclocal.m4
 dnl Author    : Thomas E. Dickey <dickey@invisible-island.net>
 dnl Created   : 1995-08-24
-dnl Updated   : 2004-02-28
+dnl Updated   : 2005-06-21
 dnl Notes     :
 dnl
 dnl Copyright (c) 1995-2005 Thomas E. Dickey <dickey@invisible-island.net>
@@ -146,7 +146,7 @@ strdup strtoul tsearch __argz_count __ar
    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl AM_ICONV version: 3 updated: 2002/10/27 23:21:42
+dnl AM_ICONV version: 4 updated: 2005/06/20 05:31:53
 dnl --------
 dnl Inserted as requested by gettext 0.10.40
 dnl File from /usr/share/aclocal
@@ -161,7 +161,8 @@ AC_DEFUN([AM_ICONV],
   dnl those with the standalone portable GNU libiconv installed).
 
   AC_ARG_WITH([libiconv-prefix],
-[  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib], [
+[  --with-libiconv-prefix=DIR
+                          search for libiconv in DIR/include and DIR/lib], [
     for dir in `echo "$withval" | tr : ' '`; do
       if test -d $dir/include; then CPPFLAGS="$CPPFLAGS -I$dir/include"; fi
       if test -d $dir/lib; then LDFLAGS="$LDFLAGS -L$dir/lib"; fi
@@ -727,18 +728,44 @@ changequote([,])dnl
     AC_SUBST(GENCAT)
   ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_ADD_CFLAGS version: 5 updated: 2002/12/01 00:12:15
+dnl CF_ADD_CFLAGS version: 7 updated: 2004/04/25 17:48:30
 dnl -------------
 dnl Copy non-preprocessor flags to $CFLAGS, preprocessor flags to $CPPFLAGS
 dnl The second parameter if given makes this macro verbose.
+dnl
+dnl Put any preprocessor definitions that use quoted strings in $EXTRA_CPPFLAGS,
+dnl to simplify use of $CPPFLAGS in compiler checks, etc., that are easily
+dnl confused by the quotes (which require backslashes to keep them usable).
 AC_DEFUN([CF_ADD_CFLAGS],
 [
+cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
+cf_new_extra_cppflags=
+
 for cf_add_cflags in $1
 do
+case $cf_fix_cppflags in
+no)
 	case $cf_add_cflags in #(vi
 	-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+		case $cf_add_cflags in
+		-D*)
+			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[[^=]]*='\''\"[[^"]]*//'`
+
+			test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+			&& test -z "${cf_tst_cflags}" \
+			&& cf_fix_cppflags=yes
+
+			if test $cf_fix_cppflags = yes ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			fi
+			;;
+		esac
 		case "$CPPFLAGS" in
 		*$cf_add_cflags) #(vi
 			;;
@@ -751,6 +778,17 @@ do
 		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
 		;;
 	esac
+	;;
+yes)
+	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[[^"]]*"'\''//'`
+
+	test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+	&& test -z "${cf_tst_cflags}" \
+	&& cf_fix_cppflags=no
+	;;
+esac
 done
 
 if test -n "$cf_new_cflags" ; then
@@ -763,6 +801,13 @@ if test -n "$cf_new_cppflags" ; then
 	CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
 fi
 
+if test -n "$cf_new_extra_cppflags" ; then
+	ifelse($2,,,[CF_VERBOSE(add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags)])
+	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+AC_SUBST(EXTRA_CPPFLAGS)
+
 ])dnl
 dnl ---------------------------------------------------------------------------
 dnl CF_ADD_INCDIR version: 4 updated: 2002/12/21 14:25:52
@@ -932,7 +977,7 @@ esac
 $3="$withval"
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_BUILD_CC version: 3 updated: 2004/02/17 20:55:59
+dnl CF_BUILD_CC version: 4 updated: 2004/11/27 16:03:59
 dnl -----------
 dnl If we're cross-compiling, allow the user to override the tools and their
 dnl options.  The configure script is oriented toward identifying the host
@@ -976,6 +1021,12 @@ if test "$cross_compiling" = yes ; then
 	# this assumes we're on Unix.
 	BUILD_EXEEXT=
 	BUILD_OBJEXT=o
+
+	if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '$(CC)' ) ; then
+		AC_MSG_ERROR([Cross-build requires two compilers.
+Use --with-build-cc to specify the native compiler.])
+	fi
+
 else
 	: ${BUILD_CC:='$(CC)'}
 	: ${BUILD_CPP:='$(CPP)'}
@@ -997,7 +1048,7 @@ AC_SUBST(BUILD_EXEEXT)
 AC_SUBST(BUILD_OBJEXT)
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_BUNDLED_INTL version: 10 updated: 2003/09/14 18:49:13
+dnl CF_BUNDLED_INTL version: 12 updated: 2005/06/21 18:24:28
 dnl ---------------
 dnl Top-level macro for configuring an application with a bundled copy of
 dnl the intl and po directories for gettext.
@@ -1062,7 +1113,7 @@ if test "$USE_INCLUDED_LIBINTL" = yes ; 
 			$srcdir/intl/makefile.in
 		do
 			if test -f "$cf_makefile" ; then
-				SUB_MAKEFILE="$SUB_MAKEFILE `echo ${cf_makefile}|sed -e 's/\.in$//'`:${cf_makefile}"
+				SUB_MAKEFILE="$SUB_MAKEFILE `echo \"${cf_makefile}\"|sed -e 's,^'$srcdir/',,' -e 's/\.in$//'`:${cf_makefile}"
 				break
 			fi
 		done
@@ -1188,7 +1239,7 @@ AC_MSG_RESULT($cf_result)
 test $cf_result = yes && AC_DEFINE_UNQUOTED(DECL_$2)
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_CHECK_CACHE version: 9 updated: 2004/01/30 15:59:13
+dnl CF_CHECK_CACHE version: 10 updated: 2004/05/23 13:03:31
 dnl --------------
 dnl Check if we're accidentally using a cache from a different machine.
 dnl Derive the system name, as a check for reusing the autoconf cache.
@@ -1202,7 +1253,7 @@ dnl Note: we would use $ac_config_sub, b
 dnl autoconf 2.5x broke compatibility with autoconf 2.13
 AC_DEFUN([CF_CHECK_CACHE],
 [
-if test -f $srcdir/config.guess ; then
+if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
 	ifelse([$1],,[AC_CANONICAL_HOST],[$1])
 	system_name="$host_os"
 else
@@ -2089,7 +2140,7 @@ done
 ])
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_FIND_LIBRARY version: 7 updated: 2000/04/13 21:38:04
+dnl CF_FIND_LIBRARY version: 8 updated: 2004/11/23 20:14:58
 dnl ---------------
 dnl Look for a non-standard library, given parameters for AC_TRY_LINK.  We
 dnl prefer a standard location, and use -L options only if we do not find the
@@ -2099,7 +2150,7 @@ dnl	$2 = library class, usually the same
 dnl	$3 = includes
 dnl	$4 = code fragment to compile/link
 dnl	$5 = corresponding function-name
-dnl	$6 = flag, nonnull if failure causes an error-exit
+dnl	$6 = flag, nonnull if failure should not cause an error-exit
 dnl
 dnl Sets the variable "$cf_libdir" as a side-effect, so we can see if we had
 dnl to use a -L option.
@@ -2153,6 +2204,29 @@ os2*|cygwin*)
 esac
 ])dnl
 dnl ---------------------------------------------------------------------------
+dnl CF_FUNC_ALLOCA version: 1 updated: 2005/06/29 04:28:43
+dnl --------------
+dnl workaround for bison 1.875c (compound breakage in Linux stdlib.h and
+dnl bison's output make bison try to use alloca()).
+AC_DEFUN([CF_FUNC_ALLOCA],
+[
+AC_FUNC_ALLOCA
+
+case $host_os in
+linux*|gnu*)
+	# workaround for bison 1.875c (compound breakage in Linux stdlib.h
+	# and bison's output make bison try to use alloca()).
+	if test -z "$GCC" ; then
+		CPPFLAGS="-DYYSTACK_USE_ALLOCA=0 $CPPFLAGS"
+		ALLOCA=""
+	elif test "$INTEL_COMPILER" = yes ; then
+		CPPFLAGS="-DYYSTACK_USE_ALLOCA=0 $CPPFLAGS"
+		ALLOCA=""
+	fi
+	;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
 dnl CF_FUNC_FORK version: 2 updated: 1997/08/28 23:57:55
 dnl ------------
 dnl Check if 'fork()' is available, and working.  Amiga (and possibly other
@@ -2361,7 +2435,7 @@ if test "$GCC" = yes ; then
 fi
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_GCC_WARNINGS version: 15 updated: 2003/07/05 18:42:30
+dnl CF_GCC_WARNINGS version: 18 updated: 2004/12/03 20:51:07
 dnl ---------------
 dnl Check if the compiler supports useful warning options.  There's a few that
 dnl we don't use, simply because they're too noisy:
@@ -2373,10 +2447,36 @@ dnl	-Wwrite-strings (too noisy, but shou
 dnl		is enabled for ncurses using "--enable-const".
 dnl	-pedantic
 dnl
+dnl Parameter:
+dnl	$1 is an optional list of gcc warning flags that a particular
+dnl		application might want to use, e.g., "no-unused" for
+dnl		-Wno-unused
+dnl Special:
+dnl	If $with_ext_const is "yes", add a check for -Wwrite-strings
+dnl
 AC_DEFUN([CF_GCC_WARNINGS],
 [
+AC_REQUIRE([CF_INTEL_COMPILER])
 AC_REQUIRE([CF_GCC_VERSION])
-if test "$GCC" = yes
+if test "$INTEL_COMPILER" = yes
+then
+# The "-wdXXX" options suppress warnings:
+# remark #1419: external declaration in primary source file
+# remark #193: zero used for undefined preprocessing identifier
+# remark #593: variable "curs_sb_left_arrow" was set but never used
+# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
+# remark #869: parameter "tw" was never referenced
+# remark #981: operands are evaluated in unspecified order
+# warning #269: invalid format string conversion
+	EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall \
+ -wd1419 \
+ -wd193 \
+ -wd279 \
+ -wd593 \
+ -wd810 \
+ -wd869 \
+ -wd981"
+elif test "$GCC" = yes
 then
 	cat > conftest.$ac_ext <<EOF
 #line __oline__ "configure"
@@ -2398,7 +2498,7 @@ EOF
 		Wpointer-arith \
 		Wshadow \
 		Wstrict-prototypes \
-		Wundef $cf_warn_CONST
+		Wundef $cf_warn_CONST $1
 	do
 		CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
 		if AC_TRY_EVAL(ac_compile); then
@@ -2424,7 +2524,7 @@ fi
 AC_SUBST(EXTRA_CFLAGS)
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_GNU_SOURCE version: 3 updated: 2000/10/29 23:30:53
+dnl CF_GNU_SOURCE version: 5 updated: 2005/06/29 04:28:43
 dnl -------------
 dnl Check if we must define _GNU_SOURCE to get a reasonable value for
 dnl _XOPEN_SOURCE, upon which many POSIX definitions depend.  This is a defect
@@ -2434,6 +2534,8 @@ dnl
 dnl Well, yes we could work around it...
 AC_DEFUN([CF_GNU_SOURCE],
 [
+AC_REQUIRE([CF_INTEL_COMPILER])
+
 AC_CACHE_CHECK(if we must define _GNU_SOURCE,cf_cv_gnu_source,[
 AC_TRY_COMPILE([#include <sys/types.h>],[
 #ifndef _XOPEN_SOURCE
@@ -2475,6 +2577,40 @@ test -d "$oldincludedir" && {
 
 ])dnl
 dnl ---------------------------------------------------------------------------
+dnl CF_INTEL_COMPILER version: 1 updated: 2004/12/03 20:27:48
+dnl -----------------
+dnl Check if the given compiler is really the Intel compiler for Linux.
+dnl It tries to imitate gcc, but does not return an error when it finds a
+dnl mismatch between prototypes, e.g., as exercised by CF_MISSING_CHECK.
+dnl
+dnl This macro should be run "soon" after AC_PROG_CC, to ensure that it is
+dnl not mistaken for gcc.
+AC_DEFUN([CF_INTEL_COMPILER],[
+AC_REQUIRE([AC_PROG_CC])
+
+INTEL_COMPILER=no
+
+if test "$GCC" = yes ; then
+	case $host_os in
+	linux*|gnu*)
+		AC_MSG_CHECKING(if this is really Intel compiler)
+		cf_save_CFLAGS="$CFLAGS"
+		CFLAGS="$CFLAGS -no-gcc"
+		AC_TRY_COMPILE([],[
+#ifdef __INTEL_COMPILER
+#else
+make an error
+#endif
+],[INTEL_COMPILER=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc"
+],[])
+		CFLAGS="$cf_save_CFLAGS"
+		AC_MSG_RESULT($INTEL_COMPILER)
+		;;
+	esac
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
 dnl CF_LIBRARY_PATH version: 7 updated: 2002/11/10 14:46:59
 dnl ---------------
 dnl Construct a search-list for a nonstandard library-file
@@ -2789,7 +2925,7 @@ esac
 CF_NCURSES_VERSION
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_NCURSES_LIBS version: 11 updated: 2002/12/22 14:22:25
+dnl CF_NCURSES_LIBS version: 12 updated: 2004/04/27 16:26:05
 dnl ---------------
 dnl Look for the ncurses library.  This is a little complicated on Linux,
 dnl because it may be linked with the gpm (general purpose mouse) library.
@@ -2819,7 +2955,9 @@ case $host_os in #(vi
 freebsd*)
 	# This is only necessary if you are linking against an obsolete
 	# version of ncurses (but it should do no harm, since it's static).
-	AC_CHECK_LIB(mytinfo,tgoto,[cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS"])
+	if test "$cf_nculib_root" = ncurses ; then
+		AC_CHECK_LIB(mytinfo,tgoto,[cf_ncurses_LIBS="-lmytinfo $cf_ncurses_LIBS"])
+	fi
 	;;
 esac
 
@@ -2960,7 +3098,7 @@ LIBS="$LIBS $cf_cv_netlibs"
 test $cf_test_netlibs = no && echo "$cf_cv_netlibs" >&AC_FD_MSG
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_OUR_MESSAGES version: 6 updated: 2004/01/03 10:56:43
+dnl CF_OUR_MESSAGES version: 7 updated: 2004/09/12 19:45:55
 dnl ---------------
 dnl Check if we use the messages included with this program
 dnl
@@ -2989,7 +3127,7 @@ fi
 MSG_DIR_MAKE="#"
 if test "$use_our_messages" = yes
 then
-	SUB_MAKEFILE="$SUB_MAKEFILE $srcdir/po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn"
+	SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn"
 	MSG_DIR_MAKE=
 fi
 
@@ -3149,6 +3287,65 @@ else
 fi
 ])dnl
 dnl ---------------------------------------------------------------------------
+dnl CF_POSIX_C_SOURCE version: 3 updated: 2005/02/04 06:56:22
+dnl -----------------
+dnl Define _POSIX_C_SOURCE to the given level, and _POSIX_SOURCE if needed.
+dnl
+dnl	POSIX.1-1990				_POSIX_SOURCE
+dnl	POSIX.1-1990 and			_POSIX_SOURCE and
+dnl		POSIX.2-1992 C-Language			_POSIX_C_SOURCE=2
+dnl		Bindings Option
+dnl	POSIX.1b-1993				_POSIX_C_SOURCE=199309L
+dnl	POSIX.1c-1996				_POSIX_C_SOURCE=199506L
+dnl	X/Open 2000				_POSIX_C_SOURCE=200112L
+dnl
+dnl Parameters:
+dnl	$1 is the nominal value for _POSIX_C_SOURCE
+AC_DEFUN([CF_POSIX_C_SOURCE],
+[
+cf_POSIX_C_SOURCE=ifelse($1,,199506L,$1)
+AC_CACHE_CHECK(if we should define _POSIX_C_SOURCE,cf_cv_posix_c_source,[
+	CF_MSG_LOG(if the symbol is already defined go no further)
+	AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif],
+	[cf_cv_posix_c_source=no],
+	[cf_want_posix_source=no
+	 case .$cf_POSIX_C_SOURCE in
+	 .[[12]]??*)
+		cf_cv_posix_c_source="-U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+		;;
+	 .2)
+		cf_cv_posix_c_source="-U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+		cf_want_posix_source=yes
+		;;
+	 .*)
+		cf_want_posix_source=yes
+		;;
+	 esac
+	 if test "$cf_want_posix_source" = yes ; then
+		AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifdef _POSIX_SOURCE
+make an error
+#endif],[],
+		cf_cv_posix_c_source="$cf_cv_posix_c_source -U_POSIX_SOURCE -D_POSIX_SOURCE")
+	 fi
+	 CF_MSG_LOG(ifdef from value $cf_POSIX_C_SOURCE)
+	 cf_save="$CPPFLAGS"
+	 CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
+	 CF_MSG_LOG(if the second compile does not leave our definition intact error)
+	 AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif],,
+	[cf_cv_posix_c_source=no])
+	CPPFLAGS="$cf_save"
+	])
+])
+test "$cf_cv_posix_c_source" != no && CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
+])dnl
+dnl ---------------------------------------------------------------------------
 dnl CF_POSIX_JC version: 3 updated: 2001/05/27 21:36:02
 dnl -----------
 dnl Check if we have POSIX-style job control (i.e., sigaction), or if we must
@@ -4292,25 +4489,126 @@ AC_TRY_LINK([
 test $cf_cv_need_xopen_extension = yes && CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE_EXTENDED"
 ])dnl
 dnl ---------------------------------------------------------------------------
-dnl CF_X_ATHENA version: 11 updated: 2002/12/26 20:56:10
+dnl CF_XOPEN_SOURCE version: 19 updated: 2005/05/15 19:19:07
+dnl ---------------
+dnl Try to get _XOPEN_SOURCE defined properly that we can use POSIX functions,
+dnl or adapt to the vendor's definitions to get equivalent functionality.
+dnl
+dnl Parameters:
+dnl	$1 is the nominal value for _XOPEN_SOURCE
+dnl	$2 is the nominal value for _POSIX_C_SOURCE
+AC_DEFUN([CF_XOPEN_SOURCE],[
+
+cf_XOPEN_SOURCE=ifelse($1,,500,$1)
+cf_POSIX_C_SOURCE=ifelse($2,,199506L,$2)
+
+case $host_os in #(vi
+aix[[45]]*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_ALL_SOURCE"
+	;;
+darwin*) #(vi
+	# setting _XOPEN_SOURCE breaks things on Darwin
+	;;
+freebsd*) #(vi
+	# 5.x headers associate
+	#	_XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
+	#	_XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
+	cf_POSIX_C_SOURCE=200112L
+	cf_XOPEN_SOURCE=600
+	CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+	;;
+hpux*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE"
+	;;
+irix[[56]].*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_SGI_SOURCE"
+	;;
+linux*|gnu*) #(vi
+	CF_GNU_SOURCE
+	;;
+mirbsd*) #(vi
+	# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <arpa/inet.h>
+	;;
+netbsd*) #(vi
+	# setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
+	;;
+openbsd*) #(vi
+	# setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
+	;;
+osf[[45]]*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_OSF_SOURCE"
+	;;
+sco*) #(vi
+	# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
+	;;
+solaris*) #(vi
+	CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
+	;;
+*)
+	AC_CACHE_CHECK(if we should define _XOPEN_SOURCE,cf_cv_xopen_source,[
+	AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifndef _XOPEN_SOURCE
+make an error
+#endif],
+	[cf_cv_xopen_source=no],
+	[cf_save="$CPPFLAGS"
+	 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+	 AC_TRY_COMPILE([#include <sys/types.h>],[
+#ifdef _XOPEN_SOURCE
+make an error
+#endif],
+	[cf_cv_xopen_source=no],
+	[cf_cv_xopen_source=$cf_XOPEN_SOURCE])
+	CPPFLAGS="$cf_save"
+	])
+])
+test "$cf_cv_xopen_source" != no && CPPFLAGS="$CPPFLAGS -U_XOPEN_SOURCE -D_XOPEN_SOURCE=$cf_cv_xopen_source"
+	CF_POSIX_C_SOURCE($cf_POSIX_C_SOURCE)
+	;;
+esac
+])
+dnl ---------------------------------------------------------------------------
+dnl CF_X_ATHENA version: 12 updated: 2004/06/15 21:14:41
 dnl -----------
 dnl Check for Xaw (Athena) libraries
 dnl
+dnl Sets $cf_x_athena according to the flavor of Xaw which is used.
 AC_DEFUN([CF_X_ATHENA],
 [AC_REQUIRE([CF_X_TOOLKIT])
 cf_x_athena=${cf_x_athena-Xaw}
 
+AC_MSG_CHECKING(if you want to link with Xaw 3d library)
+withval=
 AC_ARG_WITH(Xaw3d,
-	[  --with-Xaw3d            link with Xaw 3d library],
-	[cf_x_athena=Xaw3d])
+	[  --with-Xaw3d            link with Xaw 3d library])
+if test "$withval" = yes ; then
+	cf_x_athena=Xaw3d
+	AC_MSG_RESULT(yes)
+else
+	AC_MSG_RESULT(no)
+fi
 
+AC_MSG_CHECKING(if you want to link with neXT Athena library)
+withval=
 AC_ARG_WITH(neXtaw,
-	[  --with-neXtaw           link with neXT Athena library],
-	[cf_x_athena=neXtaw])
+	[  --with-neXtaw           link with neXT Athena library])
+if test "$withval" = yes ; then
+	cf_x_athena=neXtaw
+	AC_MSG_RESULT(yes)
+else
+	AC_MSG_RESULT(no)
+fi
 
+AC_MSG_CHECKING(if you want to link with Athena-Plus library)
+withval=
 AC_ARG_WITH(XawPlus,
-	[  --with-XawPlus          link with Athena-Plus library],
-	[cf_x_athena=XawPlus])
+	[  --with-XawPlus          link with Athena-Plus library])
+if test "$withval" = yes ; then
+	cf_x_athena=XawPlus
+	AC_MSG_RESULT(yes)
+else
+	AC_MSG_RESULT(no)
+fi
 
 AC_CHECK_LIB(Xext,XextCreateExtension,
 	[LIBS="-lXext $LIBS"])
@@ -4424,59 +4722,33 @@ CF_UPPER(cf_x_athena_LIBS,HAVE_LIB_$cf_x
 AC_DEFINE_UNQUOTED($cf_x_athena_LIBS)
 ])
 dnl ---------------------------------------------------------------------------
-dnl CF_X_TOOLKIT version: 9 updated: 2001/12/30 19:09:58
+dnl CF_X_TOOLKIT version: 10 updated: 2004/04/25 15:37:17
 dnl ------------
 dnl Check for X Toolkit libraries
 dnl
 AC_DEFUN([CF_X_TOOLKIT],
 [
+AC_REQUIRE([AC_PATH_XTRA])
 AC_REQUIRE([CF_CHECK_CACHE])
-# We need to check for -lsocket and -lnsl here in order to work around an
-# autoconf bug.  autoconf-2.12 is not checking for these prior to checking for
-# the X11R6 -lSM and -lICE libraries.  The resultant failures cascade...
-# 	(tested on Solaris 2.5 w/ X11R6)
-SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
+
+# SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
+
 cf_have_X_LIBS=no
-case $SYSTEM_NAME in
-irix[[56]]*) ;;
-clix*)
-	# FIXME: modify the library lookup in autoconf to
-	# allow _s.a suffix ahead of .a
-	AC_CHECK_LIB(c_s,open,
-		[LIBS="-lc_s $LIBS"
-	AC_CHECK_LIB(bsd,gethostname,
-		[LIBS="-lbsd $LIBS"
-	AC_CHECK_LIB(nsl_s,gethostname,
-		[LIBS="-lnsl_s $LIBS"
-	AC_CHECK_LIB(X11_s,XOpenDisplay,
-		[LIBS="-lX11_s $LIBS"
-	AC_CHECK_LIB(Xt_s,XtAppInitialize,
-		[LIBS="-lXt_s $LIBS"
-		 cf_have_X_LIBS=Xt
-		]) ]) ]) ]) ])
-	;;
-*)
-	AC_CHECK_LIB(socket,socket)
-	AC_CHECK_LIB(nsl,gethostname)
-	;;
-esac
 
-if test $cf_have_X_LIBS = no ; then
-	AC_PATH_XTRA
-	LDFLAGS="$LDFLAGS $X_LIBS"
-	CF_CHECK_CFLAGS($X_CFLAGS)
-	AC_CHECK_LIB(X11,XOpenDisplay,
-		[LIBS="-lX11 $LIBS"],,
-		[$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
-	AC_CHECK_LIB(Xt, XtAppInitialize,
-		[AC_DEFINE(HAVE_LIBXT)
-		 cf_have_X_LIBS=Xt
-		 LIBS="-lXt $X_PRE_LIBS $LIBS"],,
-		[$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])
-else
-	LDFLAGS="$LDFLAGS $X_LIBS"
-	CF_CHECK_CFLAGS($X_CFLAGS)
-fi
+LDFLAGS="$X_LIBS $LDFLAGS"
+CF_CHECK_CFLAGS($X_CFLAGS)
+
+AC_CHECK_FUNC(XOpenDisplay,,[
+AC_CHECK_LIB(X11,XOpenDisplay,
+	[LIBS="-lX11 $LIBS"],,
+	[$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])])
+
+AC_CHECK_FUNC(XtAppInitialize,,[
+AC_CHECK_LIB(Xt, XtAppInitialize,
+	[AC_DEFINE(HAVE_LIBXT)
+	 cf_have_X_LIBS=Xt
+	 LIBS="-lXt $X_PRE_LIBS $LIBS"],,
+	[$X_PRE_LIBS $LIBS $X_EXTRA_LIBS])])
 
 if test $cf_have_X_LIBS = no ; then
 	AC_WARN(
diff -Nurp tin-1.7.8/config.guess tin-1.7.9/config.guess
--- tin-1.7.8/config.guess	2005-02-10 23:07:57.000000000 +0100
+++ tin-1.7.9/config.guess	2005-06-29 11:20:30.274346647 +0200
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-timestamp='2005-02-10'
+timestamp='2005-05-27'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -17,13 +17,15 @@ timestamp='2005-02-10'
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
 #
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+
 # Originally written by Per Bothner <per@bothner.com>.
 # Please send patches to <config-patches@gnu.org>.  Submit a context
 # diff and a properly formatted ChangeLog entry.
@@ -66,11 +68,11 @@ Try \`$me --help' for more information."
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
+       echo "$timestamp" ; exit ;;
     --version | -v )
-       echo "$version" ; exit 0 ;;
+       echo "$version" ; exit ;;
     --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
+       echo "$usage"; exit ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -196,55 +198,55 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	# contains redundant information, the shorter form:
 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
 	echo "${machine}-${os}${release}"
-	exit 0 ;;
+	exit ;;
     amd64:OpenBSD:*:*)
 	echo x86_64-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     amiga:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     cats:OpenBSD:*:*)
 	echo arm-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     hp300:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     luna88k:OpenBSD:*:*)
     	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mac68k:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     macppc:OpenBSD:*:*)
 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mvme68k:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mvme88k:OpenBSD:*:*)
 	echo m88k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mvmeppc:OpenBSD:*:*)
 	echo powerpc-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sgi:OpenBSD:*:*)
 	echo mips64-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sun3:OpenBSD:*:*)
 	echo m68k-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:OpenBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     macppc:MirBSD:*:*)
 	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:MirBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     alpha:OSF1:*:*)
 	case $UNAME_RELEASE in
 	    *4.0)
@@ -297,40 +299,43 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
 	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	exit 0 ;;
+	exit ;;
     Alpha\ *:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# Should we change UNAME_MACHINE based on the output of uname instead
 	# of the specific Alpha model?
 	echo alpha-pc-interix
-	exit 0 ;;
+	exit ;;
     21064:Windows_NT:50:3)
 	echo alpha-dec-winnt3.5
-	exit 0 ;;
+	exit ;;
     Amiga*:UNIX_System_V:4.0:*)
 	echo m68k-unknown-sysv4
-	exit 0;;
+	exit ;;
     *:[Aa]miga[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-amigaos
-	exit 0 ;;
+	exit ;;
     *:[Mm]orph[Oo][Ss]:*:*)
 	echo ${UNAME_MACHINE}-unknown-morphos
-	exit 0 ;;
+	exit ;;
     *:OS/390:*:*)
 	echo i370-ibm-openedition
-	exit 0 ;;
+	exit ;;
     *:z/VM:*:*)
 	echo s390-ibm-zvmoe
-	exit 0 ;;
+	exit ;;
     *:OS400:*:*)
 	echo powerpc-ibm-os400
-	exit 0 ;;
+	exit ;;
     arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
 	echo arm-acorn-riscix${UNAME_RELEASE}
-	exit 0;;
+	exit ;;
+    arm:riscos:*:*|arm:RISCOS:*:*)
+	echo arm-unknown-riscos
+	exit ;;
     SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
 	echo hppa1.1-hitachi-hiuxmpp
-	exit 0;;
+	exit ;;
     Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
 	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
 	if test "`(/bin/universe) 2>/dev/null`" = att ; then
@@ -338,32 +343,32 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	else
 		echo pyramid-pyramid-bsd
 	fi
-	exit 0 ;;
+	exit ;;
     NILE*:*:*:dcosx)
 	echo pyramid-pyramid-svr4
-	exit 0 ;;
+	exit ;;
     DRS?6000:unix:4.0:6*)
 	echo sparc-icl-nx6
-	exit 0 ;;
+	exit ;;
     DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
 	case `/usr/bin/uname -p` in
-	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	    sparc) echo sparc-icl-nx7; exit ;;
 	esac ;;
     sun4H:SunOS:5.*:*)
 	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     i86pc:SunOS:5.*:*)
 	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:6*:*)
 	# According to config.sub, this is the proper way to canonicalize
 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
 	# it's likely to be more like Solaris than SunOS4.
 	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     sun4*:SunOS:*:*)
 	case "`/usr/bin/arch -k`" in
 	    Series*|S4*)
@@ -372,10 +377,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	esac
 	# Japanese Language versions have a version number like `4.1.3-JL'.
 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-	exit 0 ;;
+	exit ;;
     sun3*:SunOS:*:*)
 	echo m68k-sun-sunos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
 	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
@@ -387,10 +392,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 		echo sparc-sun-sunos${UNAME_RELEASE}
 		;;
 	esac
-	exit 0 ;;
+	exit ;;
     aushp:SunOS:*:*)
 	echo sparc-auspex-sunos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     # The situation for MiNT is a little confusing.  The machine name
     # can be virtually everything (everything which is not
     # "atarist" or "atariste" at least should have a processor
@@ -401,40 +406,40 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
     # be no problem.
     atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
 	echo m68k-atari-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
         echo m68k-atari-mint${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
         echo m68k-milan-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
         echo m68k-hades-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
         echo m68k-unknown-mint${UNAME_RELEASE}
-        exit 0 ;;
+        exit ;;
     m68k:machten:*:*)
 	echo m68k-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     powerpc:machten:*:*)
 	echo powerpc-apple-machten${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     RISC*:Mach:*:*)
 	echo mips-dec-mach_bsd4.3
-	exit 0 ;;
+	exit ;;
     RISC*:ULTRIX:*:*)
 	echo mips-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     VAX*:ULTRIX*:*:*)
 	echo vax-dec-ultrix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     2020:CLIX:*:* | 2430:CLIX:*:*)
 	echo clipper-intergraph-clix${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mips:*:*:UMIPS | mips:*:*:RISCos)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -458,32 +463,33 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
 	  exit (-1);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c \
-	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
-	  && exit 0
+	$CC_FOR_BUILD -o $dummy $dummy.c &&
+	  dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+	  SYSTEM_NAME=`$dummy $dummyarg` &&
+	    { echo "$SYSTEM_NAME"; exit; }
 	echo mips-mips-riscos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     Motorola:PowerMAX_OS:*:*)
 	echo powerpc-motorola-powermax
-	exit 0 ;;
+	exit ;;
     Motorola:*:4.3:PL8-*)
 	echo powerpc-harris-powermax
-	exit 0 ;;
+	exit ;;
     Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
 	echo powerpc-harris-powermax
-	exit 0 ;;
+	exit ;;
     Night_Hawk:Power_UNIX:*:*)
 	echo powerpc-harris-powerunix
-	exit 0 ;;
+	exit ;;
     m88k:CX/UX:7*:*)
 	echo m88k-harris-cxux7
-	exit 0 ;;
+	exit ;;
     m88k:*:4*:R4*)
 	echo m88k-motorola-sysv4
-	exit 0 ;;
+	exit ;;
     m88k:*:3*:R3*)
 	echo m88k-motorola-sysv3
-	exit 0 ;;
+	exit ;;
     AViiON:dgux:*:*)
         # DG/UX returns AViiON for all architectures
         UNAME_PROCESSOR=`/usr/bin/uname -p`
@@ -499,29 +505,29 @@ EOF
 	else
 	    echo i586-dg-dgux${UNAME_RELEASE}
 	fi
- 	exit 0 ;;
+ 	exit ;;
     M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
 	echo m88k-dolphin-sysv3
-	exit 0 ;;
+	exit ;;
     M88*:*:R3*:*)
 	# Delta 88k system running SVR3
 	echo m88k-motorola-sysv3
-	exit 0 ;;
+	exit ;;
     XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
 	echo m88k-tektronix-sysv3
-	exit 0 ;;
+	exit ;;
     Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
 	echo m68k-tektronix-bsd
-	exit 0 ;;
+	exit ;;
     *:IRIX*:*:*)
 	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-	exit 0 ;;
+	exit ;;
     ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
-	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+	echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+	exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
     i*86:AIX:*:*)
 	echo i386-ibm-aix
-	exit 0 ;;
+	exit ;;
     ia64:AIX:*:*)
 	if [ -x /usr/bin/oslevel ] ; then
 		IBM_REV=`/usr/bin/oslevel`
@@ -529,7 +535,7 @@ EOF
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-	exit 0 ;;
+	exit ;;
     *:AIX:2:3)
 	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
 		eval $set_cc_for_build
@@ -544,14 +550,18 @@ EOF
 			exit(0);
 			}
 EOF
-		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
-		echo rs6000-ibm-aix3.2.5
+		if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
+		then
+			echo "$SYSTEM_NAME"
+		else
+			echo rs6000-ibm-aix3.2.5
+		fi
 	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
 		echo rs6000-ibm-aix3.2.4
 	else
 		echo rs6000-ibm-aix3.2
 	fi
-	exit 0 ;;
+	exit ;;
     *:AIX:*:[45])
 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
@@ -565,28 +575,28 @@ EOF
 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
 	fi
 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-	exit 0 ;;
+	exit ;;
     *:AIX:*:*)
 	echo rs6000-ibm-aix
-	exit 0 ;;
+	exit ;;
     ibmrt:4.4BSD:*|romp-ibm:BSD:*)
 	echo romp-ibm-bsd4.4
-	exit 0 ;;
+	exit ;;
     ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
 	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-	exit 0 ;;                           # report: romp-ibm BSD 4.3
+	exit ;;                             # report: romp-ibm BSD 4.3
     *:BOSX:*:*)
 	echo rs6000-bull-bosx
-	exit 0 ;;
+	exit ;;
     DPX/2?00:B.O.S.:*:*)
 	echo m68k-bull-sysv3
-	exit 0 ;;
+	exit ;;
     9000/[34]??:4.3bsd:1.*:*)
 	echo m68k-hp-bsd
-	exit 0 ;;
+	exit ;;
     hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
 	echo m68k-hp-bsd4.4
-	exit 0 ;;
+	exit ;;
     9000/[34678]??:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	case "${UNAME_MACHINE}" in
@@ -650,7 +660,18 @@ EOF
 	then
 	    # avoid double evaluation of $set_cc_for_build
 	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+
+	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+	    # generating 64-bit code.  GNU and HP use different nomenclature:
+	    #
+	    # $ CC_FOR_BUILD=cc ./config.guess
+	    # => hppa2.0w-hp-hpux11.23
+	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+	    # => hppa64-hp-hpux11.23
+
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+		grep __LP64__ >/dev/null
 	    then
 		HP_ARCH="hppa2.0w"
 	    else
@@ -658,11 +679,11 @@ EOF
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-	exit 0 ;;
+	exit ;;
     ia64:HP-UX:*:*)
 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
 	echo ia64-hp-hpux${HPUX_REV}
-	exit 0 ;;
+	exit ;;
     3050*:HI-UX:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -690,161 +711,166 @@ EOF
 	  exit (0);
 	}
 EOF
-	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	$CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
+		{ echo "$SYSTEM_NAME"; exit; }
 	echo unknown-hitachi-hiuxwe2
-	exit 0 ;;
+	exit ;;
     9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
 	echo hppa1.1-hp-bsd
-	exit 0 ;;
+	exit ;;
     9000/8??:4.3bsd:*:*)
 	echo hppa1.0-hp-bsd
-	exit 0 ;;
+	exit ;;
     *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
 	echo hppa1.0-hp-mpeix
-	exit 0 ;;
+	exit ;;
     hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
 	echo hppa1.1-hp-osf
-	exit 0 ;;
+	exit ;;
     hp8??:OSF1:*:*)
 	echo hppa1.0-hp-osf
-	exit 0 ;;
+	exit ;;
     i*86:OSF1:*:*)
 	if [ -x /usr/sbin/sysversion ] ; then
 	    echo ${UNAME_MACHINE}-unknown-osf1mk
 	else
 	    echo ${UNAME_MACHINE}-unknown-osf1
 	fi
-	exit 0 ;;
+	exit ;;
     parisc*:Lites*:*:*)
 	echo hppa1.1-hp-lites
-	exit 0 ;;
+	exit ;;
     C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
 	echo c1-convex-bsd
-        exit 0 ;;
+        exit ;;
     C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-        exit 0 ;;
+        exit ;;
     C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
 	echo c34-convex-bsd
-        exit 0 ;;
+        exit ;;
     C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
 	echo c38-convex-bsd
-        exit 0 ;;
+        exit ;;
     C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
 	echo c4-convex-bsd
-        exit 0 ;;
+        exit ;;
     CRAY*Y-MP:*:*:*)
 	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*[A-Z]90:*:*:*)
 	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
 	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
 	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
 	      -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*TS:*:*:*)
 	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*T3E:*:*:*)
 	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     CRAY*SV1:*:*:*)
 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     *:UNICOS/mp:*:*)
 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-	exit 0 ;;
+	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
 	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
 	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
 	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
 	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit 0 ;;
+        exit ;;
     5000:UNIX_System_V:4.*:*)
 	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
 	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
 	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-	exit 0 ;;
+	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     sparc*:BSD/OS:*:*)
 	echo sparc-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:BSD/OS:*:*)
 	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:FreeBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit 0 ;;
+	exit ;;
     i*:CYGWIN*:*)
 	echo ${UNAME_MACHINE}-pc-cygwin
-	exit 0 ;;
+	exit ;;
     i*:MINGW*:*)
 	echo ${UNAME_MACHINE}-pc-mingw32
-	exit 0 ;;
+	exit ;;
+    i*:windows32*:*)
+	# uname -m includes "-pc" on this system.
+	echo ${UNAME_MACHINE}-mingw32
+	exit ;;
     i*:PW*:*)
 	echo ${UNAME_MACHINE}-pc-pw32
-	exit 0 ;;
+	exit ;;
     x86:Interix*:[34]*)
 	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
-	exit 0 ;;
+	exit ;;
     [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
 	echo i${UNAME_MACHINE}-pc-mks
-	exit 0 ;;
+	exit ;;
     i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
 	# How do we know it's Interix rather than the generic POSIX subsystem?
 	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
 	# UNAME_MACHINE based on the output of uname instead of i386?
 	echo i586-pc-interix
-	exit 0 ;;
+	exit ;;
     i*:UWIN*:*)
 	echo ${UNAME_MACHINE}-pc-uwin
-	exit 0 ;;
+	exit ;;
     amd64:CYGWIN*:*:*)
 	echo x86_64-unknown-cygwin
-	exit 0 ;;
+	exit ;;
     p*:CYGWIN*:*)
 	echo powerpcle-unknown-cygwin
-	exit 0 ;;
+	exit ;;
     prep*:SunOS:5.*:*)
 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-	exit 0 ;;
+	exit ;;
     *:GNU:*:*)
 	# the GNU system
 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-	exit 0 ;;
+	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
 	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
-	exit 0 ;;
+	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
-	exit 0 ;;
+	exit ;;
     arm*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     cris:Linux:*:*)
 	echo cris-axis-linux-gnu
-	exit 0 ;;
+	exit ;;
     crisv32:Linux:*:*)
 	echo crisv32-axis-linux-gnu
-	exit 0 ;;
+	exit ;;
     frv:Linux:*:*)
 	echo frv-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     ia64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     m32r*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     m68*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     mips:Linux:*:*)
 	eval $set_cc_for_build
 	sed 's/^	//' << EOF >$dummy.c
@@ -862,7 +888,7 @@ EOF
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     mips64:Linux:*:*)
 	eval $set_cc_for_build
@@ -881,14 +907,14 @@ EOF
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
-	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
 	;;
     ppc:Linux:*:*)
 	echo powerpc-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     ppc64:Linux:*:*)
 	echo powerpc64-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     alpha:Linux:*:*)
 	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
 	  EV5)   UNAME_MACHINE=alphaev5 ;;
@@ -902,7 +928,7 @@ EOF
 	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
 	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
-	exit 0 ;;
+	exit ;;
     parisc:Linux:*:* | hppa:Linux:*:*)
 	# Look for CPU level
 	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
@@ -910,25 +936,25 @@ EOF
 	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
 	  *)    echo hppa-unknown-linux-gnu ;;
 	esac
-	exit 0 ;;
+	exit ;;
     parisc64:Linux:*:* | hppa64:Linux:*:*)
 	echo hppa64-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux
-	exit 0 ;;
+	exit ;;
     sh64*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     sh*:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     sparc:Linux:*:* | sparc64:Linux:*:*)
 	echo ${UNAME_MACHINE}-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     x86_64:Linux:*:*)
 	echo x86_64-unknown-linux-gnu
-	exit 0 ;;
+	exit ;;
     i*86:Linux:*:*)
 	# The BFD linker knows what the default object file format is, so
 	# first see if it will tell us. cd to the root directory to prevent
@@ -946,15 +972,15 @@ EOF
 		;;
 	  a.out-i386-linux)
 		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
-		exit 0 ;;
+		exit ;;
 	  coff-i386)
 		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
-		exit 0 ;;
+		exit ;;
 	  "")
 		# Either a pre-BFD a.out linker (linux-gnuoldld) or
 		# one that does not give us useful --help.
 		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
-		exit 0 ;;
+		exit ;;
 	esac
 	# Determine whether the default compiler is a.out or elf
 	eval $set_cc_for_build
@@ -982,15 +1008,18 @@ EOF
 	#endif
 EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
-	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
-	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	test x"${LIBC}" != x && {
+		echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
+		exit
+	}
+	test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
 	;;
     i*86:DYNIX/ptx:4*:*)
 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
 	# earlier versions are messed up and put the nodename in both
 	# sysname and nodename.
 	echo i386-sequent-sysv4
-	exit 0 ;;
+	exit ;;
     i*86:UNIX_SV:4.2MP:2.*)
         # Unixware is an offshoot of SVR4, but it has its own version
         # number series starting with 2...
@@ -998,27 +1027,27 @@ EOF
 	# I just have to hope.  -- rms.
         # Use sysv4.2uw... so that sysv4* matches it.
 	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-	exit 0 ;;
+	exit ;;
     i*86:OS/2:*:*)
 	# If we were able to find `uname', then EMX Unix compatibility
 	# is probably installed.
 	echo ${UNAME_MACHINE}-pc-os2-emx
-	exit 0 ;;
+	exit ;;
     i*86:XTS-300:*:STOP)
 	echo ${UNAME_MACHINE}-unknown-stop
-	exit 0 ;;
+	exit ;;
     i*86:atheos:*:*)
 	echo ${UNAME_MACHINE}-unknown-atheos
-	exit 0 ;;
+	exit ;;
     i*86:syllable:*:*)
 	echo ${UNAME_MACHINE}-pc-syllable
-	exit 0 ;;
+	exit ;;
     i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
 	echo i386-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     i*86:*DOS:*:*)
 	echo ${UNAME_MACHINE}-pc-msdosdjgpp
-	exit 0 ;;
+	exit ;;
     i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
 	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
 	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
@@ -1026,15 +1055,16 @@ EOF
 	else
 		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
 	fi
-	exit 0 ;;
-    i*86:*:5:[78]*)
+	exit ;;
+    i*86:*:5:[678]*)
+	# UnixWare 7.x, OpenUNIX and OpenServer 6.
 	case `/bin/uname -X | grep "^Machine"` in
 	    *486*)	     UNAME_MACHINE=i486 ;;
 	    *Pentium)	     UNAME_MACHINE=i586 ;;
 	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
 	esac
 	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-	exit 0 ;;
+	exit ;;
     i*86:*:3.2:*)
 	if test -f /usr/options/cb.name; then
 		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
@@ -1052,73 +1082,73 @@ EOF
 	else
 		echo ${UNAME_MACHINE}-pc-sysv32
 	fi
-	exit 0 ;;
+	exit ;;
     pc:*:*:*)
 	# Left here for compatibility:
         # uname -m prints for DJGPP always 'pc', but it prints nothing about
         # the processor, so we play safe by assuming i386.
 	echo i386-pc-msdosdjgpp
-        exit 0 ;;
+        exit ;;
     Intel:Mach:3*:*)
 	echo i386-pc-mach3
-	exit 0 ;;
+	exit ;;
     paragon:*:*:*)
 	echo i860-intel-osf1
-	exit 0 ;;
+	exit ;;
     i860:*:4.*:*) # i860-SVR4
 	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
 	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
 	else # Add other i860-SVR4 vendors below as they are discovered.
 	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
 	fi
-	exit 0 ;;
+	exit ;;
     mini*:CTIX:SYS*5:*)
 	# "miniframe"
 	echo m68010-convergent-sysv
-	exit 0 ;;
+	exit ;;
     mc68k:UNIX:SYSTEM5:3.51m)
 	echo m68k-convergent-sysv
-	exit 0 ;;
+	exit ;;
     M680?0:D-NIX:5.3:*)
 	echo m68k-diab-dnix
-	exit 0 ;;
+	exit ;;
     M68*:*:R3V[5678]*:*)
-	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+	test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
     3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
 	OS_REL=''
 	test -r /etc/.relid \
 	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
 	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	  && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
 	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+	  && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
     3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
         /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-          && echo i486-ncr-sysv4 && exit 0 ;;
+          && { echo i486-ncr-sysv4; exit; } ;;
     m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
 	echo m68k-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     mc68030:UNIX_System_V:4.*:*)
 	echo m68k-atari-sysv4
-	exit 0 ;;
+	exit ;;
     TSUNAMI:LynxOS:2.*:*)
 	echo sparc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     rs6000:LynxOS:2.*:*)
 	echo rs6000-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
 	echo powerpc-unknown-lynxos${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SM[BE]S:UNIX_SV:*:*)
 	echo mips-dde-sysv${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     RM*:ReliantUNIX-*:*:*)
 	echo mips-sni-sysv4
-	exit 0 ;;
+	exit ;;
     RM*:SINIX-*:*:*)
 	echo mips-sni-sysv4
-	exit 0 ;;
+	exit ;;
     *:SINIX-*:*:*)
 	if uname -p 2>/dev/null >/dev/null ; then
 		UNAME_MACHINE=`(uname -p) 2>/dev/null`
@@ -1126,61 +1156,65 @@ EOF
 	else
 		echo ns32k-sni-sysv
 	fi
-	exit 0 ;;
+	exit ;;
     PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
                       # says <Richard.M.Bartel@ccMail.Census.GOV>
         echo i586-unisys-sysv4
-        exit 0 ;;
+        exit ;;
     *:UNIX_System_V:4*:FTX*)
 	# From Gerald Hewes <hewes@openmarket.com>.
 	# How about differentiating between stratus architectures? -djm
 	echo hppa1.1-stratus-sysv4
-	exit 0 ;;
+	exit ;;
     *:*:*:FTX*)
 	# From seanf@swdc.stratus.com.
 	echo i860-stratus-sysv4
-	exit 0 ;;
+	exit ;;
+    i*86:VOS:*:*)
+	# From Paul.Green@stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit ;;
     *:VOS:*:*)
 	# From Paul.Green@stratus.com.
 	echo hppa1.1-stratus-vos
-	exit 0 ;;
+	exit ;;
     mc68*:A/UX:*:*)
 	echo m68k-apple-aux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     news*:NEWS-OS:6*:*)
 	echo mips-sony-newsos6
-	exit 0 ;;
+	exit ;;
     R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
 	if [ -d /usr/nec ]; then
 	        echo mips-nec-sysv${UNAME_RELEASE}
 	else
 	        echo mips-unknown-sysv${UNAME_RELEASE}
 	fi
-        exit 0 ;;
+        exit ;;
     BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
 	echo powerpc-be-beos
-	exit 0 ;;
+	exit ;;
     BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
 	echo powerpc-apple-beos
-	exit 0 ;;
+	exit ;;
     BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
 	echo i586-pc-beos
-	exit 0 ;;
+	exit ;;
     SX-4:SUPER-UX:*:*)
 	echo sx4-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SX-5:SUPER-UX:*:*)
 	echo sx5-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     SX-6:SUPER-UX:*:*)
 	echo sx6-nec-superux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Rhapsody:*:*)
 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Darwin:*:*)
 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
 	case $UNAME_PROCESSOR in
@@ -1188,7 +1222,7 @@ EOF
 	    unknown) UNAME_PROCESSOR=powerpc ;;
 	esac
 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
 	if test "$UNAME_PROCESSOR" = "x86"; then
@@ -1196,25 +1230,25 @@ EOF
 	    UNAME_MACHINE=pc
 	fi
 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:QNX:*:4*)
 	echo i386-pc-qnx
-	exit 0 ;;
+	exit ;;
     NSE-?:NONSTOP_KERNEL:*:*)
 	echo nse-tandem-nsk${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     NSR-?:NONSTOP_KERNEL:*:*)
 	echo nsr-tandem-nsk${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:NonStop-UX:*:*)
 	echo mips-compaq-nonstopux
-	exit 0 ;;
+	exit ;;
     BS2000:POSIX*:*:*)
 	echo bs2000-siemens-sysv
-	exit 0 ;;
+	exit ;;
     DS/*:UNIX_System_V:*:*)
 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:Plan9:*:*)
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
@@ -1225,41 +1259,44 @@ EOF
 	    UNAME_MACHINE="$cputype"
 	fi
 	echo ${UNAME_MACHINE}-unknown-plan9
-	exit 0 ;;
+	exit ;;
     *:TOPS-10:*:*)
 	echo pdp10-unknown-tops10
-	exit 0 ;;
+	exit ;;
     *:TENEX:*:*)
 	echo pdp10-unknown-tenex
-	exit 0 ;;
+	exit ;;
     KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
 	echo pdp10-dec-tops20
-	exit 0 ;;
+	exit ;;
     XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
 	echo pdp10-xkl-tops20
-	exit 0 ;;
+	exit ;;
     *:TOPS-20:*:*)
 	echo pdp10-unknown-tops20
-	exit 0 ;;
+	exit ;;
     *:ITS:*:*)
 	echo pdp10-unknown-its
-	exit 0 ;;
+	exit ;;
     SEI:*:*:SEIUX)
 	echo mips-sei-seiux${UNAME_RELEASE}
-	exit 0 ;;
+	exit ;;
     *:DragonFly:*:*)
 	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-	exit 0 ;;
+	exit ;;
     *:*VMS:*:*)
 	UNAME_MACHINE=`(uname -p) 2>/dev/null`
 	case "${UNAME_MACHINE}" in
-	    A*) echo alpha-dec-vms && exit 0 ;;
-	    I*) echo ia64-dec-vms && exit 0 ;;
-	    V*) echo vax-dec-vms && exit 0 ;;
+	    A*) echo alpha-dec-vms ; exit ;;
+	    I*) echo ia64-dec-vms ; exit ;;
+	    V*) echo vax-dec-vms ; exit ;;
 	esac ;;
     *:XENIX:*:SysV)
 	echo i386-pc-xenix
-	exit 0 ;;
+	exit ;;
+    i*86:skyos:*:*)
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	exit ;;
 esac
 
 #echo '(No uname command or uname output not recognized.)' 1>&2
@@ -1291,7 +1328,7 @@ main ()
 #endif
 
 #if defined (__arm) && defined (__acorn) && defined (__unix)
-  printf ("arm-acorn-riscix"); exit (0);
+  printf ("arm-acorn-riscix\n"); exit (0);
 #endif
 
 #if defined (hp300) && !defined (hpux)
@@ -1380,11 +1417,12 @@ main ()
 }
 EOF
 
-$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
+	{ echo "$SYSTEM_NAME"; exit; }
 
 # Apollos put the system type in the environment.
 
-test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
 
 # Convex versions that predate uname can use getsysinfo(1)
 
@@ -1393,22 +1431,22 @@ then
     case `getsysinfo -f cpu_type` in
     c1*)
 	echo c1-convex-bsd
-	exit 0 ;;
+	exit ;;
     c2*)
 	if getsysinfo -f scalar_acc
 	then echo c32-convex-bsd
 	else echo c2-convex-bsd
 	fi
-	exit 0 ;;
+	exit ;;
     c34*)
 	echo c34-convex-bsd
-	exit 0 ;;
+	exit ;;
     c38*)
 	echo c38-convex-bsd
-	exit 0 ;;
+	exit ;;
     c4*)
 	echo c4-convex-bsd
-	exit 0 ;;
+	exit ;;
     esac
 fi
 
@@ -1419,7 +1457,9 @@ This script, last modified $timestamp, h
 the operating system you are using. It is advised that you
 download the most up to date version of the config scripts from
 
-    ftp://ftp.gnu.org/pub/gnu/config/
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
 
 If the version you run ($0) is already up to date, please
 send the following data and any information you think might be
diff -Nurp tin-1.7.8/config.sub tin-1.7.9/config.sub
--- tin-1.7.8/config.sub	2005-02-10 23:08:44.000000000 +0100
+++ tin-1.7.9/config.sub	2005-06-28 10:31:19.552407982 +0200
@@ -3,7 +3,7 @@
 #   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
 #   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
 
-timestamp='2005-02-10'
+timestamp='2005-06-02'
 
 # This file is (in principle) common to ALL GNU software.
 # The presence of a machine in this file suggests that SOME GNU software
@@ -21,14 +21,15 @@ timestamp='2005-02-10'
 #
 # You should have received a copy of the GNU General Public License
 # along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330,
-# Boston, MA 02111-1307, USA.
-
+# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
+# 02110-1301, USA.
+#
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # configuration script generated by Autoconf, you may include it under
 # the same distribution terms that you use for the rest of that program.
 
+
 # Please send patches to <config-patches@gnu.org>.  Submit a context
 # diff and a properly formatted ChangeLog entry.
 #
@@ -83,11 +84,11 @@ Try \`$me --help' for more information."
 while test $# -gt 0 ; do
   case $1 in
     --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit 0 ;;
+       echo "$timestamp" ; exit ;;
     --version | -v )
-       echo "$version" ; exit 0 ;;
+       echo "$version" ; exit ;;
     --help | --h* | -h )
-       echo "$usage"; exit 0 ;;
+       echo "$usage"; exit ;;
     -- )     # Stop option processing
        shift; break ;;
     - )	# Use stdin as input.
@@ -99,7 +100,7 @@ while test $# -gt 0 ; do
     *local*)
        # First pass through any local machine types.
        echo $1
-       exit 0;;
+       exit ;;
 
     * )
        break ;;
@@ -231,6 +232,7 @@ case $basic_machine in
 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
 	| am33_2.0 \
 	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| bfin \
 	| c4x | clipper \
 	| d10v | d30v | dlx | dsp16xx \
 	| fr30 | frv \
@@ -254,6 +256,7 @@ case $basic_machine in
 	| mipsisa64sr71k | mipsisa64sr71kel \
 	| mipstx39 | mipstx39el \
 	| mn10200 | mn10300 \
+	| ms1 \
 	| msp430 \
 	| ns16k | ns32k \
 	| openrisc | or32 \
@@ -262,7 +265,8 @@ case $basic_machine in
 	| pyramid \
 	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
 	| sh64 | sh64le \
-	| sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \
+	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b \
 	| strongarm \
 	| tahoe | thumb | tic4x | tic80 | tron \
 	| v850 | v850e \
@@ -271,6 +275,9 @@ case $basic_machine in
 	| z8k)
 		basic_machine=$basic_machine-unknown
 		;;
+	m32c)
+		basic_machine=$basic_machine-unknown
+		;;
 	m6811 | m68hc11 | m6812 | m68hc12)
 		# Motorola 68HC11/12.
 		basic_machine=$basic_machine-unknown
@@ -298,7 +305,7 @@ case $basic_machine in
 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
 	| avr-* \
-	| bs2000-* \
+	| bfin-* | bs2000-* \
 	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
 	| clipper-* | craynv-* | cydra-* \
 	| d10v-* | d30v-* | dlx-* \
@@ -327,6 +334,7 @@ case $basic_machine in
 	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
 	| mipstx39-* | mipstx39el-* \
 	| mmix-* \
+	| ms1-* \
 	| msp430-* \
 	| none-* | np1-* | ns16k-* | ns32k-* \
 	| orion-* \
@@ -336,7 +344,8 @@ case $basic_machine in
 	| romp-* | rs6000-* \
 	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-	| sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
 	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
 	| tahoe-* | thumb-* \
 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
@@ -348,6 +357,8 @@ case $basic_machine in
 	| ymp-* \
 	| z8k-*)
 		;;
+	m32c-*)
+		;;
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
 	386bsd)
@@ -1178,7 +1189,7 @@ case $os in
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* | -skyos*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1556,7 +1567,7 @@ case $basic_machine in
 esac
 
 echo $basic_machine$os
-exit 0
+exit
 
 # Local variables:
 # eval: (add-hook 'write-file-hooks 'time-stamp)
diff -Nurp tin-1.7.8/configure tin-1.7.9/configure
--- tin-1.7.8/configure	2005-03-21 13:44:05.000000000 +0100
+++ tin-1.7.9/configure	2005-06-29 11:47:03.038567543 +0200
@@ -1,7 +1,7 @@
 #! /bin/sh
 
 # Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.13.20020210 
+# Generated automatically using autoconf version 2.13.20030927 
 # Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
@@ -182,7 +182,7 @@ Features and packages:
   --x-includes=DIR        X include files are in DIR
   --x-libraries=DIR       X library files are in DIR
 EOF
-cat <<EOF
+cat <<\EOF
 --enable and --with options recognized:
   --with-install-prefix   prefixes actual install location (default: /)
   --with-build-cc=XXX     the build C compiler ($BUILD_CC)
@@ -198,12 +198,12 @@ cat <<EOF
   --with-mailer=PROG      specify default mailer-program (default: mailx)
   --with-mailbox=DIR      directory for incoming mailboxes (default: empty)
 EOF
-cat <<EOF
+cat <<\EOF
   --disable-pgp-gpg       disable PGP/GPG Support
   --with-pgp              (default: from system path)
   --with-pgpk             (default: from system path)
   --with-gpg              (default: from system path)
-  --with-shell=PROG       default \$SHELL program (default: sh)
+  --with-shell=PROG       default $SHELL program (default: sh)
   --disable-nntp          disable reading via NNTP
   --enable-nntp-only      enable reading via NNTP only
   --enable-debug          turn on debug/profiling/traces
@@ -212,14 +212,14 @@ cat <<EOF
   --enable-warnings       turn on GCC compiler warnings
   --with-libdir=PATH      news-library (default: /usr/lib/news)
 EOF
-cat <<EOF
+cat <<\EOF
   --with-spooldir=PATH    news spool-directory (default: /var/spool/news)
   --with-nov-dir=PATH     news overview-directory (default: $SPOOLDIR)
   --with-nov-fname        specify names of overview files (default: .overview)
   --with-inews-dir=PATH   directory containing "inews" (default: $INEWSPATH)
   --with-inn-nntplib=PATH specify INN-NNTP library (default: empty)
-  --with-socks[=path]       link with socks library if available
-  --with-socks5[=path]      link with socks5 library if available
+  --with-socks[=path]     link with socks library if available
+  --with-socks5[=path]    link with socks5 library if available
   --disable-fcntl         disable fcntl() locking
   --enable-lockf          enable lockf() locking
   --enable-flock          enable flock() locking
@@ -229,30 +229,30 @@ cat <<EOF
                           --with-ncurses)
   --with-curses-dir=DIR   directory in which (n)curses is installed
 EOF
-cat <<EOF
+cat <<\EOF
   --with-ncurses          link with ncurses if available
   --enable-curses         use curses interface
   --with-pcre=PATH        use installed pcre versus bundled
   --with-dbmalloc         use Conor Cahill's dbmalloc library
   --with-dmalloc          use Gray Watson's dmalloc library
   --with-trace            use debugging/traces
-  --with-domain-name      sets \$DOMAIN_NAME (default: empty)
+  --with-domain-name      sets $DOMAIN_NAME (default: empty)
   --with-nntp-default-server
-                          (sets \$NNTP_DEFAULT_SERVER)
-                          (default: news\$DOMAIN_NAME) (default: empty)
+                          (sets NNTP_DEFAULT_SERVER)
+                          (default: news.$DOMAIN_NAME)
   --enable-mh-mail-handling
                           use MH style mail handling for mailgroups
   --disable-8bit-keys     disable 8-bit keycode support
   --disable-color         disable ANSI-color support
   --disable-etiquette     disable printing of posting-etiquette
 EOF
-cat <<EOF
+cat <<\EOF
   --enable-break-long-lines
                           break long mime-encoded lines
   --disable-mime-strict-charset
                           force MM_CHARSET obeyance
   --with-mime-default-charset=CHARSET
-                          fallback for \$MM_CHARSET (default: US-ASCII)
+                          fallback for $MM_CHARSET (default: US-ASCII)
   --with-iso-to-ascii     ISO -> ASCII conversion (default: -1)
   --disable-locale        disable locale support
   --disable-posting       disable posting
@@ -264,7 +264,7 @@ cat <<EOF
   --disable-printing      disable printer support
   --disable-append-pid    disable appending .pid to tmp-files
 EOF
-cat <<EOF
+cat <<\EOF
   --disable-xhdr-xref     disable XHDR XREF fallback
   --enable-broken-listgroup-fix
                           send extra GROUP command before LISTGROUP
@@ -275,14 +275,15 @@ cat <<EOF
                           (default: /etc/tin)
   --enable-ipv6           enable IPv6 (with IPv4) support (default: disabled)
   --with-coffee           coffee support
-  --with-libiconv-prefix=DIR  search for libiconv in DIR/include and DIR/lib
+  --with-libiconv-prefix=DIR
+                          search for libiconv in DIR/include and DIR/lib
   --disable-nls           do not use Native Language Support
   --with-included-gettext use the GNU gettext library included here
   --disable-included-msgs use included messages, for i18n support
   --with-x                use the X Window System
   --with-Xaw3d            link with Xaw 3d library
 EOF
-cat <<EOF
+cat <<\EOF
   --with-neXtaw           link with neXT Athena library
   --with-XawPlus          link with Athena-Plus library
 EOF
@@ -435,7 +436,7 @@ EOF
     verbose=yes ;;
 
   -version | --version | --versio | --versi | --vers)
-    echo "configure generated by autoconf version 2.13.20020210"
+    echo "configure generated by autoconf version 2.13.20030927"
     exit 0 ;;
 
   -with-* | --with-*)
@@ -622,12 +623,247 @@ else
   ac_n= ac_c='\c' ac_t=
 fi
 
+# If we find X, set shell vars x_includes and x_libraries to the
+# paths, otherwise set no_x=yes.
+# Uses ac_ vars as temps to allow command line to override cache and checks.
+# --without-x overrides everything else, but does not touch the cache.
+echo $ac_n "checking for X""... $ac_c" 1>&6
+echo "configure:632: checking for X" >&5
+
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+  withval="$with_x"
+  :
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+    # Both variables are already set.
+    have_x=yes
+  else
+if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=NO ac_x_libraries=NO
+rm -fr conftestdir
+if mkdir conftestdir; then
+  cd conftestdir
+  # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+  cat > Imakefile <<'EOF'
+acfindx:
+	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+EOF
+  if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl; do
+      if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+        test -f $ac_im_libdir/libX11.$ac_extension; then
+        ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case "$ac_im_incroot" in
+	/usr/include) ;;
+	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
+    esac
+    case "$ac_im_usrlibdir" in
+	/usr/lib | /lib) ;;
+	*) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
+    esac
+  fi
+  cd ..
+  rm -fr conftestdir
+fi
+
+if test "$ac_x_includes" = NO; then
+  # Guess where to find include files, by looking for this one X11 .h file.
+  test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
+
+  # First, try using that file with no special directory specified.
+cat > conftest.$ac_ext <<EOF
+#line 695 "configure"
+#include "confdefs.h"
+#include <$x_direct_test_include>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:700: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  # Look for the header file in a standard set of common directories.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+  for ac_dir in               \
+    /usr/X11/include          \
+    /usr/X11R6/include        \
+    /usr/X11R5/include        \
+    /usr/X11R4/include        \
+                              \
+    /usr/include/X11          \
+    /usr/include/X11R6        \
+    /usr/include/X11R5        \
+    /usr/include/X11R4        \
+                              \
+    /usr/local/X11/include    \
+    /usr/local/X11R6/include  \
+    /usr/local/X11R5/include  \
+    /usr/local/X11R4/include  \
+                              \
+    /usr/local/include/X11    \
+    /usr/local/include/X11R6  \
+    /usr/local/include/X11R5  \
+    /usr/local/include/X11R4  \
+                              \
+    /usr/X386/include         \
+    /usr/x386/include         \
+    /usr/XFree86/include/X11  \
+                              \
+    /usr/include              \
+    /usr/local/include        \
+    /usr/unsupported/include  \
+    /usr/athena/include       \
+    /usr/local/x11r5/include  \
+    /usr/lpp/Xamples/include  \
+                              \
+    /usr/openwin/include      \
+    /usr/openwin/share/include \
+    ; \
+  do
+    if test -r "$ac_dir/$x_direct_test_include"; then
+      ac_x_includes=$ac_dir
+      break
+    fi
+  done
+fi
+rm -f conftest*
+fi # $ac_x_includes = NO
+
+if test "$ac_x_libraries" = NO; then
+  # Check for the libraries.
+
+  test -z "$x_direct_test_library" && x_direct_test_library=Xt
+  test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
+
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS="$LIBS"
+  LIBS="-l$x_direct_test_library $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 769 "configure"
+#include "confdefs.h"
+
+int main() {
+${x_direct_test_function}()
+; return 0; }
+EOF
+if { (eval echo configure:776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  LIBS="$ac_save_LIBS"
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  LIBS="$ac_save_LIBS"
+# First see if replacing the include by lib works.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
+    /usr/X11/lib          \
+    /usr/X11R6/lib        \
+    /usr/X11R5/lib        \
+    /usr/X11R4/lib        \
+                          \
+    /usr/lib/X11          \
+    /usr/lib/X11R6        \
+    /usr/lib/X11R5        \
+    /usr/lib/X11R4        \
+                          \
+    /usr/local/X11/lib    \
+    /usr/local/X11R6/lib  \
+    /usr/local/X11R5/lib  \
+    /usr/local/X11R4/lib  \
+                          \
+    /usr/local/lib/X11    \
+    /usr/local/lib/X11R6  \
+    /usr/local/lib/X11R5  \
+    /usr/local/lib/X11R4  \
+                          \
+    /usr/X386/lib         \
+    /usr/x386/lib         \
+    /usr/XFree86/lib/X11  \
+                          \
+    /usr/lib              \
+    /usr/local/lib        \
+    /usr/unsupported/lib  \
+    /usr/athena/lib       \
+    /usr/local/x11r5/lib  \
+    /usr/lpp/Xamples/lib  \
+    /lib/usr/lib/X11	  \
+                          \
+    /usr/openwin/lib      \
+    /usr/openwin/share/lib \
+    ; \
+do
+  for ac_extension in a so sl; do
+    if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f conftest*
+fi # $ac_x_libraries = NO
+
+if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
+  # Didn't find X anywhere.  Cache the known absence of X.
+  ac_cv_have_x="have_x=no"
+else
+  # Record where we found X for the cache.
+  ac_cv_have_x="have_x=yes \
+	        ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+  fi
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  echo "$ac_t""$have_x" 1>&6
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes \
+		ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
+  echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
+fi
+
 
 
 
 
 PACKAGE=tin
-VERSION=1.7.8
+VERSION=1.7.9
 cat >> confdefs.h <<EOF
 #define PACKAGE "$PACKAGE"
 EOF
@@ -659,7 +895,7 @@ ac_config_sub=$ac_aux_dir/config.sub
 ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
 
 
-if test -f $srcdir/config.guess ; then
+if test -f $srcdir/config.guess || test -f $ac_aux_dir/config.guess ; then
 	
 # Make sure we can run config.sub.
 if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
@@ -667,7 +903,7 @@ else { echo "configure: error: can not r
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:671: checking host system type" >&5
+echo "configure:907: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -763,7 +999,7 @@ case "$host_os" in
 			# Extract the first word of "xlc", so it can be a program name with args.
 set dummy xlc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:767: checking for $ac_word" >&5
+echo "configure:1003: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XLC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -806,14 +1042,14 @@ fi
 esac
 
 ### Native Language Support
-ALL_LINGUAS="de en_GB et fr tr"
+ALL_LINGUAS="de en_GB et fr ru rw tr"
 
 ### Checks for programs
 save_CFLAGS="$CFLAGS"
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:817: checking for $ac_word" >&5
+echo "configure:1053: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -843,7 +1079,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:847: checking for $ac_word" >&5
+echo "configure:1083: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -894,7 +1130,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:898: checking for $ac_word" >&5
+echo "configure:1134: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -926,7 +1162,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:930: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:1166: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -937,12 +1173,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 941 "configure"
+#line 1177 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1182: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -968,12 +1204,12 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:972: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1208: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:977: checking whether we are using GNU C" >&5
+echo "configure:1213: checking whether we are using GNU C" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -982,7 +1218,7 @@ else
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:1222: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -1001,7 +1237,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:1005: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:1241: checking whether ${CC-cc} accepts -g" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1033,7 +1269,7 @@ else
 fi
 
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:1037: checking how to run the C preprocessor" >&5
+echo "configure:1273: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -1048,13 +1284,13 @@ else
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 1052 "configure"
+#line 1288 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1294: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1065,13 +1301,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 1069 "configure"
+#line 1305 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1075: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1311: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1082,13 +1318,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 1086 "configure"
+#line 1322 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:1092: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:1328: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -1114,13 +1350,13 @@ echo "$ac_t""$CPP" 1>&6
 
 if test $ac_cv_prog_gcc = yes; then
     echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:1118: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:1354: checking whether ${CC-cc} needs -traditional" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
     ac_pattern="Autoconf.*'x'"
   cat > conftest.$ac_ext <<EOF
-#line 1124 "configure"
+#line 1360 "configure"
 #include "confdefs.h"
 #include <sgtty.h>
 Autoconf TIOCGETP
@@ -1138,7 +1374,7 @@ rm -f conftest*
 
   if test $ac_cv_prog_gcc_traditional = no; then
     cat > conftest.$ac_ext <<EOF
-#line 1142 "configure"
+#line 1378 "configure"
 #include "confdefs.h"
 #include <termio.h>
 Autoconf TCGETA
@@ -1160,7 +1396,7 @@ echo "$ac_t""$ac_cv_prog_gcc_traditional
 fi
 
 echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1164: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1400: checking whether ${MAKE-make} sets \${MAKE}" >&5
 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1198,7 +1434,7 @@ fi
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1202: checking for a BSD compatible install" >&5
+echo "configure:1438: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1275,14 +1511,14 @@ EOF
   do
     rm -f y.tab.ch
     echo $ac_n "checking for $cf_prog""... $ac_c" 1>&6
-echo "configure:1279: checking for $cf_prog" >&5
+echo "configure:1515: checking for $cf_prog" >&5
     cf_command="$cf_prog conftest.y"
     cf_result=no
-    if { (eval echo configure:1282: \"$cf_command\") 1>&5; (eval $cf_command) 2>&5; } && test -s y.tab.c ; then
+    if { (eval echo configure:1518: \"$cf_command\") 1>&5; (eval $cf_command) 2>&5; } && test -s y.tab.c ; then
       mv y.tab.c conftest.c
       rm -f y.tab.h
       if test "$cf_prog" = 'bison -y' ; then
-        if { (eval echo configure:1286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest ; then
+        if { (eval echo configure:1522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest ; then
           cf_result=yes
         fi
       else
@@ -1306,7 +1542,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1310: checking for $ac_word" >&5
+echo "configure:1546: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LINT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1334,11 +1570,12 @@ fi
 
 test -n "$LINT" && break
 done
+test -n "$LINT" || LINT=":"
 
 echo $ac_n "checking for AIX""... $ac_c" 1>&6
-echo "configure:1340: checking for AIX" >&5
+echo "configure:1577: checking for AIX" >&5
 cat > conftest.$ac_ext <<EOF
-#line 1342 "configure"
+#line 1579 "configure"
 #include "confdefs.h"
 #ifdef _AIX
   yes
@@ -1360,44 +1597,114 @@ rm -f conftest*
 
 
 
-echo $ac_n "checking if we must define _GNU_SOURCE""... $ac_c" 1>&6
-echo "configure:1365: checking if we must define _GNU_SOURCE" >&5
-if eval "test \"`echo '$''{'cf_cv_gnu_source'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  
-cat > conftest.$ac_ext <<EOF
-#line 1371 "configure"
+
+
+INTEL_COMPILER=no
+
+if test "$GCC" = yes ; then
+	case $host_os in
+	linux*|gnu*)
+		echo $ac_n "checking if this is really Intel compiler""... $ac_c" 1>&6
+echo "configure:1609: checking if this is really Intel compiler" >&5
+		cf_save_CFLAGS="$CFLAGS"
+		CFLAGS="$CFLAGS -no-gcc"
+		cat > conftest.$ac_ext <<EOF
+#line 1613 "configure"
 #include "confdefs.h"
-#include <sys/types.h>
+
 int main() {
 
-#ifndef _XOPEN_SOURCE
+#ifdef __INTEL_COMPILER
+#else
 make an error
 #endif
+
 ; return 0; }
 EOF
-if { (eval echo configure:1381: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1625: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
-  cf_cv_gnu_source=no
+  INTEL_COMPILER=yes
+cf_save_CFLAGS="$cf_save_CFLAGS -we147 -no-gcc"
+
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  cf_save="$CPPFLAGS"
-	 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
-	 cat > conftest.$ac_ext <<EOF
-#line 1391 "configure"
-#include "confdefs.h"
-#include <sys/types.h>
-int main() {
-
-#ifdef _XOPEN_SOURCE
+fi
+rm -f conftest*
+		CFLAGS="$cf_save_CFLAGS"
+		echo "$ac_t""$INTEL_COMPILER" 1>&6
+		;;
+	esac
+fi
+
+
+
+cf_XOPEN_SOURCE=500
+cf_POSIX_C_SOURCE=199506L
+
+case $host_os in #(vi
+aix[45]*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_ALL_SOURCE"
+	;;
+darwin*) #(vi
+	# setting _XOPEN_SOURCE breaks things on Darwin
+	;;
+freebsd*) #(vi
+	# 5.x headers associate
+	#	_XOPEN_SOURCE=600 with _POSIX_C_SOURCE=200112L
+	#	_XOPEN_SOURCE=500 with _POSIX_C_SOURCE=199506L
+	cf_POSIX_C_SOURCE=200112L
+	cf_XOPEN_SOURCE=600
+	CPPFLAGS="$CPPFLAGS -D_BSD_TYPES -D__BSD_VISIBLE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+	;;
+hpux*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_HPUX_SOURCE"
+	;;
+irix[56].*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_SGI_SOURCE"
+	;;
+linux*|gnu*) #(vi
+	
+
+
+echo $ac_n "checking if we must define _GNU_SOURCE""... $ac_c" 1>&6
+echo "configure:1672: checking if we must define _GNU_SOURCE" >&5
+if eval "test \"`echo '$''{'cf_cv_gnu_source'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<EOF
+#line 1678 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:1688: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_gnu_source=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_save="$CPPFLAGS"
+	 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
+	 cat > conftest.$ac_ext <<EOF
+#line 1698 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+
+#ifdef _XOPEN_SOURCE
 make an error
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:1401: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1708: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_gnu_source=no
 else
@@ -1417,9 +1724,190 @@ fi
 echo "$ac_t""$cf_cv_gnu_source" 1>&6
 test "$cf_cv_gnu_source" = yes && CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
 
+	;;
+mirbsd*) #(vi
+	# setting _XOPEN_SOURCE or _POSIX_SOURCE breaks <arpa/inet.h>
+	;;
+netbsd*) #(vi
+	# setting _XOPEN_SOURCE breaks IPv6 for lynx on NetBSD 1.6, breaks xterm, is not needed for ncursesw
+	;;
+openbsd*) #(vi
+	# setting _XOPEN_SOURCE breaks xterm on OpenBSD 2.8, is not needed for ncursesw
+	;;
+osf[45]*) #(vi
+	CPPFLAGS="$CPPFLAGS -D_OSF_SOURCE"
+	;;
+sco*) #(vi
+	# setting _XOPEN_SOURCE breaks Lynx on SCO Unix / OpenServer
+	;;
+solaris*) #(vi
+	CPPFLAGS="$CPPFLAGS -D__EXTENSIONS__"
+	;;
+*)
+	echo $ac_n "checking if we should define _XOPEN_SOURCE""... $ac_c" 1>&6
+echo "configure:1749: checking if we should define _XOPEN_SOURCE" >&5
+if eval "test \"`echo '$''{'cf_cv_xopen_source'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cat > conftest.$ac_ext <<EOF
+#line 1755 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+
+#ifndef _XOPEN_SOURCE
+make an error
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:1765: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_xopen_source=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_save="$CPPFLAGS"
+	 CPPFLAGS="$CPPFLAGS -D_XOPEN_SOURCE=$cf_XOPEN_SOURCE"
+	 cat > conftest.$ac_ext <<EOF
+#line 1775 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+
+#ifdef _XOPEN_SOURCE
+make an error
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:1785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_xopen_source=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_xopen_source=$cf_XOPEN_SOURCE
+fi
+rm -f conftest*
+	CPPFLAGS="$cf_save"
+	
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_xopen_source" 1>&6
+test "$cf_cv_xopen_source" != no && CPPFLAGS="$CPPFLAGS -U_XOPEN_SOURCE -D_XOPEN_SOURCE=$cf_cv_xopen_source"
+	
+cf_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE
+echo $ac_n "checking if we should define _POSIX_C_SOURCE""... $ac_c" 1>&6
+echo "configure:1807: checking if we should define _POSIX_C_SOURCE" >&5
+if eval "test \"`echo '$''{'cf_cv_posix_c_source'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	
+echo "(line 1813) testing if the symbol is already defined go no further ..." 1>&5
+
+	cat > conftest.$ac_ext <<EOF
+#line 1816 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:1826: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_posix_c_source=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_want_posix_source=no
+	 case .$cf_POSIX_C_SOURCE in
+	 .[12]??*)
+		cf_cv_posix_c_source="-U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+		;;
+	 .2)
+		cf_cv_posix_c_source="-U_POSIX_C_SOURCE -D_POSIX_C_SOURCE=$cf_POSIX_C_SOURCE"
+		cf_want_posix_source=yes
+		;;
+	 .*)
+		cf_want_posix_source=yes
+		;;
+	 esac
+	 if test "$cf_want_posix_source" = yes ; then
+		cat > conftest.$ac_ext <<EOF
+#line 1848 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+
+#ifdef _POSIX_SOURCE
+make an error
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:1858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_posix_c_source="$cf_cv_posix_c_source -U_POSIX_SOURCE -D_POSIX_SOURCE"
+fi
+rm -f conftest*
+	 fi
+	 
+echo "(line 1869) testing ifdef from value $cf_POSIX_C_SOURCE ..." 1>&5
+
+	 cf_save="$CPPFLAGS"
+	 CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
+	 
+echo "(line 1874) testing if the second compile does not leave our definition intact error ..." 1>&5
+
+	 cat > conftest.$ac_ext <<EOF
+#line 1877 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+int main() {
+
+#ifndef _POSIX_C_SOURCE
+make an error
+#endif
+; return 0; }
+EOF
+if { (eval echo configure:1887: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_posix_c_source=no
+fi
+rm -f conftest*
+	CPPFLAGS="$cf_save"
+	
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_posix_c_source" 1>&6
+test "$cf_cv_posix_c_source" != no && CPPFLAGS="$CPPFLAGS $cf_cv_posix_c_source"
+
+	;;
+esac
+
 
         echo $ac_n "checking for strerror in -lcposix""... $ac_c" 1>&6
-echo "configure:1423: checking for strerror in -lcposix" >&5
+echo "configure:1911: checking for strerror in -lcposix" >&5
 ac_lib_var=`echo cposix'_'strerror | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -1427,7 +1915,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 1431 "configure"
+#line 1919 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -1438,7 +1926,7 @@ int main() {
 strerror()
 ; return 0; }
 EOF
-if { (eval echo configure:1442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:1930: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -1462,7 +1950,7 @@ fi
 
 
 echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
-echo "configure:1466: checking for ${CC-cc} option to accept ANSI C" >&5
+echo "configure:1954: checking for ${CC-cc} option to accept ANSI C" >&5
 if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1486,12 +1974,34 @@ for cf_arg in "-DCC_HAS_PROTOS" \
 	-Xc
 do
 	
+cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
+cf_new_extra_cppflags=
+
 for cf_add_cflags in $cf_arg
 do
+case $cf_fix_cppflags in
+no)
 	case $cf_add_cflags in #(vi
 	-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+		case $cf_add_cflags in
+		-D*)
+			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+			&& test -z "${cf_tst_cflags}" \
+			&& cf_fix_cppflags=yes
+
+			if test $cf_fix_cppflags = yes ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			fi
+			;;
+		esac
 		case "$CPPFLAGS" in
 		*$cf_add_cflags) #(vi
 			;;
@@ -1504,6 +2014,17 @@ do
 		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
 		;;
 	esac
+	;;
+yes)
+	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+	test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+	&& test -z "${cf_tst_cflags}" \
+	&& cf_fix_cppflags=no
+	;;
+esac
 done
 
 if test -n "$cf_new_cflags" ; then
@@ -1516,9 +2037,16 @@ if test -n "$cf_new_cppflags" ; then
 	CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
 fi
 
+if test -n "$cf_new_extra_cppflags" ; then
+	
+	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+
+
 
 	cat > conftest.$ac_ext <<EOF
-#line 1522 "configure"
+#line 2050 "configure"
 #include "confdefs.h"
 
 #ifndef CC_HAS_PROTOS
@@ -1534,7 +2062,7 @@ int main() {
 	struct s2 {int (*f) (double a);};
 ; return 0; }
 EOF
-if { (eval echo configure:1538: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2066: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ansi_cc="$cf_arg"; break
 else
@@ -1553,12 +2081,34 @@ echo "$ac_t""$cf_cv_ansi_cc" 1>&6
 if test "$cf_cv_ansi_cc" != "no"; then
 if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
 	
+cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
+cf_new_extra_cppflags=
+
 for cf_add_cflags in $cf_cv_ansi_cc
 do
+case $cf_fix_cppflags in
+no)
 	case $cf_add_cflags in #(vi
 	-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+		case $cf_add_cflags in
+		-D*)
+			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+			&& test -z "${cf_tst_cflags}" \
+			&& cf_fix_cppflags=yes
+
+			if test $cf_fix_cppflags = yes ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			fi
+			;;
+		esac
 		case "$CPPFLAGS" in
 		*$cf_add_cflags) #(vi
 			;;
@@ -1571,6 +2121,17 @@ do
 		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
 		;;
 	esac
+	;;
+yes)
+	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+	test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+	&& test -z "${cf_tst_cflags}" \
+	&& cf_fix_cppflags=no
+	;;
+esac
 done
 
 if test -n "$cf_new_cflags" ; then
@@ -1583,6 +2144,13 @@ if test -n "$cf_new_cppflags" ; then
 	CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
 fi
 
+if test -n "$cf_new_extra_cppflags" ; then
+	
+	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+
+
 
 else
 	cat >> confdefs.h <<\EOF
@@ -1602,12 +2170,12 @@ You have the following choices:
 fi
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:1606: checking for Cygwin environment" >&5
+echo "configure:2174: checking for Cygwin environment" >&5
 if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1611 "configure"
+#line 2179 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -1618,7 +2186,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:1622: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2190: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -1635,19 +2203,19 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1639: checking for mingw32 environment" >&5
+echo "configure:2207: checking for mingw32 environment" >&5
 if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 1644 "configure"
+#line 2212 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:1651: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2219: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -1679,7 +2247,7 @@ esac
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1683: checking for executable suffix" >&5
+echo "configure:2251: checking for executable suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1689,7 +2257,7 @@ else
   rm -f conftest*
   echo 'int main () { return 0; }' > conftest.$ac_ext
   ac_cv_exeext=
-  if { (eval echo configure:1693: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
+  if { (eval echo configure:2261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then
     for file in conftest.*; do
       case $file in
       *.c | *.o | *.obj) ;;
@@ -1710,13 +2278,13 @@ echo "$ac_t""${ac_cv_exeext}" 1>&6
 ac_exeext=$EXEEXT
 
 echo $ac_n "checking for object suffix""... $ac_c" 1>&6
-echo "configure:1714: checking for object suffix" >&5
+echo "configure:2282: checking for object suffix" >&5
 if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   rm -f conftest*
 echo 'int i = 1;' > conftest.$ac_ext
-if { (eval echo configure:1720: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:2288: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   for ac_file in conftest.*; do
     case $ac_file in
     *.c) ;;
@@ -1751,7 +2319,7 @@ LIB_PREFIX=$LIB_PREFIX
 	
 
 echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1755: checking whether ln -s works" >&5
+echo "configure:2323: checking whether ln -s works" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1795,7 +2363,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1799: checking for $ac_word" >&5
+echo "configure:2367: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1866,6 +2434,12 @@ fi
 	# this assumes we're on Unix.
 	BUILD_EXEEXT=
 	BUILD_OBJEXT=o
+
+	if ( test "$BUILD_CC" = "$CC" || test "$BUILD_CC" = '$(CC)' ) ; then
+		{ echo "configure: error: Cross-build requires two compilers.
+Use --with-build-cc to specify the native compiler." 1>&2; exit 1; }
+	fi
+
 else
 	: ${BUILD_CC:='$(CC)'}
 	: ${BUILD_CPP:='$(CPP)'}
@@ -1888,7 +2462,7 @@ fi
 
 
 echo $ac_n "checking build system type""... $ac_c" 1>&6
-echo "configure:1892: checking build system type" >&5
+echo "configure:2466: checking build system type" >&5
 
 build_alias=$build
 case "$build_alias" in
@@ -1914,7 +2488,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1918: checking for $ac_word" >&5
+echo "configure:2492: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1946,7 +2520,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1950: checking for $ac_word" >&5
+echo "configure:2524: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -1981,7 +2555,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ld", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ld; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1985: checking for $ac_word" >&5
+echo "configure:2559: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2013,7 +2587,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ld", so it can be a program name with args.
 set dummy ld; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2017: checking for $ac_word" >&5
+echo "configure:2591: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_LD'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2048,7 +2622,7 @@ fi
 # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
 set dummy ${ac_tool_prefix}ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2052: checking for $ac_word" >&5
+echo "configure:2626: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2080,7 +2654,7 @@ if test -n "$ac_tool_prefix"; then
   # Extract the first word of "ar", so it can be a program name with args.
 set dummy ar; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2084: checking for $ac_word" >&5
+echo "configure:2658: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2117,7 +2691,7 @@ if eval "test \"`echo '$''{'cf_cv_subst_
 else
   
 echo $ac_n "checking for archiver options (symbol AR_OPTS)""... $ac_c" 1>&6
-echo "configure:2121: checking for archiver options (symbol AR_OPTS)" >&5
+echo "configure:2695: checking for archiver options (symbol AR_OPTS)" >&5
 test -z "$AR_OPTS" && AR_OPTS=rv
 echo "$ac_t""$AR_OPTS" 1>&6
 
@@ -2163,7 +2737,7 @@ if test "${with_ispell+set}" = set; then
   *)
    # user supplied option-value for "--with-ispell=path"
    echo $ac_n "checking for ispell""... $ac_c" 1>&6
-echo "configure:2167: checking for ispell" >&5
+echo "configure:2741: checking for ispell" >&5
    ac_cv_path_PATH_ISPELL="$withval"
    cat >> confdefs.h <<EOF
 #define PATH_ISPELL "$withval"
@@ -2180,7 +2754,7 @@ else
   # Extract the first word of "ispell", so it can be a program name with args.
 set dummy ispell; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2184: checking for $ac_word" >&5
+echo "configure:2758: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PATH_ISPELL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2237,7 +2811,7 @@ if test "${with_metamail+set}" = set; th
   *)
    # user supplied option-value for "--with-metamail=path"
    echo $ac_n "checking for metamail""... $ac_c" 1>&6
-echo "configure:2241: checking for metamail" >&5
+echo "configure:2815: checking for metamail" >&5
    ac_cv_path_PATH_METAMAIL="$withval"
    cat >> confdefs.h <<EOF
 #define PATH_METAMAIL "$withval"
@@ -2254,7 +2828,7 @@ else
   # Extract the first word of "metamail", so it can be a program name with args.
 set dummy metamail; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2258: checking for $ac_word" >&5
+echo "configure:2832: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PATH_METAMAIL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2311,7 +2885,7 @@ if test "${with_sum+set}" = set; then
   *)
    # user supplied option-value for "--with-sum=path"
    echo $ac_n "checking for sum""... $ac_c" 1>&6
-echo "configure:2315: checking for sum" >&5
+echo "configure:2889: checking for sum" >&5
    ac_cv_path_PATH_SUM="$withval"
    cat >> confdefs.h <<EOF
 #define PATH_SUM "$withval"
@@ -2328,7 +2902,7 @@ else
   # Extract the first word of "sum", so it can be a program name with args.
 set dummy sum; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2332: checking for $ac_word" >&5
+echo "configure:2906: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PATH_SUM'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2375,12 +2949,12 @@ fi
 if test $ac_cv_path_PATH_SUM
 then
 echo $ac_n "checking if $ac_cv_path_PATH_SUM takes -r""... $ac_c" 1>&6
-echo "configure:2379: checking if $ac_cv_path_PATH_SUM takes -r" >&5
+echo "configure:2953: checking if $ac_cv_path_PATH_SUM takes -r" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_sum_r'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
-if { ac_try='$ac_cv_path_PATH_SUM -r config.log 1>&5'; { (eval echo configure:2384: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
+if { ac_try='$ac_cv_path_PATH_SUM -r config.log 1>&5'; { (eval echo configure:2958: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; }
 then
 	ac_cv_prog_sum_r=yes
 else
@@ -2410,7 +2984,7 @@ fi
 
 
 echo $ac_n "checking for default editor""... $ac_c" 1>&6
-echo "configure:2414: checking for default editor" >&5
+echo "configure:2988: checking for default editor" >&5
 
 # Check whether --with-editor or --without-editor was given.
 if test "${with_editor+set}" = set; then
@@ -2438,7 +3012,7 @@ if test -z "$DEFAULT_EDITOR" ; then
 	# Extract the first word of "vi", so it can be a program name with args.
 set dummy vi; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2442: checking for $ac_word" >&5
+echo "configure:3016: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_DEFAULT_EDITOR'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2483,7 +3057,7 @@ EOF
 # Extract the first word of "sendmail", so it can be a program name with args.
 set dummy sendmail; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2487: checking for $ac_word" >&5
+echo "configure:3061: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_DEFAULT_MAILER'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2537,7 +3111,7 @@ if test -z "$DEFAULT_MAILER" ; then
 # Extract the first word of "mailx", so it can be a program name with args.
 set dummy mailx; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2541: checking for $ac_word" >&5
+echo "configure:3115: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_DEFAULT_MAILER'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2574,7 +3148,7 @@ if test -z "$DEFAULT_MAILER" ; then
 # Extract the first word of "mail", so it can be a program name with args.
 set dummy mail; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2578: checking for $ac_word" >&5
+echo "configure:3152: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_DEFAULT_MAILER'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2608,7 +3182,7 @@ fi
 
 fi
 echo $ac_n "checking for default mailer""... $ac_c" 1>&6
-echo "configure:2612: checking for default mailer" >&5
+echo "configure:3186: checking for default mailer" >&5
 if test -n "$DEFAULT_MAILER" ; then
 	
 case $cf_cv_system_name in #(vi
@@ -2635,7 +3209,7 @@ echo "$ac_t""$DEFAULT_MAILER" 1>&6
 
 
 echo $ac_n "checking for incoming-mail directory""... $ac_c" 1>&6
-echo "configure:2639: checking for incoming-mail directory" >&5
+echo "configure:3213: checking for incoming-mail directory" >&5
 
 # Check whether --with-mailbox or --without-mailbox was given.
 if test "${with_mailbox+set}" = set; then
@@ -2681,7 +3255,7 @@ echo "$ac_t""$DEFAULT_MAILBOX" 1>&6
 
 ## PGP Support
 echo $ac_n "checking if you want PGP/GPG-Support""... $ac_c" 1>&6
-echo "configure:2685: checking if you want PGP/GPG-Support" >&5
+echo "configure:3259: checking if you want PGP/GPG-Support" >&5
 
 # Check whether --enable-pgp-gpg or --disable-pgp-gpg was given.
 if test "${enable_pgp_gpg+set}" = set; then
@@ -2713,7 +3287,7 @@ if test "${with_pgp+set}" = set; then
   *)
    # user supplied option-value for "--with-pgp=path"
    echo $ac_n "checking for pgp""... $ac_c" 1>&6
-echo "configure:2717: checking for pgp" >&5
+echo "configure:3291: checking for pgp" >&5
    ac_cv_path_PATH_PGP="$withval"
    cat >> confdefs.h <<EOF
 #define PATH_PGP "$withval"
@@ -2730,7 +3304,7 @@ else
   # Extract the first word of "pgp", so it can be a program name with args.
 set dummy pgp; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2734: checking for $ac_word" >&5
+echo "configure:3308: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PATH_PGP'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2788,7 +3362,7 @@ if test "${with_pgpk+set}" = set; then
   *)
    # user supplied option-value for "--with-pgpk=path"
    echo $ac_n "checking for pgpk""... $ac_c" 1>&6
-echo "configure:2792: checking for pgpk" >&5
+echo "configure:3366: checking for pgpk" >&5
    ac_cv_path_PATH_PGPK="$withval"
    cat >> confdefs.h <<EOF
 #define PATH_PGPK "$withval"
@@ -2805,7 +3379,7 @@ else
   # Extract the first word of "pgpk", so it can be a program name with args.
 set dummy pgpk; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2809: checking for $ac_word" >&5
+echo "configure:3383: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PATH_PGPK'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2863,7 +3437,7 @@ if test "${with_gpg+set}" = set; then
   *)
    # user supplied option-value for "--with-gpg=path"
    echo $ac_n "checking for gpg""... $ac_c" 1>&6
-echo "configure:2867: checking for gpg" >&5
+echo "configure:3441: checking for gpg" >&5
    ac_cv_path_PATH_GPG="$withval"
    cat >> confdefs.h <<EOF
 #define PATH_GPG "$withval"
@@ -2880,7 +3454,7 @@ else
   # Extract the first word of "gpg", so it can be a program name with args.
 set dummy gpg; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2884: checking for $ac_word" >&5
+echo "configure:3458: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_PATH_GPG'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -2937,13 +3511,13 @@ fi
 
 
 echo $ac_n "checking for the default shell program""... $ac_c" 1>&6
-echo "configure:2941: checking for the default shell program" >&5
+echo "configure:3515: checking for the default shell program" >&5
 cf_shell_progs="$cf_cv_default_shell"
 if test -z "$cf_shell_progs" ; then
 	cf_shell_progs="sh ksh bash zsh pdksh jsh keysh ash dash"
 	# TIN preferred default shell for BSD systems is csh. Others are sh.
 	cat > conftest.$ac_ext <<EOF
-#line 2947 "configure"
+#line 3521 "configure"
 #include "confdefs.h"
 
 #include <sys/params.h>
@@ -2956,7 +3530,7 @@ make an error
 
 ; return 0; }
 EOF
-if { (eval echo configure:2960: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3534: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   $cf_shell_progs="csh tcsh $cf_shell_progs"
 else
@@ -2966,11 +3540,11 @@ fi
 rm -f conftest*
 fi
 
-echo "(line 2970) testing paths of shell programs: $cf_shell_progs ..." 1>&5
+echo "(line 3544) testing paths of shell programs: $cf_shell_progs ..." 1>&5
 
 if test -s /etc/shells && test `egrep -c -v '^(#| |    |$)' /etc/shells` -gt 0; then
 	
-echo "(line 2974) testing /etc/shells ..." 1>&5
+echo "(line 3548) testing /etc/shells ..." 1>&5
 
 	for cf_prog in $cf_shell_progs
 	do
@@ -3005,14 +3579,14 @@ echo "(line 2974) testing /etc/shells ..
 	echo "$ac_t""$DEFAULT_SHELL" 1>&6
 else
 	
-echo "(line 3009) testing $PATH ..." 1>&5
+echo "(line 3583) testing $PATH ..." 1>&5
 
 for ac_prog in $cf_shell_progs
 do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3016: checking for $ac_word" >&5
+echo "configure:3590: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_DEFAULT_SHELL'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3065,7 +3639,7 @@ EOF
 
 ### check for this early, since it'll override several options
 echo $ac_n "checking if NNTP-support will be used""... $ac_c" 1>&6
-echo "configure:3069: checking if NNTP-support will be used" >&5
+echo "configure:3643: checking if NNTP-support will be used" >&5
 
 # Check whether --enable-nntp or --disable-nntp was given.
 if test "${enable_nntp+set}" = set; then
@@ -3087,7 +3661,7 @@ echo "$ac_t""$enableval" 1>&6
 USE_SPOOLDIR=yes
 if test "$USE_NNTP" = "yes" ; then
 echo $ac_n "checking whether to be NNTP_ONLY""... $ac_c" 1>&6
-echo "configure:3091: checking whether to be NNTP_ONLY" >&5
+echo "configure:3665: checking whether to be NNTP_ONLY" >&5
 
 # Check whether --enable-nntp-only or --disable-nntp-only was given.
 if test "${enable_nntp_only+set}" = set; then
@@ -3119,7 +3693,7 @@ fi
 
 ###	use option --enable-debug to compile-in test/development code
 echo $ac_n "checking if you want to compile-in debug support""... $ac_c" 1>&6
-echo "configure:3123: checking if you want to compile-in debug support" >&5
+echo "configure:3697: checking if you want to compile-in debug support" >&5
 
 # Check whether --enable-debug or --disable-debug was given.
 if test "${enable_debug+set}" = set; then
@@ -3146,7 +3720,7 @@ echo "$ac_t""$enableval" 1>&6
 ###	use option --disable-echo to suppress full display compiling commands
 
 echo $ac_n "checking if you want to see long compiling messages""... $ac_c" 1>&6
-echo "configure:3150: checking if you want to see long compiling messages" >&5
+echo "configure:3724: checking if you want to see long compiling messages" >&5
 
 # Check whether --enable-echo or --disable-echo was given.
 if test "${enable_echo+set}" = set; then
@@ -3191,7 +3765,7 @@ echo "$ac_t""$enableval" 1>&6
 
 ### use option --enable-prototypes to turn on optional prototypes
 echo $ac_n "checking if you want to compile with fallback prototypes""... $ac_c" 1>&6
-echo "configure:3195: checking if you want to compile with fallback prototypes" >&5
+echo "configure:3769: checking if you want to compile with fallback prototypes" >&5
 
 # Check whether --enable-prototypes or --disable-prototypes was given.
 if test "${enable_prototypes+set}" = set; then
@@ -3215,7 +3789,7 @@ EXTRA_CFLAGS=""
 if test -n "$GCC"
 then
 echo $ac_n "checking if you want to turn on gcc warnings""... $ac_c" 1>&6
-echo "configure:3219: checking if you want to turn on gcc warnings" >&5
+echo "configure:3793: checking if you want to turn on gcc warnings" >&5
 
 # Check whether --enable-warnings or --disable-warnings was given.
 if test "${enable_warnings+set}" = set; then
@@ -3241,7 +3815,7 @@ then
 GCC_VERSION=none
 if test "$GCC" = yes ; then
 	echo $ac_n "checking version of $CC""... $ac_c" 1>&6
-echo "configure:3245: checking version of $CC" >&5
+echo "configure:3819: checking version of $CC" >&5
 	GCC_VERSION="`${CC} --version|sed -e '2,$d' -e 's/^[^0-9.]*//' -e 's/[^0-9.].*//'`"
 	test -z "$GCC_VERSION" && GCC_VERSION=unknown
 	echo "$ac_t""$GCC_VERSION" 1>&6
@@ -3249,14 +3823,33 @@ fi
 
 
 
-if test "$GCC" = yes
+
+if test "$INTEL_COMPILER" = yes
+then
+# The "-wdXXX" options suppress warnings:
+# remark #1419: external declaration in primary source file
+# remark #193: zero used for undefined preprocessing identifier
+# remark #593: variable "curs_sb_left_arrow" was set but never used
+# remark #810: conversion from "int" to "Dimension={unsigned short}" may lose significant bits
+# remark #869: parameter "tw" was never referenced
+# remark #981: operands are evaluated in unspecified order
+# warning #269: invalid format string conversion
+	EXTRA_CFLAGS="$EXTRA_CFLAGS -Wall \
+ -wd1419 \
+ -wd193 \
+ -wd279 \
+ -wd593 \
+ -wd810 \
+ -wd869 \
+ -wd981"
+elif test "$GCC" = yes
 then
 	cat > conftest.$ac_ext <<EOF
-#line 3256 "configure"
+#line 3849 "configure"
 int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
 EOF
 	echo "checking for $CC warning options" 1>&6
-echo "configure:3260: checking for $CC warning options" >&5
+echo "configure:3853: checking for $CC warning options" >&5
 	cf_save_CFLAGS="$CFLAGS"
 	EXTRA_CFLAGS="-W -Wall"
 	cf_warn_CONST=""
@@ -3272,10 +3865,10 @@ echo "configure:3260: checking for $CC w
 		Wpointer-arith \
 		Wshadow \
 		Wstrict-prototypes \
-		Wundef $cf_warn_CONST
+		Wundef $cf_warn_CONST 
 	do
 		CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
-		if { (eval echo configure:3279: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+		if { (eval echo configure:3872: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
 			test -n "$verbose" && echo "$ac_t""... -$cf_opt" 1>&6
 			case $cf_opt in #(vi
 			Wcast-qual) #(vi
@@ -3305,7 +3898,7 @@ fi
 if test "$USE_SPOOLDIR" = "yes"; then
 	## options for directories
 	echo $ac_n "checking for news-library path""... $ac_c" 1>&6
-echo "configure:3309: checking for news-library path" >&5
+echo "configure:3902: checking for news-library path" >&5
 	
 # Check whether --with-libdir or --without-libdir was given.
 if test "${with_libdir+set}" = set; then
@@ -3343,7 +3936,7 @@ eval NEWSLIBDIR="$withval"
 	echo "$ac_t""$NEWSLIBDIR" 1>&6
 
 	echo $ac_n "checking for news spool-directory path""... $ac_c" 1>&6
-echo "configure:3347: checking for news spool-directory path" >&5
+echo "configure:3940: checking for news spool-directory path" >&5
 	
 # Check whether --with-spooldir or --without-spooldir was given.
 if test "${with_spooldir+set}" = set; then
@@ -3381,7 +3974,7 @@ eval SPOOLDIR="$withval"
 	echo "$ac_t""$SPOOLDIR" 1>&6
 
 	echo $ac_n "checking for news overview-directory path""... $ac_c" 1>&6
-echo "configure:3385: checking for news overview-directory path" >&5
+echo "configure:3978: checking for news overview-directory path" >&5
 	
 # Check whether --with-nov-dir or --without-nov-dir was given.
 if test "${with_nov_dir+set}" = set; then
@@ -3419,7 +4012,7 @@ eval NOVROOTDIR="$withval"
 	echo "$ac_t""$NOVROOTDIR" 1>&6
 
 	echo $ac_n "checking for overview filename""... $ac_c" 1>&6
-echo "configure:3423: checking for overview filename" >&5
+echo "configure:4016: checking for overview filename" >&5
 	
 # Check whether --with-nov-fname or --without-nov-fname was given.
 if test "${with_nov_fname+set}" = set; then
@@ -3455,7 +4048,7 @@ fi
 ## TODO: kick the --with-inews-dir= stuff, the check below should be enough
 ## (requires some code rework in tin)
 echo $ac_n "checking for directory containing \"inews\"""... $ac_c" 1>&6
-echo "configure:3459: checking for directory containing \"inews\"" >&5
+echo "configure:4052: checking for directory containing \"inews\"" >&5
 
 # Check whether --with-inews-dir or --without-inews-dir was given.
 if test "${with_inews_dir+set}" = set; then
@@ -3496,7 +4089,7 @@ echo "$ac_t""$INEWSDIR" 1>&6
 # Extract the first word of "inews", so it can be a program name with args.
 set dummy inews; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:3500: checking for $ac_word" >&5
+echo "configure:4093: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_INEWS'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3553,7 +4146,7 @@ fi
 if test "$USE_SPOOLDIR" = "yes"; then
 	## options for libraries
 	echo $ac_n "checking for optional INN-NNTP library""... $ac_c" 1>&6
-echo "configure:3557: checking for optional INN-NNTP library" >&5
+echo "configure:4150: checking for optional INN-NNTP library" >&5
 	
 # Check whether --with-inn-nntplib or --without-inn-nntplib was given.
 if test "${with_inn_nntplib+set}" = set; then
@@ -3585,7 +4178,7 @@ fi
 ### Look for network libraries first, since some functions (such as gethostname)
 ### are used in a lot of places.
 echo $ac_n "checking if you want socks library""... $ac_c" 1>&6
-echo "configure:3589: checking if you want socks library" >&5
+echo "configure:4182: checking if you want socks library" >&5
 if eval "test \"`echo '$''{'cf_cv_use_libsocks'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3605,7 +4198,7 @@ fi
 echo "$ac_t""$cf_cv_use_libsocks" 1>&6
 
 echo $ac_n "checking if you want socks5 library""... $ac_c" 1>&6
-echo "configure:3609: checking if you want socks5 library" >&5
+echo "configure:4202: checking if you want socks5 library" >&5
 if eval "test \"`echo '$''{'cf_cv_use_libsocks5'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3681,7 +4274,7 @@ cat >> confdefs.h <<\EOF
 EOF
 
 cat > conftest.$ac_ext <<EOF
-#line 3685 "configure"
+#line 4278 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -3690,7 +4283,7 @@ int main() {
 	accept((char *)0)
 ; return 0; }
 EOF
-if { (eval echo configure:3694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -3704,7 +4297,7 @@ else
 	
 cf_test_netlibs=no
 echo $ac_n "checking for network libraries""... $ac_c" 1>&6
-echo "configure:3708: checking for network libraries" >&5
+echo "configure:4301: checking for network libraries" >&5
 if eval "test \"`echo '$''{'cf_cv_netlibs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -3715,12 +4308,12 @@ cf_test_netlibs=yes
 for ac_func in gethostname
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3719: checking for $ac_func" >&5
+echo "configure:4312: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3724 "configure"
+#line 4317 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3743,7 +4336,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3747: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3766,7 +4359,7 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6
-echo "configure:3770: checking for gethostname in -lnsl" >&5
+echo "configure:4363: checking for gethostname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3774,7 +4367,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl $cf_cv_netlibs $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3778 "configure"
+#line 4371 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3785,7 +4378,7 @@ int main() {
 gethostname()
 ; return 0; }
 EOF
-if { (eval echo configure:3789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4382: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3818,7 +4411,7 @@ else
 	
 		
 echo $ac_n "checking for gethostname in -lsocket""... $ac_c" 1>&6
-echo "configure:3822: checking for gethostname in -lsocket" >&5
+echo "configure:4415: checking for gethostname in -lsocket" >&5
 ac_lib_var=`echo socket'_'gethostname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3826,7 +4419,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $cf_cv_netlibs $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3830 "configure"
+#line 4423 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3837,7 +4430,7 @@ int main() {
 gethostname()
 ; return 0; }
 EOF
-if { (eval echo configure:3841: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3882,7 +4475,7 @@ done
 # I don't know the entrypoints - 97/7/22 TD
 # AC_HAVE_LIBRARY(inet,cf_cv_netlibs="-linet $cf_cv_netlibs")
 echo $ac_n "checking for main in -linet""... $ac_c" 1>&6
-echo "configure:3886: checking for main in -linet" >&5
+echo "configure:4479: checking for main in -linet" >&5
 ac_lib_var=`echo inet'_'main | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3890,14 +4483,14 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-linet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3894 "configure"
+#line 4487 "configure"
 #include "confdefs.h"
 
 int main() {
 main()
 ; return 0; }
 EOF
-if { (eval echo configure:3901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4494: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3922,12 +4515,12 @@ if test "$ac_cv_func_lsocket" != no ; th
 for ac_func in socket
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3926: checking for $ac_func" >&5
+echo "configure:4519: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 3931 "configure"
+#line 4524 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3950,7 +4543,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4547: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3973,7 +4566,7 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:3977: checking for socket in -lsocket" >&5
+echo "configure:4570: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -3981,7 +4574,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $cf_cv_netlibs $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3985 "configure"
+#line 4578 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3992,7 +4585,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:3996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4025,7 +4618,7 @@ else
 	
 		
 echo $ac_n "checking for socket in -lbsd""... $ac_c" 1>&6
-echo "configure:4029: checking for socket in -lbsd" >&5
+echo "configure:4622: checking for socket in -lbsd" >&5
 ac_lib_var=`echo bsd'_'socket | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4033,7 +4626,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbsd $cf_cv_netlibs $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4037 "configure"
+#line 4630 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4044,7 +4637,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:4048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4089,12 +4682,12 @@ fi
 for ac_func in gethostbyname
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4093: checking for $ac_func" >&5
+echo "configure:4686: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4098 "configure"
+#line 4691 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4117,7 +4710,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4121: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4714: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4140,7 +4733,7 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:4144: checking for gethostbyname in -lnsl" >&5
+echo "configure:4737: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4148,7 +4741,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl $cf_cv_netlibs $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4152 "configure"
+#line 4745 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4159,7 +4752,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:4163: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4756: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4200,12 +4793,12 @@ done
 for ac_func in strcasecmp
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4204: checking for $ac_func" >&5
+echo "configure:4797: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4209 "configure"
+#line 4802 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4228,7 +4821,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4232: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4251,7 +4844,7 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for strcasecmp in -lresolv""... $ac_c" 1>&6
-echo "configure:4255: checking for strcasecmp in -lresolv" >&5
+echo "configure:4848: checking for strcasecmp in -lresolv" >&5
 ac_lib_var=`echo resolv'_'strcasecmp | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -4259,7 +4852,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lresolv $cf_cv_netlibs $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4263 "configure"
+#line 4856 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4270,7 +4863,7 @@ int main() {
 strcasecmp()
 ; return 0; }
 EOF
-if { (eval echo configure:4274: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4867: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4342,10 +4935,10 @@ cat >> confdefs.h <<\EOF
 EOF
 
 echo $ac_n "checking if the socks library uses socks4 prefix""... $ac_c" 1>&6
-echo "configure:4346: checking if the socks library uses socks4 prefix" >&5
+echo "configure:4939: checking if the socks library uses socks4 prefix" >&5
 cf_use_socks4=error
 cat > conftest.$ac_ext <<EOF
-#line 4349 "configure"
+#line 4942 "configure"
 #include "confdefs.h"
 
 #include <socks.h>
@@ -4354,7 +4947,7 @@ int main() {
 	Rinit((char *)0)
 ; return 0; }
 EOF
-if { (eval echo configure:4358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cat >> confdefs.h <<\EOF
 #define USE_SOCKS4_PREFIX 1
@@ -4366,14 +4959,14 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 4370 "configure"
+#line 4963 "configure"
 #include "confdefs.h"
 #include <socks.h>
 int main() {
 SOCKSinit((char *)0)
 ; return 0; }
 EOF
-if { (eval echo configure:4377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4970: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_use_socks4=no
 else
@@ -4438,9 +5031,9 @@ EOF
 
 fi
 echo $ac_n "checking if socks5p.h is available""... $ac_c" 1>&6
-echo "configure:4442: checking if socks5p.h is available" >&5
+echo "configure:5035: checking if socks5p.h is available" >&5
 cat > conftest.$ac_ext <<EOF
-#line 4444 "configure"
+#line 5037 "configure"
 #include "confdefs.h"
 
 #define INCLUDE_PROTOTYPES
@@ -4450,7 +5043,7 @@ int main() {
 	init((char *)0)
 ; return 0; }
 EOF
-if { (eval echo configure:4454: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5047: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_use_socks5p_h=yes
 else
@@ -4476,17 +5069,17 @@ for ac_hdr in unistd.h fcntl.h sys/file.
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4480: checking for $ac_hdr" >&5
+echo "configure:5073: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4485 "configure"
+#line 5078 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4490: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5083: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -4513,12 +5106,12 @@ fi
 done
 
 echo $ac_n "checking for fcntl""... $ac_c" 1>&6
-echo "configure:4517: checking for fcntl" >&5
+echo "configure:5110: checking for fcntl" >&5
 if eval "test \"`echo '$''{'ac_cv_func_fcntl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4522 "configure"
+#line 5115 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char fcntl(); below.  */
@@ -4541,7 +5134,7 @@ fcntl();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4545: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_fcntl=yes"
 else
@@ -4561,12 +5154,12 @@ else
 fi
 
 echo $ac_n "checking for lockf""... $ac_c" 1>&6
-echo "configure:4565: checking for lockf" >&5
+echo "configure:5158: checking for lockf" >&5
 if eval "test \"`echo '$''{'ac_cv_func_lockf'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4570 "configure"
+#line 5163 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char lockf(); below.  */
@@ -4589,7 +5182,7 @@ lockf();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5186: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_lockf=yes"
 else
@@ -4609,12 +5202,12 @@ else
 fi
 
 echo $ac_n "checking for flock""... $ac_c" 1>&6
-echo "configure:4613: checking for flock" >&5
+echo "configure:5206: checking for flock" >&5
 if eval "test \"`echo '$''{'ac_cv_func_flock'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 4618 "configure"
+#line 5211 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char flock(); below.  */
@@ -4637,7 +5230,7 @@ flock();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5234: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_flock=yes"
 else
@@ -4658,7 +5251,7 @@ fi
 
 
 echo $ac_n "checking for file-locking functions""... $ac_c" 1>&6
-echo "configure:4662: checking for file-locking functions" >&5
+echo "configure:5255: checking for file-locking functions" >&5
 if eval "test \"`echo '$''{'cf_cv_lockfile'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4670,7 +5263,7 @@ if eval 'test ${ac_cv_func_'$cf_lock'+se
 	case $cf_lock in #(vi
 	fcntl) #(vi
 		cat > conftest.$ac_ext <<EOF
-#line 4674 "configure"
+#line 5267 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4698,7 +5291,7 @@ int main() {
 	
 ; return 0; }
 EOF
-if { (eval echo configure:4702: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5295: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -4710,7 +5303,7 @@ rm -f conftest*
 		;;
 	lockf) #(vi
 		cat > conftest.$ac_ext <<EOF
-#line 4714 "configure"
+#line 5307 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4730,7 +5323,7 @@ int main() {
 	
 ; return 0; }
 EOF
-if { (eval echo configure:4734: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -4742,7 +5335,7 @@ rm -f conftest*
 		;;
 	flock)
 		cat > conftest.$ac_ext <<EOF
-#line 4746 "configure"
+#line 5339 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -4765,7 +5358,7 @@ int main() {
 	
 ; return 0; }
 EOF
-if { (eval echo configure:4769: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5362: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -4786,7 +5379,7 @@ echo "$ac_t""$cf_cv_lockfile" 1>&6
 
 
 echo $ac_n "checking which locking method should be used""... $ac_c" 1>&6
-echo "configure:4790: checking which locking method should be used" >&5
+echo "configure:5383: checking which locking method should be used" >&5
 ### fcntl() is preferred, if the user just disables fcntl()
 ### without specifying an alternative lockf() is preferred
 
@@ -4855,7 +5448,7 @@ fi
 
 
 echo $ac_n "checking for screen type""... $ac_c" 1>&6
-echo "configure:4859: checking for screen type" >&5
+echo "configure:5452: checking for screen type" >&5
 
 # Check whether --with-screen or --without-screen was given.
 if test "${with_screen+set}" = set; then
@@ -4871,7 +5464,7 @@ use_curses=no
 use_ncurses=no
 
 echo $ac_n "checking if you specified curses install-directory""... $ac_c" 1>&6
-echo "configure:4875: checking if you specified curses install-directory" >&5
+echo "configure:5468: checking if you specified curses install-directory" >&5
 
 
 # Check whether --with-curses-dir or --without-curses-dir was given.
@@ -4928,7 +5521,7 @@ pdcurses) #(vi
 	;;
 none)
 	echo $ac_n "checking if you want to use ncurses library""... $ac_c" 1>&6
-echo "configure:4932: checking if you want to use ncurses library" >&5
+echo "configure:5525: checking if you want to use ncurses library" >&5
 	
 # Check whether --with-ncurses or --without-ncurses was given.
 if test "${with_ncurses+set}" = set; then
@@ -4941,7 +5534,7 @@ fi
 	echo "$ac_t""$use_ncurses" 1>&6
 
 	echo $ac_n "checking if you want curses rather than termcap interface""... $ac_c" 1>&6
-echo "configure:4945: checking if you want curses rather than termcap interface" >&5
+echo "configure:5538: checking if you want curses rather than termcap interface" >&5
 	
 # Check whether --enable-curses or --disable-curses was given.
 if test "${enable_curses+set}" = set; then
@@ -4978,7 +5571,7 @@ test "$cf_cv_curses_dir" != "no" && \
 CPPFLAGS="-I$cf_cv_curses_dir/include -I$cf_cv_curses_dir/include/$cf_ncuhdr_root $CPPFLAGS"
 
 echo $ac_n "checking for $cf_ncuhdr_root header in include-path""... $ac_c" 1>&6
-echo "configure:4982: checking for $cf_ncuhdr_root header in include-path" >&5
+echo "configure:5575: checking for $cf_ncuhdr_root header in include-path" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -4989,7 +5582,7 @@ else
 	do
 		
 	cat > conftest.$ac_ext <<EOF
-#line 4993 "configure"
+#line 5586 "configure"
 #include "confdefs.h"
 
 
@@ -5010,7 +5603,7 @@ printf("old\n");
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5014: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5607: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ncurses_h=$cf_header
 	
@@ -5033,7 +5626,7 @@ if test "$cf_cv_ncurses_h" != no ; then
 	cf_cv_ncurses_header=$cf_cv_ncurses_h
 else
 echo $ac_n "checking for $cf_ncuhdr_root include-path""... $ac_c" 1>&6
-echo "configure:5037: checking for $cf_ncuhdr_root include-path" >&5
+echo "configure:5630: checking for $cf_ncuhdr_root include-path" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_h2'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5128,14 +5721,14 @@ do
 				cf_save_CPPFLAGS="$CPPFLAGS"
 				CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
 				cat > conftest.$ac_ext <<EOF
-#line 5132 "configure"
+#line 5725 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello")
 ; return 0; }
 EOF
-if { (eval echo configure:5139: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5732: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -5162,7 +5755,7 @@ done
 		do
 			
 	cat > conftest.$ac_ext <<EOF
-#line 5166 "configure"
+#line 5759 "configure"
 #include "confdefs.h"
 
 
@@ -5183,7 +5776,7 @@ printf("old\n");
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5187: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5780: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ncurses_h2=$cf_header
 	
@@ -5230,14 +5823,14 @@ do
 				cf_save_CPPFLAGS="$CPPFLAGS"
 				CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
 				cat > conftest.$ac_ext <<EOF
-#line 5234 "configure"
+#line 5827 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello")
 ; return 0; }
 EOF
-if { (eval echo configure:5241: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5834: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -5292,7 +5885,7 @@ esac
 
 
 echo $ac_n "checking for ncurses version""... $ac_c" 1>&6
-echo "configure:5296: checking for ncurses version" >&5
+echo "configure:5889: checking for ncurses version" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5318,7 +5911,7 @@ Autoconf "old"
 #endif
 EOF
 	cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
-	{ (eval echo configure:5322: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
+	{ (eval echo configure:5915: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
 	if test -f conftest.out ; then
 		cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'`
 		test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
@@ -5327,7 +5920,7 @@ EOF
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 5331 "configure"
+#line 5924 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -5351,7 +5944,7 @@ int main()
 	exit(0);
 }
 EOF
-if { (eval echo configure:5355: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
 	cf_cv_ncurses_version=`cat $cf_tempfile`
@@ -5382,7 +5975,7 @@ cf_nculib_root=ncurses
 cf_ncurses_LIBS=""
 cf_ncurses_SAVE="$LIBS"
 echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
-echo "configure:5386: checking for Gpm_Open in -lgpm" >&5
+echo "configure:5979: checking for Gpm_Open in -lgpm" >&5
 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5390,7 +5983,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgpm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5394 "configure"
+#line 5987 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5401,7 +5994,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:5405: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5417,7 +6010,7 @@ fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for initscr in -lgpm""... $ac_c" 1>&6
-echo "configure:5421: checking for initscr in -lgpm" >&5
+echo "configure:6014: checking for initscr in -lgpm" >&5
 ac_lib_var=`echo gpm'_'initscr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5425,7 +6018,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgpm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5429 "configure"
+#line 6022 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5436,7 +6029,7 @@ int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:5440: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5466,8 +6059,9 @@ case $host_os in #(vi
 freebsd*)
 	# This is only necessary if you are linking against an obsolete
 	# version of ncurses (but it should do no harm, since it's static).
-	echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
-echo "configure:5471: checking for tgoto in -lmytinfo" >&5
+	if test "$cf_nculib_root" = ncurses ; then
+		echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
+echo "configure:6065: checking for tgoto in -lmytinfo" >&5
 ac_lib_var=`echo mytinfo'_'tgoto | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -5475,7 +6069,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmytinfo  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5479 "configure"
+#line 6073 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5486,7 +6080,7 @@ int main() {
 tgoto()
 ; return 0; }
 EOF
-if { (eval echo configure:5490: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6084: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5506,6 +6100,7 @@ else
   echo "$ac_t""no" 1>&6
 fi
 
+	fi
 	;;
 esac
 
@@ -5519,12 +6114,12 @@ else
 	eval 'cf_cv_have_lib_'$cf_nculib_root'=no'
 	cf_libdir=""
 	echo $ac_n "checking for initscr""... $ac_c" 1>&6
-echo "configure:5523: checking for initscr" >&5
+echo "configure:6118: checking for initscr" >&5
 if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5528 "configure"
+#line 6123 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char initscr(); below.  */
@@ -5547,7 +6142,7 @@ initscr();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_initscr=yes"
 else
@@ -5567,17 +6162,17 @@ else
 
 		cf_save_LIBS="$LIBS"
 		echo $ac_n "checking for initscr in -l$cf_nculib_root""... $ac_c" 1>&6
-echo "configure:5571: checking for initscr in -l$cf_nculib_root" >&5
+echo "configure:6166: checking for initscr in -l$cf_nculib_root" >&5
 		LIBS="-l$cf_nculib_root $LIBS"
 		cat > conftest.$ac_ext <<EOF
-#line 5574 "configure"
+#line 6169 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:5581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6176: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes'
@@ -5646,17 +6241,17 @@ test -d /usr && {
 			for cf_libdir in $cf_search
 			do
 				echo $ac_n "checking for -l$cf_nculib_root in $cf_libdir""... $ac_c" 1>&6
-echo "configure:5650: checking for -l$cf_nculib_root in $cf_libdir" >&5
+echo "configure:6245: checking for -l$cf_nculib_root in $cf_libdir" >&5
 				LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS"
 				cat > conftest.$ac_ext <<EOF
-#line 5653 "configure"
+#line 6248 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:5660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 		 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes'
@@ -5687,7 +6282,7 @@ fi
 
 if test -n "$cf_ncurses_LIBS" ; then
 	echo $ac_n "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS""... $ac_c" 1>&6
-echo "configure:5691: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5
+echo "configure:6286: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5
 	cf_ncurses_SAVE="$LIBS"
 	for p in $cf_ncurses_LIBS ; do
 		q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"`
@@ -5696,14 +6291,14 @@ echo "configure:5691: checking if we can
 		fi
 	done
 	cat > conftest.$ac_ext <<EOF
-#line 5700 "configure"
+#line 6295 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:5707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6302: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 else
@@ -5730,9 +6325,9 @@ EOF
 for cf_hdr in stdlib.h wchar.h wctype.h
 do
 	echo $ac_n "checking for $cf_hdr""... $ac_c" 1>&6
-echo "configure:5734: checking for $cf_hdr" >&5
+echo "configure:6329: checking for $cf_hdr" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 5736 "configure"
+#line 6331 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -5740,7 +6335,7 @@ echo "configure:5734: checking for $cf_h
 
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5744: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6339: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5767,12 +6362,12 @@ done
 
 		
   echo $ac_n "checking for wide char and multibyte support""... $ac_c" 1>&6
-echo "configure:5771: checking for wide char and multibyte support" >&5
+echo "configure:6366: checking for wide char and multibyte support" >&5
 if eval "test \"`echo '$''{'am_cv_multibyte_able'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 5776 "configure"
+#line 6371 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #ifdef HAVE_STDLIB_H
@@ -5808,7 +6403,7 @@ char icb[5] = {0xa4, 0xa4, 0xa4, 0xe5, 0
       wcsncat(wcb2, wcb, 5);
 ; return 0; }
 EOF
-if { (eval echo configure:5812: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_multibyte_able=yes
 else
@@ -5818,7 +6413,7 @@ else
   cf_save_LIBS="$LIBS"
       LIBS="-lutf8 $LIBS"
       cat > conftest.$ac_ext <<EOF
-#line 5822 "configure"
+#line 6417 "configure"
 #include "confdefs.h"
 #include <libutf8.h>
 int main() {
@@ -5844,7 +6439,7 @@ char icb[5] = {0xa4, 0xa4, 0xa4, 0xe5, 0
         wcsncat(wcb2, wcb, 5);
 ; return 0; }
 EOF
-if { (eval echo configure:5848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6443: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_multibyte_able=libutf8
 else
@@ -5885,7 +6480,7 @@ test "$cf_cv_curses_dir" != "no" && \
 CPPFLAGS="-I$cf_cv_curses_dir/include -I$cf_cv_curses_dir/include/$cf_ncuhdr_root $CPPFLAGS"
 
 echo $ac_n "checking for $cf_ncuhdr_root header in include-path""... $ac_c" 1>&6
-echo "configure:5889: checking for $cf_ncuhdr_root header in include-path" >&5
+echo "configure:6484: checking for $cf_ncuhdr_root header in include-path" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -5896,7 +6491,7 @@ else
 	do
 		
 	cat > conftest.$ac_ext <<EOF
-#line 5900 "configure"
+#line 6495 "configure"
 #include "confdefs.h"
 
 
@@ -5925,7 +6520,7 @@ printf("old\n");
 	
 ; return 0; }
 EOF
-if { (eval echo configure:5929: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6524: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ncurses_h=$cf_header
 	
@@ -5948,7 +6543,7 @@ if test "$cf_cv_ncurses_h" != no ; then
 	cf_cv_ncurses_header=$cf_cv_ncurses_h
 else
 echo $ac_n "checking for $cf_ncuhdr_root include-path""... $ac_c" 1>&6
-echo "configure:5952: checking for $cf_ncuhdr_root include-path" >&5
+echo "configure:6547: checking for $cf_ncuhdr_root include-path" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_h2'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6043,14 +6638,14 @@ do
 				cf_save_CPPFLAGS="$CPPFLAGS"
 				CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
 				cat > conftest.$ac_ext <<EOF
-#line 6047 "configure"
+#line 6642 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello")
 ; return 0; }
 EOF
-if { (eval echo configure:6054: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6649: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -6077,7 +6672,7 @@ done
 		do
 			
 	cat > conftest.$ac_ext <<EOF
-#line 6081 "configure"
+#line 6676 "configure"
 #include "confdefs.h"
 
 
@@ -6106,7 +6701,7 @@ printf("old\n");
 	
 ; return 0; }
 EOF
-if { (eval echo configure:6110: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6705: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ncurses_h2=$cf_header
 	
@@ -6153,14 +6748,14 @@ do
 				cf_save_CPPFLAGS="$CPPFLAGS"
 				CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
 				cat > conftest.$ac_ext <<EOF
-#line 6157 "configure"
+#line 6752 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello")
 ; return 0; }
 EOF
-if { (eval echo configure:6164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:6759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -6215,7 +6810,7 @@ esac
 
 
 echo $ac_n "checking for ncurses version""... $ac_c" 1>&6
-echo "configure:6219: checking for ncurses version" >&5
+echo "configure:6814: checking for ncurses version" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6241,7 +6836,7 @@ Autoconf "old"
 #endif
 EOF
 	cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
-	{ (eval echo configure:6245: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
+	{ (eval echo configure:6840: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
 	if test -f conftest.out ; then
 		cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'`
 		test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
@@ -6250,7 +6845,7 @@ EOF
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 6254 "configure"
+#line 6849 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -6274,7 +6869,7 @@ int main()
 	exit(0);
 }
 EOF
-if { (eval echo configure:6278: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:6873: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
 	cf_cv_ncurses_version=`cat $cf_tempfile`
@@ -6305,7 +6900,7 @@ cf_nculib_root=ncursesw
 cf_ncurses_LIBS=""
 cf_ncurses_SAVE="$LIBS"
 echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
-echo "configure:6309: checking for Gpm_Open in -lgpm" >&5
+echo "configure:6904: checking for Gpm_Open in -lgpm" >&5
 ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6313,7 +6908,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgpm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6317 "configure"
+#line 6912 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6324,7 +6919,7 @@ int main() {
 Gpm_Open()
 ; return 0; }
 EOF
-if { (eval echo configure:6328: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6923: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6340,7 +6935,7 @@ fi
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for initscr in -lgpm""... $ac_c" 1>&6
-echo "configure:6344: checking for initscr in -lgpm" >&5
+echo "configure:6939: checking for initscr in -lgpm" >&5
 ac_lib_var=`echo gpm'_'initscr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6348,7 +6943,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lgpm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6352 "configure"
+#line 6947 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6359,7 +6954,7 @@ int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:6363: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6958: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6389,8 +6984,9 @@ case $host_os in #(vi
 freebsd*)
 	# This is only necessary if you are linking against an obsolete
 	# version of ncurses (but it should do no harm, since it's static).
-	echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
-echo "configure:6394: checking for tgoto in -lmytinfo" >&5
+	if test "$cf_nculib_root" = ncurses ; then
+		echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
+echo "configure:6990: checking for tgoto in -lmytinfo" >&5
 ac_lib_var=`echo mytinfo'_'tgoto | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6398,7 +6994,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmytinfo  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6402 "configure"
+#line 6998 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6409,7 +7005,7 @@ int main() {
 tgoto()
 ; return 0; }
 EOF
-if { (eval echo configure:6413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7009: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6429,6 +7025,7 @@ else
   echo "$ac_t""no" 1>&6
 fi
 
+	fi
 	;;
 esac
 
@@ -6442,12 +7039,12 @@ else
 	eval 'cf_cv_have_lib_'$cf_nculib_root'=no'
 	cf_libdir=""
 	echo $ac_n "checking for initscr""... $ac_c" 1>&6
-echo "configure:6446: checking for initscr" >&5
+echo "configure:7043: checking for initscr" >&5
 if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6451 "configure"
+#line 7048 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char initscr(); below.  */
@@ -6470,7 +7067,7 @@ initscr();
 
 ; return 0; }
 EOF
-if { (eval echo configure:6474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7071: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_initscr=yes"
 else
@@ -6490,17 +7087,17 @@ else
 
 		cf_save_LIBS="$LIBS"
 		echo $ac_n "checking for initscr in -l$cf_nculib_root""... $ac_c" 1>&6
-echo "configure:6494: checking for initscr in -l$cf_nculib_root" >&5
+echo "configure:7091: checking for initscr in -l$cf_nculib_root" >&5
 		LIBS="-l$cf_nculib_root $LIBS"
 		cat > conftest.$ac_ext <<EOF
-#line 6497 "configure"
+#line 7094 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:6504: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7101: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes'
@@ -6569,17 +7166,17 @@ test -d /usr && {
 			for cf_libdir in $cf_search
 			do
 				echo $ac_n "checking for -l$cf_nculib_root in $cf_libdir""... $ac_c" 1>&6
-echo "configure:6573: checking for -l$cf_nculib_root in $cf_libdir" >&5
+echo "configure:7170: checking for -l$cf_nculib_root in $cf_libdir" >&5
 				LIBS="-L$cf_libdir -l$cf_nculib_root $cf_save_LIBS"
 				cat > conftest.$ac_ext <<EOF
-#line 6576 "configure"
+#line 7173 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:6583: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7180: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 		 eval 'cf_cv_have_lib_'$cf_nculib_root'=yes'
@@ -6610,7 +7207,7 @@ fi
 
 if test -n "$cf_ncurses_LIBS" ; then
 	echo $ac_n "checking if we can link $cf_nculib_root without $cf_ncurses_LIBS""... $ac_c" 1>&6
-echo "configure:6614: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5
+echo "configure:7211: checking if we can link $cf_nculib_root without $cf_ncurses_LIBS" >&5
 	cf_ncurses_SAVE="$LIBS"
 	for p in $cf_ncurses_LIBS ; do
 		q=`echo $LIBS | sed -e "s%$p %%" -e "s%$p$%%"`
@@ -6619,14 +7216,14 @@ echo "configure:6614: checking if we can
 		fi
 	done
 	cat > conftest.$ac_ext <<EOF
-#line 6623 "configure"
+#line 7220 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr(); mousemask(0,0); tgoto((char *)0, 0, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:6630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 else
@@ -6649,7 +7246,7 @@ EOF
 
 		
 echo $ac_n "checking for ncurses version""... $ac_c" 1>&6
-echo "configure:6653: checking for ncurses version" >&5
+echo "configure:7250: checking for ncurses version" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6675,7 +7272,7 @@ Autoconf "old"
 #endif
 EOF
 	cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
-	{ (eval echo configure:6679: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
+	{ (eval echo configure:7276: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
 	if test -f conftest.out ; then
 		cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'`
 		test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
@@ -6684,7 +7281,7 @@ EOF
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 6688 "configure"
+#line 7285 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -6708,7 +7305,7 @@ int main()
 	exit(0);
 }
 EOF
-if { (eval echo configure:6712: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7309: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
 	cf_cv_ncurses_version=`cat $cf_tempfile`
@@ -6731,13 +7328,13 @@ EOF
 
 		
 echo $ac_n "checking if we must define _XOPEN_SOURCE_EXTENDED""... $ac_c" 1>&6
-echo "configure:6735: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
+echo "configure:7332: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
 if eval "test \"`echo '$''{'cf_cv_need_xopen_extension'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 6741 "configure"
+#line 7338 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -6749,7 +7346,7 @@ int main() {
 	getbegyx(stdscr, y1, x1)
 ; return 0; }
 EOF
-if { (eval echo configure:6753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_need_xopen_extension=no
 else
@@ -6757,7 +7354,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 6761 "configure"
+#line 7358 "configure"
 #include "confdefs.h"
 
 #define _XOPEN_SOURCE_EXTENDED
@@ -6770,7 +7367,7 @@ int main() {
 	getbegyx(stdscr, y1, x1)
 ; return 0; }
 EOF
-if { (eval echo configure:6774: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7371: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_need_xopen_extension=yes
 else
@@ -6793,7 +7390,7 @@ test $cf_cv_need_xopen_extension = yes &
 		
 
 echo $ac_n "checking for extra include directories""... $ac_c" 1>&6
-echo "configure:6797: checking for extra include directories" >&5
+echo "configure:7394: checking for extra include directories" >&5
 if eval "test \"`echo '$''{'cf_cv_curses_incdir'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6817,7 +7414,7 @@ echo "$ac_t""$cf_cv_curses_incdir" 1>&6
 test "$cf_cv_curses_incdir" != no && CPPFLAGS="$cf_cv_curses_incdir $CPPFLAGS"
 
 echo $ac_n "checking if we have identified curses headers""... $ac_c" 1>&6
-echo "configure:6821: checking if we have identified curses headers" >&5
+echo "configure:7418: checking if we have identified curses headers" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_header'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -6830,14 +7427,14 @@ for cf_header in \
 	ncurses/ncurses.h
 do
 cat > conftest.$ac_ext <<EOF
-#line 6834 "configure"
+#line 7431 "configure"
 #include "confdefs.h"
 #include <${cf_header}>
 int main() {
 initscr(); tgoto("?", 0,0)
 ; return 0; }
 EOF
-if { (eval echo configure:6841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:7438: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ncurses_header=$cf_header; break
 else
@@ -6860,17 +7457,17 @@ for ac_hdr in $cf_cv_ncurses_header
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6864: checking for $ac_hdr" >&5
+echo "configure:7461: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 6869 "configure"
+#line 7466 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7471: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6901,16 +7498,16 @@ done
 		
 
 echo $ac_n "checking if we have identified curses libraries""... $ac_c" 1>&6
-echo "configure:6905: checking if we have identified curses libraries" >&5
+echo "configure:7502: checking if we have identified curses libraries" >&5
 cat > conftest.$ac_ext <<EOF
-#line 6907 "configure"
+#line 7504 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr(); tgoto("?", 0,0)
 ; return 0; }
 EOF
-if { (eval echo configure:6914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7511: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -6926,7 +7523,7 @@ if test "$cf_result" = no ; then
 case $host_os in #(vi
 freebsd*) #(vi
 	echo $ac_n "checking for tgoto in -lmytinfo""... $ac_c" 1>&6
-echo "configure:6930: checking for tgoto in -lmytinfo" >&5
+echo "configure:7527: checking for tgoto in -lmytinfo" >&5
 ac_lib_var=`echo mytinfo'_'tgoto | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6934,7 +7531,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lmytinfo  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6938 "configure"
+#line 7535 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6945,7 +7542,7 @@ int main() {
 tgoto()
 ; return 0; }
 EOF
-if { (eval echo configure:6949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7546: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6968,7 +7565,7 @@ fi
 	;;
 hpux10.*|hpux11.*) #(vi
 	echo $ac_n "checking for initscr in -lcur_colr""... $ac_c" 1>&6
-echo "configure:6972: checking for initscr in -lcur_colr" >&5
+echo "configure:7569: checking for initscr in -lcur_colr" >&5
 ac_lib_var=`echo cur_colr'_'initscr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -6976,7 +7573,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcur_colr  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6980 "configure"
+#line 7577 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6987,7 +7584,7 @@ int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:6991: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7588: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7010,7 +7607,7 @@ else
   echo "$ac_t""no" 1>&6
 
 	echo $ac_n "checking for initscr in -lHcurses""... $ac_c" 1>&6
-echo "configure:7014: checking for initscr in -lHcurses" >&5
+echo "configure:7611: checking for initscr in -lHcurses" >&5
 ac_lib_var=`echo Hcurses'_'initscr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7018,7 +7615,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lHcurses  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7022 "configure"
+#line 7619 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7029,7 +7626,7 @@ int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:7033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7630: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7082,12 +7679,12 @@ if test ".$ac_cv_func_initscr" != .yes ;
 	# Check for library containing tgoto.  Do this before curses library
 	# because it may be needed to link the test-case for initscr.
 	echo $ac_n "checking for tgoto""... $ac_c" 1>&6
-echo "configure:7086: checking for tgoto" >&5
+echo "configure:7683: checking for tgoto" >&5
 if eval "test \"`echo '$''{'ac_cv_func_tgoto'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7091 "configure"
+#line 7688 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char tgoto(); below.  */
@@ -7110,7 +7707,7 @@ tgoto();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7114: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7711: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_tgoto=yes"
 else
@@ -7131,7 +7728,7 @@ else
 		for cf_term_lib in $cf_check_list termcap termlib unknown
 		do
 			echo $ac_n "checking for tgoto in -l$cf_term_lib""... $ac_c" 1>&6
-echo "configure:7135: checking for tgoto in -l$cf_term_lib" >&5
+echo "configure:7732: checking for tgoto in -l$cf_term_lib" >&5
 ac_lib_var=`echo $cf_term_lib'_'tgoto | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7139,7 +7736,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$cf_term_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7143 "configure"
+#line 7740 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7150,7 +7747,7 @@ int main() {
 tgoto()
 ; return 0; }
 EOF
-if { (eval echo configure:7154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7751: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7180,7 +7777,7 @@ fi
 	for cf_curs_lib in $cf_check_list xcurses jcurses unknown
 	do
 		echo $ac_n "checking for initscr in -l$cf_curs_lib""... $ac_c" 1>&6
-echo "configure:7184: checking for initscr in -l$cf_curs_lib" >&5
+echo "configure:7781: checking for initscr in -l$cf_curs_lib" >&5
 ac_lib_var=`echo $cf_curs_lib'_'initscr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7188,7 +7785,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l$cf_curs_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7192 "configure"
+#line 7789 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7199,7 +7796,7 @@ int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:7203: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7225,16 +7822,16 @@ fi
 	LIBS="-l$cf_curs_lib $cf_save_LIBS"
 	if test "$cf_term_lib" = unknown ; then
 		echo $ac_n "checking if we can link with $cf_curs_lib library""... $ac_c" 1>&6
-echo "configure:7229: checking if we can link with $cf_curs_lib library" >&5
+echo "configure:7826: checking if we can link with $cf_curs_lib library" >&5
 		cat > conftest.$ac_ext <<EOF
-#line 7231 "configure"
+#line 7828 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:7238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7835: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -7250,16 +7847,16 @@ rm -f conftest*
 		:
 	elif test "$cf_term_lib" != predefined ; then
 		echo $ac_n "checking if we need both $cf_curs_lib and $cf_term_lib libraries""... $ac_c" 1>&6
-echo "configure:7254: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5
+echo "configure:7851: checking if we need both $cf_curs_lib and $cf_term_lib libraries" >&5
 		cat > conftest.$ac_ext <<EOF
-#line 7256 "configure"
+#line 7853 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr(); tgoto((char *)0, 0, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:7263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7860: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=no
 else
@@ -7269,14 +7866,14 @@ else
   
 			LIBS="-l$cf_curs_lib -l$cf_term_lib $cf_save_LIBS"
 			cat > conftest.$ac_ext <<EOF
-#line 7273 "configure"
+#line 7870 "configure"
 #include "confdefs.h"
 #include <${cf_cv_ncurses_header-curses.h}>
 int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:7280: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -7297,7 +7894,7 @@ fi
 
 		
 echo $ac_n "checking for ncurses version""... $ac_c" 1>&6
-echo "configure:7301: checking for ncurses version" >&5
+echo "configure:7898: checking for ncurses version" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_version'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -7323,7 +7920,7 @@ Autoconf "old"
 #endif
 EOF
 	cf_try="$ac_cpp conftest.$ac_ext 2>&5 | grep '^Autoconf ' >conftest.out"
-	{ (eval echo configure:7327: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
+	{ (eval echo configure:7924: \"$cf_try\") 1>&5; (eval $cf_try) 2>&5; }
 	if test -f conftest.out ; then
 		cf_out=`cat conftest.out | sed -e 's%^Autoconf %%' -e 's%^[^"]*"%%' -e 's%".*%%'`
 		test -n "$cf_out" && cf_cv_ncurses_version="$cf_out"
@@ -7332,7 +7929,7 @@ EOF
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 7336 "configure"
+#line 7933 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -7356,7 +7953,7 @@ int main()
 	exit(0);
 }
 EOF
-if { (eval echo configure:7360: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:7957: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   
 	cf_cv_ncurses_version=`cat $cf_tempfile`
@@ -7379,13 +7976,13 @@ EOF
 
 		
 echo $ac_n "checking if we must define _XOPEN_SOURCE_EXTENDED""... $ac_c" 1>&6
-echo "configure:7383: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
+echo "configure:7980: checking if we must define _XOPEN_SOURCE_EXTENDED" >&5
 if eval "test \"`echo '$''{'cf_cv_need_xopen_extension'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 7389 "configure"
+#line 7986 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -7397,7 +7994,7 @@ int main() {
 	getbegyx(stdscr, y1, x1)
 ; return 0; }
 EOF
-if { (eval echo configure:7401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_need_xopen_extension=no
 else
@@ -7405,7 +8002,7 @@ else
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 7409 "configure"
+#line 8006 "configure"
 #include "confdefs.h"
 
 #define _XOPEN_SOURCE_EXTENDED
@@ -7418,7 +8015,7 @@ int main() {
 	getbegyx(stdscr, y1, x1)
 ; return 0; }
 EOF
-if { (eval echo configure:7422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8019: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_need_xopen_extension=yes
 else
@@ -7441,7 +8038,7 @@ fi
 
 ## substitute externally-installed PCRE library for our bundled version
 echo $ac_n "checking if you want to use installed version of pcre""... $ac_c" 1>&6
-echo "configure:7445: checking if you want to use installed version of pcre" >&5
+echo "configure:8042: checking if you want to use installed version of pcre" >&5
 
 # Check whether --with-pcre or --without-pcre was given.
 if test "${with_pcre+set}" = set; then
@@ -7514,7 +8111,7 @@ fi
 debug_malloc=none
 
 echo $ac_n "checking if you want to link with dbmalloc for testing""... $ac_c" 1>&6
-echo "configure:7518: checking if you want to link with dbmalloc for testing" >&5
+echo "configure:8115: checking if you want to link with dbmalloc for testing" >&5
 
 # Check whether --with-dbmalloc or --without-dbmalloc was given.
 if test "${with_dbmalloc+set}" = set; then
@@ -7528,17 +8125,17 @@ echo "$ac_t""$with_dbmalloc" 1>&6
 if test "$with_dbmalloc" = yes ; then
 	ac_safe=`echo "dbmalloc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dbmalloc.h""... $ac_c" 1>&6
-echo "configure:7532: checking for dbmalloc.h" >&5
+echo "configure:8129: checking for dbmalloc.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7537 "configure"
+#line 8134 "configure"
 #include "confdefs.h"
 #include <dbmalloc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7542: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8139: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7555,7 +8152,7 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for debug_malloc in -ldbmalloc""... $ac_c" 1>&6
-echo "configure:7559: checking for debug_malloc in -ldbmalloc" >&5
+echo "configure:8156: checking for debug_malloc in -ldbmalloc" >&5
 ac_lib_var=`echo dbmalloc'_'debug_malloc | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7563,7 +8160,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldbmalloc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7567 "configure"
+#line 8164 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7574,7 +8171,7 @@ int main() {
 debug_malloc()
 ; return 0; }
 EOF
-if { (eval echo configure:7578: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7602,7 +8199,7 @@ fi
 
 
 echo $ac_n "checking if you want to link with dmalloc for testing""... $ac_c" 1>&6
-echo "configure:7606: checking if you want to link with dmalloc for testing" >&5
+echo "configure:8203: checking if you want to link with dmalloc for testing" >&5
 
 # Check whether --with-dmalloc or --without-dmalloc was given.
 if test "${with_dmalloc+set}" = set; then
@@ -7616,17 +8213,17 @@ echo "$ac_t""$with_dmalloc" 1>&6
 if test "$with_dmalloc" = yes ; then
 	ac_safe=`echo "dmalloc.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for dmalloc.h""... $ac_c" 1>&6
-echo "configure:7620: checking for dmalloc.h" >&5
+echo "configure:8217: checking for dmalloc.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7625 "configure"
+#line 8222 "configure"
 #include "confdefs.h"
 #include <dmalloc.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7630: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8227: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7643,7 +8240,7 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for dmalloc_debug in -ldmalloc""... $ac_c" 1>&6
-echo "configure:7647: checking for dmalloc_debug in -ldmalloc" >&5
+echo "configure:8244: checking for dmalloc_debug in -ldmalloc" >&5
 ac_lib_var=`echo dmalloc'_'dmalloc_debug | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7651,7 +8248,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldmalloc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7655 "configure"
+#line 8252 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7662,7 +8259,7 @@ int main() {
 dmalloc_debug()
 ; return 0; }
 EOF
-if { (eval echo configure:7666: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8263: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7690,7 +8287,7 @@ fi
 
 
 echo $ac_n "checking if you want debugging-trace""... $ac_c" 1>&6
-echo "configure:7694: checking if you want debugging-trace" >&5
+echo "configure:8291: checking if you want debugging-trace" >&5
 
 # Check whether --with-trace or --without-trace was given.
 if test "${with_trace+set}" = set; then
@@ -7708,12 +8305,12 @@ EOF
 
 	EXTRAOBJS="$EXTRAOBJS trace.o"
 	echo $ac_n "checking for _tracef""... $ac_c" 1>&6
-echo "configure:7712: checking for _tracef" >&5
+echo "configure:8309: checking for _tracef" >&5
 if eval "test \"`echo '$''{'ac_cv_func__tracef'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 7717 "configure"
+#line 8314 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char _tracef(); below.  */
@@ -7736,7 +8333,7 @@ _tracef();
 
 ; return 0; }
 EOF
-if { (eval echo configure:7740: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8337: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func__tracef=yes"
 else
@@ -7758,7 +8355,7 @@ else
   echo "$ac_t""no" 1>&6
 
 	echo $ac_n "checking for _tracef in -l${cf_with_screen}_g""... $ac_c" 1>&6
-echo "configure:7762: checking for _tracef in -l${cf_with_screen}_g" >&5
+echo "configure:8359: checking for _tracef in -l${cf_with_screen}_g" >&5
 ac_lib_var=`echo ${cf_with_screen}_g'_'_tracef | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -7766,7 +8363,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-l${cf_with_screen}_g  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7770 "configure"
+#line 8367 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7777,7 +8374,7 @@ int main() {
 _tracef()
 ; return 0; }
 EOF
-if { (eval echo configure:7781: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7809,7 +8406,7 @@ fi
 
 ## options for miscellaneous definitions
 echo $ac_n "checking for domain-name""... $ac_c" 1>&6
-echo "configure:7813: checking for domain-name" >&5
+echo "configure:8410: checking for domain-name" >&5
 
 # Check whether --with-domain-name or --without-domain-name was given.
 if test "${with_domain_name+set}" = set; then
@@ -7838,16 +8435,16 @@ echo "$ac_t""$DOMAIN_NAME" 1>&6
 
 if test "$USE_NNTP" = "yes" ; then
 echo $ac_n "checking for NNTP default-server""... $ac_c" 1>&6
-echo "configure:7842: checking for NNTP default-server" >&5
+echo "configure:8439: checking for NNTP default-server" >&5
 
 # Check whether --with-nntp-default-server or --without-nntp-default-server was given.
 if test "${with_nntp_default_server+set}" = set; then
   withval="$with_nntp_default_server"
   :
 else
-  withval="${NNTP_DEFAULT_SERVER}"
+  withval="${NNTP_DEFAULT_SERVER-news.$DOMAIN_NAME}"
 fi
-test -n "$withval" && \
+test -z "$withval" && withval=no
 case "$withval" in #(vi
 yes)
   { echo "configure: error: expected a value for --with-nntp-default-server" 1>&2; exit 1; }
@@ -7904,7 +8501,7 @@ EOF
 
 ## optional features
 echo $ac_n "checking whether to use MH style mail handling for mailgroups""... $ac_c" 1>&6
-echo "configure:7908: checking whether to use MH style mail handling for mailgroups" >&5
+echo "configure:8505: checking whether to use MH style mail handling for mailgroups" >&5
 
 # Check whether --enable-mh-mail-handling or --disable-mh-mail-handling was given.
 if test "${enable_mh_mail_handling+set}" = set; then
@@ -7923,7 +8520,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to enable 8-bit keycodes""... $ac_c" 1>&6
-echo "configure:7927: checking whether to enable 8-bit keycodes" >&5
+echo "configure:8524: checking whether to enable 8-bit keycodes" >&5
 
 # Check whether --enable-8bit-keys or --disable-8bit-keys was given.
 if test "${enable_8bit_keys+set}" = set; then
@@ -7949,7 +8546,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to enable ANSI-color""... $ac_c" 1>&6
-echo "configure:7953: checking whether to enable ANSI-color" >&5
+echo "configure:8550: checking whether to enable ANSI-color" >&5
 
 # Check whether --enable-color or --disable-color was given.
 if test "${enable_color+set}" = set; then
@@ -7966,7 +8563,7 @@ use_color=$enableval
 echo "$ac_t""$use_color" 1>&6
 
 echo $ac_n "checking whether to enable posting-etiquette""... $ac_c" 1>&6
-echo "configure:7970: checking whether to enable posting-etiquette" >&5
+echo "configure:8567: checking whether to enable posting-etiquette" >&5
 
 # Check whether --enable-etiquette or --disable-etiquette was given.
 if test "${enable_etiquette+set}" = set; then
@@ -7985,7 +8582,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to strictly observe RFC2047 and break long lines""... $ac_c" 1>&6
-echo "configure:7989: checking whether to strictly observe RFC2047 and break long lines" >&5
+echo "configure:8586: checking whether to strictly observe RFC2047 and break long lines" >&5
 
 # Check whether --enable-break-long-lines or --disable-break-long-lines was given.
 if test "${enable_break_long_lines+set}" = set; then
@@ -8004,7 +8601,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to force MM_CHARSET obeyance when decoding mime""... $ac_c" 1>&6
-echo "configure:8008: checking whether to force MM_CHARSET obeyance when decoding mime" >&5
+echo "configure:8605: checking whether to force MM_CHARSET obeyance when decoding mime" >&5
 
 # Check whether --enable-mime-strict-charset or --disable-mime-strict-charset was given.
 if test "${enable_mime_strict_charset+set}" = set; then
@@ -8030,7 +8627,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking for MIME character-set""... $ac_c" 1>&6
-echo "configure:8034: checking for MIME character-set" >&5
+echo "configure:8631: checking for MIME character-set" >&5
 
 # Check whether --with-mime-default-charset or --without-mime-default-charset was given.
 if test "${with_mime_default_charset+set}" = set; then
@@ -8052,7 +8649,7 @@ EOF
 echo "$ac_t""$MM_CHARSET" 1>&6
 
 echo $ac_n "checking for default ISO/ASCII table""... $ac_c" 1>&6
-echo "configure:8056: checking for default ISO/ASCII table" >&5
+echo "configure:8653: checking for default ISO/ASCII table" >&5
 
 # Check whether --with-iso-to-ascii or --without-iso-to-ascii was given.
 if test "${with_iso_to_ascii+set}" = set; then
@@ -8074,7 +8671,7 @@ EOF
 echo "$ac_t""$DEFAULT_ISO2ASC" 1>&6
 
 echo $ac_n "checking whether to enable locale support""... $ac_c" 1>&6
-echo "configure:8078: checking whether to enable locale support" >&5
+echo "configure:8675: checking whether to enable locale support" >&5
 
 # Check whether --enable-locale or --disable-locale was given.
 if test "${enable_locale+set}" = set; then
@@ -8093,7 +8690,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to enable posting""... $ac_c" 1>&6
-echo "configure:8097: checking whether to enable posting" >&5
+echo "configure:8694: checking whether to enable posting" >&5
 
 # Check whether --enable-posting or --disable-posting was given.
 if test "${enable_posting+set}" = set; then
@@ -8112,7 +8709,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to enable shell escape""... $ac_c" 1>&6
-echo "configure:8116: checking whether to enable shell escape" >&5
+echo "configure:8713: checking whether to enable shell escape" >&5
 
 # Check whether --enable-shell-escape or --disable-shell-escape was given.
 if test "${enable_shell_escape+set}" = set; then
@@ -8131,7 +8728,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to have fascist newsadmin""... $ac_c" 1>&6
-echo "configure:8135: checking whether to have fascist newsadmin" >&5
+echo "configure:8732: checking whether to have fascist newsadmin" >&5
 
 # Check whether --enable-fascist-newsadmin or --disable-fascist-newsadmin was given.
 if test "${enable_fascist_newsadmin+set}" = set; then
@@ -8150,7 +8747,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to enable inverse video and highlighting""... $ac_c" 1>&6
-echo "configure:8154: checking whether to enable inverse video and highlighting" >&5
+echo "configure:8751: checking whether to enable inverse video and highlighting" >&5
 
 # Check whether --enable-inverse-video or --disable-inverse-video was given.
 if test "${enable_inverse_video+set}" = set; then
@@ -8169,7 +8766,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to enable piping support""... $ac_c" 1>&6
-echo "configure:8173: checking whether to enable piping support" >&5
+echo "configure:8770: checking whether to enable piping support" >&5
 
 # Check whether --enable-piping or --disable-piping was given.
 if test "${enable_piping+set}" = set; then
@@ -8188,7 +8785,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to enable printer support""... $ac_c" 1>&6
-echo "configure:8192: checking whether to enable printer support" >&5
+echo "configure:8789: checking whether to enable printer support" >&5
 
 # Check whether --enable-printing or --disable-printing was given.
 if test "${enable_printing+set}" = set; then
@@ -8207,7 +8804,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to unique tmp-files by appending .pid""... $ac_c" 1>&6
-echo "configure:8211: checking whether to unique tmp-files by appending .pid" >&5
+echo "configure:8808: checking whether to unique tmp-files by appending .pid" >&5
 
 # Check whether --enable-append-pid or --disable-append-pid was given.
 if test "${enable_append_pid+set}" = set; then
@@ -8233,7 +8830,7 @@ fi
 echo "$ac_t""$enableval" 1>&6
 
 echo $ac_n "checking whether to fallback to XHDR XREF if XOVER isn't supported""... $ac_c" 1>&6
-echo "configure:8237: checking whether to fallback to XHDR XREF if XOVER isn't supported" >&5
+echo "configure:8834: checking whether to fallback to XHDR XREF if XOVER isn't supported" >&5
 
 # Check whether --enable-xhdr-xref or --disable-xhdr-xref was given.
 if test "${enable_xhdr_xref+set}" = set; then
@@ -8260,7 +8857,7 @@ echo "$ac_t""$enableval" 1>&6
 
 ### bypass a bug in old versions of leafnode & NNTPcache
 echo $ac_n "checking whether to send a GROUP command before a LISTGROUP""... $ac_c" 1>&6
-echo "configure:8264: checking whether to send a GROUP command before a LISTGROUP" >&5
+echo "configure:8861: checking whether to send a GROUP command before a LISTGROUP" >&5
 
 # Check whether --enable-broken-listgroup-fix or --disable-broken-listgroup-fix was given.
 if test "${enable_broken_listgroup_fix+set}" = set; then
@@ -8280,7 +8877,7 @@ echo "$ac_t""$enableval" 1>&6
 
 ### on some old systems the WIFEXITED()/WEXITSTATUS() macros do not work
 echo $ac_n "checking whether to ignore system()s return value""... $ac_c" 1>&6
-echo "configure:8284: checking whether to ignore system()s return value" >&5
+echo "configure:8881: checking whether to ignore system()s return value" >&5
 
 # Check whether --enable-broken-system-fix or --disable-broken-system-fix was given.
 if test "${enable_broken_system_fix+set}" = set; then
@@ -8300,7 +8897,7 @@ echo "$ac_t""$enableval" 1>&6
 
 ### checks for the location of the system-wide default setting file
 echo $ac_n "checking for directory containing tin.defaults file""... $ac_c" 1>&6
-echo "configure:8304: checking for directory containing tin.defaults file" >&5
+echo "configure:8901: checking for directory containing tin.defaults file" >&5
 
 # Check whether --with-defaults-dir or --without-defaults-dir was given.
 if test "${with_defaults_dir+set}" = set; then
@@ -8343,7 +8940,7 @@ EOF
 
 ### check for ipv6 support
 echo $ac_n "checking whether to enable IPv6""... $ac_c" 1>&6
-echo "configure:8347: checking whether to enable IPv6" >&5
+echo "configure:8944: checking whether to enable IPv6" >&5
 
 # Check whether --enable-ipv6 or --disable-ipv6 was given.
 if test "${enable_ipv6+set}" = set; then
@@ -8364,7 +8961,7 @@ if test "$enableval" = "yes"; then
 	
 
 echo $ac_n "checking ipv6 stack type""... $ac_c" 1>&6
-echo "configure:8368: checking ipv6 stack type" >&5
+echo "configure:8965: checking ipv6 stack type" >&5
 if eval "test \"`echo '$''{'cf_cv_ipv6type'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -8384,7 +8981,7 @@ do
 		;;
 	inria) #(vi
 				cat > conftest.$ac_ext <<EOF
-#line 8388 "configure"
+#line 8985 "configure"
 #include "confdefs.h"
 
 #include <netinet/in.h>
@@ -8402,7 +8999,7 @@ rm -f conftest*
 		;;
 	kame) #(vi
 				cat > conftest.$ac_ext <<EOF
-#line 8406 "configure"
+#line 9003 "configure"
 #include "confdefs.h"
 
 #include <netinet/in.h>
@@ -8420,7 +9017,7 @@ rm -f conftest*
 		;;
 	linux-glibc) #(vi
 				cat > conftest.$ac_ext <<EOF
-#line 8424 "configure"
+#line 9021 "configure"
 #include "confdefs.h"
 
 #include <features.h>
@@ -8447,7 +9044,7 @@ rm -f conftest*
 		;;
 	toshiba) #(vi
 		cat > conftest.$ac_ext <<EOF
-#line 8451 "configure"
+#line 9048 "configure"
 #include "confdefs.h"
 
 #include <sys/param.h>
@@ -8465,7 +9062,7 @@ rm -f conftest*
 		;;
 	v6d) #(vi
 		cat > conftest.$ac_ext <<EOF
-#line 8469 "configure"
+#line 9066 "configure"
 #include "confdefs.h"
 
 #include </usr/local/v6/include/sys/v6config.h>
@@ -8483,7 +9080,7 @@ rm -f conftest*
 		;;
 	zeta)
 		cat > conftest.$ac_ext <<EOF
-#line 8487 "configure"
+#line 9084 "configure"
 #include "confdefs.h"
 
 #include <sys/param.h>
@@ -8516,7 +9113,7 @@ cf_ipv6lib=none
 cf_ipv6dir=none
 
 echo $ac_n "checking for IPv6 library if required""... $ac_c" 1>&6
-echo "configure:8520: checking for IPv6 library if required" >&5
+echo "configure:9117: checking for IPv6 library if required" >&5
 case $cf_cv_ipv6type in #(vi
 solaris) #(vi
 	;;
@@ -8550,7 +9147,7 @@ echo "$ac_t""$cf_ipv6lib" 1>&6
 if test "$cf_ipv6lib" != "none"; then
 
 	cat > conftest.$ac_ext <<EOF
-#line 8554 "configure"
+#line 9151 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -8561,7 +9158,7 @@ int main() {
 getaddrinfo(0, 0, 0, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:8565: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -8658,12 +9255,12 @@ rm -f conftest*
 	eval 'cf_cv_have_lib_'$cf_ipv6lib'=no'
 	cf_libdir=""
 	echo $ac_n "checking for getaddrinfo""... $ac_c" 1>&6
-echo "configure:8662: checking for getaddrinfo" >&5
+echo "configure:9259: checking for getaddrinfo" >&5
 if eval "test \"`echo '$''{'ac_cv_func_getaddrinfo'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8667 "configure"
+#line 9264 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char getaddrinfo(); below.  */
@@ -8686,7 +9283,7 @@ getaddrinfo();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8690: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_getaddrinfo=yes"
 else
@@ -8706,10 +9303,10 @@ else
 
 		cf_save_LIBS="$LIBS"
 		echo $ac_n "checking for getaddrinfo in -l$cf_ipv6lib""... $ac_c" 1>&6
-echo "configure:8710: checking for getaddrinfo in -l$cf_ipv6lib" >&5
+echo "configure:9307: checking for getaddrinfo in -l$cf_ipv6lib" >&5
 		LIBS="-l$cf_ipv6lib $LIBS"
 		cat > conftest.$ac_ext <<EOF
-#line 8713 "configure"
+#line 9310 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -8720,7 +9317,7 @@ int main() {
 getaddrinfo(0, 0, 0, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:8724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9321: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 eval 'cf_cv_have_lib_'$cf_ipv6lib'=yes'
@@ -8789,10 +9386,10 @@ test -d /usr && {
 			for cf_libdir in $cf_search
 			do
 				echo $ac_n "checking for -l$cf_ipv6lib in $cf_libdir""... $ac_c" 1>&6
-echo "configure:8793: checking for -l$cf_ipv6lib in $cf_libdir" >&5
+echo "configure:9390: checking for -l$cf_ipv6lib in $cf_libdir" >&5
 				LIBS="-L$cf_libdir -l$cf_ipv6lib $cf_save_LIBS"
 				cat > conftest.$ac_ext <<EOF
-#line 8796 "configure"
+#line 9393 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -8803,7 +9400,7 @@ int main() {
 getaddrinfo(0, 0, 0, 0)
 ; return 0; }
 EOF
-if { (eval echo configure:8807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   echo "$ac_t""yes" 1>&6
 			 		 eval 'cf_cv_have_lib_'$cf_ipv6lib'=yes'
@@ -8836,7 +9433,7 @@ fi
 
 
 echo $ac_n "checking working getaddrinfo""... $ac_c" 1>&6
-echo "configure:8840: checking working getaddrinfo" >&5
+echo "configure:9437: checking working getaddrinfo" >&5
 if eval "test \"`echo '$''{'cf_cv_getaddrinfo'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -8845,7 +9442,7 @@ if test "$cross_compiling" = yes; then
   cf_cv_getaddrinfo=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 8849 "configure"
+#line 9446 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -8924,7 +9521,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:8928: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_getaddrinfo=yes
 else
@@ -8968,12 +9565,12 @@ fi
 for ac_func in getaddrinfo getnameinfo
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:8972: checking for $ac_func" >&5
+echo "configure:9569: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 8977 "configure"
+#line 9574 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -8996,7 +9593,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9000: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9597: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -9025,7 +9622,7 @@ done
 
 ### checks for operator characteristics (should be the last option)
 echo $ac_n "checking whether to make a coffee while compiling""... $ac_c" 1>&6
-echo "configure:9029: checking whether to make a coffee while compiling" >&5
+echo "configure:9626: checking whether to make a coffee while compiling" >&5
 
 # Check whether --with-coffee or --without-coffee was given.
 if test "${with_coffee+set}" = set; then
@@ -9050,7 +9647,7 @@ fi
 ### checks for compiler characteristics
 
 echo $ac_n "checking for makeflags variable""... $ac_c" 1>&6
-echo "configure:9054: checking for makeflags variable" >&5
+echo "configure:9651: checking for makeflags variable" >&5
 if eval "test \"`echo '$''{'cf_cv_makeflags'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -9095,12 +9692,12 @@ ac_link='${CC-cc} -o conftest${ac_exeext
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:9099: checking for working const" >&5
+echo "configure:9696: checking for working const" >&5
 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9104 "configure"
+#line 9701 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -9149,7 +9746,7 @@ ccp = (char const *const *) p;
 
 ; return 0; }
 EOF
-if { (eval echo configure:9153: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9750: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_const=yes
 else
@@ -9170,21 +9767,21 @@ EOF
 fi
 
 echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:9174: checking for inline" >&5
+echo "configure:9771: checking for inline" >&5
 if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   ac_cv_c_inline=no
 for ac_kw in inline __inline__ __inline; do
   cat > conftest.$ac_ext <<EOF
-#line 9181 "configure"
+#line 9778 "configure"
 #include "confdefs.h"
 
 int main() {
 } $ac_kw foo() {
 ; return 0; }
 EOF
-if { (eval echo configure:9188: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9785: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_c_inline=$ac_kw; break
 else
@@ -9211,13 +9808,13 @@ esac
 
 
 echo $ac_n "checking for ansi token expansion/substitution""... $ac_c" 1>&6
-echo "configure:9215: checking for ansi token expansion/substitution" >&5
+echo "configure:9812: checking for ansi token expansion/substitution" >&5
 if eval "test \"`echo '$''{'cf_cv_cpp_expands'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 9221 "configure"
+#line 9818 "configure"
 #include "confdefs.h"
 
 #define string(n) #n
@@ -9225,7 +9822,7 @@ int main() {
 char *s = string(token)
 ; return 0; }
 EOF
-if { (eval echo configure:9229: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9826: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_cpp_expands=yes
 else
@@ -9246,13 +9843,13 @@ EOF
 
 
 echo $ac_n "checking for ansi token concatenation""... $ac_c" 1>&6
-echo "configure:9250: checking for ansi token concatenation" >&5
+echo "configure:9847: checking for ansi token concatenation" >&5
 if eval "test \"`echo '$''{'cf_cv_cpp_concats'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 9256 "configure"
+#line 9853 "configure"
 #include "confdefs.h"
 
 #define concat(a,b) a ## b
@@ -9260,7 +9857,7 @@ int main() {
 char *firstlast = "y", *s = concat(first,last)
 ; return 0; }
 EOF
-if { (eval echo configure:9264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_cpp_concats=yes
 else
@@ -9281,20 +9878,20 @@ EOF
 
 
 echo $ac_n "checking if nested parameters work""... $ac_c" 1>&6
-echo "configure:9285: checking if nested parameters work" >&5
+echo "configure:9882: checking if nested parameters work" >&5
 if eval "test \"`echo '$''{'cf_cv_nested_params'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 9291 "configure"
+#line 9888 "configure"
 #include "confdefs.h"
 
 int main() {
 extern void (*sigdisp(int sig, void (*func)(int sig)))(int sig)
 ; return 0; }
 EOF
-if { (eval echo configure:9298: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:9895: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_nested_params=yes
 else
@@ -9317,12 +9914,12 @@ EOF
 
 ###	Checks for header files.
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:9321: checking for ANSI C header files" >&5
+echo "configure:9918: checking for ANSI C header files" >&5
 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9326 "configure"
+#line 9923 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -9330,7 +9927,7 @@ else
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9334: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9931: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9347,7 +9944,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 9351 "configure"
+#line 9948 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -9365,7 +9962,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 9369 "configure"
+#line 9966 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -9386,7 +9983,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 9390 "configure"
+#line 9987 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -9397,7 +9994,7 @@ if (XOR (islower (i), ISLOWER (i)) || to
 exit (0); }
 
 EOF
-if { (eval echo configure:9401: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:9998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -9425,12 +10022,12 @@ for ac_hdr in dirent.h sys/ndir.h sys/di
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:9429: checking for $ac_hdr that defines DIR" >&5
+echo "configure:10026: checking for $ac_hdr that defines DIR" >&5
 if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9434 "configure"
+#line 10031 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_hdr>
@@ -9438,7 +10035,7 @@ int main() {
 DIR *dirp = 0;
 ; return 0; }
 EOF
-if { (eval echo configure:9442: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10039: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval "ac_cv_header_dirent_$ac_safe=yes"
 else
@@ -9463,7 +10060,7 @@ done
 # Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
 if test $ac_header_dirent = dirent.h; then
 echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:9467: checking for opendir in -ldir" >&5
+echo "configure:10064: checking for opendir in -ldir" >&5
 ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -9471,7 +10068,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldir  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 9475 "configure"
+#line 10072 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9482,7 +10079,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:9486: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9504,7 +10101,7 @@ fi
 
 else
 echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:9508: checking for opendir in -lx" >&5
+echo "configure:10105: checking for opendir in -lx" >&5
 ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -9512,7 +10109,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lx  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 9516 "configure"
+#line 10113 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9523,7 +10120,7 @@ int main() {
 opendir()
 ; return 0; }
 EOF
-if { (eval echo configure:9527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10124: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9546,12 +10143,12 @@ fi
 fi
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:9550: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:10147: checking whether time.h and sys/time.h may both be included" >&5
 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9555 "configure"
+#line 10152 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -9560,7 +10157,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:9564: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10161: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -9581,12 +10178,12 @@ EOF
 fi
 
 echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
-echo "configure:9585: checking for sys/wait.h that is POSIX.1 compatible" >&5
+echo "configure:10182: checking for sys/wait.h that is POSIX.1 compatible" >&5
 if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9590 "configure"
+#line 10187 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/wait.h>
@@ -9602,7 +10199,7 @@ wait (&s);
 s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
 ; return 0; }
 EOF
-if { (eval echo configure:9606: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10203: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_sys_wait_h=yes
 else
@@ -9681,9 +10278,9 @@ for cf_hdr in \
 
 do
 	echo $ac_n "checking for $cf_hdr""... $ac_c" 1>&6
-echo "configure:9685: checking for $cf_hdr" >&5
+echo "configure:10282: checking for $cf_hdr" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 9687 "configure"
+#line 10284 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -9691,7 +10288,7 @@ echo "configure:9685: checking for $cf_h
 
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9695: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10292: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9727,17 +10324,17 @@ unistd.h \
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9731: checking for $ac_hdr" >&5
+echo "configure:10328: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9736 "configure"
+#line 10333 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9741: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10338: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9768,17 +10365,17 @@ if test "$ISC" = yes ; then
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9772: checking for $ac_hdr" >&5
+echo "configure:10369: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 9777 "configure"
+#line 10374 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10379: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9813,16 +10410,16 @@ if test "$ac_cv_header_termios_h" = yes 
 	esac
 	if test "$termios_bad" = maybe ; then
 	echo $ac_n "checking whether termios.h needs _POSIX_SOURCE""... $ac_c" 1>&6
-echo "configure:9817: checking whether termios.h needs _POSIX_SOURCE" >&5
+echo "configure:10414: checking whether termios.h needs _POSIX_SOURCE" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 9819 "configure"
+#line 10416 "configure"
 #include "confdefs.h"
 #include <termios.h>
 int main() {
 struct termios foo; int x = foo.c_iflag
 ; return 0; }
 EOF
-if { (eval echo configure:9826: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10423: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   termios_bad=no
 else
@@ -9831,7 +10428,7 @@ else
   rm -rf conftest*
   
 		cat > conftest.$ac_ext <<EOF
-#line 9835 "configure"
+#line 10432 "configure"
 #include "confdefs.h"
 
 #define _POSIX_SOURCE
@@ -9840,7 +10437,7 @@ int main() {
 struct termios foo; int x = foo.c_iflag
 ; return 0; }
 EOF
-if { (eval echo configure:9844: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10441: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   termios_bad=unknown
 else
@@ -9863,7 +10460,7 @@ fi
 
 
 echo $ac_n "checking declaration of size-change""... $ac_c" 1>&6
-echo "configure:9867: checking declaration of size-change" >&5
+echo "configure:10464: checking declaration of size-change" >&5
 if eval "test \"`echo '$''{'cf_cv_sizechange'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -9877,7 +10474,7 @@ do
     CPPFLAGS="$cf_save_CPPFLAGS"
     test -n "$cf_opts" && CPPFLAGS="$CPPFLAGS -D$cf_opts"
     cat > conftest.$ac_ext <<EOF
-#line 9881 "configure"
+#line 10478 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #ifdef HAVE_TERMIOS_H
@@ -9916,7 +10513,7 @@ int main() {
 	
 ; return 0; }
 EOF
-if { (eval echo configure:9920: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10517: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_sizechange=yes
 else
@@ -9955,7 +10552,7 @@ fi
 
 
 echo $ac_n "checking if sys/time.h conflicts with sys/select.h""... $ac_c" 1>&6
-echo "configure:9959: checking if sys/time.h conflicts with sys/select.h" >&5
+echo "configure:10556: checking if sys/time.h conflicts with sys/select.h" >&5
 if eval "test \"`echo '$''{'cf_cv_sys_select_timeval'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -9963,7 +10560,7 @@ else
 for cf_opts in no yes
 do
 cat > conftest.$ac_ext <<EOF
-#line 9967 "configure"
+#line 10564 "configure"
 #include "confdefs.h"
 
 #define yes 1
@@ -9991,7 +10588,7 @@ int main() {
 struct timeval foo
 ; return 0; }
 EOF
-if { (eval echo configure:9995: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10592: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_sys_select_timeval=$cf_opts
 	 break
@@ -10015,12 +10612,12 @@ EOF
 
 ###	Checks for Datatypes.
 echo $ac_n "checking for gid_t""... $ac_c" 1>&6
-echo "configure:10019: checking for gid_t" >&5
+echo "configure:10616: checking for gid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_gid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10024 "configure"
+#line 10621 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -10048,12 +10645,12 @@ EOF
 fi
 
 echo $ac_n "checking for mode_t""... $ac_c" 1>&6
-echo "configure:10052: checking for mode_t" >&5
+echo "configure:10649: checking for mode_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10057 "configure"
+#line 10654 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -10081,12 +10678,12 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:10085: checking for off_t" >&5
+echo "configure:10682: checking for off_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10090 "configure"
+#line 10687 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -10114,12 +10711,12 @@ EOF
 fi
 
 echo $ac_n "checking for pid_t""... $ac_c" 1>&6
-echo "configure:10118: checking for pid_t" >&5
+echo "configure:10715: checking for pid_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10123 "configure"
+#line 10720 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -10147,12 +10744,12 @@ EOF
 fi
 
 echo $ac_n "checking for size_t""... $ac_c" 1>&6
-echo "configure:10151: checking for size_t" >&5
+echo "configure:10748: checking for size_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10156 "configure"
+#line 10753 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -10180,12 +10777,12 @@ EOF
 fi
 
 echo $ac_n "checking for ssize_t""... $ac_c" 1>&6
-echo "configure:10184: checking for ssize_t" >&5
+echo "configure:10781: checking for ssize_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_ssize_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10189 "configure"
+#line 10786 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -10213,12 +10810,12 @@ EOF
 fi
 
 echo $ac_n "checking for time_t""... $ac_c" 1>&6
-echo "configure:10217: checking for time_t" >&5
+echo "configure:10814: checking for time_t" >&5
 if eval "test \"`echo '$''{'ac_cv_type_time_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10222 "configure"
+#line 10819 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -10246,12 +10843,12 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:10250: checking for uid_t in sys/types.h" >&5
+echo "configure:10847: checking for uid_t in sys/types.h" >&5
 if eval "test \"`echo '$''{'ac_cv_type_uid_t'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10255 "configure"
+#line 10852 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -10281,9 +10878,9 @@ fi
 
 
 echo $ac_n "checking for quad_t""... $ac_c" 1>&6
-echo "configure:10285: checking for quad_t" >&5
+echo "configure:10882: checking for quad_t" >&5
 cat > conftest.$ac_ext <<EOF
-#line 10287 "configure"
+#line 10884 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10296,7 +10893,7 @@ int main() {
 quad_t x; x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:10300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10897: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_quad_t=yes
 else
@@ -10315,9 +10912,9 @@ EOF
 fi
 
 echo $ac_n "checking for long long""... $ac_c" 1>&6
-echo "configure:10319: checking for long long" >&5
+echo "configure:10916: checking for long long" >&5
 cat > conftest.$ac_ext <<EOF
-#line 10321 "configure"
+#line 10918 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -10326,7 +10923,7 @@ int main() {
 long long x; x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:10330: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10927: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_long_long=yes
 else
@@ -10345,9 +10942,9 @@ EOF
 fi
 
 echo $ac_n "checking for nl_item""... $ac_c" 1>&6
-echo "configure:10349: checking for nl_item" >&5
+echo "configure:10946: checking for nl_item" >&5
 cat > conftest.$ac_ext <<EOF
-#line 10351 "configure"
+#line 10948 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_LANGINFO_H
@@ -10362,7 +10959,7 @@ int main() {
 nl_item x; x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:10366: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:10963: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_nl_item=yes
 else
@@ -10384,7 +10981,7 @@ fi
 # libuu/uudeview
 # only define HAVE_LIBUU and HAVE_UUDEVIEW_H if both are found
 echo $ac_n "checking for UUInitialize in -luu""... $ac_c" 1>&6
-echo "configure:10388: checking for UUInitialize in -luu" >&5
+echo "configure:10985: checking for UUInitialize in -luu" >&5
 ac_lib_var=`echo uu'_'UUInitialize | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10392,7 +10989,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-luu  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10396 "configure"
+#line 10993 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10403,7 +11000,7 @@ int main() {
 UUInitialize()
 ; return 0; }
 EOF
-if { (eval echo configure:10407: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10420,17 +11017,17 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_l
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "uudeview.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for uudeview.h""... $ac_c" 1>&6
-echo "configure:10424: checking for uudeview.h" >&5
+echo "configure:11021: checking for uudeview.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10429 "configure"
+#line 11026 "configure"
 #include "confdefs.h"
 #include <uudeview.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11031: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10468,7 +11065,7 @@ fi
 
 # libidn - Internationalized Domain Names
 echo $ac_n "checking for stringprep_check_version in -lidn""... $ac_c" 1>&6
-echo "configure:10472: checking for stringprep_check_version in -lidn" >&5
+echo "configure:11069: checking for stringprep_check_version in -lidn" >&5
 ac_lib_var=`echo idn'_'stringprep_check_version | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10476,7 +11073,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lidn  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10480 "configure"
+#line 11077 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10487,7 +11084,7 @@ int main() {
 stringprep_check_version()
 ; return 0; }
 EOF
-if { (eval echo configure:10491: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11088: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10504,17 +11101,17 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_l
   echo "$ac_t""yes" 1>&6
   ac_safe=`echo "stringprep.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for stringprep.h""... $ac_c" 1>&6
-echo "configure:10508: checking for stringprep.h" >&5
+echo "configure:11105: checking for stringprep.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10513 "configure"
+#line 11110 "configure"
 #include "confdefs.h"
 #include <stringprep.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10518: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11115: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10537,17 +11134,17 @@ EOF
 
 		ac_safe=`echo "idna.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for idna.h""... $ac_c" 1>&6
-echo "configure:10541: checking for idna.h" >&5
+echo "configure:11138: checking for idna.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10546 "configure"
+#line 11143 "configure"
 #include "confdefs.h"
 #include <idna.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10551: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11148: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10569,7 +11166,7 @@ if eval "test \"`echo '$ac_cv_header_'$a
 EOF
 
 			echo $ac_n "checking for idna_to_unicode_lzlz in -lidn""... $ac_c" 1>&6
-echo "configure:10573: checking for idna_to_unicode_lzlz in -lidn" >&5
+echo "configure:11170: checking for idna_to_unicode_lzlz in -lidn" >&5
 ac_lib_var=`echo idn'_'idna_to_unicode_lzlz | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10577,7 +11174,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lidn  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10581 "configure"
+#line 11178 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10588,7 +11185,7 @@ int main() {
 idna_to_unicode_lzlz()
 ; return 0; }
 EOF
-if { (eval echo configure:10592: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10609,9 +11206,9 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_l
 EOF
 
 				echo $ac_n "checking for IDNA_USE_STD3_ASCII_RULES""... $ac_c" 1>&6
-echo "configure:10613: checking for IDNA_USE_STD3_ASCII_RULES" >&5
+echo "configure:11210: checking for IDNA_USE_STD3_ASCII_RULES" >&5
 				cat > conftest.$ac_ext <<EOF
-#line 10615 "configure"
+#line 11212 "configure"
 #include "confdefs.h"
 #include <idna.h>
 EOF
@@ -10660,17 +11257,17 @@ fi
 # ICU - International Components for Unicode
 ac_safe=`echo "unicode/unorm.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for unicode/unorm.h""... $ac_c" 1>&6
-echo "configure:10664: checking for unicode/unorm.h" >&5
+echo "configure:11261: checking for unicode/unorm.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10669 "configure"
+#line 11266 "configure"
 #include "confdefs.h"
 #include <unicode/unorm.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10674: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11271: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10689,17 +11286,17 @@ if eval "test \"`echo '$ac_cv_header_'$a
   
 	ac_safe=`echo "unicode/ustring.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for unicode/ustring.h""... $ac_c" 1>&6
-echo "configure:10693: checking for unicode/ustring.h" >&5
+echo "configure:11290: checking for unicode/ustring.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10698 "configure"
+#line 11295 "configure"
 #include "confdefs.h"
 #include <unicode/ustring.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10703: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11300: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10725,12 +11322,12 @@ EOF
 EOF
 
 		echo $ac_n "checking for unorm_normalize in libicuuc""... $ac_c" 1>&6
-echo "configure:10729: checking for unorm_normalize in libicuuc" >&5
+echo "configure:11326: checking for unorm_normalize in libicuuc" >&5
 		cf_save_LIBS="$LIBS"
 		cf_try_icuuc="no"
 		LIBS="$LIBS -licuuc"
 		cat > conftest.$ac_ext <<EOF
-#line 10734 "configure"
+#line 11331 "configure"
 #include "confdefs.h"
 #include <unicode/unorm.h>
 int main() {
@@ -10740,7 +11337,7 @@ int main() {
 			needed = unorm_normalize(ustr, -1, UNORM_DEFAULT, 0, NULL, 0, &status);
 ; return 0; }
 EOF
-if { (eval echo configure:10744: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11341: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
 			cat >> confdefs.h <<\EOF
@@ -10759,17 +11356,17 @@ rm -f conftest*
 		echo "$ac_t""$cf_try_icuuc" 1>&6
 		ac_safe=`echo "unicode/ubidi.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for unicode/ubidi.h""... $ac_c" 1>&6
-echo "configure:10763: checking for unicode/ubidi.h" >&5
+echo "configure:11360: checking for unicode/ubidi.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 10768 "configure"
+#line 11365 "configure"
 #include "confdefs.h"
 #include <unicode/ubidi.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10773: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11370: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10816,24 +11413,24 @@ else
   
 cf_cv_termlib=none
 cat > conftest.$ac_ext <<EOF
-#line 10820 "configure"
+#line 11417 "configure"
 #include "confdefs.h"
 
 int main() {
 char *x=(char*)tgoto("",0,0)
 ; return 0; }
 EOF
-if { (eval echo configure:10827: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11424: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 10830 "configure"
+#line 11427 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=tigetstr("")
 ; return 0; }
 EOF
-if { (eval echo configure:10837: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_termlib=terminfo
 else
@@ -10862,16 +11459,16 @@ if test "$cf_cv_termlib" = none; then
 	for cf_func in tigetstr tgetstr
 	do
 		echo $ac_n "checking for $cf_func in -l$cf_lib""... $ac_c" 1>&6
-echo "configure:10866: checking for $cf_func in -l$cf_lib" >&5
+echo "configure:11463: checking for $cf_func in -l$cf_lib" >&5
 		cat > conftest.$ac_ext <<EOF
-#line 10868 "configure"
+#line 11465 "configure"
 #include "confdefs.h"
 
 int main() {
 int x=$cf_func("")
 ; return 0; }
 EOF
-if { (eval echo configure:10875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11472: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -10898,7 +11495,7 @@ fi
 if test "$cf_cv_termlib" = none; then
 	# allow curses library for broken AIX system.
 	echo $ac_n "checking for initscr in -lcurses""... $ac_c" 1>&6
-echo "configure:10902: checking for initscr in -lcurses" >&5
+echo "configure:11499: checking for initscr in -lcurses" >&5
 ac_lib_var=`echo curses'_'initscr | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10906,7 +11503,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lcurses  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10910 "configure"
+#line 11507 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10917,7 +11514,7 @@ int main() {
 initscr()
 ; return 0; }
 EOF
-if { (eval echo configure:10921: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10938,7 +11535,7 @@ else
 fi
 
 	echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6
-echo "configure:10942: checking for tgoto in -ltermcap" >&5
+echo "configure:11539: checking for tgoto in -ltermcap" >&5
 ac_lib_var=`echo termcap'_'tgoto | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -10946,7 +11543,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ltermcap  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10950 "configure"
+#line 11547 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10957,7 +11554,7 @@ int main() {
 tgoto()
 ; return 0; }
 EOF
-if { (eval echo configure:10961: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11558: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10990,11 +11587,11 @@ fi
 	# terminfo-based termcap interfaces may be prototyped in <curses.h>,
 	# which may/may not be compatible with <termcap.h>
 	echo $ac_n "checking if we should include termcap.h""... $ac_c" 1>&6
-echo "configure:10994: checking if we should include termcap.h" >&5
+echo "configure:11591: checking if we should include termcap.h" >&5
 	cf_save_CFLAGS="$CFLAGS"
 	CFLAGS="$CFLAGS -I$srcdir/include"
 	cat > conftest.$ac_ext <<EOF
-#line 10998 "configure"
+#line 11595 "configure"
 #include "confdefs.h"
 
 #define HAVE_TERMCAP_H 1
@@ -11007,7 +11604,7 @@ make an error
 
 ; return 0; }
 EOF
-if { (eval echo configure:11011: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11608: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -11025,7 +11622,7 @@ EOF
 
 	
 echo $ac_n "checking for term.h""... $ac_c" 1>&6
-echo "configure:11029: checking for term.h" >&5
+echo "configure:11626: checking for term.h" >&5
 if eval "test \"`echo '$''{'cf_cv_term_header'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11038,7 +11635,7 @@ for cf_header in \
 	term.h
 do
 	cat > conftest.$ac_ext <<EOF
-#line 11042 "configure"
+#line 11639 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -11047,7 +11644,7 @@ int main() {
 WINDOW *x
 ; return 0; }
 EOF
-if { (eval echo configure:11051: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11648: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_term_header=$cf_header
 	 break
@@ -11088,7 +11685,7 @@ esac
 
 
 echo $ac_n "checking if we should include curses.h or termcap.h""... $ac_c" 1>&6
-echo "configure:11092: checking if we should include curses.h or termcap.h" >&5
+echo "configure:11689: checking if we should include curses.h or termcap.h" >&5
 if eval "test \"`echo '$''{'cf_cv_need_curses_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11106,7 +11703,7 @@ do
     test -n "$cf_t_opts" && CPPFLAGS="$CPPFLAGS -D$cf_t_opts"
 
     cat > conftest.$ac_ext <<EOF
-#line 11110 "configure"
+#line 11707 "configure"
 #include "confdefs.h"
 /* $cf_c_opts $cf_t_opts */
 $CHECK_DECL_HDRS
@@ -11114,7 +11711,7 @@ int main() {
 char *x = (char *)tgoto("")
 ; return 0; }
 EOF
-if { (eval echo configure:11118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   test "$cf_cv_need_curses_h" = no && {
 	     cf_cv_need_curses_h=maybe
@@ -11127,7 +11724,7 @@ else
   rm -rf conftest*
   echo "Recompiling with corrected call (C:$cf_c_opts, T:$cf_t_opts)" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 11131 "configure"
+#line 11728 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -11135,7 +11732,7 @@ int main() {
 char *x = (char *)tgoto("",0,0)
 ; return 0; }
 EOF
-if { (eval echo configure:11139: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11736: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_need_curses_h=yes
 	 cf_ok_c_opts=$cf_c_opts
@@ -11211,7 +11808,7 @@ esac
 
 
 echo $ac_n "checking declaration of tputs 3rd param""... $ac_c" 1>&6
-echo "configure:11215: checking declaration of tputs 3rd param" >&5
+echo "configure:11812: checking declaration of tputs 3rd param" >&5
 if eval "test \"`echo '$''{'cf_cv_type_outchar'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -11227,10 +11824,10 @@ for Q in int void; do
 for R in int char; do
 for S in "" const; do
 	
-echo "(line 11231) testing loop variables P:$P, Q:$Q, R:$R, S:$S ..." 1>&5
+echo "(line 11828) testing loop variables P:$P, Q:$Q, R:$R, S:$S ..." 1>&5
 
 	cat > conftest.$ac_ext <<EOF
-#line 11234 "configure"
+#line 11831 "configure"
 #include "confdefs.h"
 $CHECK_DECL_HDRS
 int main() {
@@ -11239,7 +11836,7 @@ extern $Q OutChar($R);
 	tputs("", 1, OutChar)
 ; return 0; }
 EOF
-if { (eval echo configure:11243: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11840: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_type_outchar="$Q OutChar($R)"
 	 cf_cv_found=yes
@@ -11294,14 +11891,14 @@ EOF
 elif test ".$cf_cv_termlib" = .termcap ; then
 	# BSD 'tputs()' may need 'PC' to be set.
 	cat > conftest.$ac_ext <<EOF
-#line 11298 "configure"
+#line 11895 "configure"
 #include "confdefs.h"
 
 int main() {
 extern char PC; PC = 0
 ; return 0; }
 EOF
-if { (eval echo configure:11305: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cat >> confdefs.h <<\EOF
 #define HAVE_EXTERN_TCAP_PC 1
@@ -11320,13 +11917,13 @@ fi
 
 
 echo $ac_n "checking if external errno is declared""... $ac_c" 1>&6
-echo "configure:11324: checking if external errno is declared" >&5
+echo "configure:11921: checking if external errno is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_dcl_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 11330 "configure"
+#line 11927 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_STDLIB_H
@@ -11339,7 +11936,7 @@ int main() {
 long x = (long) errno
 ; return 0; }
 EOF
-if { (eval echo configure:11343: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:11940: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_dcl_errno=yes
 else
@@ -11367,13 +11964,13 @@ fi
 # It's possible (for near-UNIX clones) that the data doesn't exist
 
 echo $ac_n "checking if external errno exists""... $ac_c" 1>&6
-echo "configure:11371: checking if external errno exists" >&5
+echo "configure:11968: checking if external errno exists" >&5
 if eval "test \"`echo '$''{'cf_cv_have_errno'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 11377 "configure"
+#line 11974 "configure"
 #include "confdefs.h"
 
 #undef errno
@@ -11383,7 +11980,7 @@ int main() {
 errno = 2
 ; return 0; }
 EOF
-if { (eval echo configure:11387: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11984: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_have_errno=yes
 else
@@ -11415,12 +12012,12 @@ fi
 for ac_func in strerror
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11419: checking for $ac_func" >&5
+echo "configure:12016: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11424 "configure"
+#line 12021 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11443,7 +12040,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -11470,13 +12067,13 @@ else
 
     
 echo $ac_n "checking if external sys_nerr is declared""... $ac_c" 1>&6
-echo "configure:11474: checking if external sys_nerr is declared" >&5
+echo "configure:12071: checking if external sys_nerr is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_dcl_sys_nerr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 11480 "configure"
+#line 12077 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_STDLIB_H
@@ -11489,7 +12086,7 @@ int main() {
 long x = (long) sys_nerr
 ; return 0; }
 EOF
-if { (eval echo configure:11493: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12090: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_dcl_sys_nerr=yes
 else
@@ -11517,13 +12114,13 @@ fi
 # It's possible (for near-UNIX clones) that the data doesn't exist
 
 echo $ac_n "checking if external sys_nerr exists""... $ac_c" 1>&6
-echo "configure:11521: checking if external sys_nerr exists" >&5
+echo "configure:12118: checking if external sys_nerr exists" >&5
 if eval "test \"`echo '$''{'cf_cv_have_sys_nerr'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 11527 "configure"
+#line 12124 "configure"
 #include "confdefs.h"
 
 #undef sys_nerr
@@ -11533,7 +12130,7 @@ int main() {
 sys_nerr = 2
 ; return 0; }
 EOF
-if { (eval echo configure:11537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12134: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_have_sys_nerr=yes
 else
@@ -11562,13 +12159,13 @@ fi
 
     
 echo $ac_n "checking if external sys_errlist is declared""... $ac_c" 1>&6
-echo "configure:11566: checking if external sys_errlist is declared" >&5
+echo "configure:12163: checking if external sys_errlist is declared" >&5
 if eval "test \"`echo '$''{'cf_cv_dcl_sys_errlist'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 11572 "configure"
+#line 12169 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_STDLIB_H
@@ -11581,7 +12178,7 @@ int main() {
 long x = (long) sys_errlist
 ; return 0; }
 EOF
-if { (eval echo configure:11585: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12182: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_dcl_sys_errlist=yes
 else
@@ -11609,13 +12206,13 @@ fi
 # It's possible (for near-UNIX clones) that the data doesn't exist
 
 echo $ac_n "checking if external sys_errlist exists""... $ac_c" 1>&6
-echo "configure:11613: checking if external sys_errlist exists" >&5
+echo "configure:12210: checking if external sys_errlist exists" >&5
 if eval "test \"`echo '$''{'cf_cv_have_sys_errlist'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
     cat > conftest.$ac_ext <<EOF
-#line 11619 "configure"
+#line 12216 "configure"
 #include "confdefs.h"
 
 #undef sys_errlist
@@ -11625,7 +12222,7 @@ int main() {
 sys_errlist = 2
 ; return 0; }
 EOF
-if { (eval echo configure:11629: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_have_sys_errlist=yes
 else
@@ -11721,12 +12318,12 @@ for ac_func in \
 $cf_tc_funcs 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:11725: checking for $ac_func" >&5
+echo "configure:12322: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11730 "configure"
+#line 12327 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -11749,7 +12346,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -11775,12 +12372,12 @@ done
 
 
 echo $ac_n "checking for flock""... $ac_c" 1>&6
-echo "configure:11779: checking for flock" >&5
+echo "configure:12376: checking for flock" >&5
 if eval "test \"`echo '$''{'ac_cv_func_flock'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11784 "configure"
+#line 12381 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char flock(); below.  */
@@ -11803,7 +12400,7 @@ flock();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12404: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_flock=yes"
 else
@@ -11825,7 +12422,7 @@ else
   echo "$ac_t""no" 1>&6
 
 	echo $ac_n "checking for flock in -lbsd""... $ac_c" 1>&6
-echo "configure:11829: checking for flock in -lbsd" >&5
+echo "configure:12426: checking for flock in -lbsd" >&5
 ac_lib_var=`echo bsd'_'flock | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -11833,7 +12430,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lbsd  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 11837 "configure"
+#line 12434 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11844,7 +12441,7 @@ int main() {
 flock()
 ; return 0; }
 EOF
-if { (eval echo configure:11848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11873,12 +12470,12 @@ fi
 
 
   echo $ac_n "checking for wide char and multibyte support""... $ac_c" 1>&6
-echo "configure:11877: checking for wide char and multibyte support" >&5
+echo "configure:12474: checking for wide char and multibyte support" >&5
 if eval "test \"`echo '$''{'am_cv_multibyte_able'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 11882 "configure"
+#line 12479 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #ifdef HAVE_STDLIB_H
@@ -11914,7 +12511,7 @@ char icb[5] = {0xa4, 0xa4, 0xa4, 0xe5, 0
       wcsncat(wcb2, wcb, 5);
 ; return 0; }
 EOF
-if { (eval echo configure:11918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12515: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_multibyte_able=yes
 else
@@ -11924,7 +12521,7 @@ else
   cf_save_LIBS="$LIBS"
       LIBS="-lutf8 $LIBS"
       cat > conftest.$ac_ext <<EOF
-#line 11928 "configure"
+#line 12525 "configure"
 #include "confdefs.h"
 #include <libutf8.h>
 int main() {
@@ -11950,7 +12547,7 @@ char icb[5] = {0xa4, 0xa4, 0xa4, 0xe5, 0
         wcsncat(wcb2, wcb, 5);
 ; return 0; }
 EOF
-if { (eval echo configure:11954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_multibyte_able=libutf8
 else
@@ -11984,9 +12581,9 @@ EOF
 
 
 echo $ac_n "checking if gettimeofday takes two arguments""... $ac_c" 1>&6
-echo "configure:11988: checking if gettimeofday takes two arguments" >&5
+echo "configure:12585: checking if gettimeofday takes two arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 11990 "configure"
+#line 12587 "configure"
 #include "confdefs.h"
 
 #if HAVE_SYS_TIME_H
@@ -11998,7 +12595,7 @@ struct timezone *tz;
 gettimeofday(tv, tz);
 ; return 0; }
 EOF
-if { (eval echo configure:12002: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12599: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_func_gettimeofday_2args=yes
 else
@@ -12017,12 +12614,12 @@ EOF
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:12021: checking return type of signal handlers" >&5
+echo "configure:12618: checking return type of signal handlers" >&5
 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12026 "configure"
+#line 12623 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -12039,7 +12636,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:12043: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12640: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -12059,7 +12656,7 @@ EOF
 
 
 echo $ac_n "checking declaration of signal arguments""... $ac_c" 1>&6
-echo "configure:12063: checking declaration of signal arguments" >&5
+echo "configure:12660: checking declaration of signal arguments" >&5
 if eval "test \"`echo '$''{'cf_cv_sig_args'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12068,7 +12665,7 @@ cf_cv_sig_args=
 for cf_test in "int sig" "int sig, ..."
 do
 	cat > conftest.$ac_ext <<EOF
-#line 12072 "configure"
+#line 12669 "configure"
 #include "confdefs.h"
 
 #include <signal.h>
@@ -12076,7 +12673,7 @@ int main() {
 extern RETSIGTYPE catch($cf_test); signal(SIGINT, catch)
 ; return 0; }
 EOF
-if { (eval echo configure:12080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12677: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_sig_args="$cf_test";break
 else
@@ -12102,13 +12699,13 @@ EOF
 if test "$ac_cv_func_sigaction" = yes; then
 
 echo $ac_n "checking whether sigaction needs _POSIX_SOURCE""... $ac_c" 1>&6
-echo "configure:12106: checking whether sigaction needs _POSIX_SOURCE" >&5
+echo "configure:12703: checking whether sigaction needs _POSIX_SOURCE" >&5
 if eval "test \"`echo '$''{'cf_cv_sigact_bad'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 12112 "configure"
+#line 12709 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -12117,7 +12714,7 @@ int main() {
 struct sigaction act
 ; return 0; }
 EOF
-if { (eval echo configure:12121: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:12718: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_sigact_bad=no
 else
@@ -12138,13 +12735,13 @@ EOF
 
 
 echo $ac_n "checking if we have sigaction/related functions""... $ac_c" 1>&6
-echo "configure:12142: checking if we have sigaction/related functions" >&5
+echo "configure:12739: checking if we have sigaction/related functions" >&5
 if eval "test \"`echo '$''{'cf_cv_sigaction_funcs'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 12148 "configure"
+#line 12745 "configure"
 #include "confdefs.h"
 
 #ifdef SVR4_ACTION
@@ -12162,7 +12759,7 @@ int main() {
     sigaction (SIGBUS,&sa,&osa);
 ; return 0; }
 EOF
-if { (eval echo configure:12166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12763: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_sigaction_funcs=yes
 else
@@ -12184,7 +12781,7 @@ EOF
 fi
 
 echo $ac_n "checking for fork""... $ac_c" 1>&6
-echo "configure:12188: checking for fork" >&5
+echo "configure:12785: checking for fork" >&5
 if eval "test \"`echo '$''{'cf_cv_func_fork'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12193,7 +12790,7 @@ if test "$cross_compiling" = yes; then
   cf_cv_func_fork=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 12197 "configure"
+#line 12794 "configure"
 #include "confdefs.h"
 
 int main()
@@ -12203,7 +12800,7 @@ int main()
 	exit(0);
 }
 EOF
-if { (eval echo configure:12207: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:12804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_func_fork=yes
 else
@@ -12225,12 +12822,12 @@ EOF
 
 
 echo $ac_n "checking for memmove""... $ac_c" 1>&6
-echo "configure:12229: checking for memmove" >&5
+echo "configure:12826: checking for memmove" >&5
 if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12234 "configure"
+#line 12831 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char memmove(); below.  */
@@ -12253,7 +12850,7 @@ memmove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12257: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_memmove=yes"
 else
@@ -12272,12 +12869,12 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for bcopy""... $ac_c" 1>&6
-echo "configure:12276: checking for bcopy" >&5
+echo "configure:12873: checking for bcopy" >&5
 if eval "test \"`echo '$''{'ac_cv_func_bcopy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12281 "configure"
+#line 12878 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char bcopy(); below.  */
@@ -12300,7 +12897,7 @@ bcopy();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12901: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_bcopy=yes"
 else
@@ -12316,7 +12913,7 @@ if eval "test \"`echo '$ac_cv_func_'bcop
   echo "$ac_t""yes" 1>&6
   
 	echo $ac_n "checking if bcopy does overlapping moves""... $ac_c" 1>&6
-echo "configure:12320: checking if bcopy does overlapping moves" >&5
+echo "configure:12917: checking if bcopy does overlapping moves" >&5
 if eval "test \"`echo '$''{'cf_cv_good_bcopy'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12325,7 +12922,7 @@ else
   cf_cv_good_bcopy=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 12329 "configure"
+#line 12926 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -12338,7 +12935,7 @@ int main() {
 }
 		
 EOF
-if { (eval echo configure:12342: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:12939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_good_bcopy=yes
 else
@@ -12376,9 +12973,9 @@ fi
 
 
 echo $ac_n "checking if select expects int * arguments""... $ac_c" 1>&6
-echo "configure:12380: checking if select expects int * arguments" >&5
+echo "configure:12977: checking if select expects int * arguments" >&5
 cat > conftest.$ac_ext <<EOF
-#line 12382 "configure"
+#line 12979 "configure"
 #include "confdefs.h"
 #include <time.h>
 EOF
@@ -12398,7 +12995,7 @@ rm -f conftest*
 
 
 echo $ac_n "checking whether closedir returns void""... $ac_c" 1>&6
-echo "configure:12402: checking whether closedir returns void" >&5
+echo "configure:12999: checking whether closedir returns void" >&5
 if eval "test \"`echo '$''{'ac_cv_func_closedir_void'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12406,13 +13003,13 @@ else
   ac_cv_func_closedir_void=yes
 else
   cat > conftest.$ac_ext <<EOF
-#line 12410 "configure"
+#line 13007 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <$ac_header_dirent>
 int closedir(); main() { exit(closedir(opendir(".")) != 0); }
 EOF
-if { (eval echo configure:12416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13013: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_closedir_void=no
 else
@@ -12438,7 +13035,7 @@ fi
 # autoconf 2.5x assumes setvbuf is not reversed when cross-compiling
 if test "$cross_compiling" != yes ; then
 	echo $ac_n "checking whether setvbuf arguments are reversed""... $ac_c" 1>&6
-echo "configure:12442: checking whether setvbuf arguments are reversed" >&5
+echo "configure:13039: checking whether setvbuf arguments are reversed" >&5
 if eval "test \"`echo '$''{'ac_cv_func_setvbuf_reversed'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12446,7 +13043,7 @@ else
     { echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 12450 "configure"
+#line 13047 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 /* If setvbuf has the reversed format, exit 0. */
@@ -12460,7 +13057,7 @@ main () {
   exit(0);			/* Non-reversed systems segv here.  */
 }
 EOF
-if { (eval echo configure:12464: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13061: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_setvbuf_reversed=yes
 else
@@ -12498,12 +13095,12 @@ for ac_func in \
 
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:12502: checking for $ac_func" >&5
+echo "configure:13099: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12507 "configure"
+#line 13104 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -12526,7 +13123,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12530: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13127: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -12553,13 +13150,13 @@ done
 
 
 echo $ac_n "checking for type sigaction_t""... $ac_c" 1>&6
-echo "configure:12557: checking for type sigaction_t" >&5
+echo "configure:13154: checking for type sigaction_t" >&5
 if eval "test \"`echo '$''{'cf_cv_type_sigaction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 12563 "configure"
+#line 13160 "configure"
 #include "confdefs.h"
 
 #include <signal.h>
@@ -12567,7 +13164,7 @@ int main() {
 sigaction_t x
 ; return 0; }
 EOF
-if { (eval echo configure:12571: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13168: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_type_sigaction=yes
 else
@@ -12587,13 +13184,13 @@ EOF
 
 
 echo $ac_n "checking for nonconflicting termios.h""... $ac_c" 1>&6
-echo "configure:12591: checking for nonconflicting termios.h" >&5
+echo "configure:13188: checking for nonconflicting termios.h" >&5
 if eval "test \"`echo '$''{'cf_cv_use_termios_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 12597 "configure"
+#line 13194 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_IOCTL_H
@@ -12615,7 +13212,7 @@ int main() {
 	(void) tcgetattr (0, &save_tty)
 ; return 0; }
 EOF
-if { (eval echo configure:12619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_use_termios_h=yes
 else
@@ -12646,13 +13243,13 @@ fi
 
 
 echo $ac_n "checking for passwd.pw_gecos""... $ac_c" 1>&6
-echo "configure:12650: checking for passwd.pw_gecos" >&5
+echo "configure:13247: checking for passwd.pw_gecos" >&5
 if eval "test \"`echo '$''{'cf_cv_pw_gecos'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 12656 "configure"
+#line 13253 "configure"
 #include "confdefs.h"
 
 #include <pwd.h>
@@ -12663,7 +13260,7 @@ int main() {
 	char bar = foo.pw_gecos
 ; return 0; }
 EOF
-if { (eval echo configure:12667: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_pw_gecos=yes
 else
@@ -12683,13 +13280,13 @@ EOF
 
 
 echo $ac_n "checking for tm.tm_gmtoff""... $ac_c" 1>&6
-echo "configure:12687: checking for tm.tm_gmtoff" >&5
+echo "configure:13284: checking for tm.tm_gmtoff" >&5
 if eval "test \"`echo '$''{'cf_cv_tm_gmtoff'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 12693 "configure"
+#line 13290 "configure"
 #include "confdefs.h"
 
 #ifdef TIME_WITH_SYS_TIME
@@ -12709,7 +13306,7 @@ int main() {
 	long bar = foo.tm_gmtoff
 ; return 0; }
 EOF
-if { (eval echo configure:12713: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13310: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_tm_gmtoff=yes
 else
@@ -12729,7 +13326,7 @@ EOF
 
 
 echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:12733: checking for long file names" >&5
+echo "configure:13330: checking for long file names" >&5
 if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12777,17 +13374,17 @@ for ac_hdr in sys/wait.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:12781: checking for $ac_hdr" >&5
+echo "configure:13378: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12786 "configure"
+#line 13383 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13388: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12824,17 +13421,17 @@ for ac_hdr in wait.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:12828: checking for $ac_hdr" >&5
+echo "configure:13425: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12833 "configure"
+#line 13430 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12838: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13435: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12864,17 +13461,17 @@ for ac_hdr in waitstatus.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:12868: checking for $ac_hdr" >&5
+echo "configure:13465: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 12873 "configure"
+#line 13470 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12878: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13475: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12915,13 +13512,13 @@ fi
 
 
 echo $ac_n "checking for union wait""... $ac_c" 1>&6
-echo "configure:12919: checking for union wait" >&5
+echo "configure:13516: checking for union wait" >&5
 if eval "test \"`echo '$''{'cf_cv_type_unionwait'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 12925 "configure"
+#line 13522 "configure"
 #include "confdefs.h"
 $cf_wait_headers
 int main() {
@@ -12932,7 +13529,7 @@ int x;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:12936: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_type_unionwait=no
 	 echo compiles ok w/o union wait 1>&5
@@ -12943,7 +13540,7 @@ else
   rm -rf conftest*
   
 	cat > conftest.$ac_ext <<EOF
-#line 12947 "configure"
+#line 13544 "configure"
 #include "confdefs.h"
 $cf_wait_headers
 int main() {
@@ -12958,7 +13555,7 @@ union wait x;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:12962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13559: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_type_unionwait=yes
 	 echo compiles ok with union wait and possibly macros too 1>&5
@@ -12983,7 +13580,7 @@ EOF
 
 
 echo $ac_n "checking if the system function returns usable child-status""... $ac_c" 1>&6
-echo "configure:12987: checking if the system function returns usable child-status" >&5
+echo "configure:13584: checking if the system function returns usable child-status" >&5
 if eval "test \"`echo '$''{'cf_cv_system_status'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -12992,7 +13589,7 @@ else
   cf_cv_system_status=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 12996 "configure"
+#line 13593 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -13025,7 +13622,7 @@ int main()
 }
 
 EOF
-if { (eval echo configure:13029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_system_status=no
 else
@@ -13036,11 +13633,11 @@ else
   cf_cv_system_status=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 13040 "configure"
+#line 13637 "configure"
 #include "confdefs.h"
 int main() { exit(system("exit 23") != (23 << 8)); }
 EOF
-if { (eval echo configure:13044: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_system_status=yes
 else
@@ -13083,13 +13680,13 @@ EOF
 
 if test "$cf_cv_ncurses_version" != no ; then
 echo $ac_n "checking for obsolete/broken version of ncurses""... $ac_c" 1>&6
-echo "configure:13087: checking for obsolete/broken version of ncurses" >&5
+echo "configure:13684: checking for obsolete/broken version of ncurses" >&5
 if eval "test \"`echo '$''{'cf_cv_ncurses_broken'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 cat > conftest.$ac_ext <<EOF
-#line 13093 "configure"
+#line 13690 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -13103,7 +13700,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13107: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13704: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_ncurses_broken=no
 else
@@ -13128,13 +13725,13 @@ fi
 
 		
 echo $ac_n "checking if curses supports color attributes""... $ac_c" 1>&6
-echo "configure:13132: checking if curses supports color attributes" >&5
+echo "configure:13729: checking if curses supports color attributes" >&5
 if eval "test \"`echo '$''{'cf_cv_color_curses'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 13138 "configure"
+#line 13735 "configure"
 #include "confdefs.h"
 
 #include <${cf_cv_ncurses_header-curses.h}>
@@ -13149,7 +13746,7 @@ chtype x = COLOR_BLUE;
 	
 ; return 0; }
 EOF
-if { (eval echo configure:13153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_color_curses=yes
 else
@@ -13200,7 +13797,7 @@ if test $check_sig_const = yes ; then
 	
 
 echo $ac_n "checking for redefinable signal constants""... $ac_c" 1>&6
-echo "configure:13204: checking for redefinable signal constants" >&5
+echo "configure:13801: checking for redefinable signal constants" >&5
 if eval "test \"`echo '$''{'cf_cv_sig_const'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13212,7 +13809,7 @@ if test -n "$cf_cv_sig_args"; then
   cf_cv_sig_const=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 13216 "configure"
+#line 13813 "configure"
 #include "confdefs.h"
 
 #define NEW_DFL	((RETSIGTYPE (*)($cf_test))0)
@@ -13239,7 +13836,7 @@ int main()
 	exit(0);
 }
 EOF
-if { (eval echo configure:13243: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13840: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_sig_const=yes
 else
@@ -13265,13 +13862,13 @@ fi
 
 
 echo $ac_n "checking for ANSI qsort""... $ac_c" 1>&6
-echo "configure:13269: checking for ANSI qsort" >&5
+echo "configure:13866: checking for ANSI qsort" >&5
 if eval "test \"`echo '$''{'cf_cv_comptype'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 	cat > conftest.$ac_ext <<EOF
-#line 13275 "configure"
+#line 13872 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_STDLIB_H
@@ -13283,7 +13880,7 @@ extern int compare(const void *, const v
 	 qsort(foo, sizeof(foo)/sizeof(*foo), sizeof(*foo), compare)
 ; return 0; }
 EOF
-if { (eval echo configure:13287: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13884: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_cv_comptype=yes
 else
@@ -13311,7 +13908,7 @@ fi
 
 
 echo $ac_n "checking if application can dump core""... $ac_c" 1>&6
-echo "configure:13315: checking if application can dump core" >&5
+echo "configure:13912: checking if application can dump core" >&5
 if eval "test \"`echo '$''{'cf_cv_corefile'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -13320,7 +13917,7 @@ else
   cf_cv_corefile=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 13324 "configure"
+#line 13921 "configure"
 #include "confdefs.h"
 
 #include <signal.h>
@@ -13361,7 +13958,7 @@ int main()
 #endif
 }
 EOF
-if { (eval echo configure:13365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:13962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_corefile=yes
 else
@@ -13408,18 +14005,18 @@ ac_tr_func=`echo "$ac_func" | sed y%abcd
 
 
 echo $ac_n "checking for missing "${ac_func}" extern""... $ac_c" 1>&6
-echo "configure:13412: checking for missing "${ac_func}" extern" >&5
+echo "configure:14009: checking for missing "${ac_func}" extern" >&5
 if eval "test \"`echo '$''{'cf_cv_func_${ac_func}'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 
-echo "(line 13418) testing for missing "${ac_func}" external ..." 1>&5
+echo "(line 14015) testing for missing "${ac_func}" external ..." 1>&5
 
 cf_save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS $CHECK_DECL_FLAG"
 cat > conftest.$ac_ext <<EOF
-#line 13423 "configure"
+#line 14020 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -13433,7 +14030,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   if test -n "$CHECK_DECL_HDRS" ; then
 # try to work around system headers which are infested with non-standard syntax
@@ -13441,7 +14038,7 @@ if { (eval echo configure:13437: \"$ac_l
 cf_1_up=`echo "${ac_func}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
 cat > conftest.$ac_ext <<EOF
-#line 13445 "configure"
+#line 14042 "configure"
 #include "confdefs.h"
 
 #define DECL_${cf_1_up}
@@ -13451,7 +14048,7 @@ int main() {
 long x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:13455: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14052: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_func_'${ac_func}'=yes'
 else
@@ -13500,18 +14097,18 @@ ac_tr_func=`echo "$ac_func" | sed y%abcd
 
 
 echo $ac_n "checking for missing "${ac_func}" extern""... $ac_c" 1>&6
-echo "configure:13504: checking for missing "${ac_func}" extern" >&5
+echo "configure:14101: checking for missing "${ac_func}" extern" >&5
 if eval "test \"`echo '$''{'cf_cv_func_${ac_func}'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 
-echo "(line 13510) testing for missing "${ac_func}" external ..." 1>&5
+echo "(line 14107) testing for missing "${ac_func}" external ..." 1>&5
 
 cf_save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS $CHECK_DECL_FLAG"
 cat > conftest.$ac_ext <<EOF
-#line 13515 "configure"
+#line 14112 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -13525,7 +14122,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13529: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   if test -n "$CHECK_DECL_HDRS" ; then
 # try to work around system headers which are infested with non-standard syntax
@@ -13533,7 +14130,7 @@ if { (eval echo configure:13529: \"$ac_l
 cf_1_up=`echo "${ac_func}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
 cat > conftest.$ac_ext <<EOF
-#line 13537 "configure"
+#line 14134 "configure"
 #include "confdefs.h"
 
 #define DECL_${cf_1_up}
@@ -13543,7 +14140,7 @@ int main() {
 long x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:13547: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14144: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_func_'${ac_func}'=yes'
 else
@@ -13590,18 +14187,18 @@ ac_tr_func=`echo "$ac_func" | sed y%abcd
 
 
 echo $ac_n "checking for missing "${ac_func}" extern""... $ac_c" 1>&6
-echo "configure:13594: checking for missing "${ac_func}" extern" >&5
+echo "configure:14191: checking for missing "${ac_func}" extern" >&5
 if eval "test \"`echo '$''{'cf_cv_func_${ac_func}'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 
-echo "(line 13600) testing for missing "${ac_func}" external ..." 1>&5
+echo "(line 14197) testing for missing "${ac_func}" external ..." 1>&5
 
 cf_save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS $CHECK_DECL_FLAG"
 cat > conftest.$ac_ext <<EOF
-#line 13605 "configure"
+#line 14202 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -13615,7 +14212,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13619: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14216: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   if test -n "$CHECK_DECL_HDRS" ; then
 # try to work around system headers which are infested with non-standard syntax
@@ -13623,7 +14220,7 @@ if { (eval echo configure:13619: \"$ac_l
 cf_1_up=`echo "${ac_func}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
 cat > conftest.$ac_ext <<EOF
-#line 13627 "configure"
+#line 14224 "configure"
 #include "confdefs.h"
 
 #define DECL_${cf_1_up}
@@ -13633,7 +14230,7 @@ int main() {
 long x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:13637: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14234: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_func_'${ac_func}'=yes'
 else
@@ -13731,18 +14328,18 @@ ac_tr_func=`echo "$ac_func" | sed y%abcd
 
 
 echo $ac_n "checking for missing "${ac_func}" extern""... $ac_c" 1>&6
-echo "configure:13735: checking for missing "${ac_func}" extern" >&5
+echo "configure:14332: checking for missing "${ac_func}" extern" >&5
 if eval "test \"`echo '$''{'cf_cv_func_${ac_func}'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 
-echo "(line 13741) testing for missing "${ac_func}" external ..." 1>&5
+echo "(line 14338) testing for missing "${ac_func}" external ..." 1>&5
 
 cf_save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS $CHECK_DECL_FLAG"
 cat > conftest.$ac_ext <<EOF
-#line 13746 "configure"
+#line 14343 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -13756,7 +14353,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   if test -n "$CHECK_DECL_HDRS" ; then
 # try to work around system headers which are infested with non-standard syntax
@@ -13764,7 +14361,7 @@ if { (eval echo configure:13760: \"$ac_l
 cf_1_up=`echo "${ac_func}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
 cat > conftest.$ac_ext <<EOF
-#line 13768 "configure"
+#line 14365 "configure"
 #include "confdefs.h"
 
 #define DECL_${cf_1_up}
@@ -13774,7 +14371,7 @@ int main() {
 long x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:13778: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14375: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_func_'${ac_func}'=yes'
 else
@@ -13818,18 +14415,18 @@ ac_tr_func=`echo "$ac_func" | sed y%abcd
 
 
 echo $ac_n "checking for missing "${ac_func}" extern""... $ac_c" 1>&6
-echo "configure:13822: checking for missing "${ac_func}" extern" >&5
+echo "configure:14419: checking for missing "${ac_func}" extern" >&5
 if eval "test \"`echo '$''{'cf_cv_func_${ac_func}'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 
-echo "(line 13828) testing for missing "${ac_func}" external ..." 1>&5
+echo "(line 14425) testing for missing "${ac_func}" external ..." 1>&5
 
 cf_save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS $CHECK_DECL_FLAG"
 cat > conftest.$ac_ext <<EOF
-#line 13833 "configure"
+#line 14430 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -13843,7 +14440,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13847: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14444: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   if test -n "$CHECK_DECL_HDRS" ; then
 # try to work around system headers which are infested with non-standard syntax
@@ -13851,7 +14448,7 @@ if { (eval echo configure:13847: \"$ac_l
 cf_1_up=`echo "${ac_func}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
 cat > conftest.$ac_ext <<EOF
-#line 13855 "configure"
+#line 14452 "configure"
 #include "confdefs.h"
 
 #define DECL_${cf_1_up}
@@ -13861,7 +14458,7 @@ int main() {
 long x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:13865: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14462: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_func_'${ac_func}'=yes'
 else
@@ -13908,18 +14505,18 @@ ac_tr_func=`echo "$ac_func" | sed y%abcd
 
 
 echo $ac_n "checking for missing "${ac_func}" extern""... $ac_c" 1>&6
-echo "configure:13912: checking for missing "${ac_func}" extern" >&5
+echo "configure:14509: checking for missing "${ac_func}" extern" >&5
 if eval "test \"`echo '$''{'cf_cv_func_${ac_func}'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 
-echo "(line 13918) testing for missing "${ac_func}" external ..." 1>&5
+echo "(line 14515) testing for missing "${ac_func}" external ..." 1>&5
 
 cf_save_CFLAGS="$CFLAGS"
 CFLAGS="$CFLAGS $CHECK_DECL_FLAG"
 cat > conftest.$ac_ext <<EOF
-#line 13923 "configure"
+#line 14520 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -13933,7 +14530,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13937: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   if test -n "$CHECK_DECL_HDRS" ; then
 # try to work around system headers which are infested with non-standard syntax
@@ -13941,7 +14538,7 @@ if { (eval echo configure:13937: \"$ac_l
 cf_1_up=`echo "${ac_func}" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
 cat > conftest.$ac_ext <<EOF
-#line 13945 "configure"
+#line 14542 "configure"
 #include "confdefs.h"
 
 #define DECL_${cf_1_up}
@@ -13951,7 +14548,7 @@ int main() {
 long x = 0
 ; return 0; }
 EOF
-if { (eval echo configure:13955: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:14552: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   eval 'cf_cv_func_'${ac_func}'=yes'
 else
@@ -13989,7 +14586,7 @@ fi
 
 
 echo $ac_n "checking for working TIOCGWINSZ""... $ac_c" 1>&6
-echo "configure:13993: checking for working TIOCGWINSZ" >&5
+echo "configure:14590: checking for working TIOCGWINSZ" >&5
 if eval "test \"`echo '$''{'cf_cv_use_tiocgwinsz'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14000,7 +14597,7 @@ else
   cf_cv_use_tiocgwinsz=unknown
 else
   cat > conftest.$ac_ext <<EOF
-#line 14004 "configure"
+#line 14601 "configure"
 #include "confdefs.h"
 
 $CHECK_DECL_HDRS
@@ -14025,7 +14622,7 @@ int main()
 	exit(0);	/* we cannot guarantee this is run interactively */
 }
 EOF
-if { (eval echo configure:14029: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:14626: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   cf_cv_use_tiocgwinsz=yes
 else
@@ -14072,7 +14669,7 @@ esac
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:14076: checking for $ac_word" >&5
+echo "configure:14673: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14102,19 +14699,19 @@ fi
 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:14106: checking for working alloca.h" >&5
+echo "configure:14703: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14111 "configure"
+#line 14708 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:14118: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14715: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -14135,12 +14732,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:14139: checking for alloca" >&5
+echo "configure:14736: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14144 "configure"
+#line 14741 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -14168,7 +14765,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:14172: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14769: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -14200,12 +14797,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:14204: checking whether alloca needs Cray hooks" >&5
+echo "configure:14801: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14209 "configure"
+#line 14806 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -14230,12 +14827,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14234: checking for $ac_func" >&5
+echo "configure:14831: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14239 "configure"
+#line 14836 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -14258,7 +14855,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:14859: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -14285,7 +14882,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:14289: checking stack direction for C alloca" >&5
+echo "configure:14886: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14293,7 +14890,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 14297 "configure"
+#line 14894 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -14312,7 +14909,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:14316: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:14913: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -14337,17 +14934,17 @@ for ac_hdr in unistd.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:14341: checking for $ac_hdr" >&5
+echo "configure:14938: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14346 "configure"
+#line 14943 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:14351: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:14948: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -14376,12 +14973,12 @@ done
 for ac_func in getpagesize
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14380: checking for $ac_func" >&5
+echo "configure:14977: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14385 "configure"
+#line 14982 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -14404,7 +15001,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15005: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -14429,7 +15026,7 @@ fi
 done
 
 echo $ac_n "checking for working mmap""... $ac_c" 1>&6
-echo "configure:14433: checking for working mmap" >&5
+echo "configure:15030: checking for working mmap" >&5
 if eval "test \"`echo '$''{'ac_cv_func_mmap_fixed_mapped'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14437,7 +15034,7 @@ else
   ac_cv_func_mmap_fixed_mapped=no
 else
   cat > conftest.$ac_ext <<EOF
-#line 14441 "configure"
+#line 15038 "configure"
 #include "confdefs.h"
 
 /* Thanks to Mike Haertel and Jim Avera for this test.
@@ -14577,7 +15174,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:14581: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:15178: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_mmap_fixed_mapped=yes
 else
@@ -14601,12 +15198,12 @@ fi
 
 
     echo $ac_n "checking whether we are using the GNU C Library 2.1 or newer""... $ac_c" 1>&6
-echo "configure:14605: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo "configure:15202: checking whether we are using the GNU C Library 2.1 or newer" >&5
 if eval "test \"`echo '$''{'ac_cv_gnu_library_2_1'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14610 "configure"
+#line 15207 "configure"
 #include "confdefs.h"
 
 #include <features.h>
@@ -14668,17 +15265,17 @@ stdlib.h string.h unistd.h sys/param.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:14672: checking for $ac_hdr" >&5
+echo "configure:15269: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14677 "configure"
+#line 15274 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:14682: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:15279: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -14709,12 +15306,12 @@ getgid getuid mempcpy munmap putenv sete
 strdup strtoul tsearch __argz_count __argz_stringify __argz_next
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:14713: checking for $ac_func" >&5
+echo "configure:15310: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14718 "configure"
+#line 15315 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -14737,7 +15334,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:14741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15338: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -14778,7 +15375,7 @@ fi
 
 
   echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:14782: checking for iconv" >&5
+echo "configure:15379: checking for iconv" >&5
 if eval "test \"`echo '$''{'am_cv_func_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -14786,7 +15383,7 @@ else
     am_cv_func_iconv="no, consider installing GNU libiconv"
     am_cv_lib_iconv=no
     cat > conftest.$ac_ext <<EOF
-#line 14790 "configure"
+#line 15387 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
@@ -14796,7 +15393,7 @@ iconv_t cd = iconv_open("","");
        iconv_close(cd);
 ; return 0; }
 EOF
-if { (eval echo configure:14800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_func_iconv=yes
 else
@@ -14808,7 +15405,7 @@ rm -f conftest*
       am_save_LIBS="$LIBS"
       LIBS="$LIBS -liconv"
       cat > conftest.$ac_ext <<EOF
-#line 14812 "configure"
+#line 15409 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <iconv.h>
@@ -14818,7 +15415,7 @@ iconv_t cd = iconv_open("","");
          iconv_close(cd);
 ; return 0; }
 EOF
-if { (eval echo configure:14822: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15419: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_lib_iconv=yes
         am_cv_func_iconv=yes
@@ -14839,13 +15436,13 @@ echo "$ac_t""$am_cv_func_iconv" 1>&6
 EOF
 
     echo $ac_n "checking for iconv declaration""... $ac_c" 1>&6
-echo "configure:14843: checking for iconv declaration" >&5
+echo "configure:15440: checking for iconv declaration" >&5
     if eval "test \"`echo '$''{'am_cv_proto_iconv'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
       cat > conftest.$ac_ext <<EOF
-#line 14849 "configure"
+#line 15446 "configure"
 #include "confdefs.h"
 
 #include <stdlib.h>
@@ -14864,7 +15461,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:14868: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:15465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   am_cv_proto_iconv_arg1=""
 else
@@ -14893,19 +15490,19 @@ EOF
 
    
   echo $ac_n "checking for nl_langinfo and CODESET""... $ac_c" 1>&6
-echo "configure:14897: checking for nl_langinfo and CODESET" >&5
+echo "configure:15494: checking for nl_langinfo and CODESET" >&5
 if eval "test \"`echo '$''{'am_cv_langinfo_codeset'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14902 "configure"
+#line 15499 "configure"
 #include "confdefs.h"
 #include <langinfo.h>
 int main() {
 char* cs = nl_langinfo(CODESET);
 ; return 0; }
 EOF
-if { (eval echo configure:14909: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15506: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_langinfo_codeset=yes
 else
@@ -14928,19 +15525,19 @@ EOF
 
    if test $ac_cv_header_locale_h = yes; then
     echo $ac_n "checking for LC_MESSAGES""... $ac_c" 1>&6
-echo "configure:14932: checking for LC_MESSAGES" >&5
+echo "configure:15529: checking for LC_MESSAGES" >&5
 if eval "test \"`echo '$''{'am_cv_val_LC_MESSAGES'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 14937 "configure"
+#line 15534 "configure"
 #include "confdefs.h"
 #include <locale.h>
 int main() {
 return LC_MESSAGES
 ; return 0; }
 EOF
-if { (eval echo configure:14944: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15541: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   am_cv_val_LC_MESSAGES=yes
 else
@@ -14961,7 +15558,7 @@ EOF
     fi
   fi
    echo $ac_n "checking whether NLS is requested""... $ac_c" 1>&6
-echo "configure:14965: checking whether NLS is requested" >&5
+echo "configure:15562: checking whether NLS is requested" >&5
         
     
 # Check whether --enable-nls or --disable-nls was given.
@@ -14985,7 +15582,7 @@ fi
 EOF
 
       echo $ac_n "checking whether included gettext is requested""... $ac_c" 1>&6
-echo "configure:14989: checking whether included gettext is requested" >&5
+echo "configure:15586: checking whether included gettext is requested" >&5
       
 # Check whether --with-included-gettext or --without-included-gettext was given.
 if test "${with_included_gettext+set}" = set; then
@@ -15006,17 +15603,17 @@ fi
 
 	ac_safe=`echo "libintl.h" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for libintl.h""... $ac_c" 1>&6
-echo "configure:15010: checking for libintl.h" >&5
+echo "configure:15607: checking for libintl.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15015 "configure"
+#line 15612 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:15020: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:15617: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -15033,12 +15630,12 @@ fi
 if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for GNU gettext in libc""... $ac_c" 1>&6
-echo "configure:15037: checking for GNU gettext in libc" >&5
+echo "configure:15634: checking for GNU gettext in libc" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libc'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15042 "configure"
+#line 15639 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -15047,7 +15644,7 @@ bindtextdomain ("", "");
 return (int) gettext ("") + _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:15051: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15648: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gnugettext1_libc=yes
 else
@@ -15063,14 +15660,14 @@ echo "$ac_t""$gt_cv_func_gnugettext1_lib
 
 	   if test "$gt_cv_func_gnugettext1_libc" != "yes"; then
 	     echo $ac_n "checking for GNU gettext in libintl""... $ac_c" 1>&6
-echo "configure:15067: checking for GNU gettext in libintl" >&5
+echo "configure:15664: checking for GNU gettext in libintl" >&5
 if eval "test \"`echo '$''{'gt_cv_func_gnugettext1_libintl'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   gt_save_LIBS="$LIBS"
 		LIBS="$LIBS -lintl $LIBICONV"
 		cat > conftest.$ac_ext <<EOF
-#line 15074 "configure"
+#line 15671 "configure"
 #include "confdefs.h"
 #include <libintl.h>
 extern int _nl_msg_cat_cntr;
@@ -15079,7 +15676,7 @@ bindtextdomain ("", "");
 return (int) gettext ("") + _nl_msg_cat_cntr
 ; return 0; }
 EOF
-if { (eval echo configure:15083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15680: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   gt_cv_func_gnugettext1_libintl=yes
 else
@@ -15112,12 +15709,12 @@ EOF
 	     for ac_func in dcgettext
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15116: checking for $ac_func" >&5
+echo "configure:15713: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15121 "configure"
+#line 15718 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -15140,7 +15737,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:15144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:15741: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -15170,7 +15767,7 @@ done
 
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:15174: checking for $ac_word" >&5
+echo "configure:15771: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15204,7 +15801,7 @@ fi
 	     # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:15208: checking for $ac_word" >&5
+echo "configure:15805: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15242,7 +15839,7 @@ fi
 
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:15246: checking for $ac_word" >&5
+echo "configure:15843: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15296,7 +15893,7 @@ fi
 
 set dummy msgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:15300: checking for $ac_word" >&5
+echo "configure:15897: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_MSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15330,7 +15927,7 @@ fi
         # Extract the first word of "gmsgfmt", so it can be a program name with args.
 set dummy gmsgfmt; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:15334: checking for $ac_word" >&5
+echo "configure:15931: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_GMSGFMT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15367,7 +15964,7 @@ fi
 
 set dummy xgettext; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:15371: checking for $ac_word" >&5
+echo "configure:15968: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_path_XGETTEXT'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15440,7 +16037,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:15444: checking for $ac_word" >&5
+echo "configure:16041: checking for $ac_word" >&5
 if eval "test \"`echo '$''{'ac_cv_prog_INTLBISON'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15473,7 +16070,7 @@ done
       ac_verc_fail=yes
     else
             echo $ac_n "checking version of bison""... $ac_c" 1>&6
-echo "configure:15477: checking version of bison" >&5
+echo "configure:16074: checking version of bison" >&5
       ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
       case $ac_prog_version in
         '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
@@ -15521,7 +16118,7 @@ echo "configure:15477: checking version 
        LINGUAS=
      else
        echo $ac_n "checking for catalogs to be installed""... $ac_c" 1>&6
-echo "configure:15525: checking for catalogs to be installed" >&5
+echo "configure:16122: checking for catalogs to be installed" >&5
        NEW_LINGUAS=
        for presentlang in $ALL_LINGUAS; do
          useit=no
@@ -15577,7 +16174,7 @@ use_our_messages=no
 if test "$USE_NLS" = yes ; then
 if test -d $srcdir/po ; then
 echo $ac_n "checking if we should use included message-library""... $ac_c" 1>&6
-echo "configure:15581: checking if we should use included message-library" >&5
+echo "configure:16178: checking if we should use included message-library" >&5
 	
 # Check whether --enable-included-msgs or --disable-included-msgs was given.
 if test "${enable_included_msgs+set}" = set; then
@@ -15594,7 +16191,7 @@ fi
 MSG_DIR_MAKE="#"
 if test "$use_our_messages" = yes
 then
-	SUB_MAKEFILE="$SUB_MAKEFILE $srcdir/po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn"
+	SUB_MAKEFILE="$SUB_MAKEFILE po/$cf_makefile.in:$srcdir/po/$cf_makefile.inn"
 	MSG_DIR_MAKE=
 fi
 
@@ -15620,7 +16217,7 @@ EOF
 			$srcdir/intl/makefile.in
 		do
 			if test -f "$cf_makefile" ; then
-				SUB_MAKEFILE="$SUB_MAKEFILE `echo ${cf_makefile}|sed -e 's/\.in$//'`:${cf_makefile}"
+				SUB_MAKEFILE="$SUB_MAKEFILE `echo \"${cf_makefile}\"|sed -e 's,^'$srcdir/',,' -e 's/\.in$//'`:${cf_makefile}"
 				break
 			fi
 		done
@@ -15632,17 +16229,17 @@ else
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:15636: checking for $ac_hdr" >&5
+echo "configure:16233: checking for $ac_hdr" >&5
 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15641 "configure"
+#line 16238 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:15646: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:16243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -15714,22 +16311,31 @@ LIBS="$LIBS $LIBICONV"
 ### check for alloca (required for bison and/or intl/*)
 case "$YACC" in
 bison*)
-	# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+	use_alloca=yes
+	;;
+*)
+	use_alloca=$USE_INCLUDED_LIBINTL
+	;;
+esac
+
+if test ".$use_alloca" = .yes ; then
+	
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
 # for constant arguments.  Useless!
 echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:15721: checking for working alloca.h" >&5
+echo "configure:16327: checking for working alloca.h" >&5
 if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15726 "configure"
+#line 16332 "configure"
 #include "confdefs.h"
 #include <alloca.h>
 int main() {
 char *p = alloca(2 * sizeof(int));
 ; return 0; }
 EOF
-if { (eval echo configure:15733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_header_alloca_h=yes
 else
@@ -15750,12 +16356,12 @@ EOF
 fi
 
 echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:15754: checking for alloca" >&5
+echo "configure:16360: checking for alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15759 "configure"
+#line 16365 "configure"
 #include "confdefs.h"
 
 #ifdef __GNUC__
@@ -15783,7 +16389,7 @@ int main() {
 char *p = (char *) alloca(1);
 ; return 0; }
 EOF
-if { (eval echo configure:15787: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_alloca_works=yes
 else
@@ -15815,12 +16421,12 @@ EOF
 
 
 echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:15819: checking whether alloca needs Cray hooks" >&5
+echo "configure:16425: checking whether alloca needs Cray hooks" >&5
 if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15824 "configure"
+#line 16430 "configure"
 #include "confdefs.h"
 #if defined(CRAY) && ! defined(CRAY2)
 webecray
@@ -15845,12 +16451,12 @@ echo "$ac_t""$ac_cv_os_cray" 1>&6
 if test $ac_cv_os_cray = yes; then
 for ac_func in _getb67 GETB67 getb67; do
   echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:15849: checking for $ac_func" >&5
+echo "configure:16455: checking for $ac_func" >&5
 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 15854 "configure"
+#line 16460 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -15873,7 +16479,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:15877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -15900,7 +16506,7 @@ done
 fi
 
 echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:15904: checking stack direction for C alloca" >&5
+echo "configure:16510: checking stack direction for C alloca" >&5
 if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
@@ -15908,7 +16514,7 @@ else
   ac_cv_c_stack_direction=0
 else
   cat > conftest.$ac_ext <<EOF
-#line 15912 "configure"
+#line 16518 "configure"
 #include "confdefs.h"
 find_stack_direction ()
 {
@@ -15927,7 +16533,7 @@ main ()
   exit (find_stack_direction() < 0);
 }
 EOF
-if { (eval echo configure:15931: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:16537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_c_stack_direction=1
 else
@@ -15948,260 +16554,33 @@ EOF
 
 fi
 
+
+case $host_os in
+linux*|gnu*)
+	# workaround for bison 1.875c (compound breakage in Linux stdlib.h
+	# and bison's output make bison try to use alloca()).
+	if test -z "$GCC" ; then
+		CPPFLAGS="-DYYSTACK_USE_ALLOCA=0 $CPPFLAGS"
+		ALLOCA=""
+	elif test "$INTEL_COMPILER" = yes ; then
+		CPPFLAGS="-DYYSTACK_USE_ALLOCA=0 $CPPFLAGS"
+		ALLOCA=""
+	fi
 	;;
-*)
-	case "$USE_INCLUDED_LIBINTL" in
-	yes)
-		# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
-# for constant arguments.  Useless!
-echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
-echo "configure:15959: checking for working alloca.h" >&5
-if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 15964 "configure"
-#include "confdefs.h"
-#include <alloca.h>
-int main() {
-char *p = alloca(2 * sizeof(int));
-; return 0; }
-EOF
-if { (eval echo configure:15971: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  ac_cv_header_alloca_h=yes
+esac
+
 else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  ac_cv_header_alloca_h=no
-fi
-rm -f conftest*
+	ALLOCA=""
+	
 fi
 
-echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
-if test $ac_cv_header_alloca_h = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_ALLOCA_H 1
-EOF
-
-fi
-
-echo $ac_n "checking for alloca""... $ac_c" 1>&6
-echo "configure:15992: checking for alloca" >&5
-if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 15997 "configure"
-#include "confdefs.h"
-
-#ifdef __GNUC__
-# define alloca __builtin_alloca
-#else
-# ifdef _MSC_VER
-#  include <malloc.h>
-#  define alloca _alloca
-# else
-#  if HAVE_ALLOCA_H
-#   include <alloca.h>
-#  else
-#   ifdef _AIX
- #pragma alloca
-#   else
-#    ifndef alloca /* predefined by HP cc +Olibcalls */
-char *alloca ();
-#    endif
-#   endif
-#  endif
-# endif
-#endif
-
-int main() {
-char *p = (char *) alloca(1);
-; return 0; }
-EOF
-if { (eval echo configure:16025: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  ac_cv_func_alloca_works=yes
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  ac_cv_func_alloca_works=no
-fi
-rm -f conftest*
-fi
-
-echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
-if test $ac_cv_func_alloca_works = yes; then
-  cat >> confdefs.h <<\EOF
-#define HAVE_ALLOCA 1
-EOF
-
-fi
-
-if test $ac_cv_func_alloca_works = no; then
-  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
-  # that cause trouble.  Some versions do not even contain alloca or
-  # contain a buggy version.  If you still want to use their alloca,
-  # use ar to extract alloca.o from them instead of compiling alloca.c.
-  ALLOCA=alloca.${ac_objext}
-  cat >> confdefs.h <<\EOF
-#define C_ALLOCA 1
-EOF
-
-
-echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
-echo "configure:16057: checking whether alloca needs Cray hooks" >&5
-if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 16062 "configure"
-#include "confdefs.h"
-#if defined(CRAY) && ! defined(CRAY2)
-webecray
-#else
-wenotbecray
-#endif
-
-EOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  egrep "webecray" >/dev/null 2>&1; then
-  rm -rf conftest*
-  ac_cv_os_cray=yes
-else
-  rm -rf conftest*
-  ac_cv_os_cray=no
-fi
-rm -f conftest*
-
-fi
-
-echo "$ac_t""$ac_cv_os_cray" 1>&6
-if test $ac_cv_os_cray = yes; then
-for ac_func in _getb67 GETB67 getb67; do
-  echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:16087: checking for $ac_func" >&5
-if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  cat > conftest.$ac_ext <<EOF
-#line 16092 "configure"
-#include "confdefs.h"
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $ac_func(); below.  */
-#include <assert.h>
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char $ac_func();
-
-int main() {
-
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
-choke me
-#else
-$ac_func();
-#endif
-
-; return 0; }
-EOF
-if { (eval echo configure:16115: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_func_$ac_func=no"
-fi
-rm -f conftest*
-fi
-
-if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  cat >> confdefs.h <<EOF
-#define CRAY_STACKSEG_END $ac_func
-EOF
-
-  break
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-done
-fi
-
-echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
-echo "configure:16142: checking stack direction for C alloca" >&5
-if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  if test "$cross_compiling" = yes; then
-  ac_cv_c_stack_direction=0
-else
-  cat > conftest.$ac_ext <<EOF
-#line 16150 "configure"
-#include "confdefs.h"
-find_stack_direction ()
-{
-  static char *addr = 0;
-  auto char dummy;
-  if (addr == 0)
-    {
-      addr = &dummy;
-      return find_stack_direction ();
-    }
-  else
-    return (&dummy > addr) ? 1 : -1;
-}
-main ()
-{
-  exit (find_stack_direction() < 0);
-}
-EOF
-if { (eval echo configure:16169: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
-  ac_cv_c_stack_direction=1
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  ac_cv_c_stack_direction=-1
-fi
-rm -fr conftest*
-fi
-
-fi
-
-echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
-cat >> confdefs.h <<EOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-EOF
-
-fi
-
-		;;
-	no)
-		ALLOCA=""
-		
-		;;
-	esac
-	;;
-esac
-
 
 for cf_hdr in iconv.h
 do
 	echo $ac_n "checking for $cf_hdr""... $ac_c" 1>&6
-echo "configure:16203: checking for $cf_hdr" >&5
+echo "configure:16582: checking for $cf_hdr" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 16205 "configure"
+#line 16584 "configure"
 #include "confdefs.h"
 
 #include <sys/types.h>
@@ -16209,7 +16588,7 @@ echo "configure:16203: checking for $cf_
 
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:16213: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:16592: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -16227,610 +16606,60 @@ if test $cf_found = yes ; then
 	
 cf_tr_hdr=`echo "$cf_hdr" | sed y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%`
 
-	cat >> confdefs.h <<EOF
-#define HAVE_${cf_tr_hdr} 1
-EOF
-
-fi
-done
-
-echo $ac_n "checking for iconv_open() //TRANSLIT extension""... $ac_c" 1>&6
-echo "configure:16239: checking for iconv_open() //TRANSLIT extension" >&5
-if test "$cross_compiling" = yes; then
-  echo "$ac_t""unknown" 1>&6
-
-else
-  cat > conftest.$ac_ext <<EOF
-#line 16245 "configure"
-#include "confdefs.h"
-
-#ifdef HAVE_ICONV_H
-#	include <iconv.h>
-#endif /* HAVE_ICONV_H */
-#ifdef HAVE_STDLIB_H
-#	include <stdlib.h>
-#endif /* HAVE_STDLIB_H */
-int main() {
-	iconv_t cd;
-
-	if ((cd = iconv_open("US-ASCII//TRANSLIT", "ISO-8859-1")) == (iconv_t) (-1))
-		exit(1);
-	exit(0);
-}
-EOF
-if { (eval echo configure:16262: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
-then
-  cat >> confdefs.h <<\EOF
-#define HAVE_ICONV_OPEN_TRANSLIT 1
-EOF
- echo "$ac_t""yes" 1>&6
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -fr conftest*
-  echo "$ac_t""no" 1>&6
-fi
-rm -fr conftest*
-fi
-
-
-
-# tin has mkdirs.sh instead of mkinstalldirs, overwrite the result of test
-# in gettext.m4
-MKINSTALLDIRS="\$(top_srcdir)/mkdirs.sh"
-
-
-if test "$cf_cv_termlib" = pdcurses ; then
-	# If we find X, set shell vars x_includes and x_libraries to the
-# paths, otherwise set no_x=yes.
-# Uses ac_ vars as temps to allow command line to override cache and checks.
-# --without-x overrides everything else, but does not touch the cache.
-echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:16290: checking for X" >&5
-
-
-# Check whether --with-x or --without-x was given.
-if test "${with_x+set}" = set; then
-  withval="$with_x"
-  :
-fi
-
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
-  # The user explicitly disabled X.
-  have_x=disabled
-else
-  if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
-    # Both variables are already set.
-    have_x=yes
-  else
-if eval "test \"`echo '$''{'ac_cv_have_x'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=NO ac_x_libraries=NO
-rm -fr conftestdir
-if mkdir conftestdir; then
-  cd conftestdir
-  # Make sure to not put "make" in the Imakefile rules, since we grep it out.
-  cat > Imakefile <<'EOF'
-acfindx:
-	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
-EOF
-  if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
-    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
-    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
-    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-    for ac_extension in a so sl; do
-      if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
-        test -f $ac_im_libdir/libX11.$ac_extension; then
-        ac_im_usrlibdir=$ac_im_libdir; break
-      fi
-    done
-    # Screen out bogus values from the imake configuration.  They are
-    # bogus both because they are the default anyway, and because
-    # using them would break gcc on systems where it needs fixed includes.
-    case "$ac_im_incroot" in
-	/usr/include) ;;
-	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;;
-    esac
-    case "$ac_im_usrlibdir" in
-	/usr/lib | /lib) ;;
-	*) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;;
-    esac
-  fi
-  cd ..
-  rm -fr conftestdir
-fi
-
-if test "$ac_x_includes" = NO; then
-  # Guess where to find include files, by looking for this one X11 .h file.
-  test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h
-
-  # First, try using that file with no special directory specified.
-cat > conftest.$ac_ext <<EOF
-#line 16353 "configure"
-#include "confdefs.h"
-#include <$x_direct_test_include>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:16358: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  # We can compile using X headers with no special include directory.
-ac_x_includes=
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  # Look for the header file in a standard set of common directories.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-  for ac_dir in               \
-    /usr/X11/include          \
-    /usr/X11R6/include        \
-    /usr/X11R5/include        \
-    /usr/X11R4/include        \
-                              \
-    /usr/include/X11          \
-    /usr/include/X11R6        \
-    /usr/include/X11R5        \
-    /usr/include/X11R4        \
-                              \
-    /usr/local/X11/include    \
-    /usr/local/X11R6/include  \
-    /usr/local/X11R5/include  \
-    /usr/local/X11R4/include  \
-                              \
-    /usr/local/include/X11    \
-    /usr/local/include/X11R6  \
-    /usr/local/include/X11R5  \
-    /usr/local/include/X11R4  \
-                              \
-    /usr/X386/include         \
-    /usr/x386/include         \
-    /usr/XFree86/include/X11  \
-                              \
-    /usr/include              \
-    /usr/local/include        \
-    /usr/unsupported/include  \
-    /usr/athena/include       \
-    /usr/local/x11r5/include  \
-    /usr/lpp/Xamples/include  \
-                              \
-    /usr/openwin/include      \
-    /usr/openwin/share/include \
-    ; \
-  do
-    if test -r "$ac_dir/$x_direct_test_include"; then
-      ac_x_includes=$ac_dir
-      break
-    fi
-  done
-fi
-rm -f conftest*
-fi # $ac_x_includes = NO
-
-if test "$ac_x_libraries" = NO; then
-  # Check for the libraries.
-
-  test -z "$x_direct_test_library" && x_direct_test_library=Xt
-  test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc
-
-  # See if we find them without any special options.
-  # Don't add to $LIBS permanently.
-  ac_save_LIBS="$LIBS"
-  LIBS="-l$x_direct_test_library $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16427 "configure"
-#include "confdefs.h"
-
-int main() {
-${x_direct_test_function}()
-; return 0; }
-EOF
-if { (eval echo configure:16434: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  LIBS="$ac_save_LIBS"
-# We can link X programs with no special library path.
-ac_x_libraries=
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  LIBS="$ac_save_LIBS"
-# First see if replacing the include by lib works.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \
-    /usr/X11/lib          \
-    /usr/X11R6/lib        \
-    /usr/X11R5/lib        \
-    /usr/X11R4/lib        \
-                          \
-    /usr/lib/X11          \
-    /usr/lib/X11R6        \
-    /usr/lib/X11R5        \
-    /usr/lib/X11R4        \
-                          \
-    /usr/local/X11/lib    \
-    /usr/local/X11R6/lib  \
-    /usr/local/X11R5/lib  \
-    /usr/local/X11R4/lib  \
-                          \
-    /usr/local/lib/X11    \
-    /usr/local/lib/X11R6  \
-    /usr/local/lib/X11R5  \
-    /usr/local/lib/X11R4  \
-                          \
-    /usr/X386/lib         \
-    /usr/x386/lib         \
-    /usr/XFree86/lib/X11  \
-                          \
-    /usr/lib              \
-    /usr/local/lib        \
-    /usr/unsupported/lib  \
-    /usr/athena/lib       \
-    /usr/local/x11r5/lib  \
-    /usr/lpp/Xamples/lib  \
-    /lib/usr/lib/X11	  \
-                          \
-    /usr/openwin/lib      \
-    /usr/openwin/share/lib \
-    ; \
-do
-  for ac_extension in a so sl; do
-    if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then
-      ac_x_libraries=$ac_dir
-      break 2
-    fi
-  done
-done
-fi
-rm -f conftest*
-fi # $ac_x_libraries = NO
-
-if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then
-  # Didn't find X anywhere.  Cache the known absence of X.
-  ac_cv_have_x="have_x=no"
-else
-  # Record where we found X for the cache.
-  ac_cv_have_x="have_x=yes \
-	        ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
-fi
-fi
-  fi
-  eval "$ac_cv_have_x"
-fi # $with_x != no
-
-if test "$have_x" != yes; then
-  echo "$ac_t""$have_x" 1>&6
-  no_x=yes
-else
-  # If each of the values was on the command line, it overrides each guess.
-  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
-  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
-  # Update the cache value to reflect the command line values.
-  ac_cv_have_x="have_x=yes \
-		ac_x_includes=$x_includes ac_x_libraries=$x_libraries"
-  echo "$ac_t""libraries $x_libraries, headers $x_includes" 1>&6
-fi
-
-
-
-# We need to check for -lsocket and -lnsl here in order to work around an
-# autoconf bug.  autoconf-2.12 is not checking for these prior to checking for
-# the X11R6 -lSM and -lICE libraries.  The resultant failures cascade...
-# 	(tested on Solaris 2.5 w/ X11R6)
-SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
-cf_have_X_LIBS=no
-case $SYSTEM_NAME in
-irix[56]*) ;;
-clix*)
-	# FIXME: modify the library lookup in autoconf to
-	# allow _s.a suffix ahead of .a
-	echo $ac_n "checking for open in -lc_s""... $ac_c" 1>&6
-echo "configure:16534: checking for open in -lc_s" >&5
-ac_lib_var=`echo c_s'_'open | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lc_s  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16542 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char open();
-
-int main() {
-open()
-; return 0; }
-EOF
-if { (eval echo configure:16553: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LIBS="-lc_s $LIBS"
-	echo $ac_n "checking for gethostname in -lbsd""... $ac_c" 1>&6
-echo "configure:16570: checking for gethostname in -lbsd" >&5
-ac_lib_var=`echo bsd'_'gethostname | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lbsd  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16578 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char gethostname();
-
-int main() {
-gethostname()
-; return 0; }
-EOF
-if { (eval echo configure:16589: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LIBS="-lbsd $LIBS"
-	echo $ac_n "checking for gethostname in -lnsl_s""... $ac_c" 1>&6
-echo "configure:16606: checking for gethostname in -lnsl_s" >&5
-ac_lib_var=`echo nsl_s'_'gethostname | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lnsl_s  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16614 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char gethostname();
-
-int main() {
-gethostname()
-; return 0; }
-EOF
-if { (eval echo configure:16625: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LIBS="-lnsl_s $LIBS"
-	echo $ac_n "checking for XOpenDisplay in -lX11_s""... $ac_c" 1>&6
-echo "configure:16642: checking for XOpenDisplay in -lX11_s" >&5
-ac_lib_var=`echo X11_s'_'XOpenDisplay | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lX11_s  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16650 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char XOpenDisplay();
-
-int main() {
-XOpenDisplay()
-; return 0; }
-EOF
-if { (eval echo configure:16661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LIBS="-lX11_s $LIBS"
-	echo $ac_n "checking for XtAppInitialize in -lXt_s""... $ac_c" 1>&6
-echo "configure:16678: checking for XtAppInitialize in -lXt_s" >&5
-ac_lib_var=`echo Xt_s'_'XtAppInitialize | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lXt_s  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16686 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char XtAppInitialize();
-
-int main() {
-XtAppInitialize()
-; return 0; }
-EOF
-if { (eval echo configure:16697: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-  LIBS="-lXt_s $LIBS"
-		 cf_have_X_LIBS=Xt
-		
-else
-  echo "$ac_t""no" 1>&6
-fi
- 
-else
-  echo "$ac_t""no" 1>&6
-fi
- 
-else
-  echo "$ac_t""no" 1>&6
-fi
- 
-else
-  echo "$ac_t""no" 1>&6
-fi
- 
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-	;;
-*)
-	echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:16738: checking for socket in -lsocket" >&5
-ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
-else
-  ac_save_LIBS="$LIBS"
-LIBS="-lsocket  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16746 "configure"
-#include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char socket();
-
-int main() {
-socket()
-; return 0; }
-EOF
-if { (eval echo configure:16757: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
-fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
-fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo socket | sed -e 's/[^a-zA-Z0-9_]/_/g' \
-    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
-
-  LIBS="-lsocket $LIBS"
+	cat >> confdefs.h <<EOF
+#define HAVE_${cf_tr_hdr} 1
+EOF
 
-else
-  echo "$ac_t""no" 1>&6
 fi
+done
+
+echo $ac_n "checking for iconv_open() //TRANSLIT extension""... $ac_c" 1>&6
+echo "configure:16618: checking for iconv_open() //TRANSLIT extension" >&5
+if test "$cross_compiling" = yes; then
+  echo "$ac_t""unknown" 1>&6
 
-	echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6
-echo "configure:16785: checking for gethostname in -lnsl" >&5
-ac_lib_var=`echo nsl'_'gethostname | sed 'y%./+-%__p_%'`
-if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
-  echo $ac_n "(cached) $ac_c" 1>&6
 else
-  ac_save_LIBS="$LIBS"
-LIBS="-lnsl  $LIBS"
-cat > conftest.$ac_ext <<EOF
-#line 16793 "configure"
+  cat > conftest.$ac_ext <<EOF
+#line 16624 "configure"
 #include "confdefs.h"
-/* Override any gcc2 internal prototype to avoid an error.  */
-/* We use char because int might match the return type of a gcc2
-    builtin and then its argument prototype would still apply.  */
-char gethostname();
 
+#ifdef HAVE_ICONV_H
+#	include <iconv.h>
+#endif /* HAVE_ICONV_H */
+#ifdef HAVE_STDLIB_H
+#	include <stdlib.h>
+#endif /* HAVE_STDLIB_H */
 int main() {
-gethostname()
-; return 0; }
+	iconv_t cd;
+
+	if ((cd = iconv_open("US-ASCII//TRANSLIT", "ISO-8859-1")) == (iconv_t) (-1))
+		exit(1);
+	exit(0);
+}
 EOF
-if { (eval echo configure:16804: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=yes"
+if { (eval echo configure:16641: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+  cat >> confdefs.h <<\EOF
+#define HAVE_ICONV_OPEN_TRANSLIT 1
+EOF
+ echo "$ac_t""yes" 1>&6
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_lib_$ac_lib_var=no"
+  rm -fr conftest*
+  echo "$ac_t""no" 1>&6
 fi
-rm -f conftest*
-LIBS="$ac_save_LIBS"
-
+rm -fr conftest*
 fi
-if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_lib=HAVE_LIB`echo nsl | sed -e 's/[^a-zA-Z0-9_]/_/g' \
-    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_lib 1
-EOF
 
-  LIBS="-lnsl $LIBS"
 
-else
-  echo "$ac_t""no" 1>&6
-fi
 
-	;;
-esac
+# tin has mkdirs.sh instead of mkinstalldirs, overwrite the result of test
+# in gettext.m4
+MKINSTALLDIRS="\$(top_srcdir)/mkdirs.sh"
 
-if test $cf_have_X_LIBS = no ; then
+
+if test "$cf_cv_termlib" = pdcurses ; then
 	if test "$no_x" = yes; then
   # Not all programs may use this symbol, but it does not hurt to define it.
   cat >> confdefs.h <<\EOF
@@ -16851,17 +16680,17 @@ else
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:16855: checking whether -R must be followed by a space" >&5
+echo "configure:16684: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 16858 "configure"
+#line 16687 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:16865: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -16877,14 +16706,14 @@ rm -f conftest*
       else
 	LIBS="$ac_xsave_LIBS -R $x_libraries"
 	cat > conftest.$ac_ext <<EOF
-#line 16881 "configure"
+#line 16710 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:16888: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -16916,7 +16745,7 @@ rm -f conftest*
     # libraries were built with DECnet support.  And karl@cs.umb.edu says
     # the Alpha needs dnet_stub (dnet does not exist).
     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:16920: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:16749: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -16924,7 +16753,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 16928 "configure"
+#line 16757 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -16935,7 +16764,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:16939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16768: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -16957,7 +16786,7 @@ fi
 
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:16961: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:16790: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -16965,7 +16794,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 16969 "configure"
+#line 16798 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -16976,7 +16805,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:16980: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16809: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17005,12 +16834,12 @@ fi
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey@clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:17009: checking for gethostbyname" >&5
+echo "configure:16838: checking for gethostbyname" >&5
 if eval "test \"`echo '$''{'ac_cv_func_gethostbyname'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17014 "configure"
+#line 16843 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -17033,7 +16862,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:17037: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16866: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -17054,7 +16883,7 @@ fi
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:17058: checking for gethostbyname in -lnsl" >&5
+echo "configure:16887: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17062,7 +16891,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17066 "configure"
+#line 16895 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17073,7 +16902,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:17077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16906: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17103,12 +16932,12 @@ fi
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:17107: checking for connect" >&5
+echo "configure:16936: checking for connect" >&5
 if eval "test \"`echo '$''{'ac_cv_func_connect'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17112 "configure"
+#line 16941 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -17131,7 +16960,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:17135: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:16964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -17152,7 +16981,7 @@ fi
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:17156: checking for connect in -lsocket" >&5
+echo "configure:16985: checking for connect in -lsocket" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17160,7 +16989,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17164 "configure"
+#line 16993 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17171,7 +17000,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:17175: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17195,12 +17024,12 @@ fi
 
     # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:17199: checking for remove" >&5
+echo "configure:17028: checking for remove" >&5
 if eval "test \"`echo '$''{'ac_cv_func_remove'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17204 "configure"
+#line 17033 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -17223,7 +17052,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:17227: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17056: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -17244,7 +17073,7 @@ fi
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:17248: checking for remove in -lposix" >&5
+echo "configure:17077: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17252,7 +17081,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17256 "configure"
+#line 17085 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17263,7 +17092,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:17267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17096: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17287,12 +17116,12 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:17291: checking for shmat" >&5
+echo "configure:17120: checking for shmat" >&5
 if eval "test \"`echo '$''{'ac_cv_func_shmat'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   cat > conftest.$ac_ext <<EOF
-#line 17296 "configure"
+#line 17125 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -17315,7 +17144,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:17319: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17148: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -17336,7 +17165,7 @@ fi
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:17340: checking for shmat in -lipc" >&5
+echo "configure:17169: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17344,7 +17173,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17348 "configure"
+#line 17177 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17355,7 +17184,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:17359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17188: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17388,7 +17217,7 @@ fi
   # libraries we check for below, so use a different variable.
   #  --interran@uluru.Stanford.EDU, kb@cs.umb.edu.
   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:17392: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:17221: checking for IceConnectionNumber in -lICE" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17396,7 +17225,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17400 "configure"
+#line 17229 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17407,7 +17236,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:17411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17240: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17431,19 +17260,49 @@ fi
 
 fi
 
-	LDFLAGS="$LDFLAGS $X_LIBS"
-	
+
+
+
+
+# SYSTEM_NAME=`echo "$cf_cv_system_name"|tr ' ' -`
+
+cf_have_X_LIBS=no
+
+LDFLAGS="$X_LIBS $LDFLAGS"
+
 test -n "$verbose" && echo "	checking additions to CFLAGS" 1>&6
 
 cf_check_cflags="$CFLAGS"
 cf_check_cppflags="$CPPFLAGS"
 
+cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
+cf_new_extra_cppflags=
+
 for cf_add_cflags in $X_CFLAGS
 do
+case $cf_fix_cppflags in
+no)
 	case $cf_add_cflags in #(vi
 	-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+		case $cf_add_cflags in
+		-D*)
+			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+			&& test -z "${cf_tst_cflags}" \
+			&& cf_fix_cppflags=yes
+
+			if test $cf_fix_cppflags = yes ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			fi
+			;;
+		esac
 		case "$CPPFLAGS" in
 		*$cf_add_cflags) #(vi
 			;;
@@ -17456,6 +17315,17 @@ do
 		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
 		;;
 	esac
+	;;
+yes)
+	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+	test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+	&& test -z "${cf_tst_cflags}" \
+	&& cf_fix_cppflags=no
+	;;
+esac
 done
 
 if test -n "$cf_new_cflags" ; then
@@ -17470,17 +17340,25 @@ if test -n "$cf_new_cppflags" ; then
 	CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
 fi
 
+if test -n "$cf_new_extra_cppflags" ; then
+	test -n "$verbose" && echo "	add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6
+
+	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+
+
 
 if test "$cf_check_cflags" != "$CFLAGS" ; then
 cat > conftest.$ac_ext <<EOF
-#line 17477 "configure"
+#line 17355 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello world");
 ; return 0; }
 EOF
-if { (eval echo configure:17484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17362: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -17497,8 +17375,56 @@ fi
 rm -f conftest*
 fi
 
-	echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:17502: checking for XOpenDisplay in -lX11" >&5
+
+echo $ac_n "checking for XOpenDisplay""... $ac_c" 1>&6
+echo "configure:17381: checking for XOpenDisplay" >&5
+if eval "test \"`echo '$''{'ac_cv_func_XOpenDisplay'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 17386 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char XOpenDisplay(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char XOpenDisplay();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_XOpenDisplay) || defined (__stub___XOpenDisplay)
+choke me
+#else
+XOpenDisplay();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:17409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_XOpenDisplay=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_XOpenDisplay=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'XOpenDisplay`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+
+echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
+echo "configure:17428: checking for XOpenDisplay in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17506,7 +17432,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17510 "configure"
+#line 17436 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17517,7 +17443,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:17521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17447: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17537,8 +17463,58 @@ else
   echo "$ac_t""no" 1>&6
 fi
 
-	echo $ac_n "checking for XtAppInitialize in -lXt""... $ac_c" 1>&6
-echo "configure:17542: checking for XtAppInitialize in -lXt" >&5
+fi
+
+
+echo $ac_n "checking for XtAppInitialize""... $ac_c" 1>&6
+echo "configure:17471: checking for XtAppInitialize" >&5
+if eval "test \"`echo '$''{'ac_cv_func_XtAppInitialize'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 17476 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char XtAppInitialize(); below.  */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char XtAppInitialize();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined (__stub_XtAppInitialize) || defined (__stub___XtAppInitialize)
+choke me
+#else
+XtAppInitialize();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:17499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_func_XtAppInitialize=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_XtAppInitialize=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'XtAppInitialize`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+
+echo $ac_n "checking for XtAppInitialize in -lXt""... $ac_c" 1>&6
+echo "configure:17518: checking for XtAppInitialize in -lXt" >&5
 ac_lib_var=`echo Xt'_'XtAppInitialize | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17546,7 +17522,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXt $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17550 "configure"
+#line 17526 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17557,7 +17533,7 @@ int main() {
 XtAppInitialize()
 ; return 0; }
 EOF
-if { (eval echo configure:17561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17537: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17576,80 +17552,14 @@ if eval "test \"`echo '$ac_cv_lib_'$ac_l
 #define HAVE_LIBXT 1
 EOF
 
-		 cf_have_X_LIBS=Xt
-		 LIBS="-lXt $X_PRE_LIBS $LIBS"
+	 cf_have_X_LIBS=Xt
+	 LIBS="-lXt $X_PRE_LIBS $LIBS"
 else
   echo "$ac_t""no" 1>&6
 fi
 
-else
-	LDFLAGS="$LDFLAGS $X_LIBS"
-	
-test -n "$verbose" && echo "	checking additions to CFLAGS" 1>&6
-
-cf_check_cflags="$CFLAGS"
-cf_check_cppflags="$CPPFLAGS"
-
-cf_new_cflags=
-cf_new_cppflags=
-for cf_add_cflags in $X_CFLAGS
-do
-	case $cf_add_cflags in #(vi
-	-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
-		case "$CPPFLAGS" in
-		*$cf_add_cflags) #(vi
-			;;
-		*) #(vi
-			cf_new_cppflags="$cf_new_cppflags $cf_add_cflags"
-			;;
-		esac
-		;;
-	*)
-		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
-		;;
-	esac
-done
-
-if test -n "$cf_new_cflags" ; then
-	test -n "$verbose" && echo "	add to \$CFLAGS $cf_new_cflags" 1>&6
-
-	CFLAGS="$CFLAGS $cf_new_cflags"
-fi
-
-if test -n "$cf_new_cppflags" ; then
-	test -n "$verbose" && echo "	add to \$CPPFLAGS $cf_new_cppflags" 1>&6
-
-	CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
-fi
-
-
-if test "$cf_check_cflags" != "$CFLAGS" ; then
-cat > conftest.$ac_ext <<EOF
-#line 17629 "configure"
-#include "confdefs.h"
-#include <stdio.h>
-int main() {
-printf("Hello world");
-; return 0; }
-EOF
-if { (eval echo configure:17636: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
-  :
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  test -n "$verbose" && echo "	test-compile failed.  Undoing change to \$CFLAGS" 1>&6
-
-	 if test "$cf_check_cppflags" != "$CPPFLAGS" ; then
-		 test -n "$verbose" && echo "	but keeping change to \$CPPFLAGS" 1>&6
-
-	 fi
-	 CFLAGS="$cf_check_flags"
-fi
-rm -f conftest*
 fi
 
-fi
 
 if test $cf_have_X_LIBS = no ; then
 	echo "configure: warning: Unable to successfully link X Toolkit library (-lXt) with
@@ -17660,32 +17570,59 @@ fi
 
 cf_x_athena=${cf_x_athena-Xaw}
 
+echo $ac_n "checking if you want to link with Xaw 3d library""... $ac_c" 1>&6
+echo "configure:17575: checking if you want to link with Xaw 3d library" >&5
+withval=
 
 # Check whether --with-Xaw3d or --without-Xaw3d was given.
 if test "${with_Xaw3d+set}" = set; then
   withval="$with_Xaw3d"
-  cf_x_athena=Xaw3d
+  :
 fi
 
+if test "$withval" = yes ; then
+	cf_x_athena=Xaw3d
+	echo "$ac_t""yes" 1>&6
+else
+	echo "$ac_t""no" 1>&6
+fi
 
+echo $ac_n "checking if you want to link with neXT Athena library""... $ac_c" 1>&6
+echo "configure:17592: checking if you want to link with neXT Athena library" >&5
+withval=
 
 # Check whether --with-neXtaw or --without-neXtaw was given.
 if test "${with_neXtaw+set}" = set; then
   withval="$with_neXtaw"
-  cf_x_athena=neXtaw
+  :
 fi
 
+if test "$withval" = yes ; then
+	cf_x_athena=neXtaw
+	echo "$ac_t""yes" 1>&6
+else
+	echo "$ac_t""no" 1>&6
+fi
 
+echo $ac_n "checking if you want to link with Athena-Plus library""... $ac_c" 1>&6
+echo "configure:17609: checking if you want to link with Athena-Plus library" >&5
+withval=
 
 # Check whether --with-XawPlus or --without-XawPlus was given.
 if test "${with_XawPlus+set}" = set; then
   withval="$with_XawPlus"
-  cf_x_athena=XawPlus
+  :
 fi
 
+if test "$withval" = yes ; then
+	cf_x_athena=XawPlus
+	echo "$ac_t""yes" 1>&6
+else
+	echo "$ac_t""no" 1>&6
+fi
 
 echo $ac_n "checking for XextCreateExtension in -lXext""... $ac_c" 1>&6
-echo "configure:17689: checking for XextCreateExtension in -lXext" >&5
+echo "configure:17626: checking for XextCreateExtension in -lXext" >&5
 ac_lib_var=`echo Xext'_'XextCreateExtension | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17693,7 +17630,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lXext  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17697 "configure"
+#line 17634 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17704,7 +17641,7 @@ int main() {
 XextCreateExtension()
 ; return 0; }
 EOF
-if { (eval echo configure:17708: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17645: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17743,13 +17680,13 @@ do
 		if test $cf_path != default ; then
 			CPPFLAGS="-I$cf_path/include $cf_save"
 			echo $ac_n "checking for $cf_test in $cf_path""... $ac_c" 1>&6
-echo "configure:17747: checking for $cf_test in $cf_path" >&5
+echo "configure:17684: checking for $cf_test in $cf_path" >&5
 		else
 			echo $ac_n "checking for $cf_test""... $ac_c" 1>&6
-echo "configure:17750: checking for $cf_test" >&5
+echo "configure:17687: checking for $cf_test" >&5
 		fi
 		cat > conftest.$ac_ext <<EOF
-#line 17753 "configure"
+#line 17690 "configure"
 #include "confdefs.h"
 
 #include <X11/Intrinsic.h>
@@ -17758,7 +17695,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:17762: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:17699: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -17805,23 +17742,23 @@ do
 			if test $cf_path != default ; then
 				LIBS="-L$cf_path/lib $cf_lib $LIBS"
 				echo $ac_n "checking for $cf_lib in $cf_path""... $ac_c" 1>&6
-echo "configure:17809: checking for $cf_lib in $cf_path" >&5
+echo "configure:17746: checking for $cf_lib in $cf_path" >&5
 			else
 				LIBS="$cf_lib $LIBS"
 				echo $ac_n "checking for $cf_test in $cf_lib""... $ac_c" 1>&6
-echo "configure:17813: checking for $cf_test in $cf_lib" >&5
+echo "configure:17750: checking for $cf_test in $cf_lib" >&5
 			fi
 			cf_SAVE="$LIBS"
 			LIBS="$X_PRE_LIBS $LIBS $X_EXTRA_LIBS"
 			cat > conftest.$ac_ext <<EOF
-#line 17818 "configure"
+#line 17755 "configure"
 #include "confdefs.h"
 
 int main() {
 $cf_test()
 ; return 0; }
 EOF
-if { (eval echo configure:17825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17762: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_result=yes
 else
@@ -17865,12 +17802,34 @@ test -n "$verbose" && echo "	checking ad
 cf_check_cflags="$CFLAGS"
 cf_check_cppflags="$CPPFLAGS"
 
+cf_fix_cppflags=no
 cf_new_cflags=
 cf_new_cppflags=
+cf_new_extra_cppflags=
+
 for cf_add_cflags in $X_CFLAGS
 do
+case $cf_fix_cppflags in
+no)
 	case $cf_add_cflags in #(vi
 	-undef|-nostdinc*|-I*|-D*|-U*|-E|-P|-C) #(vi
+		case $cf_add_cflags in
+		-D*)
+			cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^-D[^=]*='\''\"[^"]*//'`
+
+			test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+			&& test -z "${cf_tst_cflags}" \
+			&& cf_fix_cppflags=yes
+
+			if test $cf_fix_cppflags = yes ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			elif test "${cf_tst_cflags}" = "\"'" ; then
+				cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+				continue
+			fi
+			;;
+		esac
 		case "$CPPFLAGS" in
 		*$cf_add_cflags) #(vi
 			;;
@@ -17883,6 +17842,17 @@ do
 		cf_new_cflags="$cf_new_cflags $cf_add_cflags"
 		;;
 	esac
+	;;
+yes)
+	cf_new_extra_cppflags="$cf_new_extra_cppflags $cf_add_cflags"
+
+	cf_tst_cflags=`echo ${cf_add_cflags} |sed -e 's/^[^"]*"'\''//'`
+
+	test "${cf_add_cflags}" != "${cf_tst_cflags}" \
+	&& test -z "${cf_tst_cflags}" \
+	&& cf_fix_cppflags=no
+	;;
+esac
 done
 
 if test -n "$cf_new_cflags" ; then
@@ -17897,17 +17867,25 @@ if test -n "$cf_new_cppflags" ; then
 	CPPFLAGS="$cf_new_cppflags $CPPFLAGS"
 fi
 
+if test -n "$cf_new_extra_cppflags" ; then
+	test -n "$verbose" && echo "	add to \$EXTRA_CPPFLAGS $cf_new_extra_cppflags" 1>&6
+
+	EXTRA_CPPFLAGS="$cf_new_extra_cppflags $EXTRA_CPPFLAGS"
+fi
+
+
+
 
 if test "$cf_check_cflags" != "$CFLAGS" ; then
 cat > conftest.$ac_ext <<EOF
-#line 17904 "configure"
+#line 17882 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 printf("Hello world");
 ; return 0; }
 EOF
-if { (eval echo configure:17911: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17889: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -17925,7 +17903,7 @@ rm -f conftest*
 fi
 
 echo $ac_n "checking for XOpenDisplay in -lX11""... $ac_c" 1>&6
-echo "configure:17929: checking for XOpenDisplay in -lX11" >&5
+echo "configure:17907: checking for XOpenDisplay in -lX11" >&5
 ac_lib_var=`echo X11'_'XOpenDisplay | sed 'y%./+-%__p_%'`
 if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
@@ -17933,7 +17911,7 @@ else
   ac_save_LIBS="$LIBS"
 LIBS="-lX11 $X_PRE_LIBS $LIBS $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17937 "configure"
+#line 17915 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -17944,7 +17922,7 @@ int main() {
 XOpenDisplay()
 ; return 0; }
 EOF
-if { (eval echo configure:17948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -17965,14 +17943,14 @@ else
 fi
 
 echo $ac_n "checking for XCurses library""... $ac_c" 1>&6
-echo "configure:17969: checking for XCurses library" >&5
+echo "configure:17947: checking for XCurses library" >&5
 if eval "test \"`echo '$''{'cf_cv_lib_XCurses'+set}'`\" = set"; then
   echo $ac_n "(cached) $ac_c" 1>&6
 else
   
 LIBS="-lXCurses $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 17976 "configure"
+#line 17954 "configure"
 #include "confdefs.h"
 
 #include <xcurses.h>
@@ -17982,7 +17960,7 @@ int main() {
 XCursesExit();
 ; return 0; }
 EOF
-if { (eval echo configure:17986: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:17964: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   cf_cv_lib_XCurses=yes
 else
@@ -18169,7 +18147,7 @@ do
     echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
     exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
   -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
-    echo "$CONFIG_STATUS generated by autoconf version 2.13.20020210"
+    echo "$CONFIG_STATUS generated by autoconf version 2.13.20030927"
     exit 0 ;;
   -help | --help | --hel | --he | --h)
     echo "\$ac_cs_usage"; exit 0 ;;
@@ -18231,6 +18209,7 @@ s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
 s%@INSTALL_DATA@%$INSTALL_DATA%g
 s%@YACC@%$YACC%g
 s%@LINT@%$LINT%g
+s%@EXTRA_CPPFLAGS@%$EXTRA_CPPFLAGS%g
 s%@EXEEXT@%$EXEEXT%g
 s%@OBJEXT@%$OBJEXT%g
 s%@PROG_EXT@%$PROG_EXT%g
diff -Nurp tin-1.7.8/configure.in tin-1.7.9/configure.in
--- tin-1.7.8/configure.in	2005-03-21 13:44:03.000000000 +0100
+++ tin-1.7.9/configure.in	2005-06-29 11:47:02.557656487 +0200
@@ -2,7 +2,7 @@ dnl Project   : tin - a Usenet reader
 dnl Module    : configure.in
 dnl Author    : Thomas E. Dickey <dickey@invisible-island.net>
 dnl Created   : 1995-08-24
-dnl Updated   : 2005-03-20
+dnl Updated   : 2005-06-09
 dnl Notes     :
 dnl
 dnl Copyright (c) 1995-2005 Thomas E. Dickey <dickey@invisible-island.net>
@@ -41,7 +41,7 @@ AC_PREFIX_DEFAULT(/usr/local)
 
 dnl PACKAGE is required for GNU gettext
 PACKAGE=tin
-VERSION=1.7.8
+VERSION=1.7.9
 AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE")
 AC_DEFINE_UNQUOTED(VERSION, "$VERSION")
 AC_SUBST(PACKAGE)
@@ -76,7 +76,7 @@ case "$host_os" in
 esac
 
 ### Native Language Support
-ALL_LINGUAS="de en_GB et fr tr"
+ALL_LINGUAS="de en_GB et fr ru rw tr"
 
 ### Checks for programs
 save_CFLAGS="$CFLAGS"
@@ -85,9 +85,9 @@ AC_PROG_GCC_TRADITIONAL
 AC_PROG_MAKE_SET
 AC_PROG_INSTALL
 CF_PROG_YACC
-AC_CHECK_PROGS(LINT, lint alint lclint tdlint splint, [])
+AC_CHECK_PROGS(LINT, lint alint lclint tdlint splint, :)
 AC_AIX
-CF_GNU_SOURCE
+CF_XOPEN_SOURCE
 AC_ISC_POSIX
 CF_ANSI_CC_REQD
 CF_PROG_EXT
@@ -155,7 +155,7 @@ fi
 
 ## Default shell
 AC_ARG_WITH(shell,
-	[  --with-shell=PROG       default \$SHELL program (default: sh)],
+	[  --with-shell=PROG       default $SHELL program (default: sh)],
 	[cf_cv_default_shell=$withval],
 	[cf_cv_default_shell=])
 CF_DEFAULT_SHELL($cf_cv_default_shell)
@@ -291,14 +291,14 @@ AC_SUBST(INN_NNTPLIB)
 ### are used in a lot of places.
 AC_CACHE_CHECK(if you want socks library,cf_cv_use_libsocks,[
 AC_ARG_WITH(socks,
-	[  --with-socks[=path]       link with socks library if available],
+	[  --with-socks[=path]     link with socks library if available],
 	[cf_cv_use_libsocks=$withval],
 	[cf_cv_use_libsocks=no])
 ])
 
 AC_CACHE_CHECK(if you want socks5 library,cf_cv_use_libsocks5,[
 AC_ARG_WITH(socks5,
-	[  --with-socks5[=path]      link with socks5 library if available],
+	[  --with-socks5[=path]    link with socks5 library if available],
 	[cf_cv_use_libsocks5=$withval],
 	[cf_cv_use_libsocks5=no])
 ])
@@ -464,7 +464,7 @@ AC_SUBST(EXTRAOBJS)
 ## options for miscellaneous definitions
 AC_MSG_CHECKING(for domain-name)
 CF_ARG_WITH(domain-name,
-	[  --with-domain-name      sets \$DOMAIN_NAME],
+	[  --with-domain-name      sets $DOMAIN_NAME],
 	DOMAIN_NAME)
 if test "$DOMAIN_NAME" != ""; then
 	AC_DEFINE_UNQUOTED(DOMAIN_NAME, "$DOMAIN_NAME")
@@ -475,9 +475,9 @@ if test "$USE_NNTP" = "yes" ; then
 AC_MSG_CHECKING(for NNTP default-server)
 CF_ARG_WITH(nntp-default-server,
 	[  --with-nntp-default-server
-                          (sets \$NNTP_DEFAULT_SERVER)
-                          (default: news\$DOMAIN_NAME)],
-	[NNTP_DEFAULT_SERVER])
+                          (sets NNTP_DEFAULT_SERVER)
+                         ],
+	[NNTP_DEFAULT_SERVER], news.$DOMAIN_NAME)
 
     if test "$NNTP_DEFAULT_SERVER" = "" ; then
 	if test "$DOMAIN_NAME" != "" ; then
@@ -551,7 +551,7 @@ AC_MSG_RESULT($enableval)
 AC_MSG_CHECKING(for MIME character-set)
 CF_WITH_DFTENV(mime-default-charset,
 	[  --with-mime-default-charset=CHARSET
-                          fallback for \$MM_CHARSET],
+                          fallback for $MM_CHARSET],
 	MM_CHARSET,US-ASCII)
 AC_MSG_RESULT($MM_CHARSET)
 
@@ -1189,21 +1189,20 @@ LIBS="$LIBS $LIBICONV"
 ### check for alloca (required for bison and/or intl/*)
 case "$YACC" in
 bison*)
-	AC_FUNC_ALLOCA
+	use_alloca=yes
 	;;
 *)
-	case "$USE_INCLUDED_LIBINTL" in
-	yes)
-		AC_FUNC_ALLOCA
-		;;
-	no)
-		ALLOCA=""
-		AC_SUBST(ALLOCA)
-		;;
-	esac
+	use_alloca=$USE_INCLUDED_LIBINTL
 	;;
 esac
 
+if test ".$use_alloca" = .yes ; then
+	CF_FUNC_ALLOCA
+else
+	ALLOCA=""
+	AC_SUBST(ALLOCA)
+fi
+
 CF_CHECK_HEADERS(iconv.h)
 AC_MSG_CHECKING(for iconv_open() //TRANSLIT extension)
 AC_TRY_RUN([
diff -Nurp tin-1.7.8/doc/CHANGES tin-1.7.9/doc/CHANGES
--- tin-1.7.8/doc/CHANGES	2005-03-21 12:06:05.000000000 +0100
+++ tin-1.7.9/doc/CHANGES	2005-06-29 11:32:32.490827081 +0200
@@ -1,3 +1,61 @@
+-- 1.7.9 release 20050629 "Grimsay" --
+
+U045) Thomas E. Dickey <dickey@invisible-island.net>
+      ADD. update configure macros and some dependencies in Makefile
+      FIX. aclocal.m4, configure[.in], Makefile[.in], art.c
+
+U044) Travis Brown <travisb@sfu.ca>
+      ADD. new threading method THREAD_PERC
+      FIX. extern.h, tin.h, tinrc.h, art.c, config.c, init.c, lang.c
+           options_menu.c, tincfg.tbl, tin.1, tin.5
+
+U043) Urs Janssen <urs@tin.org>
+      BUG. POST_EDIT was mssing from post_cancel_keys
+      BUG. GLOBAL_QUIT was missing from post_edit_keys and
+           post_edit_ext_keys and not rebindable in post_continue_keys
+      BUG. dublicated onlinehelp entries
+      BUG. FeedRepost didn't work
+      BUG. digits were missing in option_menu_keys
+      BUG. PGP_INCLUDE_KEY in the pgp-2 case didn't work
+      ADD. pcre update (5.0 -> 6.1)
+      ADD. warning about lines exceeding 998 octets
+      ADD. try LIST MOTD at start and show it's output if any
+      ADD. merged GroupBugReport, SelectBugReport, ThreadBugReport to
+           BugReport; GroupMarkArtUnread, PageMarkArtUnread,
+           ThreadMarkArtUnread to MarkArticleUnread; GroupMarkThdUnread,
+           PageMarkThdUnread ThreadMarkThdUnread to MarkThreadUnread;
+           GroupCatchup, PageCatchup, SelectCatchup, ThreadCatchup to
+           Catchup; GroupCatchupNextUnread, PageCatchupNextUnread,
+           SelectCatchupNextUnread, ThreadCatchupNextUnread to
+           CatchupNextUnread
+      ADD. don't care about subscritions file if reading saved news
+      ADD. extended tin_ltoa() and fix a hypotetic out of bounds write
+      ADD. set LINT to : if no lint found
+      ADD. config.guess, config.sub update
+      ADD. some more CAPABILITIES parsing
+      FIX. Makefile, aclocal.m4, configure[.in], extern.h, keymap.h, nntplib.h
+           tin.h, art.c, attrib.c, debug.c, curses.c, feed.c, filter.c
+           global.c, group.c, help.c, init.c, keymap.c, lang.c, main.c, misc.c
+           newsrc.c, nntplib.c, options_menu.c, page.c, post.c, save.c
+           select.c, string.c, thread.c, xref.c, tin.1, tin.5, config.guess
+           config.sub, de.po, pcre/*
+
+U042) Steven Michael Murphy <murf@e-tools.com>
+      ADD. started kinyarwanda translation
+      FIX. rw.po
+
+U041) Andrei Emeltchenko <andrei.emeltchenko@finik.org>
+      ADD. started russian translation
+      FIX. ru.po
+
+U040) Michael Bienia <michael@vorlon.ping.de>
+      BUG. keybindings were inited to late
+      ADD. dynamic space calculation in filter_menu()
+      ADD. use enum option_enum instead of int where appropiate
+      FIX. Makefile[.in], proto.h, tin.h, filter.c, group.c, keymap.c, main.c
+           options_menu.c, page.c, prompt.c, search.c, signal.c, thread.c
+           makecfg.c
+
 -- 1.7.8 release 20050321 "Hellisay" --
 
 U039) Matt Anton <tin@syrius.org>
@@ -27,7 +85,7 @@ U035) Urs Janssen <urs@tin.org>
       ADD. GLOBAL_PRINT ('o') to thread-level
       ADD. EDIT_FILTER ('E') to select- and thread-level
       ADD. update online 'h'elp
-      ADD. ad configure check and fallback for non ANSI-C strsep() function
+      ADD. configure check and fallback for non ANSI-C strsep() function
       BUG. typos in the german translation
       BUG. didn't compile if configured with --disable-printing
       BUG. description of a few keys in the online help was wrong
@@ -37,7 +95,7 @@ U035) Urs Janssen <urs@tin.org>
            debug.c, feed.c, filter.c, group.c, help.c, keymap.c, lang.c, main.c
            memory.c, misc.c, nntplib.c, options_menu.c, page.c, post.c
            screen.c, select.c, string.c, thread.c, xref.c, de.po, tr.po
-           Makefile, configure.in, autoconf.hin. config.guess, config.sub
+           Makefile, configure[.in], autoconf.hin. config.guess, config.sub
            tin.1, tin.5
 
 -- 1.7.7 release 20041215 "Scalpay" --
diff -Nurp tin-1.7.8/doc/CREDITS tin-1.7.9/doc/CREDITS
--- tin-1.7.8/doc/CREDITS	2005-03-08 11:31:56.000000000 +0100
+++ tin-1.7.9/doc/CREDITS	2005-06-28 10:31:19.775366936 +0200
@@ -6,61 +6,61 @@ George Baltz, Dieter Baron, Volker Barth
 Dieter Becker, Wolfgang Behrens, Fabrice Bellet, Greg Berigan, Enrik
 Berkhan, Juergen Bernau, Dan Berry, Michael Bienia, David Binderman, Andrey
 Blochintsev, Chris Blum, Fokke de Boer, Andreas Borchert, Sebastian Bork,
-Mark Boucher, Robert Brady, Bill Brolik, Herman ten Brugge, Martin Buck,
-Jeremy Buhler, Leila Burrell-Davis, Sean Casey, Peter Castro, Troy Cauble,
-Andrey A. Chernov, Albert Chin-A-Young, Park Chong-Dae, Tan Kwee Chuan,
-Boleslaw Ciesielski, Robert Claeson, Steven Cogswell, Don Costello, Joshua
-Crawford, Bryan Curnutt, Ned Danieley, Lars Dannenberg, Chris Davies, John
-Davis, Borislav Deianov, Thomas E. Dickey, Martin Dickopp, Olaf Dietrich,
-Herbert Martin Dietze, Theo Van Dinter, Ralf Doeblitz, Bryan Dongray,
-Michael Douglass, Nickolay Dudorov, Craig Durland, Bernd Eckenfels, Phil
-Edge, Kirk Edson, Nick Efthymiou, Stefan Elf, Nigel Ellis, L. Scott Emmons,
-Rob Engle, Olle Eriksson, Brent Ermlick, Bernd Ernesti, Ragnar Hojland
-Espinosa, Jason Faultless, Michael Faurot, Werner Fleck, John M.
-Flinchbaugh, Andy Gabor, Christian Garbs, Torsten Gesang, Ruediger Geys,
-Callum Gibson, Mike Glendinning, Igor Goryachev, Philippe Goujard, Dan
-Greenspan, Dennis Grevenstein, Karlo Gross, Carl Hage, Piers Haken, Paul
-Halsema, Ed Hanway, Scott Hauck, Christian Haul, James Hawtin, Per Headland,
-Arnold Hendriks, Daniel Hermans, Jose Herrero, Dave Hill, Tom Hite, Torsten
-Homeyer, Ulli Horlacher, Keith Howell, Tommy Hsieh, Shih-Kun Huang, Steve
-Hunt, Jeff Hurwitt, Jeon Hyoung-Jo, Ali Ibraimi, Pieter Immelman, Jarkko
-Isokungas, Patrick St. Jean, Hal Jespersen, Park Sang Jin, Robbin Johnson,
-Jarkko Jormanainen, Yury July, Nelson Kading, Geoffrey Keating, Karsten
-Keil, Charles S. Kerr, Fritz Kleeman, Andreas Kies, Janne Kiviluoto, Tomasz
-Kloczko, Dwarven Knight, Thomas Koenig, Karl-Koenig Koenigsson, Sebnem
-Korkmaz, Martin Kraemer, Gerald Krause, Thomas Kroener, Piotr Kucharski,
-Florian Kuehnert, Bernd Kuemmerlen, Kris Kugel, Stephan Kulow, Manoj Kumar,
-Dawid Kuroczko, Yuri Kuzmenko, Olivier Lacroix, Geoff Lane, Alex Lange,
-Alain Lasserre, Stanislav Latishko, Hannu Laurila, Yen-Ming Lee, Vincent
-Lefevre, Alexander Lehmann, Marty Leisner, Thomas Leitner, Hakan Lennestal,
-Kevin Lentin, Chua Choon Leong, Chris Lewis, Andreas Ley, David-Michael
-Lincke, Otto Lind, Richard Lloyd, Florian Lohoff, Reinhard Luebke, Clifford
-Luke, Michael Lupp, David MacKenzie, Hugh Mahon, Giuseppe De Marco, Scott
-Marovich, Dmitri A. Martynoff, Kazushi Marukawa, Timur Maryin, William
-McBrine, Geoff McCaughan, Owen Medd, Philipp Mergenthaler, Andreas Metzler,
-Arkadiusz Miskiewicz, Soren Moller, Bruce Momjian, Sergio Morales, Michael
-Morrell, Klaus Mueller, Mike Muise, Udo Munk, John R. Myers, Daniel Naber,
-Torsten Neumann, Dirk Nimmich, James Nugen, David E. O'Brien, Michael
-O'Reilly, Oleg Ohotnikov, Ronald Orr, Julien Oster, Guido Ostkamp, Philip
-Paeps, Jeb Palmer, Neil Parker, Joseph Parmelee, Tom Parry, Jim Patterson,
-Sven Paulus, Walter Pelissero, Cameron Perkins, Colin Perkins, Eric
-Peterson, Tim Pierce, Bill Poitras, Scott W. Powers, Wolfgang Prediger, Marc
-Prud'hommeaux, GianPiero Puccioni, Thomas Quinot, Stefan Rapp, Martin
-Reising, Kyle Rhorer, Ted Richards, Steve Robbins, Ollivier Robert, Branden
-Robinson, Jim Robinson, Thomas Roessler, Erik van Roode, Meelis Roos,
-Stephen Roseman, Roland Rosenfeld, Peter Van Rossem, Clifton Royston,
-Juergen Salk, Rich Salz, Gary Sanders, Nickolay Saukh, John Sauter,
-Christopher Sawtell, Holger Schif, Volker Schmidt, John Schmitz, Torsten
-Schneider, Stefan Scholl, Rainer Scholz, Juergen Schroeder, Larry Schwimmer,
-Randy Scott, Bart Sears, Karl-Olav Serrander, Ozge Sevinc, Doug Sewell,
-Philip Shearer, Jungshik Shin, Sergey Shkonda, Andreas Siegert, Mark Smith,
-Toomas Soome, Steve Spearman, Helmut Springer, Cliff Stanford, Steve Starck,
-Jason Steiner, Ralf Stephan, Michael Stenns, Helmrich Streitmatter, Hans
-Werner Strube, Dieter Stueken, Ed Sznyter, Lech Szychowski, Dean Takemori,
-Darrell Tangman, Derek Terveer, Carsten Theis, Julian Thompson, David
-Tiller, Andry Timonin, Elmar W. Tischhauser, Mark Tomlin, Mark Tomlinson,
-Michael Traub, Martin Treusch von Buttlar, Mark Trumbull, Alex Vasylenko,
-Michael Velten, Adri Verhoef, Paul Vickers, Corinna Vinschen, Oliver B.
-Warzecha, Jason Wessel, Cary Whitney, Henrik Wist, Greg Woods, Andreas
-Wrede, Lloyd Wright, Jens Wuepper, Herbert Xu, Billy Y., Hideaki Yoshfuji,
-Nickolai Zeldovich, Zbigniew Zych
+Mark Boucher, Robert Brady, Bill Brolik, Travis Brown, Herman ten Brugge,
+Martin Buck, Jeremy Buhler, Leila Burrell-Davis, Sean Casey, Peter Castro,
+Troy Cauble, Andrey A. Chernov, Albert Chin-A-Young, Park Chong-Dae, Tan
+Kwee Chuan, Boleslaw Ciesielski, Robert Claeson, Steven Cogswell, Don
+Costello, Joshua Crawford, Bryan Curnutt, Ned Danieley, Lars Dannenberg,
+Chris Davies, John Davis, Borislav Deianov, Thomas E. Dickey, Martin
+Dickopp, Olaf Dietrich, Herbert Martin Dietze, Theo Van Dinter, Ralf
+Doeblitz, Bryan Dongray, Michael Douglass, Nickolay Dudorov, Craig Durland,
+Bernd Eckenfels, Phil Edge, Kirk Edson, Nick Efthymiou, Stefan Elf, Nigel
+Ellis, Andrei Emeltchenko, L. Scott Emmons, Rob Engle, Olle Eriksson, Brent
+Ermlick, Bernd Ernesti, Ragnar Hojland Espinosa, Jason Faultless, Michael
+Faurot, Werner Fleck, John M. Flinchbaugh, Andy Gabor, Christian Garbs,
+Torsten Gesang, Ruediger Geys, Callum Gibson, Mike Glendinning, Igor
+Goryachev, Philippe Goujard, Dan Greenspan, Dennis Grevenstein, Karlo Gross,
+Carl Hage, Piers Haken, Paul Halsema, Ed Hanway, Scott Hauck, Christian
+Haul, James Hawtin, Per Headland, Arnold Hendriks, Daniel Hermans, Jose
+Herrero, Dave Hill, Tom Hite, Torsten Homeyer, Ulli Horlacher, Keith Howell,
+Tommy Hsieh, Shih-Kun Huang, Steve Hunt, Jeff Hurwitt, Jeon Hyoung-Jo, Ali
+Ibraimi, Pieter Immelman, Jarkko Isokungas, Patrick St. Jean, Hal Jespersen,
+Park Sang Jin, Robbin Johnson, Jarkko Jormanainen, Yury July, Nelson Kading,
+Geoffrey Keating, Karsten Keil, Charles S. Kerr, Fritz Kleeman, Andreas
+Kies, Janne Kiviluoto, Tomasz Kloczko, Dwarven Knight, Thomas Koenig,
+Karl-Koenig Koenigsson, Sebnem Korkmaz, Martin Kraemer, Gerald Krause,
+Thomas Kroener, Piotr Kucharski, Florian Kuehnert, Bernd Kuemmerlen, Kris
+Kugel, Stephan Kulow, Manoj Kumar, Dawid Kuroczko, Yuri Kuzmenko, Olivier
+Lacroix, Geoff Lane, Alex Lange, Alain Lasserre, Stanislav Latishko, Hannu
+Laurila, Yen-Ming Lee, Vincent Lefevre, Alexander Lehmann, Marty Leisner,
+Thomas Leitner, Hakan Lennestal, Kevin Lentin, Chua Choon Leong, Chris
+Lewis, Andreas Ley, David-Michael Lincke, Otto Lind, Richard Lloyd, Florian
+Lohoff, Reinhard Luebke, Clifford Luke, Michael Lupp, David MacKenzie, Hugh
+Mahon, Giuseppe De Marco, Scott Marovich, Dmitri A. Martynoff, Kazushi
+Marukawa, Timur Maryin, William McBrine, Geoff McCaughan, Owen Medd, Philipp
+Mergenthaler, Andreas Metzler, Arkadiusz Miskiewicz, Soren Moller, Bruce
+Momjian, Sergio Morales, Michael Morrell, Klaus Mueller, Mike Muise, Udo
+Munk, Steven Michael Murphy, John R. Myers, Daniel Naber, Torsten Neumann,
+Dirk Nimmich, James Nugen, David E. O'Brien, Michael O'Reilly, Oleg
+Ohotnikov, Ronald Orr, Julien Oster, Guido Ostkamp, Philip Paeps, Jeb
+Palmer, Neil Parker, Joseph Parmelee, Tom Parry, Jim Patterson, Sven Paulus,
+Walter Pelissero, Cameron Perkins, Colin Perkins, Eric Peterson, Tim Pierce,
+Bill Poitras, Scott W. Powers, Wolfgang Prediger, Marc Prud'hommeaux,
+GianPiero Puccioni, Thomas Quinot, Stefan Rapp, Martin Reising, Kyle Rhorer,
+Ted Richards, Steve Robbins, Ollivier Robert, Branden Robinson, Jim
+Robinson, Thomas Roessler, Erik van Roode, Meelis Roos, Stephen Roseman,
+Roland Rosenfeld, Peter Van Rossem, Clifton Royston, Juergen Salk, Rich
+Salz, Gary Sanders, Nickolay Saukh, John Sauter, Christopher Sawtell, Holger
+Schif, Volker Schmidt, John Schmitz, Torsten Schneider, Stefan Scholl,
+Rainer Scholz, Juergen Schroeder, Larry Schwimmer, Randy Scott, Bart Sears,
+Karl-Olav Serrander, Ozge Sevinc, Doug Sewell, Philip Shearer, Jungshik
+Shin, Sergey Shkonda, Andreas Siegert, Mark Smith, Toomas Soome, Steve
+Spearman, Helmut Springer, Cliff Stanford, Steve Starck, Jason Steiner, Ralf
+Stephan, Michael Stenns, Helmrich Streitmatter, Hans Werner Strube, Dieter
+Stueken, Ed Sznyter, Lech Szychowski, Dean Takemori, Darrell Tangman, Derek
+Terveer, Carsten Theis, Julian Thompson, David Tiller, Andry Timonin, Elmar
+W. Tischhauser, Mark Tomlin, Mark Tomlinson, Michael Traub, Martin Treusch
+von Buttlar, Mark Trumbull, Alex Vasylenko, Michael Velten, Adri Verhoef,
+Paul Vickers, Corinna Vinschen, Oliver B. Warzecha, Jason Wessel, Cary
+Whitney, Henrik Wist, Greg Woods, Andreas Wrede, Lloyd Wright, Jens Wuepper,
+Herbert Xu, Billy Y., Hideaki Yoshfuji, Nickolai Zeldovich, Zbigniew Zych
diff -Nurp tin-1.7.8/doc/TODO tin-1.7.9/doc/TODO
--- tin-1.7.8/doc/TODO	2005-03-16 13:28:40.000000000 +0100
+++ tin-1.7.9/doc/TODO	2005-06-28 10:31:20.534227232 +0200
@@ -4,14 +4,10 @@ not read only ,-).
 
 Bugs
 ----
-o  the decription in the online 'h'elp for is dublicated (in
-   all levels) if the "same" key is mapped to the same function twice
-   (e.g: GroupReadBasenote	^J	^M)
-   | Group/thread/article operations
-   | -------------------------------
-   | <CR>      read chosen group
-   | <CR>      read chosen group
-   [20050311 Urs Janssen <urs@tin.org>]
+o  a wrong usename in ~/.newsauth leeds to an endless authentication loop
+   as it can't be corrected anymore, see
+   <nntp://news.tin.org/20050524124906.GA10933@akk10.akk.uni-karlsruhe.de>
+   [20050524 Urs Janssen <urs@tin.org>]
 
 o  can 'V'iew mime-parts with (illegal) encoded filename, e.g:
    | Content-Type: image/jpeg;
@@ -135,6 +131,8 @@ o  mailers other than sendmail (f.e. elm
 
 New features
 ------------
+o  allow remapping of the 'z' abort-key (lynx style) in wait_for_input().
+
 o  add user defined screen layout at different levels
    [20041025 Urs Janssen <urs@tin.org>]
 
@@ -289,12 +287,11 @@ o  add cmd-line/tinrc-switch to fetch on
    [-G is a start]
    allow setting a per group limit via attributes
 
-o  check if server supports 'LIST MOTD' (e.g. INN >= 2.0) and display
-   it on startup. check if server supports 'LIST MODERATORS' and/or
-   'LIST DISTRIB.PATS' and if it does parse the output so it can be shown
-   to the user. (e.g. when posting to a moderated group, show the
-   moderators mail-address, but still leave the mailing to the server; if
-   the group has limited distribution inform the user, ...)
+o  check if server supports 'LIST MODERATORS' and/or 'LIST DISTRIB.PATS' and
+   if it does parse the output so it can be shown to the user. (e.g. when
+   posting to a moderated group, show the moderators mail-address, but still
+   leave the mailing to the server; if the group has limited distribution
+   inform the user, ...)
 
 o  if using "-n" commandline switch you can't subscribe to newsgroups not
    present in your newsrc - a simple check against the server
@@ -323,11 +320,13 @@ o  add feature show_new_newsgroups_since
 
 o  Additions to the thread menu:
      'D'  (cancel article)
-     ']'  QuickFilterKill/GLOBAL_QUICK_FILTER_KILL
-     '['  QuickFilterSelect/GLOBAL_QUICK_FILTER_SELECT
+     ']'  (GLOBAL_QUICK_FILTER_KILL)
+     '['  (GLOBAL_QUICK_FILTER_SELECT)
      'r'  (reply to) /* not 'R' cause it conflicts with mail_bugreport */
      ''   r should be toggle show all/show only unread
      'f'  (post a followup) (maybe also 'F', '^W', ...)
+     'N'  (next unread article)
+     'P'  (previous unread article)
      'X'  (mark all unread articles that have not been selected as read)
      ';'  (mark unread arts as hot if >= 1 art in thread is hot)
      '+'  (mark thread as hot)
@@ -345,13 +344,15 @@ o  Additions to the select menu:
      '%'  (toggle rot13 encoding of screen content)
 
 o  Add to the 'M'enu:
-     'h'  (help screen)
-     DEFAULT_MAILER
+     'h'  (GLOBAL_HELP)
+     'R'  (GLOBAL_BUGREPORT)
+     '!'  (GLOBAL_SHELL_ESCAPE)
+     and maybe a way to changed built in path like DEFAULT_MAILER, PATH_PGP, ...
 
 o  Add to the POST_INFO-level:
-     '?','/' search (partly done, currently only the displayed page is
-                     searched which is not that useful)
-     'h' help-screen
+     '?','/','\' search (partly done, currently only the displayed page is
+                         searched which is not that useful)
+     'h'  (GLOBAL_HELP)
 
 o  Add a commandline switch (-V) that prints out all values of cpp-symbols
    etc. [partly done, but should be cleaned up]
@@ -396,14 +397,16 @@ o  Merge the selection code with the ran
 
 o  add check for libbzip2/zlib (>=1.1.4)/[mini]lzo
    (<http://sources.redhat.com/bzip2/>, <http://www.gzip.org/zlib/>,
-    <http://www.oberhumer.com/opensource/lzo/>) and
-   option to write/read {g,b,l}zipped local overviews
-   zlib, libbzip2 lzo might also be used for post-processing.
+    <http://www.oberhumer.com/opensource/lzo/>) and add an
+   option to write/read {g,b,l}zipped local overviews.
+   zlib, libbzip2 and lzo might also be used for post-processing.
 
 o  add check for GPGME (<http://www.gnupg.org/gpgme.html>) and if found
    use it for pgp actions.
 
-o  rewrite/cleanup all the debugging code
+o  rewrite/cleanup all the debugging code; clearly seperate the debugging
+   levels, e.g.: NNTP=0x01, FILTER=0x02, NEWSRC=0x04, MEMORY=0x08,
+   ALL=0x0f
 
 Posting enhancements
 --------------------
@@ -488,37 +491,44 @@ o  suppress hide_uue=2 checking unless f
 
 Internal Changes
 ----------------
+o  remove untranslateable constructs like txt_prefix_*
+   [20050413 Urs Janssen <urs@tin.org>]
+
+o  keys which could be renamed/merged:
+   - 'm' GroupMail, PageMail, PostMail, ThreadMail
+   - 'N' GroupNextUnreadArt, PageNextUnreadArt, (SelectNextUnreadGrp)
+   - 'S' GroupAutoSave, PageAutoSave, ThreadAutoSave
+   - 'P' GroupPrevUnreadArt, PagePrevUnreadArt
+   - '@' GroupReverseSel, ThreadReverseSel
+   - '~' GroupUndoSel, ThreadUndoSel
+   [20050408 Urs Janssen <urs@tin.org>]
+
 o  read_overview() calls eat_re() which strips the "Re: " out of the
    subject. the modified subject ist used for batch_mode opperatios (-N/-M)
    which might not be what ppl. expect and eat_re() is the only function
    which needs the 'regex' overhead in batch_mode... (see also the note
    about "Re: "strpping at "Filtering enhancements").
-   [20050225 Urs Janssen <urs@akk.org>]
+   [20050225 Urs Janssen <urs@tin.org>]
 
 o  use new_nntp_command() instead of nntp_command() in the rest of the
    code (where usefull; if we do a global change, rename it to
    nntp_command()). see check_extensions() for a sample usage.
-   [20050211 Urs Janssen <urs@akk.org>]
+   [20050211 Urs Janssen <urs@tin.org>]
 
 o  replace various occurrence of "US-ASCII" by DEFAULT(_MIME)_CHARSET
    and define that to "US-ASCII" (to make 'updates' easier).
-   [20040929 Urs Janssen <urs@akk.org>]
+   [20040929 Urs Janssen <urs@tin.org>]
 
 o  add configure option for slrnface
-   [20030506 Urs Janssen <urs@akk.org>]
+   [20030506 Urs Janssen <urs@tin.org>]
 
 o  get rid of CURR_GROUP, use t_group instead
    create a global t_group *CURR_GROUP instead of the current macro
    reduce dependencies on my_group[] & selmenu outside of select.c
-   [20030501 Urs Janssen <urs@akk.org>]
+   [20030501 Urs Janssen <urs@tin.org>]
 
 o  clean up $AUTOSUBSCRIBE code (the NNTP code path is a mess)
-   [20030412 Urs Janssen <urs@akk.org>]
-
-o  in page level Up2 ('k') does the same as PageNextUnreadArt ('N'), but
-   Up ('^P') behaves different. shouldn't 'k' be named PageNextUnreadArt2
-   here?
-   [Urs Janssen <urs@tin.org>]
+   [20030412 Urs Janssen <urs@tin.org>]
 
 o  try to get rid of the magic numbers like NUM_MIME_CHARSETS and use
    a sentinel in the arrays instead (match_list is a showstopper here).
@@ -649,7 +659,8 @@ o  add normalization
 
 Docs/online help
 ----------------
-o  review the turkish translation (tr.po)
+o  review the turkish, russian and kinyarwanda translations
+   (tr.po, ru.po, rw.po)
 
 o  add installation guide (in html)
 
@@ -667,6 +678,9 @@ o  replace "\\" by "\e" in manpages (por
 
 Not yet classified
 ------------------
+o  add PGP_INCLUDE_KEY to pgp_mail_keys?
+   [20050426 Urs Janssen <urs@tin.org>]
+
 o  there is no command to undo a range ('#') selection
 
 o  'article loss' reported in
@@ -676,9 +690,9 @@ o  should 'tin -z foo.bar' only start up
    foo.bar?
    [20040325 Urs Janssen <urs@tin.org>]
 
-o  trn uses ~/.nntpauth (format is "^server\s+user\s+password"),
-   shall we also try ~/.nntpauth if we can't find a matching entry
-   in ~/.newsauth?
+o  trn and perls Net::NNTP::Auth use ~/.nntpauth (format is
+   "^server\s+user\s+password"), shall we also try ~/.nntpauth if we can't
+   find a matching entry in ~/.newsauth?
    [20040128 Urs Janssen <urs@tin.org>]
 
 o  what todo if in a CTE: x-uue the CD: filename differs from the one given
@@ -726,6 +740,9 @@ o  check_article_to_be_posted() still ne
 
 o  update gettext stuff to > gettext-0.12.1
 
+o  clean up included pcre stuff (pcre/Makefile.in)
+   [20050608 Urs Janssen <urs@tin.org>]
+
 o  tin in batchmode dumps core if getting a SIGINT, useful?
 
 o  what is with conflicting tinrc settings? should we disallow those, or leave
diff -Nurp tin-1.7.8/doc/WHATSNEW tin-1.7.9/doc/WHATSNEW
--- tin-1.7.8/doc/WHATSNEW	2004-11-15 18:44:22.000000000 +0100
+++ tin-1.7.9/doc/WHATSNEW	2005-06-28 10:31:19.852352763 +0200
@@ -28,6 +28,8 @@ New features
 
 . user defined date_format
 
+. 'percentage match' threading
+
 Retired Features
 ----------------
 . AmigaOS support
diff -Nurp tin-1.7.8/doc/config-anomalies tin-1.7.9/doc/config-anomalies
--- tin-1.7.8/doc/config-anomalies	2004-11-15 18:44:22.000000000 +0100
+++ tin-1.7.9/doc/config-anomalies	2005-06-28 10:31:19.897344480 +0200
@@ -67,6 +67,7 @@ show_last_line_prev_page     *
 group_catchup_on_exit        *
 thread_catchup_on_exit       *
 thread_articles                thread_arts in attributes
+thread_perc                  *
 show_author
 news_headers_to_display      *
 news_headers_to_not_display  *
diff -Nurp tin-1.7.8/doc/keymap.sample tin-1.7.9/doc/keymap.sample
--- tin-1.7.8/doc/keymap.sample	2005-03-14 15:46:04.000000000 +0100
+++ tin-1.7.9/doc/keymap.sample	2005-06-28 10:31:20.022321472 +0200
@@ -1,4 +1,4 @@
-# Keymap file V1.0.4 for the TIN newsreader
+# Keymap file V1.0.6 for the TIN newsreader
 #
 # Sample keymap file
 # This file contains the default key mappings
@@ -11,11 +11,12 @@ SetRange			#
 LastPage			$
 ToggleColor			&
 LastViewed			-
+SearchRepeat			\
 SearchSubjF			/
 SearchSubjB			?
 SearchAuthB			A
 SearchBody			B
-SearchRepeat			\
+CatchupNextUnread		C
 EditFilter			E
 ToggleHelpDisplay		H
 ToggleInverseVideo		I
@@ -23,9 +24,12 @@ LookupMessage			L
 OptionMenu			M
 Postponed			O	^O
 QuitTin				Q
+BugReport                  	R
 DisplayPostHist			W
+MarkThreadUnread		Z
 FirstPage			^
 SearchAuthF			a
+Catchup				c
 Help				h
 ToggleInfoLastLine		i
 Down				j	^N
@@ -34,6 +38,7 @@ Print				o
 Quit				q
 Version				v
 Post				w
+MarkArticleUnread		z
 Pipe				|
 QuickFilterSelect		[
 QuickFilterKill			]
@@ -77,18 +82,14 @@ GroupToggleThdSel		.
 GroupSelThdIfUnreadSelected	;
 GroupSelPattern			=
 GroupReverseSel			@
-GroupCatchupNextUnread		C
 GroupToggleGetartLimit		G
 GroupMarkThdRead		K
 GroupNextUnreadArt		N
 GroupPrevUnreadArt		P
-GroupBugReport			R
 GroupAutoSave			S
 GroupTagParts			T
 GroupUntag			U
 GroupMarkUnselArtRead		X
-GroupMarkThdUnread		Z
-GroupCatchup			c
 GroupToggleSubjDisplay		d
 GroupGoto			g
 GroupListThd			l
@@ -100,7 +101,6 @@ GroupSave			s
 GroupTag			t
 GroupToggleThreading		u
 GroupRepost			x
-GroupMarkArtUnread		z
 GroupUndoSel			~
 
 #####
@@ -124,7 +124,6 @@ PageReveal			)
 PageSkipIncludedText		:
 PageTopThd			<
 PageBotThd			>
-PageCatchupNextUnread		C
 PageCancel			D
 PageFollowup			F
 PageLastPage			G
@@ -136,9 +135,7 @@ PageAutoSave			S
 PageGroupSel			T
 PageViewUrl			U
 PageViewAttach			V
-PageMarkThdUnread		Z
 PageToggleHighlight		_
-PageCatchup			c
 PageEditArticle			e
 PageFollowupQuote		f
 PageFirstPage			g
@@ -151,7 +148,6 @@ PageSave			s
 PageTag				t
 PageGotoParent			u
 PageRepost			x
-PageMarkArtUnread		z
 
 #####
 
@@ -201,14 +197,12 @@ PProcYes			y
 SelectEnterNextUnreadGrp	TAB	n
 SelectReadGrp			^J	^M
 SelectResetNewsrc		^R
-SelectCatchupNextUnread		C
+SelectSortActive		.
 SelectNextUnreadGrp		N
-SelectBugReport			R
 SelectSubscribePat		S
 SelectUnsubscribePat		U
 SelectQuitNoWrite		X
 SelectSyncWithActive		Y
-SelectCatchup			c
 SelectToggleDescriptions	d
 SelectGoto			g
 SelectMoveGrp			m
@@ -225,16 +219,11 @@ ThreadReadArt			^J	^M
 ThreadSelArt			*
 ThreadToggleArtSel		.
 ThreadReverseSel		@
-ThreadCatchupNextUnread		C
 ThreadMarkArtRead		K
-ThreadBugReport			R
 ThreadAutoSave			S
 ThreadUntag			U
-ThreadMarkThdUnread		Z
-ThreadCatchup			c
 ThreadToggleSubjDisplay		d
 ThreadMail			m
 ThreadSave			s
 ThreadTag			t
-ThreadMarkArtUnread		z
 ThreadUndoSel			~
diff -Nurp tin-1.7.8/doc/rcvars.txt tin-1.7.9/doc/rcvars.txt
--- tin-1.7.8/doc/rcvars.txt	2004-11-15 18:44:22.000000000 +0100
+++ tin-1.7.9/doc/rcvars.txt	2005-06-28 10:31:20.160296071 +0200
@@ -9,7 +9,7 @@ Adding new tinrc variables:
 . Add NAME with the correct type to the master declaration in tinrc.h
 . Add an initial value for NAME in the correct position in t_config tinrc={};
   in init.c
-. In config.c, add the following:
+. In config.c/options_menu.c, add the following:
 
 	In read_config_file(), a match_*() function to read NAME into the
 	internal tinrc table, which may not necessarily be the same type.
diff -Nurp tin-1.7.8/doc/tin.1 tin-1.7.9/doc/tin.1
--- tin-1.7.8/doc/tin.1	2005-03-16 13:28:53.000000000 +0100
+++ tin-1.7.9/doc/tin.1	2005-06-29 11:35:49.220538192 +0200
@@ -3,13 +3,23 @@
 .\" Module    : tin.1
 .\" Author    : I. Lea, U. Janssen
 .\" Created   : 1991-08-23
-.\" Updated   : 2005-03-16
+.\" Updated   : 2005-06-29
 .\" Notes     : use american english; still needs some work, e.g.:
 .\"             - document authorization (.newsauth)
 .\"             - document random organization feature
 .\"
+.\" Macros
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
 .\"
-.TH tin 1 "March 16th, 2005" "1.7.8" "A Usenet newsreader"
+.TH tin 1 "June 29th, 2005" "1.7.9" "A Usenet newsreader"
 .\"
 .\"
 .SH NAME
@@ -541,11 +551,11 @@ Read current group.
 Enter next group with unread news. Will wrap around to the beginning of the
 group selection list looking for unread groups.
 .TP
-.B SelectCatchup 'c'
+.B Catchup 'c'
 Make current group as all read [after confirmation] and move to the next
 group in the group selection list.
 .TP
-.B SelectCatchupNextUnread 'C'
+.B CatchupNextUnread 'C'
 Mark current group as all read [after confirmation] and enter the next
 unread group in the group selection list.
 .TP
@@ -593,7 +603,7 @@ Toggle display of all subscribed to grou
 unread articles. Command has no effect if groups were specified on the
 command-line when \fBtin\fP was started.
 .TP
-.B SelectBugReport 'R'
+.B BugReport 'R'
 Mail a bug report or comment to <tin\-bugs@tin.org>. This is the best way of
 getting bugs fixed and features added/changed.
 .TP
@@ -738,11 +748,11 @@ Author backward search. Otherwise, see \
 Search the body of all articles in group (can be slow). You can abort the
 search using \fBQuit\fP ('\fBq\fP').
 .TP
-.B GroupCatchup 'c'
+.B Catchup 'c'
 Mark all articles as read [after confirmation] then return to the group
 selection list. Move cursor to next group.
 .TP
-.B GroupCatchupNextUnread 'C'
+.B CatchupNextUnread 'C'
 Mark all articles as read [after confirmation] and enter the next group
 with unread news.
 .TP
@@ -811,7 +821,7 @@ Quit \fBtin\fP - don't ask the user to c
 .B GroupToggleReadUnread 'r'
 Toggle the display between all articles and unread articles.
 .TP
-.B GroupBugReport 'R'
+.B BugReport 'R'
 Mail a bug report or comment to <tin\-bugs@tin.org>. This is the best way of
 getting bugs fixed and features added/changed.
 .TP
@@ -859,10 +869,10 @@ the way it was before. See \fBGroupUndoS
 clearing the toggle effect, leaving the group will also clear the toggle
 effect and make the changes permanent.
 .TP
-.B GroupMarkArtUnread 'z'
+.B MarkArtUnread 'z'
 Mark current article as unread.
 .TP
-.B GroupMarkThdUnread 'Z'
+.B MarkThdUnread 'Z'
 Mark current thread as unread.
 .\"--------------------------------------------------------------------
 .\"
@@ -931,11 +941,11 @@ Author backward search. Otherwise, see \
 Search the body of all articles in group (can be slow). You can abort the
 search using \fBQuit\fP ('\fBq\fP').
 .TP
-.B ThreadCatchup 'c'
+.B Catchup 'c'
 Mark thread as read [after confirmation] and return to the group index page.
 Move cursor to next thread.
 .TP
-.B ThreadCatchupNextUnread 'C'
+.B CatchupNextUnread 'C'
 Mark thread as read [after confirmation] and enter the next thread
 containing unread news.
 .TP
@@ -974,7 +984,7 @@ Return to previous level.
 .B QuitTin 'Q'
 Quit \fBtin\fP - don't ask the user to confirm.
 .TP
-.B ThreadBugReport 'R'
+.B BugReport 'R'
 Mail a bug report or comment to <tin\-bugs@tin.org>. This is the best way
 of getting bugs fixed and features added/changed.
 .TP
@@ -1000,10 +1010,10 @@ get the chance to edit the article again
 ('\fBo\fP') (see also ''\fB\-o\fP'' command-line switch) or discard it via
 \fBQuit\fP ('\fBq\fP').
 .TP
-.B ThreadMarkArtUnread 'z'
+.B MarkArtUnread 'z'
 Mark current article in thread as unread.
 .TP
-.B ThreadMarkThdUnread 'Z'
+.B MarkThdUnread 'Z'
 Mark all articles in thread as unread.
 .\"--------------------------------------------------------------------
 .\"
@@ -1127,11 +1137,11 @@ Author backward search.
 Search the body of all articles in group (can be slow). You can abort the
 search using \fBQuit\fP ('\fBq\fP').
 .TP
-.B PageCatchup 'c'
+.B Catchup 'c'
 Mark the current thread as read [after confirmation] and return to the
 previous menu. Move cursor to next item.
 .TP
-.B PageCatchupNextUnread 'C'
+.B CatchupNextUnread 'C'
 Mark the rest of the current thread as read [after confirmation] and enter
 the next thread with unread articles.
 .TP
@@ -1253,10 +1263,10 @@ articles matching pattern / tagged artic
 for reposting from global to local newsgroups. Do not use this to crosspost
 your own articles.
 .TP
-.B PageMarkArtUnread 'z'
+.B MarkArtUnread 'z'
 Mark article as unread.
 .TP
-.B PageMarkThdUnread 'Z'
+.B MarkThdUnread 'Z'
 Mark the current thread as unread.
 .\"--------------------------------------------------------------------
 .\"
@@ -1283,7 +1293,7 @@ In the options menu use the cursor keys 
 \fBConfigSelect\fP ('\fB^J\fP' or '\fB<CR>\fP') to 'open' the option you
 wish to change. You will need to enter a new value or use '\fB<SPACE>\fP' to
 toggle the available options. \fBConfigSelect\fP will save the new value,
-'\fB<ESC>\fP' will abort without saving changes.
+\&'\fB<ESC>\fP' will abort without saving changes.
 .PP
 As with the other menus, \fBRedrawScr\fP ('\fB^L\fP') will redraw the
 screen. You can use \fBSearchSubjF\fP ('\fB/\fP'), \fBSearchSubjB\fP
@@ -1342,7 +1352,7 @@ Default is ':'. \fBkill_level\fP must be
 .B Ask before using MIME viewer (ask_for_metamail)
 If ON \fBtin\fP will ask before using a MIME viewer
 (\fBmetamail_prog\fP) to display MIME messages. This only occurs if a
-MIME viewer is set.  Default is OFF.
+MIME viewer is set. Default is OFF.
 .TP
 .B Send you a blind cc automatically (auto_bcc)
 If ON automatically put your name in the ''Bcc:'' field when mailing an
@@ -1463,7 +1473,7 @@ Ask for manual confirmation to protect t
 .IP \(bu 3
 .B commands
 Ask for confirmation before executing certain dangerous commands (e.g.,
-\fBGroupCatchup\fP ('\fBc\fP')). Commands that this affects are marked in
+\fBCatchup\fP ('\fBc\fP')). Commands that this affects are marked in
 this manual with '[after confirmation]'. Default is commands & quit.
 .\" TODO: check if all affected commands are marked [after confirmation]
 .IP \(bu
@@ -1754,7 +1764,7 @@ for more details about MMDF.
 .B 'Mark article read' ignores tags (mark_ignore_tags)
 When this is ON, the \fBGroupMarkThdRead\fP, \fBThreadMarkArtRead\fP
 functions ('\fBK\fP') mark just the current article or thread, ignoring
-other tagged, unread articles.  When OFF, the same function presents a menu
+other tagged, unread articles. When OFF, the same function presents a menu
 with choices of the current thread or article, all tagged, unread articles,
 or nothing.
 .TP
@@ -2186,12 +2196,19 @@ The choices are:
 \&''Subject:'' (default).
 .IP 4
 \fBMultipart Subject\fP, thread multipart articles on ''Subject:''.
+.IP 5
+\fBPercentage Match\fP, thread base upon a partial character match on
+\&''Subject:''.
 .RE
 .TP
 .B Catchup thread by using left key (thread_catchup_on_exit)
 If ON catchup group/thread when leaving with the left arrow key. Default is
 ON.
 .TP
+.B Matchingness of a thread (thread_perc)
+How closely the subjects must match for two threads to be considered
+part of the same thread. This is a percentage and the default if 75%.
+.TP
 .B Score of a thread (thread_score)
 How the total score of a thread is computed. Default is 0, the maximum
 score in this thread.
@@ -2425,21 +2442,17 @@ following variables are expanded if foun
 .RE
 e.g.,
 .RS
-.nf
-.ft CW
+.Vb
 mail_quote_format=On %D in %G you wrote:
 news_quote_format=In %M, %F wrote:
-.ft R
-.fi
+.Ve
 .RE
 would expand to:
 .RS
-.nf
-.ft CW
-On 21 Jul 1992 09:45:51 -0400 in alt.sources you wrote:
+.Vb
+On 21 Sep 1993 09:45:51 -0400 in alt.sources you wrote:
 In <abcINN123@example.org>, Joe Bar <joe@example.org> wrote:
-.ft R
-.fi
+.Ve
 .RE
 The quoted text section of an article is marked by a preceding quote string
 at the beginning of each quoted line. The default quote string is set to
@@ -2538,8 +2551,8 @@ expression of the form <min>-<max>, e.g.
 positions, '.' can be used in place of the current cursor position
 and '$' can be used to mean the highest number available. Currently
 the only commands that understand ranges are \fBGroupMarkThdRead\fP
-('\fBK\fP'), \fBGroupMarkArtUnread\fP ('\fBz\fP') and
-\fBGroupMarkThdUnread\fP ('\fBZ\fP').
+('\fBK\fP'), \fBMarkArtUnread\fP ('\fBz\fP') and
+\fBMarkThdUnread\fP ('\fBZ\fP').
 .PP
 .SS "NEWSGROUP LISTS & WILDCARDS"
 Several places in \fBtin\fP allow you to specify a list of
@@ -2576,12 +2589,10 @@ editor for both posting and mailing comm
 .PP
 The following is an example of a \fI.Sig\fR file:
 .RS
-.nf
-.ft CW
+.Vb
 NAMES  Joe Bar <joe@example.org>
 SNAIL  Musterweg 12, 99999 Notreal, Germany
-.ft P
-.fi
+.Ve
 .RE
 .PP
 \fBtin\fP also has the capability to generate random signatures on a per
@@ -2727,11 +2738,9 @@ the system batcher
 with the ''\fB\-u\fP'' option:
 .PP
 .RS
-.nf
-.ft CW
+.Vb
 30 6 * * * /usr/local/bin/tin \-u
-.ft P
-.fi
+.Ve
 .RE
 .PP
 If you are low on local disk space you should consider using
@@ -2740,12 +2749,10 @@ manually purge cached data for groups yo
 with something like:
 .PP
 .RS
-.nf
-.ft CW
+.Vb
 find ${TIN_INDEX_NEWSDIR\-"${TIN_HOMEDIR\-"$HOME"}/.tin"}/.news* \\
 \-type f \-name "[0\-9]*.[0\-9]" \-atime +28 | xargs rm \-f
-.ft P
-.fi
+.Ve
 .RE
 .\"
 .\"
@@ -3170,7 +3177,7 @@ for more information.
 .B tin
 does conform to the Base Definitions volume of IEEE Std 1003.1-2001, Section
 12, Utility Conventions (Utility Argument Syntax, Utility Syntax Guidelines).
-.\" - RFC977, RFC1036, RFC2045, RFC2047, RFC2980, RFC2822
+.\" - RFC1036, RFC2045, RFC2047, RFC2822, RFC2980, RFC3977
 .\"   or whatever
 .\"
 .\"
@@ -3196,7 +3203,7 @@ the TODO-file which comes with the sourc
 Before mailing a bug-report to <tin\-bugs@tin.org> please check if you
 are using the latest (stable) release, and if not, please upgrade
 first! Have a look a the doc/TODO file for known bugs. If you still
-think you've found a bug, please use the \fB*BugReport\fP ('\fBR\fP')
+think you've found a bug, please use the \fBBugReport\fP ('\fBR\fP')
 function and write in English. Please do NOT enclose a core-file in
 your bugreport until we request it.
 .\"
@@ -3312,3 +3319,4 @@ Urs Janssen <urs@tin.org>
 .BR RFC2048 ,
 .BR RFC2822 ,
 .BR RFC2980
+.\" .BR RFC3977
diff -Nurp tin-1.7.8/doc/tin.5 tin-1.7.9/doc/tin.5
--- tin-1.7.8/doc/tin.5	2005-03-14 15:50:39.000000000 +0100
+++ tin-1.7.9/doc/tin.5	2005-06-29 11:36:04.100767744 +0200
@@ -2,10 +2,21 @@
 .\" Module    : tin.5
 .\" Author    : U. Janssen
 .\" Created   : 2000-07-10
-.\" Updated   : 2005-03-14
+.\" Updated   : 2005-06-29
 .\" Notes     : needs a some work
 .\"
-.TH tin 5 "March 12th, 2005" "1.7.8" "A Usenet newsreader"
+.\" Macros
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\"
+.TH tin 5 "June 29th, 2005" "1.7.9" "A Usenet newsreader"
 
 .SH NAME
 tin, rtin \- related files
@@ -720,11 +731,12 @@ their defaults.
 \fBLastPage\fP	$
 \fBToggleColor\fP	&
 \fBLastViewed\fP	\-
+\fBSearchRepeat\fP	\\
 \fBSearchSubjF\fP	/
 \fBSearchSubjB\fP	?
 \fBSearchAuthB\fP	A
 \fBSearchBody\fP	B
-\fBSearchRepeat\fP	\\
+\fBCatchupNextUnread\fP	C
 \fBEditFilter\fP   E
 \fBToggleHelpDisplay\fP	H
 \fBToggleInverseVideo\fP	I
@@ -732,9 +744,12 @@ their defaults.
 \fBOptionMenu\fP	M
 \fBPostponed\fP	O	^O
 \fBQuitTin\fP	Q
+\fBBugReport\fP   R
 \fBDisplayPostHist\fP	W
+\fBMarkThrUnread\fP   Z
 \fBFirstPage\fP	^
 \fBSearchAuthF\fP	a
+\fBCatchup\fP	c
 \fBHelp\fP	h
 \fBToggleInfoLastLine\fP	i
 \fBDown\fP	j	^N
@@ -743,6 +758,7 @@ their defaults.
 \fBQuit\fP	q
 \fBVersion\fP	v
 \fBPost\fP	w
+\fBMarkArtUnread\fP      z
 \fBQuickFilterSelect\fP	[
 \fBQuickFilterKill\fP	]
 \fBPipe\fP	|
@@ -780,18 +796,14 @@ their defaults.
 \fBGroupSelThdIfUnreadSelected\fP	;
 \fBGroupSelPattern\fP	=
 \fBGroupReverseSel\fP	@
-\fBGroupCatchupNextUnread\fP	C
 \fBGroupToggleGetartLimit\fP	G
 \fBGroupMarkThdRead\fP	K
 \fBGroupNextUnreadArt\fP	N
 \fBGroupPrevUnreadArt\fP	P
-\fBGroupBugReport\fP	R
 \fBGroupAutoSave\fP	S
 \fBGroupTagParts\fP	T
 \fBGroupUntag\fP	U
 \fBGroupMarkUnselArtRead\fP	X
-\fBGroupMarkThdUnread\fP	Z
-\fBGroupCatchup\fP	c
 \fBGroupToggleSubjDisplay\fP	d
 \fBGroupGoto\fP	g
 \fBGroupListThd\fP	l
@@ -803,7 +815,6 @@ their defaults.
 \fBGroupTag\fP	t
 \fBGroupToggleThreading\fP	u
 \fBGroupRepost\fP	x
-\fBGroupMarkArtUnread\fP	z
 \fBGroupUndoSel\fP	~
 .sp
 \fBHelpLastPage\fP	G
@@ -823,7 +834,6 @@ their defaults.
 \fBPageSkipIncludedText\fP	:
 \fBPageTopThd\fP	<
 \fBPageBotThd\fP	>
-\fBPageCatchupNextUnread\fP	C
 \fBPageCancel\fP	D
 \fBPageFollowup\fP	F
 \fBPageLastPage\fP	G
@@ -835,9 +845,7 @@ their defaults.
 \fBPageGroupSel\fP	T
 \fBPageViewUrl\fP	U
 \fBPageViewAttach\fP	V
-\fBPageMarkThdUnread\fP	Z
 \fBPageToggleHighlight\fP	_
-\fBPageCatchup\fP	c
 \fBPageEditArticle\fP	e
 \fBPageFollowupQuote\fP	f
 \fBPageFirstPage\fP	g
@@ -850,7 +858,6 @@ their defaults.
 \fBPageTag\fP	t
 \fBPageGotoParent\fP	u
 \fBPageRepost\fP	x
-\fBPageMarkArtUnread\fP	z
 .sp
 \fBPgpEncSign\fP	b
 \fBPgpEncrypt\fP	e
@@ -887,14 +894,11 @@ their defaults.
 \fBSelectReadGrp\fP	^J	^M
 \fBSelectResetNewsrc\fP	^R
 \fBSelectSortActive\fP	.
-\fBSelectCatchupNextUnread\fP	C
 \fBSelectNextUnreadGrp\fP	N
-\fBSelectBugReport\fP	R
 \fBSelectSubscribePat\fP	S
 \fBSelectUnsubscribePat\fP	U
 \fBSelectQuitNoWrite\fP	X
 \fBSelectSyncWithActive\fP	Y
-\fBSelectCatchup\fP	c
 \fBSelectToggleDescriptions\fP	d
 \fBSelectGoto\fP	g
 \fBSelectMoveGrp\fP	m
@@ -909,18 +913,13 @@ their defaults.
 \fBThreadSelArt\fP	*
 \fBThreadToggleArtSel\fP	.
 \fBThreadReverseSel\fP	@
-\fBThreadCatchupNextUnread\fP	C
 \fBThreadMarkArtRead\fP	K
-\fBThreadBugReport\fP	R
 \fBThreadAutoSave\fP	S
 \fBThreadUntag\fP	U
-\fBThreadMarkThdUnread\fP	Z
-\fBThreadCatchup\fP	c
 \fBThreadToggleSubjDisplay\fP	d
 \fBThreadMail\fP	m
 \fBThreadSave\fP	s
 \fBThreadTag\fP	t
-\fBThreadMarkArtUnread\fP	z
 \fBThreadUndoSel\fP	~
 .fi
 .RE
@@ -1199,7 +1198,7 @@ can ask for manual confirmation to prote
 .in +.5i
 .B commands:
 Ask for confirmation before executing certain dangerous commands (e.g.,
-\fBSelectCatchup\fP ('\fBc\fP')). Commands that this affects are marked in
+\fBCatchup\fP ('\fBc\fP')). Commands that this affects are marked in
 this manual with '[after confirmation]'.
 .\" TODO: check if all affected commands are marked [after confirmation]
 .sp
@@ -1930,10 +1929,16 @@ Defines which threading method to use. T
 0) Don't thread, 1) Thread on Subject only 2) Thread on References only,
 3) Thread on References then Subject (default)
 4) Thread multipart articles on Subject.
+5) Thread on Percentage Match of the Subjects
 It's also possible to set the threading type on a per group basis by setting
-the group attribute variable \fBthread_arts\fP to 0 - 4 in the file
+the group attribute variable \fBthread_arts\fP to 0 - 5 in the file
 \fI${TIN_HOMEDIR\-"$HOME"}/.tin/attributes\fR.
 .TP
+.B thread_perc
+Defines how close the subjects must match while threading by Percentage
+Match for threads to be considered part of a single thread. This value
+is in the range 0 to 100. The default is 75.
+.TP
 .B thread_catchup_on_exit
 If ON catchup group/thread when leaving with the left arrow key. Default is
 ON.
diff -Nurp tin-1.7.8/include/extern.h tin-1.7.9/include/extern.h
--- tin-1.7.8/include/extern.h	2005-03-21 13:28:18.000000000 +0100
+++ tin-1.7.9/include/extern.h	2005-06-28 10:31:21.091124709 +0200
@@ -3,7 +3,7 @@
  *  Module    : extern.h
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-20
+ *  Updated   : 2005-06-23
  *  Notes     :
  *
  * Copyright (c) 1997-2005 Iain Lea <iain@bricbrac.de>
@@ -330,6 +330,7 @@ extern char *OPT_CHAR_list[];
 extern char *OPT_STRING_list[];
 extern char *nntp_server;
 extern char active_times_file[PATH_LEN];
+extern char article_name[PATH_LEN];
 extern char bug_addr[LEN];
 extern char bug_nntpserver1[PATH_LEN];
 extern char bug_nntpserver2[PATH_LEN];
@@ -831,12 +832,6 @@ extern constext txt_is_tex_encoded[];
 extern constext txt_keymap_missing_key[];
 extern constext txt_keymap_invalid_key[];
 extern constext txt_keymap_invalid_name[];
-#ifdef DEBUG
-	extern constext txt_keymap_redef[];
-#endif /* DEBUG */
-#if 0 /* ununsed */
-	extern constext txt_keymap_conflict[];
-#endif /* 0 */
 extern constext txt_keymap_upgraded[];
 extern constext txt_kill_from[];
 extern constext txt_kill_lines[];
@@ -1175,8 +1170,6 @@ extern constext txt_show_unread[];
 extern constext txt_yes[];
 extern constext txt_you_have_mail[];
 
-extern constext *xover_cmd;
-
 #ifndef DISABLE_PRINTING
 	extern constext txt_print[];
 	extern constext txt_printing[];
@@ -1278,6 +1271,7 @@ extern struct t_group *curr_group;
 extern struct t_newnews *newnews;
 extern struct t_option option_table[];
 extern struct t_save *save;
+extern struct t_capabilities nntp_caps;
 
 extern t_bool *OPT_ON_OFF_list[];
 extern t_bool can_post;
@@ -1530,7 +1524,7 @@ extern struct opttxt txt_post_process;
 extern struct opttxt txt_post_process_view;
 extern struct opttxt txt_posted_articles_file;
 extern struct opttxt txt_posting_options;
-#ifndef DISABLE_PRINTING  
+#ifndef DISABLE_PRINTING
 	extern struct opttxt txt_print_header;
 	extern struct opttxt txt_printer;
 #endif /* !DISABLE_PRINTING */
@@ -1572,6 +1566,7 @@ extern struct opttxt txt_strokes_regex;
 extern struct opttxt txt_tab_goto_next_unread;
 extern struct opttxt txt_tex2iso_conv;
 extern struct opttxt txt_thread_articles;
+extern struct opttxt txt_thread_perc;
 extern struct opttxt txt_thread_catchup_on_exit;
 extern struct opttxt txt_thread_score;
 extern struct opttxt txt_underscores_regex;
diff -Nurp tin-1.7.8/include/keymap.h tin-1.7.9/include/keymap.h
--- tin-1.7.8/include/keymap.h	2005-03-16 13:36:07.000000000 +0100
+++ tin-1.7.9/include/keymap.h	2005-06-28 10:31:20.812176062 +0200
@@ -3,7 +3,7 @@
  *  Module    : keymap.h
  *  Author    : J. Faultless, D. Nimmich
  *  Created   : 1999
- *  Updated   : 2005-03-16
+ *  Updated   : 2005-04-10
  *  Notes     :
  *
  * Copyright (c) 1999-2005 Jason Faultless <jason@altarstone.com>
@@ -150,6 +150,8 @@ enum defined_functions {
 	DIGIT_9,
 	SPECIAL_CATCHUP_LEFT,
 	SPECIAL_MOUSE_TOGGLE,
+	CATCHUP,
+	CATCHUP_NEXT_UNREAD,
 	CONFIG_SELECT,
 	CONFIG_NO_SAVE,
 	FEED_ARTICLE,
@@ -208,15 +210,11 @@ enum defined_functions {
 	GLOBAL_TOGGLE_INVERSE_VIDEO,
 	GLOBAL_VERSION,
 	GROUP_AUTOSAVE,
-	GROUP_CATCHUP,
-	GROUP_CATCHUP_NEXT_UNREAD,
 	GROUP_DO_AUTOSELECT,
 	GROUP_GOTO,
 	GROUP_LIST_THREAD,
 	GROUP_MAIL,
-	GROUP_MARK_ARTICLE_UNREAD,
 	GROUP_MARK_THREAD_READ,
-	GROUP_MARK_THREAD_UNREAD,
 	GROUP_MARK_UNSELECTED_ARTICLES_READ,
 	GROUP_NEXT_GROUP,
 	GROUP_NEXT_UNREAD_ARTICLE,
@@ -239,13 +237,13 @@ enum defined_functions {
 	GROUP_TOGGLE_THREADING,
 	GROUP_UNDO_SELECTIONS,
 	GROUP_UNTAG,
+	MARK_ARTICLE_UNREAD,
 	MARK_READ_CURRENT,
 	MARK_READ_TAGGED,
+	MARK_THREAD_UNREAD,
 	PAGE_AUTOSAVE,
 	PAGE_BOTTOM_THREAD,
 	PAGE_CANCEL,
-	PAGE_CATCHUP,
-	PAGE_CATCHUP_NEXT_UNREAD,
 	PAGE_EDIT_ARTICLE,
 	PAGE_FOLLOWUP,
 	PAGE_FOLLOWUP_QUOTE,
@@ -254,9 +252,7 @@ enum defined_functions {
 	PAGE_GROUP_SELECT,
 	PAGE_LIST_THREAD,
 	PAGE_MAIL,
-	PAGE_MARK_ARTICLE_UNREAD,
 	PAGE_MARK_THREAD_READ,
-	PAGE_MARK_THREAD_UNREAD,
 	PAGE_NEXT_ARTICLE,
 	PAGE_NEXT_THREAD,
 	PAGE_NEXT_UNREAD,
@@ -312,8 +308,6 @@ enum defined_functions {
 	PROMPT_YES,
 	SAVE_APPEND_FILE,
 	SAVE_OVERWRITE_FILE,
-	SELECT_CATCHUP,
-	SELECT_CATCHUP_NEXT_UNREAD,
 	SELECT_ENTER_GROUP,
 	SELECT_ENTER_NEXT_UNREAD_GROUP,
 	SELECT_GOTO,
@@ -332,12 +326,8 @@ enum defined_functions {
 	SELECT_QUIT_NO_WRITE,
 	SELECT_YANK_ACTIVE,
 	THREAD_AUTOSAVE,
-	THREAD_CATCHUP,
-	THREAD_CATCHUP_NEXT_UNREAD,
 	THREAD_MAIL,
 	THREAD_MARK_ARTICLE_READ,
-	THREAD_MARK_ARTICLE_UNREAD,
-	THREAD_MARK_THREAD_UNREAD,
 	THREAD_READ_NEXT_ARTICLE_OR_THREAD,
 	THREAD_READ_ARTICLE,
 	THREAD_REVERSE_SELECTIONS,
diff -Nurp tin-1.7.8/include/nntplib.h tin-1.7.9/include/nntplib.h
--- tin-1.7.8/include/nntplib.h	2005-01-19 11:20:56.000000000 +0100
+++ tin-1.7.9/include/nntplib.h	2005-06-28 10:31:20.849169252 +0200
@@ -3,7 +3,7 @@
  *  Module    : nntplib.h
  *  Author    : I.Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-01-19
+ *  Updated   : 2005-05-23
  *  Notes     : nntp.h 1.5.11/1.6 with extensions for tin
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -166,4 +166,44 @@
  */
 #define NNTP_STRLEN		512
 
+/*
+ * CAPABILITIES
+ */
+struct t_capabilities {
+	unsigned int type:3;				/* none, LIST EXTENSIONS, CAPABILITIES */
+	unsigned int version;			/* CAPABILITIES version */
+	t_bool mode_reader:1;			/* MODE-READER: "MODE READER" */
+	t_bool reader:1;					/* READER: "ARTCILE", "BODY", "LISTGROUP" */
+	t_bool post:1;						/*	POST */
+	t_bool list_active:1;			/* LIST ACTIVE */
+	t_bool list_active_times:1;	/* LIST ACTIVE.TIMES, optional */
+	t_bool list_distrib_pats:1;	/* LIST DISTRIB.PATS, optional */
+	t_bool list_headers:1;			/* LIST HEADERS */
+	t_bool list_newsgroups:1;		/* LIST NEWSGROUPS */
+	t_bool list_overview_fmt:1;	/* LIST OVERVIEW.FMT */
+	t_bool list_motd:1;				/* LIST MOTD, "private" extension */
+	t_bool list_subscriptions:1;	/* LIST SUBSCRIPTIONS, "private" extension, RFC 2980 */
+	t_bool list_distributions:1;	/* LIST DISTRIBUTIONS, "private" extension, RFC 2980 */
+	t_bool xpat:1;						/* XPAT, "private" extension, RFC 2980 */
+	t_bool hdr:1;						/* HDR: "HDR", "LIST HEADERS" */
+	const char *hdr_cmd;				/* [X]HDR */
+	t_bool over:1;						/* OVER: "OVER", "LIST OVERVIEW.FMT" */
+	t_bool over_msgid:1;				/* OVER: "OVER mid" */
+	const char *over_cmd;			/* [X]OVER */
+	t_bool newnews:1;					/* NEWNEWS */
+	char *implementation;			/* IMPLEMENTATION */
+	t_bool starttls:1;				/* STARTTLS */
+	t_bool authinfo_user:1;			/* AUTHINFO USER/PASS */
+	t_bool authinfo_sasl:1;			/* AUTHINFO SASL */
+#if 0
+	t_bool sasl_cram_md5:1;			/* SASL CRAM-MD5 */
+	t_bool sasl_digest_md5:1;		/* SASL DIGEST-MD5 */
+	t_bool sasl_plain:1;				/* SASL PLAIN */
+	t_bool sasl_gssapi:1;			/* SASL GSSAPI */
+	t_bool sasl_external:1;			/* SASL EXTERNAL */
+	t_bool streaming:1;				/* STREAMING: "MODE STREAM", "CHECK", "TAKETHIS" */
+	t_bool ihave:1;					/* IHAVE: "IHAVE" */
+#endif /* 0 */
+};
+
 #endif /* !NNTPLIB_H */
diff -Nurp tin-1.7.8/include/policy.h tin-1.7.9/include/policy.h
--- tin-1.7.8/include/policy.h	2005-01-30 13:28:59.000000000 +0100
+++ tin-1.7.9/include/policy.h	2005-06-28 10:31:20.872165019 +0200
@@ -219,7 +219,7 @@
  * requested new TLDs:
  * .ax  Aaland-Islands (Finnish)
  * .cs  Serbia and Montenegro
- * .eu  European Union (planned for 2004-11)
+ * .eu  European Union (planned for 2006)
  *
  * xccTLDs:
  * .gb  United Kingdom, use .uk
@@ -280,7 +280,7 @@ static const char *gnksa_domain_list[] =
 	"name",	/* For registration by individuals */
 	"museum",	/* Museums */
 	/*
-	 * more gTLDs to come in 2004, proposed are:
+	 * more gTLDs to come in 2005, proposed are:
 	 *  .asia   .cat    .jobs   .mail   .mobi
 	 *  .post   .tel    .travel .xxx
 	 */
diff -Nurp tin-1.7.8/include/proto.h tin-1.7.9/include/proto.h
--- tin-1.7.8/include/proto.h	2005-03-20 18:02:41.000000000 +0100
+++ tin-1.7.9/include/proto.h	2005-06-28 10:31:21.159112193 +0200
@@ -3,7 +3,7 @@
  *  Module    : proto.h
  *  Author    : Urs Janssen <urs@tin.org>
  *  Created   :
- *  Updated   : 2005-03-20
+ *  Updated   : 2005-06-21
  *  Notes     :
  *
  * Copyright (c) 1997-2005 Urs Janssen <urs@tin.org>
@@ -41,6 +41,9 @@
 #ifndef KEYMAP_H
 #	include "keymap.h"
 #endif /* !KEYMAP_H */
+#ifndef OPTIONS_MENU_H
+#	include "options_menu.h"
+#endif /* !OPTIONS_MENU_H */
 
 /* This fixes ambiguities on platforms that don't distinguish extern case */
 #ifdef CASE_PROBLEM
@@ -161,6 +164,9 @@ extern void word_highlight_string(int ro
 	extern void debug_print_filters(void);
 	extern void debug_print_header(struct t_article *s);
 	extern void debug_print_malloc(int is_malloc, const char *xfile, int line, size_t size);
+#	ifdef NNTP_ABLE
+		extern void debug_print_nntp_extensions(void);
+#	endif /* NNTP_ABLE */
 #endif /* DEBUG */
 #ifdef DEBUG_NEWSRC
 	extern void debug_print_newsrc(struct t_newsrc *NewSrc, FILE *fp);
@@ -178,8 +184,8 @@ extern void feed_articles(int function, 
 
 /* filter.c */
 extern t_bool filter_articles(struct t_group *group);
-extern t_bool filter_menu(int type, struct t_group *group, struct t_article *art);
-extern t_bool quick_filter(int type, struct t_group *group, struct t_article *art);
+extern t_bool filter_menu(t_function type, struct t_group *group, struct t_article *art);
+extern t_bool quick_filter(t_function type, struct t_group *group, struct t_article *art);
 extern t_bool quick_filter_select_posted_art(struct t_group *group, const char *subj, const char *a_message_id);
 extern t_bool read_filter_file(const char *file);
 extern void free_filter_array(struct t_filters *ptr);
@@ -250,6 +256,7 @@ extern void joinpath(char *result, const
 extern char *printascii(char *buf, int ch);
 extern t_bool read_keymap_file(void);
 extern void free_keymaps(void);
+extern void setup_default_keys(void);
 
 /* langinfo.c */
 #ifndef NO_LOCALE
@@ -404,7 +411,9 @@ extern void thd_mark_read(struct t_group
 extern void thd_mark_unread(struct t_group *group, long thread);
 extern void set_default_bitmap(struct t_group *group);
 #ifdef DEBUG_NEWSRC
+#	if 0
 	extern void newsrc_test_harness(void);
+#	endif /* 0 */
 #endif /* DEBUG_NEWSRC */
 
 /* nntplib.c */
@@ -427,12 +436,12 @@ extern int get_newsrcname(char *newsrc_n
 extern void get_nntpserver(char *nntpserver_name, char *nick_name);
 
 /* options_menu.c */
-extern char *fmt_option_prompt(char *dst, size_t len, t_bool editing, int option);
+extern char *fmt_option_prompt(char *dst, size_t len, t_bool editing, enum option_enum option);
 extern int change_config_file(struct t_group *group);
-extern int option_row(int option);
-extern t_bool option_is_visible(int option);
+extern int option_row(enum option_enum option);
+extern t_bool option_is_visible(enum option_enum option);
 extern void check_score_defaults(void);
-extern void refresh_config_page(int act_option);
+extern void refresh_config_page(enum option_enum act_option);
 extern void show_menu_help(const char *help_message);
 
 /* page.c */
@@ -490,11 +499,11 @@ extern int prompt_yn(const char *prompt,
 extern int prompt_msgid(void);
 extern t_bool prompt_default_string(const char *prompt, char *buf, int buf_len, char *default_prompt, int which_hist);
 extern t_bool prompt_menu_string(int line, const char *prompt, char *var);
-extern t_bool prompt_option_char(int option);
-extern t_bool prompt_option_list(int option);
-extern t_bool prompt_option_num(int option);
-extern t_bool prompt_option_on_off(int option);
-extern t_bool prompt_option_string(int option);
+extern t_bool prompt_option_char(enum option_enum option);
+extern t_bool prompt_option_list(enum option_enum option);
+extern t_bool prompt_option_num(enum option_enum option);
+extern t_bool prompt_option_on_off(enum option_enum option);
+extern t_bool prompt_option_string(enum option_enum option);
 extern t_bool prompt_string(const char *prompt, char *buf, int which_hist);
 extern void prompt_continue(void);
 extern void prompt_slk_redraw(void);
@@ -580,7 +589,7 @@ extern int get_search_vectors(int *start
 extern int search(t_function func, int current_art, t_bool repeat);
 extern int search_active(t_bool forward, t_bool repeat);
 extern int search_article(t_bool forward, t_bool repeat, int start_line, int lines, t_lineinfo *line, int reveal_ctrl_l_lines, FILE *fp);
-extern int search_config(t_bool forward, t_bool repeat, int current, int last);
+extern enum option_enum search_config(t_bool forward, t_bool repeat, enum option_enum current, enum option_enum last);
 extern int search_body(struct t_group *group, int current_art, t_bool repeat);
 extern void reset_srch_offsets(void);
 
diff -Nurp tin-1.7.8/include/tin.h tin-1.7.9/include/tin.h
--- tin-1.7.8/include/tin.h	2005-03-07 16:23:23.000000000 +0100
+++ tin-1.7.9/include/tin.h	2005-06-29 04:04:39.908616176 +0200
@@ -3,7 +3,7 @@
  *  Module    : tin.h
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-07
+ *  Updated   : 2005-06-28
  *  Notes     : #include files, #defines & struct's
  *
  * Copyright (c) 1997-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -78,7 +78,7 @@
 
 #define N_(Str) Str
 
-#ifdef ENABLE_NLS
+#if defined(ENABLE_NLS) && !defined(__BUILD__)
 #	include <libintl.h>
 #	define _(Text)	gettext(Text)
 #else
@@ -87,7 +87,7 @@
 #	undef textdomain
 #	define textdomain(Domain) /* empty */
 #	define _(Text) Text
-#endif /* ENABLE_NLS */
+#endif /* ENABLE_NLS && !__BUILD__ */
 
 #ifndef LOCALEDIR
 #	define LOCALEDIR "/usr/share/locale"
@@ -592,7 +592,7 @@ enum rc_state { RC_IGNORE, RC_CHECK, RC_
 #	define PATH_ISPELL	"ispell"
 #endif /* !PATH_ISPELL */
 
-#ifndef PATH_METAMAIL	/* unly unset if !HAVE_METAMAIL */
+#ifndef PATH_METAMAIL	/* only unset if !HAVE_METAMAIL */
 #	define PATH_METAMAIL	"metamail"
 #endif /* !PATH_METAMAIL */
 #define METAMAIL_CMD		PATH_METAMAIL" -e -p -m \"tin\""
@@ -1136,8 +1136,11 @@ enum {
 #define THREAD_REFS		2
 #define THREAD_BOTH		3
 #define THREAD_MULTI		4
+#define THREAD_PERC		5
 
-#define THREAD_MAX		THREAD_MULTI
+#define THREAD_MAX		THREAD_PERC
+
+#define THREAD_PERC_DEFAULT	75
 
 /*
  * Values for show_author
@@ -1293,7 +1296,9 @@ enum {
 /*
  * Assertion verifier
  */
-#undef assert
+#ifdef assert
+#	undef assert
+#endif /* assert */
 #ifdef CPP_DOES_EXPAND
 #	define assert(p)	if(! (p)) asfail(__FILE__, __LINE__, #p); else (void)0;
 #else
@@ -1356,9 +1361,6 @@ enum {
 /*
  * filter_type used in struct t_filter
  */
-#define FILTER_KILL		0
-#define FILTER_SELECT		1
-
 #define SCORE_MAX		10000
 
 #define FILTER_SUBJ_CASE_SENSITIVE		0
@@ -1458,7 +1460,7 @@ struct t_msgid {
  * struct t_article - article header
  *
  * article.thread:
- *  the next article in thread
+ * the next article in thread
  *	-1  (ART_UNTHREADED) article exists but is not (yet) threaded
  *	-2  (ART_EXPIRED) article has expired (wasn't found in search of spool
  *	    directory for the group)
@@ -1643,10 +1645,10 @@ struct t_filter {
 	char *from;			/* From: line */
 	char *msgid;			/* Message-ID: line */
 	char lines_cmp;			/* Lines compare <> */
-	int  lines_num;			/* Lines: line */
+	int lines_num;			/* Lines: line */
 	char gnksa_cmp;			/* GNKSA compare <> */
-	int  gnksa_num;			/* GNKSA code */
-	int  score;			/* score to give if rule matches */
+	int gnksa_num;			/* GNKSA code */
+	int score;			/* score to give if rule matches */
 	char *xref;			/* groups in xref line */
 	time_t time;			/* expire time in seconds */
 	struct t_filter *next;		/* next rule valid in group */
diff -Nurp tin-1.7.8/include/tinrc.h tin-1.7.9/include/tinrc.h
--- tin-1.7.8/include/tinrc.h	2004-12-30 14:40:50.000000000 +0100
+++ tin-1.7.9/include/tinrc.h	2005-06-28 10:31:21.116120108 +0200
@@ -3,7 +3,7 @@
  *  Module    : tinrc.h
  *  Author    : Jason Faultless <jason@altarstone.com>
  *  Created   : 1999-04-13
- *  Updated   : 2004-06-06
+ *  Updated   : 2004-06-20
  *  Notes     :
  *
  * Copyright (c) 1999-2005 Jason Faultless <jason@altarstone.com>
@@ -141,6 +141,7 @@ struct t_config {
 	int sort_threads_type;				/* method used to sort base[] */
 	int strip_bogus;
 	int thread_articles;				/* threading system for viewing articles */
+	int thread_perc;				/* how close the match needs to be for THREAD_PERC to recognize two articles as the same thread */
 	int thread_score;				/* how the score for threads is computed*/
 	int wildcard;						/* 0=wildmat, 1=regex */
 	int score_limit_kill;					/* score limit to kill articles */
@@ -204,7 +205,7 @@ struct t_config {
 	t_bool keep_dead_articles;			/* keep all dead articles in dead.articles */
 	char posted_articles_file[LEN];		/* if set, file in which to keep posted articles */
 	t_bool mail_8bit_header;			/* allow 8bit chars. in header of mail message */
-	t_bool mark_ignore_tags;			/* Ignore tags for iKeyGroupMarkThdRead/iKeyThreadMarkArtRead */
+	t_bool mark_ignore_tags;			/* Ignore tags for GROUP_MARK_THREAD_READ/THREAD_MARK_ARTICLE_READ */
 	t_bool mark_saved_read;				/* mark saved article/thread as read */
 	t_bool pgdn_goto_next;
 	t_bool pos_first_unread;			/* position cursor at first/last unread article */
diff -Nurp tin-1.7.8/include/version.h tin-1.7.9/include/version.h
--- tin-1.7.8/include/version.h	2005-03-21 13:44:03.000000000 +0100
+++ tin-1.7.9/include/version.h	2005-06-29 11:47:02.613646132 +0200
@@ -40,15 +40,15 @@
 
 #	define PRODUCT		"tin"
 #	ifndef TIN_AUTOCONF_H
-#		define VERSION		"1.7.8"
+#		define VERSION		"1.7.9"
 #	endif /* !TIN_AUTOCONF_H */
-#	define RELEASEDATE	"20050321"
-#	define RELEASENAME	"Hellisay"
+#	define RELEASEDATE	"20050629"
+#	define RELEASENAME	"Grimsay"
 /* config-file versions - must by dotted triples */
 #	define TINRC_VERSION	"1.3.7"
 #	define ATTRIBUTES_VERSION	"1.0.3"
 #	define FILTER_VERSION	"1.0.0"
-#	define KEYMAP_VERSION	"1.0.4"
+#	define KEYMAP_VERSION	"1.0.6"
 #	define SERVERCONFIG_VERSION	"1.0.0"
 
 #	ifdef VMS
diff -Nurp tin-1.7.8/libcanlock/Build tin-1.7.9/libcanlock/Build
--- tin-1.7.8/libcanlock/Build	2004-11-15 18:44:41.000000000 +0100
+++ tin-1.7.9/libcanlock/Build	2005-06-28 10:31:28.132828408 +0200
@@ -1,7 +1,7 @@
 #!/bin/sh
 
 if [ me$1ow = mecleanow ] ; then
-	rm *.o *.a endian endian.h canlocktest hmactest *~ core
+	rm *.o *.a endian endian.h canlocktest hmactest
 else
 #	CC="cc"
 	CC="${CC-cc}"
diff -Nurp tin-1.7.8/mkdirs.sh tin-1.7.9/mkdirs.sh
--- tin-1.7.8/mkdirs.sh	2004-11-15 18:44:21.000000000 +0100
+++ tin-1.7.9/mkdirs.sh	2005-06-28 10:31:30.456400683 +0200
@@ -23,7 +23,8 @@ for file in ${1+"$@"} ; do
      if test ! -d "$pathcomp"; then
         echo "mkdir $pathcomp" 1>&2
         case "$pathcomp" in
-          [a-zA-Z]: )  ;;               # DOSISH systems
+          [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]: )
+                ;;               # DOSISH systems
           * )          mkdir "$pathcomp" || errstatus=$? ;;
         esac
      fi
diff -Nurp tin-1.7.8/pcre/AUTHORS tin-1.7.9/pcre/AUTHORS
--- tin-1.7.8/pcre/AUTHORS	2004-11-15 18:44:37.000000000 +0100
+++ tin-1.7.9/pcre/AUTHORS	2005-06-28 10:31:25.844249701 +0200
@@ -1,6 +1,23 @@
-Written by: Philip Hazel <ph10@cam.ac.uk>
+THE MAIN PCRE LIBRARY
+---------------------
+
+Written by:       Philip Hazel
+Email local part: ph10
+Email domain:     cam.ac.uk
 
 University of Cambridge Computing Service,
 Cambridge, England. Phone: +44 1223 334714.
 
-Copyright (c) 1997-2004 University of Cambridge
+Copyright (c) 1997-2005 University of Cambridge
+All rights reserved
+
+
+THE C++ WRAPPER LIBRARY
+-----------------------
+
+Written by:       Google Inc.
+
+Copyright (c) 2005 Google Inc
+All rights reserved
+
+####
diff -Nurp tin-1.7.8/pcre/COPYING tin-1.7.9/pcre/COPYING
--- tin-1.7.8/pcre/COPYING	2004-11-15 18:44:37.000000000 +0100
+++ tin-1.7.9/pcre/COPYING	2005-06-28 10:31:25.853248045 +0200
@@ -4,18 +4,40 @@ PCRE LICENCE
 PCRE is a library of functions to support regular expressions whose syntax
 and semantics are as close as possible to those of the Perl 5 language.
 
-Release 5 of PCRE is distributed under the terms of the "BSD" licence, as
+Release 6 of PCRE is distributed under the terms of the "BSD" licence, as
 specified below. The documentation for PCRE, supplied in the "doc"
 directory, is distributed under the same terms as the software itself.
 
-Written by: Philip Hazel <ph10@cam.ac.uk>
+The basic library functions are written in C and are freestanding. Also
+included in the distribution is a set of C++ wrapper functions.
+
+
+THE BASIC LIBRARY FUNCTIONS
+---------------------------
+
+Written by:       Philip Hazel
+Email local part: ph10
+Email domain:     cam.ac.uk
 
 University of Cambridge Computing Service,
 Cambridge, England. Phone: +44 1223 334714.
 
-Copyright (c) 1997-2004 University of Cambridge
+Copyright (c) 1997-2005 University of Cambridge
+All rights reserved.
+
+
+THE C++ WRAPPER FUNCTIONS
+-------------------------
+
+Contributed by:   Google Inc.
+
+Copyright (c) 2005, Google Inc.
 All rights reserved.
 
+
+THE "BSD" LICENCE
+-----------------
+
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
 
@@ -26,9 +48,10 @@ modification, are permitted provided tha
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
 
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
+    * Neither the name of the University of Cambridge nor the name of Google
+      Inc. nor the names of their contributors may be used to endorse or
+      promote products derived from this software without specific prior
+      written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
diff -Nurp tin-1.7.8/pcre/ChangeLog tin-1.7.9/pcre/ChangeLog
--- tin-1.7.8/pcre/ChangeLog	2004-11-15 18:44:37.000000000 +0100
+++ tin-1.7.9/pcre/ChangeLog	2005-06-28 10:31:25.895240315 +0200
@@ -1,6 +1,192 @@
 ChangeLog for PCRE
 ------------------
 
+Version 6.1 21-Jun-05
+---------------------
+
+ 1. There was one reference to the variable "posix" in pcretest.c that was not
+    surrounded by "#if !defined NOPOSIX".
+
+ 2. Make it possible to compile pcretest without DFA support, UTF8 support, or
+    the cross-check on the old pcre_info() function, for the benefit of the
+    cut-down version of PCRE that is currently imported into Exim.
+
+ 3. A (silly) pattern starting with (?i)(?-i) caused an internal space
+    allocation error. I've done the easy fix, which wastes 2 bytes for sensible
+    patterns that start (?i) but I don't think that matters. The use of (?i) is
+    just an example; this all applies to the other options as well.
+
+ 4. Since libtool seems to echo the compile commands it is issuing, the output
+    from "make" can be reduced a bit by putting "@" in front of each libtool
+    compile command.
+
+ 5. Patch from the folks at Google for configure.in to be a bit more thorough
+    in checking for a suitable C++ installation before trying to compile the
+    C++ stuff. This should fix a reported problem when a compiler was present,
+    but no suitable headers.
+
+ 6. The man pages all had just "PCRE" as their title. I have changed them to
+    be the relevant file name. I have also arranged that these names are
+    retained in the file doc/pcre.txt, which is a concatenation in text format
+    of all the man pages except the little individual ones for each function.
+
+ 7. The NON-UNIX-USE file had not been updated for the different set of source
+    files that come with release 6. I also added a few comments about the C++
+    wrapper.
+
+
+Version 6.0 07-Jun-05
+---------------------
+
+ 1. Some minor internal re-organization to help with my DFA experiments.
+
+ 2. Some missing #ifdef SUPPORT_UCP conditionals in pcretest and printint that
+    didn't matter for the library itself when fully configured, but did matter
+    when compiling without UCP support, or within Exim, where the ucp files are
+    not imported.
+
+ 3. Refactoring of the library code to split up the various functions into
+    different source modules. The addition of the new DFA matching code (see
+    below) to a single monolithic source would have made it really too
+    unwieldy, quite apart from causing all the code to be include in a
+    statically linked application, when only some functions are used. This is
+    relevant even without the DFA addition now that patterns can be compiled in
+    one application and matched in another.
+
+    The downside of splitting up is that there have to be some external
+    functions and data tables that are used internally in different modules of
+    the library but which are not part of the API. These have all had their
+    names changed to start with "_pcre_" so that they are unlikely to clash
+    with other external names.
+
+ 4. Added an alternate matching function, pcre_dfa_exec(), which matches using
+    a different (DFA) algorithm. Although it is slower than the original
+    function, it does have some advantages for certain types of matching
+    problem.
+
+ 5. Upgrades to pcretest in order to test the features of pcre_dfa_exec(),
+    including restarting after a partial match.
+
+ 6. A patch for pcregrep that defines INVALID_FILE_ATTRIBUTES if it is not
+    defined when compiling for Windows was sent to me. I have put it into the
+    code, though I have no means of testing or verifying it.
+
+ 7. Added the pcre_refcount() auxiliary function.
+
+ 8. Added the PCRE_FIRSTLINE option. This constrains an unanchored pattern to
+    match before or at the first newline in the subject string. In pcretest,
+    the /f option on a pattern can be used to set this.
+
+ 9. A repeated \w when used in UTF-8 mode with characters greater than 256
+    would behave wrongly. This has been present in PCRE since release 4.0.
+
+10. A number of changes to the pcregrep command:
+
+    (a) Refactored how -x works; insert ^(...)$ instead of setting
+        PCRE_ANCHORED and checking the length, in preparation for adding
+        something similar for -w.
+
+    (b) Added the -w (match as a word) option.
+
+    (c) Refactored the way lines are read and buffered so as to have more
+        than one at a time available.
+
+    (d) Implemented a pcregrep test script.
+
+    (e) Added the -M (multiline match) option. This allows patterns to match
+        over several lines of the subject. The buffering ensures that at least
+        8K, or the rest of the document (whichever is the shorter) is available
+        for matching (and similarly the previous 8K for lookbehind assertions).
+
+    (f) Changed the --help output so that it now says
+
+          -w, --word-regex(p)
+
+        instead of two lines, one with "regex" and the other with "regexp"
+        because that confused at least one person since the short forms are the
+        same. (This required a bit of code, as the output is generated
+        automatically from a table. It wasn't just a text change.)
+
+    (g) -- can be used to terminate pcregrep options if the next thing isn't an
+        option but starts with a hyphen. Could be a pattern or a path name
+        starting with a hyphen, for instance.
+
+    (h) "-" can be given as a file name to represent stdin.
+
+    (i) When file names are being printed, "(standard input)" is used for
+        the standard input, for compatibility with GNU grep. Previously
+        "<stdin>" was used.
+
+    (j) The option --label=xxx can be used to supply a name to be used for
+        stdin when file names are being printed. There is no short form.
+
+    (k) Re-factored the options decoding logic because we are going to add
+        two more options that take data. Such options can now be given in four
+        different ways, e.g. "-fname", "-f name", "--file=name", "--file name".
+
+    (l) Added the -A, -B, and -C options for requesting that lines of context
+        around matches be printed.
+
+    (m) Added the -L option to print the names of files that do not contain
+        any matching lines, that is, the complement of -l.
+
+    (n) The return code is 2 if any file cannot be opened, but pcregrep does
+        continue to scan other files.
+
+    (o) The -s option was incorrectly implemented. For compatibility with other
+        greps, it now suppresses the error message for a non-existent or non-
+        accessible file (but not the return code). There is a new option called
+        -q that suppresses the output of matching lines, which was what -s was
+        previously doing.
+
+    (p) Added --include and --exclude options to specify files for inclusion
+        and exclusion when recursing.
+
+11. The Makefile was not using the Autoconf-supported LDFLAGS macro properly.
+    Hopefully, it now does.
+
+12. Missing cast in pcre_study().
+
+13. Added an "uninstall" target to the makefile.
+
+14. Replaced "extern" in the function prototypes in Makefile.in with
+    "PCRE_DATA_SCOPE", which defaults to 'extern' or 'extern "C"' in the Unix
+    world, but is set differently for Windows.
+
+15. Added a second compiling function called pcre_compile2(). The only
+    difference is that it has an extra argument, which is a pointer to an
+    integer error code. When there is a compile-time failure, this is set
+    non-zero, in addition to the error test pointer being set to point to an
+    error message. The new argument may be NULL if no error number is required
+    (but then you may as well call pcre_compile(), which is now just a
+    wrapper). This facility is provided because some applications need a
+    numeric error indication, but it has also enabled me to tidy up the way
+    compile-time errors are handled in the POSIX wrapper.
+
+16. Added VPATH=.libs to the makefile; this should help when building with one
+    prefix path and installing with another. (Or so I'm told by someone who
+    knows more about this stuff than I do.)
+
+17. Added a new option, REG_DOTALL, to the POSIX function regcomp(). This
+    passes PCRE_DOTALL to the pcre_compile() function, making the "." character
+    match everything, including newlines. This is not POSIX-compatible, but
+    somebody wanted the feature. From pcretest it can be activated by using
+    both the P and the s flags.
+
+18. AC_PROG_LIBTOOL appeared twice in Makefile.in. Removed one.
+
+19. libpcre.pc was being incorrectly installed as executable.
+
+20. A couple of places in pcretest check for end-of-line by looking for '\n';
+    it now also looks for '\r' so that it will work unmodified on Windows.
+
+21. Added Google's contributed C++ wrapper to the distribution.
+
+22. Added some untidy missing memory free() calls in pcretest, to keep
+    Electric Fence happy when testing.
+
+
+
 Version 5.0 13-Sep-04
 ---------------------
 
diff -Nurp tin-1.7.8/pcre/LICENCE tin-1.7.9/pcre/LICENCE
--- tin-1.7.8/pcre/LICENCE	2004-11-15 18:44:37.000000000 +0100
+++ tin-1.7.9/pcre/LICENCE	2005-06-28 10:31:25.938232400 +0200
@@ -4,18 +4,40 @@ PCRE LICENCE
 PCRE is a library of functions to support regular expressions whose syntax
 and semantics are as close as possible to those of the Perl 5 language.
 
-Release 5 of PCRE is distributed under the terms of the "BSD" licence, as
+Release 6 of PCRE is distributed under the terms of the "BSD" licence, as
 specified below. The documentation for PCRE, supplied in the "doc"
 directory, is distributed under the same terms as the software itself.
 
-Written by: Philip Hazel <ph10@cam.ac.uk>
+The basic library functions are written in C and are freestanding. Also
+included in the distribution is a set of C++ wrapper functions.
+
+
+THE BASIC LIBRARY FUNCTIONS
+---------------------------
+
+Written by:       Philip Hazel
+Email local part: ph10
+Email domain:     cam.ac.uk
 
 University of Cambridge Computing Service,
 Cambridge, England. Phone: +44 1223 334714.
 
-Copyright (c) 1997-2004 University of Cambridge
+Copyright (c) 1997-2005 University of Cambridge
+All rights reserved.
+
+
+THE C++ WRAPPER FUNCTIONS
+-------------------------
+
+Contributed by:   Google Inc.
+
+Copyright (c) 2005, Google Inc.
 All rights reserved.
 
+
+THE "BSD" LICENCE
+-----------------
+
 Redistribution and use in source and binary forms, with or without
 modification, are permitted provided that the following conditions are met:
 
@@ -26,9 +48,10 @@ modification, are permitted provided tha
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
 
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
+    * Neither the name of the University of Cambridge nor the name of Google
+      Inc. nor the names of their contributors may be used to endorse or
+      promote products derived from this software without specific prior
+      written permission.
 
 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
diff -Nurp tin-1.7.8/pcre/Makefile.in tin-1.7.9/pcre/Makefile.in
--- tin-1.7.8/pcre/Makefile.in	2004-11-15 18:44:37.000000000 +0100
+++ tin-1.7.9/pcre/Makefile.in	2005-06-28 10:31:25.947230744 +0200
@@ -40,17 +40,33 @@ ARCHIVE	= @AR@ @AR_OPTS@
 
 ##########################################################################
 
-OBJ	= \
-	maketables$o \
-	get$o \
-	study$o \
-	pcre$o
+OBJ = \
+	pcre_chartables$o \
+	pcre_compile$o \
+	pcre_config$o \
+	pcre_dfa_exec$o \
+	pcre_exec$o \
+	pcre_fullinfo$o \
+	pcre_get$o \
+	pcre_globals$o \
+	pcre_info$o \
+	pcre_maketables$o \
+	pcre_ord2utf8$o \
+	pcre_printint$o \
+	pcre_refcount$o \
+	pcre_study$o \
+	pcre_tables$o \
+	pcre_try_flipped$o \
+	pcre_ucp_findchar$o \
+	pcre_valid_utf8$o \
+	pcre_version$o \
+	pcre_xclass$o
 
 PCR_DEP	= \
-	internal.h \
+	pcre_internal.h \
 	pcre.h
 
-all :	$(PRELIB)pcre.a $(PRELIB)pcreposix.a pcretest$x pgrep$x
+all :	$(PRELIB)pcre.a $(PRELIB)pcreposix.a pcretest$x pcregrep$x
 
 .SUFFIXES : .i
 
@@ -62,7 +78,7 @@ all :	$(PRELIB)pcre.a $(PRELIB)pcreposix
 @SHOW_CC@
 	@ECHO_CC@$(CPP) -C $(CPPOPTS) $*.c >$@
 
-pgrep$x :	$(PRELIB)pcre.a pcregrep$o
+pcregrep$x :	$(PRELIB)pcre.a pcregrep$o
 		$(CC) $(CFLAGS) -o $@ pcregrep$o $(PRELIB)pcre.a
 
 pcretest$x :	$(PRELIB)pcre.a $(PRELIB)pcreposix.a pcretest$o
@@ -82,13 +98,9 @@ pcre$o :	chartables.c pcre.c $(PCR_DEP)
 
 pcreposix$o :	pcreposix.c pcreposix.h $(PCR_DEP)
 
-maketables$o :	maketables.c $(PCR_DEP)
+maketables$o :	pcre_maketables.c $(PCR_DEP)
 @SHOW_CC@
-	@ECHO_CC@$(CC) $(CPPOPTS) $(CFLAGS) -c $(srcdir)/maketables.c
-
-get$o :		get.c $(PCR_DEP)
-
-study$o :	study.c $(PCR_DEP)
+	@ECHO_CC@$(CC) $(CPPOPTS) $(CFLAGS) -c $(srcdir)/pcre_maketables.c
 
 pcretest$o :	pcretest.c pcre.h
 
@@ -96,10 +108,10 @@ pcregrep$o :	pcregrep.c pcre.h
 
 # An auxiliary program makes the default character table source
 
-chartables.c :	dftables$X
+pcre_chartables.c :	dftables$X
 		./dftables$X $@
 
-dftables$X :	dftables.c maketables.c $(PCR_DEP)
+dftables$X :	dftables.c pcre_maketables.c $(PCR_DEP)
 @SHOW_CC@
 		@ECHO_CC@$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(CPPOPTS) $(srcdir)/dftables.c
 
@@ -107,7 +119,7 @@ dftables$X :	dftables.c maketables.c $(P
 # chartables.c shouldn't change, and if people have edited the tables by hand,
 # you don't want to throw them away.
 
-clean :;		$(RM) -f *$o *.a pcretest$x pgrep$x
+clean :;		$(RM) -f *$o *.a pcretest$x pcregrep$x
 
 distclean :	clean ; $(RM) -f pcre.h dftables$X chartables.c RunTest
 
diff -Nurp tin-1.7.8/pcre/Makefile.in-old tin-1.7.9/pcre/Makefile.in-old
--- tin-1.7.8/pcre/Makefile.in-old	2004-11-15 18:44:37.000000000 +0100
+++ tin-1.7.9/pcre/Makefile.in-old	2005-06-28 10:31:25.971226326 +0200
@@ -18,6 +18,13 @@ PCREGREP_OSTYPE=-DIS_UNIX
 #############################################################################
 
 
+# Libtool places .o files in the .libs directory; this can mean that "make"
+# thinks is it not up-to-date when in fact it is. This setting helps when
+# GNU "make" is being used. It presumably does no harm in other cases.
+
+VPATH=.libs
+
+
 #---------------------------------------------------------------------------#
 # The following lines are modified by "configure" to insert data that it is #
 # given in its arguments, or which it finds out for itself.                 #
@@ -61,12 +68,16 @@ BUILD_OBJEXT = @BUILD_OBJEXT@
 # The compiler, C flags, preprocessor flags, etc
 
 CC = @CC@
+CXX = @CXX@
 CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
+CXXFLAGS = @CXXFLAGS@
+LDFLAGS = @LDFLAGS@
 
 CC_FOR_BUILD = @CC_FOR_BUILD@
 CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@
-CPPFLAGS_FOR_BUILD = @CPPFLAGS_FOR_BUILD@
+CXX_FOR_BUILD = @CXX_FOR_BUILD@
+CXXFLAGS_FOR_BUILD = @CXXFLAGS_FOR_BUILD@
+LDFLAGS_FOR_BUILD = $(LDFLAGS)
 
 UCP = @UCP@
 UTF8 = @UTF8@
@@ -85,23 +96,82 @@ INSTALL_DATA = @INSTALL_DATA@
 
 LIBTOOL = @LIBTOOL@
 LTCOMPILE = $(LIBTOOL) --mode=compile $(CC) -c $(CFLAGS) -I. -I$(top_srcdir) $(NEWLINE) $(LINK_SIZE) $(MATCH_LIMIT) $(NO_RECURSE) $(EBCDIC)
-@ON_WINDOWS@LINK = $(CC) $(CFLAGS) -I. -I$(top_srcdir) -L.libs
-@NOT_ON_WINDOWS@LINK = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -I. -I$(top_srcdir)
-LINKLIB = $(LIBTOOL) --mode=link $(CC) $(CFLAGS) -I. -I$(top_srcdir)
-LINK_FOR_BUILD = $(LIBTOOL) --mode=link $(CC_FOR_BUILD) $(CFLAGS_FOR_BUILD) -I. -I$(top_srcdir)
+LTCXXCOMPILE = $(LIBTOOL) --mode=compile $(CXX) -c $(CXXFLAGS) -I. -I$(top_srcdir) $(NEWLINE) $(LINK_SIZE) $(MATCH_LIMIT) $(NO_RECURSE) $(EBCDIC)
+@ON_WINDOWS@LINK = $(CC) $(LDFLAGS) -I. -I$(top_srcdir) -L.libs
+@NOT_ON_WINDOWS@LINK = $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -I. -I$(top_srcdir)
+LINKLIB = $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -I. -I$(top_srcdir)
+LINK_FOR_BUILD = $(LIBTOOL) --mode=link $(CC_FOR_BUILD) $(LDFLAGS_FOR_BUILD) -I. -I$(top_srcdir)
+@ON_WINDOWS@CXXLINK = $(CXX) $(LDFLAGS) -I. -I$(top_srcdir) -L.libs
+@NOT_ON_WINDOWS@CXXLINK = $(LIBTOOL) --mode=link $(CXX) $(LDFLAGS) -I. -I$(top_srcdir)
+CXXLINKLIB = $(LIBTOOL) --mode=link $(CXX) $(LDFLAGS) -I. -I$(top_srcdir)
 
 # These are the version numbers for the shared libraries
 
 PCRELIBVERSION = @PCRE_LIB_VERSION@
 PCREPOSIXLIBVERSION = @PCRE_POSIXLIB_VERSION@
+PCRECPPLIBVERSION = @PCRE_CPPLIB_VERSION@
 
 ##############################################################################
 
 
-OBJ = maketables.@OBJEXT@ get.@OBJEXT@ study.@OBJEXT@ pcre.@OBJEXT@ @POSIX_OBJ@
-LOBJ = maketables.lo get.lo study.lo pcre.lo @POSIX_LOBJ@
+OBJ = pcre_chartables.@OBJEXT@ \
+  pcre_compile.@OBJEXT@ \
+  pcre_config.@OBJEXT@ \
+  pcre_dfa_exec.@OBJEXT@ \
+  pcre_exec.@OBJEXT@ \
+  pcre_fullinfo.@OBJEXT@ \
+  pcre_get.@OBJEXT@ \
+  pcre_globals.@OBJEXT@ \
+  pcre_info.@OBJEXT@ \
+  pcre_maketables.@OBJEXT@ \
+  pcre_ord2utf8.@OBJEXT@ \
+  pcre_printint.@OBJEXT@ \
+  pcre_refcount.@OBJEXT@ \
+  pcre_study.@OBJEXT@ \
+  pcre_tables.@OBJEXT@ \
+  pcre_try_flipped.@OBJEXT@ \
+  pcre_ucp_findchar.@OBJEXT@ \
+  pcre_valid_utf8.@OBJEXT@ \
+  pcre_version.@OBJEXT@ \
+  pcre_xclass.@OBJEXT@ \
+  @POSIX_OBJ@
+
+LOBJ = pcre_chartables.lo \
+  pcre_compile.lo \
+  pcre_config.lo \
+  pcre_dfa_exec.lo \
+  pcre_exec.lo \
+  pcre_fullinfo.lo \
+  pcre_get.lo \
+  pcre_globals.lo \
+  pcre_info.lo \
+  pcre_maketables.lo \
+  pcre_ord2utf8.lo \
+  pcre_printint.lo \
+  pcre_refcount.lo \
+  pcre_study.lo \
+  pcre_tables.lo \
+  pcre_try_flipped.lo \
+  pcre_ucp_findchar.lo \
+  pcre_valid_utf8.lo \
+  pcre_version.lo \
+  pcre_xclass.lo \
+  @POSIX_LOBJ@
+
+CPPOBJ = pcrecpp.@OBJEXT@ \
+  pcre_scanner.@OBJEXT@ \
+  pcre_stringpiece.@OBJEXT@
+
+CPPLOBJ = pcrecpp.lo \
+  pcre_scanner.lo \
+  pcre_stringpiece.lo
+
+CPP_TARGETS = libpcrecpp.la \
+  pcrecpp_unittest@EXEEXT@ \
+  pcre_scanner_unittest@EXEEXT@ \
+  pcre_stringpiece_unittest@EXEEXT@
 
-all:            libpcre.la @POSIX_LIB@ pcretest@EXEEXT@ pcregrep@EXEEXT@ @ON_WINDOWS@ winshared
+all:            libpcre.la @POSIX_LIB@ pcretest@EXEEXT@ pcregrep@EXEEXT@ @MAYBE_CPP_TARGETS@ @ON_WINDOWS@ winshared
 
 pcregrep@EXEEXT@: libpcre.la pcregrep.@OBJEXT@ @ON_WINDOWS@ winshared
 		$(LINK) -o pcregrep@EXEEXT@ pcregrep.@OBJEXT@ libpcre.la
@@ -110,6 +180,18 @@ pcretest@EXEEXT@: libpcre.la @POSIX_LIB@
 		$(LINK) $(PURIFY) $(EFENCE) -o pcretest@EXEEXT@  pcretest.@OBJEXT@ \
 		libpcre.la @POSIX_LIB@
 
+pcrecpp_unittest@EXEEXT@: libpcrecpp.la pcrecpp_unittest.@OBJEXT@ @ON_WINDOWS@ winshared
+		$(CXXLINK) $(PURIFY) $(EFENCE) -o pcrecpp_unittest@EXEEXT@  pcrecpp_unittest.@OBJEXT@ \
+		libpcrecpp.la @POSIX_LIB@
+
+pcre_scanner_unittest@EXEEXT@: libpcrecpp.la pcre_scanner_unittest.@OBJEXT@ @ON_WINDOWS@ winshared
+		$(CXXLINK) $(PURIFY) $(EFENCE) -o pcre_scanner_unittest@EXEEXT@  pcre_scanner_unittest.@OBJEXT@ \
+		libpcrecpp.la @POSIX_LIB@
+
+pcre_stringpiece_unittest@EXEEXT@: libpcrecpp.la pcre_stringpiece_unittest.@OBJEXT@ @ON_WINDOWS@ winshared
+		$(CXXLINK) $(PURIFY) $(EFENCE) -o pcre_stringpiece_unittest@EXEEXT@	pcre_stringpiece_unittest.@OBJEXT@ \
+		libpcrecpp.la @POSIX_LIB@
+
 libpcre.la:     $(OBJ)
 		-rm -f libpcre.la
 		$(LINKLIB) -rpath $(LIBDIR) -version-info \
@@ -120,42 +202,155 @@ libpcreposix.la: libpcre.la pcreposix.@O
 		$(LINKLIB) -rpath $(LIBDIR) libpcre.la -version-info \
 		'$(PCREPOSIXLIBVERSION)' -o libpcreposix.la pcreposix.lo
 
-# Note that chartables.c is in the current directory, not the source directory.
-
-pcre.@OBJEXT@:  chartables.c $(top_srcdir)/pcre.c \
-		$(top_srcdir)/internal.h $(top_srcdir)/printint.c \
-		$(top_srcdir)/ucp.c $(top_srcdir)/ucp.h $(top_srcdir)/ucpinternal.h \
-		$(top_srcdir)/ucptable.c $(top_srcdir)/ucptypetable.c \
-		pcre.h config.h Makefile
-		$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) $(top_srcdir)/pcre.c
-
-pcreposix.@OBJEXT@: $(top_srcdir)/pcreposix.c $(top_srcdir)/pcreposix.h \
-		$(top_srcdir)/internal.h pcre.h config.h Makefile
-		$(LTCOMPILE) $(POSIX_MALLOC_THRESHOLD) $(top_srcdir)/pcreposix.c
-
-maketables.@OBJEXT@:   $(top_srcdir)/maketables.c $(top_srcdir)/internal.h \
-		pcre.h config.h Makefile
-		$(LTCOMPILE) $(top_srcdir)/maketables.c
+libpcrecpp.la: libpcre.la $(CPPOBJ)
+		-rm -f libpcrecpp.la
+		$(CXXLINKLIB) -rpath $(LIBDIR) libpcre.la -version-info \
+		'$(PCRECPPLIBVERSION)' -o libpcrecpp.la $(CPPLOBJ)
+
+# Note that files generated by ./configure and by dftables are in the current
+# directory, not the source directory.
+
+pcre_chartables.@OBJEXT@: pcre_chartables.c
+		@$(LTCOMPILE) $(top_srcdir)/pcre_chartables.c
+
+pcre_compile.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_compile.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_compile.c
+
+pcre_config.@OBJEXT@:  Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_config.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_config.c
+
+pcre_dfa_exec.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_dfa_exec.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_dfa_exec.c
+
+pcre_exec.@OBJEXT@:    Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_exec.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_exec.c
+
+pcre_fullinfo.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_fullinfo.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_fullinfo.c
+
+pcre_get.@OBJEXT@:     Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_get.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_get.c
+
+pcre_globals.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_globals.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_globals.c
+
+pcre_info.@OBJEXT@:    Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_info.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_info.c
+
+pcre_maketables.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_maketables.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_maketables.c
+
+pcre_ord2utf8.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_ord2utf8.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_ord2utf8.c
+
+pcre_printint.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_printint.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_printint.c
+
+pcre_refcount.@OBJEXT@:   Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_refcount.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_refcount.c
+
+pcre_study.@OBJEXT@:   Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_study.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_study.c
+
+pcre_tables.@OBJEXT@:  Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_tables.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_tables.c
+
+pcre_try_flipped.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_try_flipped.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_try_flipped.c
+
+pcre_ucp_findchar.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_ucp_findchar.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_ucp_findchar.c
+
+pcre_valid_utf8.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_valid_utf8.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_valid_utf8.c
+
+pcre_version.@OBJEXT@: Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_version.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_version.c
+
+pcre_xclass.@OBJEXT@:  Makefile config.h pcre.h \
+		$(top_srcdir)/pcre_internal.h $(top_srcdir)/pcre_xclass.c
+		@$(LTCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_xclass.c
+
+pcreposix.@OBJEXT@:    $(top_srcdir)/pcreposix.c $(top_srcdir)/pcreposix.h \
+		  $(top_srcdir)/pcre_internal.h pcre.h config.h Makefile
+		@$(LTCOMPILE) $(POSIX_MALLOC_THRESHOLD) $(top_srcdir)/pcreposix.c
+
+pcrecpp.@OBJEXT@:      $(top_srcdir)/pcrecpp.cc pcrecpp.h \
+		pcre_stringpiece.h pcre.h config.h Makefile
+		@$(LTCXXCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcrecpp.cc
+
+pcre_scanner.@OBJEXT@: $(top_srcdir)/pcre_scanner.cc $(top_srcdir)/pcre_scanner.h \
+		pcrecpp.h pcre_stringpiece.h pcre.h config.h Makefile
+		@$(LTCXXCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_scanner.cc
+
+pcre_stringpiece.@OBJEXT@:  $(top_srcdir)/pcre_stringpiece.cc pcre_stringpiece.h \
+		config.h Makefile
+		@$(LTCXXCOMPILE) $(UTF8) $(UCP) $(POSIX_MALLOC_THRESHOLD) \
+		$(top_srcdir)/pcre_stringpiece.cc
 
-get.@OBJEXT@:          $(top_srcdir)/get.c $(top_srcdir)/internal.h \
+pcretest.@OBJEXT@:     $(top_srcdir)/pcretest.c $(top_srcdir)/pcre_internal.h \
 		pcre.h config.h Makefile
-		$(LTCOMPILE) $(top_srcdir)/get.c
+		$(CC) -c $(CFLAGS) -I. $(UTF8) $(UCP) $(LINK_SIZE) $(top_srcdir)/pcretest.c
 
-study.@OBJEXT@:        $(top_srcdir)/study.c $(top_srcdir)/internal.h \
-		pcre.h config.h Makefile
-		$(LTCOMPILE) $(UTF8) $(UCP) $(top_srcdir)/study.c
+pcrecpp_unittest.@OBJEXT@:  $(top_srcdir)/pcrecpp_unittest.cc pcrecpp.h \
+		pcre_stringpiece.h pcre.h config.h Makefile
+		$(CXX) -c $(CXXFLAGS) -I. $(UTF8) $(UCP) $(LINK_SIZE) $(top_srcdir)/pcrecpp_unittest.cc
+
+pcre_stringpiece_unittest.@OBJEXT@:  $(top_srcdir)/pcre_stringpiece_unittest.cc \
+		pcre_stringpiece.h config.h Makefile
+		$(CXX) -c $(CXXFLAGS) -I. $(UTF8) $(UCP) $(LINK_SIZE) $(top_srcdir)/pcre_stringpiece_unittest.cc
 
-pcretest.@OBJEXT@:     $(top_srcdir)/pcretest.c $(top_srcdir)/internal.h \
-		$(top_srcdir)/printint.c \
+pcre_scanner_unittest.@OBJEXT@:  $(top_srcdir)/pcre_scanner_unittest.cc \
+		$(top_srcdir)/pcre_scanner.h pcrecpp.h pcre_stringpiece.h \
 		pcre.h config.h Makefile
-		$(CC) -c $(CFLAGS) -I. $(UTF8) $(UCP) $(LINK_SIZE) $(top_srcdir)/pcretest.c
+		$(CXX) -c $(CXXFLAGS) -I. $(UTF8) $(UCP) $(LINK_SIZE) $(top_srcdir)/pcre_scanner_unittest.cc
 
 pcregrep.@OBJEXT@:     $(top_srcdir)/pcregrep.c pcre.h Makefile config.h
 		$(CC) -c $(CFLAGS) -I. $(UTF8) $(UCP) $(PCREGREP_OSTYPE) $(top_srcdir)/pcregrep.c
 
 # Some Windows-specific targets for MinGW. Do not use for Cygwin.
 
-winshared : .libs/@WIN_PREFIX@pcre.dll .libs/@WIN_PREFIX@pcreposix.dll
+winshared : .libs/@WIN_PREFIX@pcre.dll .libs/@WIN_PREFIX@pcreposix.dll \
+		.libs/@WIN_PREFIX@pcrecpp.dll
 
 .libs/@WIN_PREFIX@pcre.dll : libpcre.la
 	$(CC) $(CFLAGS) -shared -o $@ \
@@ -167,11 +362,11 @@ winshared : .libs/@WIN_PREFIX@pcre.dll .
 	sed -e "s#dlname=''#dlname='../bin/@WIN_PREFIX@pcre.dll'#" \
 	-e "s#library_names=''#library_names='libpcre.dll.a'#" \
 	< .libs/libpcre.lai > .libs/libpcre.lai.tmp && \
-	mv .libs/libpcre.lai.tmp .libs/libpcre.lai
+	mv -f .libs/libpcre.lai.tmp .libs/libpcre.lai
 	sed -e "s#dlname=''#dlname='../bin/@WIN_PREFIX@pcre.dll'#" \
 	-e "s#library_names=''#library_names='libpcre.dll.a'#" \
 	< libpcre.la > libpcre.la.tmp && \
-	mv libpcre.la.tmp libpcre.la
+	mv -f libpcre.la.tmp libpcre.la
 
 
 .libs/@WIN_PREFIX@pcreposix.dll: libpcreposix.la libpcre.la
@@ -184,11 +379,27 @@ winshared : .libs/@WIN_PREFIX@pcre.dll .
 	sed -e "s#dlname=''#dlname='../bin/@WIN_PREFIX@pcreposix.dll'#" \
 	-e "s#library_names=''#library_names='libpcreposix.dll.a'#"\
 	< .libs/libpcreposix.lai > .libs/libpcreposix.lai.tmp && \
-	mv .libs/libpcreposix.lai.tmp .libs/libpcreposix.lai
+	mv -f .libs/libpcreposix.lai.tmp .libs/libpcreposix.lai
 	sed -e "s#dlname=''#dlname='../bin/@WIN_PREFIX@pcreposix.dll'#" \
 	-e "s#library_names=''#library_names='libpcreposix.dll.a'#"\
 	< libpcreposix.la > libpcreposix.la.tmp && \
-	mv libpcreposix.la.tmp libpcreposix.la
+	mv -f libpcreposix.la.tmp libpcreposix.la
+
+.libs/@WIN_PREFIX@pcrecpp.dll: libpcrecpp.la libpcre.la
+	$(CXX) $(CXXFLAGS) -shared -o $@ \
+	-Wl,--whole-archive .libs/libpcrecpp.a \
+	-Wl,--out-implib,.libs/@WIN_PREFIX@pcrecpp.dll.a \
+	-Wl,--output-def,.libs/@WIN_PREFIX@libpcrecpp.dll-def \
+	-Wl,--export-all-symbols \
+	-Wl,--no-whole-archive .libs/libpcre.a
+	sed -e "s#dlname=''#dlname='../bin/@WIN_PREFIX@pcrecpp.dll'#" \
+	-e "s#library_names=''#library_names='libpcrecpp.dll.a'#"\
+	< .libs/libpcrecpp.lai > .libs/libpcrecpp.lai.tmp && \
+	mv -f .libs/libpcrecpp.lai.tmp .libs/libpcrecpp.lai
+	sed -e "s#dlname=''#dlname='../bin/@WIN_PREFIX@pcrecpp.dll'#" \
+	-e "s#library_names=''#library_names='libpcrecpp.dll.a'#"\
+	< libpcrecpp.la > libpcrecpp.la.tmp && \
+	mv -f libpcrecpp.la.tmp libpcrecpp.la
 
 
 wininstall : winshared
@@ -198,23 +409,27 @@ wininstall : winshared
 	$(INSTALL) .libs/@WIN_PREFIX@pcreposix.dll $(DESTDIR)$(BINDIR)/@WIN_PREFIX@pcreposix.dll
 	$(INSTALL) .libs/@WIN_PREFIX@libpcreposix.dll.a $(DESTDIR)$(LIBDIR)/@WIN_PREFIX@libpcreposix.dll.a
 	$(INSTALL) .libs/@WIN_PREFIX@libpcre.dll.a $(DESTDIR)$(LIBDIR)/@WIN_PREFIX@libpcre.dll.a
+	$(INSTALL) .libs/@WIN_PREFIX@pcrecpp.dll $(DESTDIR)$(BINDIR)/@WIN_PREFIX@pcrecpp.dll
+	$(INSTALL) .libs/@WIN_PREFIX@libpcrecpp.dll.a $(DESTDIR)$(LIBDIR)/@WIN_PREFIX@libpcrecpp.dll.a
 	-strip -g $(DESTDIR)$(BINDIR)/@WIN_PREFIX@pcre.dll
 	-strip -g $(DESTDIR)$(BINDIR)/@WIN_PREFIX@pcreposix.dll
+	-strip -g $(DESTDIR)$(BINDIR)/@WIN_PREFIX@pcrecpp.dll
 	-strip $(DESTDIR)$(BINDIR)/pcregrep@EXEEXT@
 	-strip $(DESTDIR)$(BINDIR)/pcretest@EXEEXT@
 
 # An auxiliary program makes the default character table source. This is put
 # in the current directory, NOT the $top_srcdir directory.
 
-chartables.c:   dftables
-		./dftables chartables.c
+pcre_chartables.c:   dftables@BUILD_EXEEXT@
+		./dftables@BUILD_EXEEXT@ pcre_chartables.c
 
-dftables.@BUILD_OBJEXT@:     $(top_srcdir)/dftables.c $(top_srcdir)/maketables.c \
-		$(top_srcdir)/internal.h pcre.h config.h Makefile
+dftables.@BUILD_OBJEXT@:     $(top_srcdir)/dftables.c \
+		$(top_srcdir)/pcre_maketables.c $(top_srcdir)/pcre_internal.h \
+		pcre.h config.h Makefile
 		$(CC_FOR_BUILD) -c $(CFLAGS_FOR_BUILD) -I. $(top_srcdir)/dftables.c
 
-dftables:       dftables.@BUILD_OBJEXT@
-		$(LINK_FOR_BUILD) -o dftables dftables.@OBJEXT@
+dftables@BUILD_EXEEXT@:      dftables.@BUILD_OBJEXT@
+		$(LINK_FOR_BUILD) -o dftables@BUILD_EXEEXT@ dftables.@OBJEXT@
 
 install:        all @ON_WINDOWS@ wininstall
 @NOT_ON_WINDOWS@	       $(mkinstalldirs) $(DESTDIR)$(LIBDIR)
@@ -222,16 +437,23 @@ install:        all @ON_WINDOWS@ wininst
 @NOT_ON_WINDOWS@	       $(LIBTOOL) --mode=install $(INSTALL) libpcre.la $(DESTDIR)$(LIBDIR)/libpcre.la
 @NOT_ON_WINDOWS@	       echo "$(LIBTOOL) --mode=install $(INSTALL) libpcreposix.la $(DESTDIR)$(LIBDIR)/libpcreposix.la"
 @NOT_ON_WINDOWS@	       $(LIBTOOL) --mode=install $(INSTALL) libpcreposix.la $(DESTDIR)$(LIBDIR)/libpcreposix.la
+@NOT_ON_WINDOWS@	       echo "$(LIBTOOL) --mode=install $(INSTALL) libpcrecpp.la $(DESTDIR)$(LIBDIR)/libpcrecpp.la"
+@NOT_ON_WINDOWS@	       $(LIBTOOL) --mode=install $(INSTALL) libpcrecpp.la $(DESTDIR)$(LIBDIR)/libpcrecpp.la
 @NOT_ON_WINDOWS@	       $(LIBTOOL) --finish $(DESTDIR)$(LIBDIR)
 		$(mkinstalldirs) $(DESTDIR)$(INCDIR)
 		$(INSTALL_DATA) pcre.h $(DESTDIR)$(INCDIR)/pcre.h
 		$(INSTALL_DATA) $(top_srcdir)/pcreposix.h $(DESTDIR)$(INCDIR)/pcreposix.h
+		$(INSTALL_DATA) pcrecpp.h $(DESTDIR)$(INCDIR)/pcrecpp.h
+		$(INSTALL_DATA) pcre_stringpiece.h $(DESTDIR)$(INCDIR)/pcre_stringpiece.h
+		$(INSTALL_DATA) $(top_srcdir)/pcre_scanner.h $(DESTDIR)$(INCDIR)/pcre_scanner.h
 		$(mkinstalldirs) $(DESTDIR)$(MANDIR)/man3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre.3 $(DESTDIR)$(MANDIR)/man3/pcre.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcreapi.3 $(DESTDIR)$(MANDIR)/man3/pcreapi.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcrebuild.3 $(DESTDIR)$(MANDIR)/man3/pcrebuild.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcrecallout.3 $(DESTDIR)$(MANDIR)/man3/pcrecallout.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcrecompat.3 $(DESTDIR)$(MANDIR)/man3/pcrecompat.3
+		$(INSTALL_DATA) $(top_srcdir)/doc/pcrecpp.3 $(DESTDIR)$(MANDIR)/man3/pcrecpp.3
+		$(INSTALL_DATA) $(top_srcdir)/doc/pcrematching.3 $(DESTDIR)$(MANDIR)/man3/pcrematching.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcrepattern.3 $(DESTDIR)$(MANDIR)/man3/pcrepattern.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcreperform.3 $(DESTDIR)$(MANDIR)/man3/pcreperform.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcreposix.3 $(DESTDIR)$(MANDIR)/man3/pcreposix.3
@@ -240,6 +462,7 @@ install:        all @ON_WINDOWS@ wininst
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_config.3 $(DESTDIR)$(MANDIR)/man3/pcre_config.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_copy_named_substring.3 $(DESTDIR)$(MANDIR)/man3/pcre_copy_named_substring.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_copy_substring.3 $(DESTDIR)$(MANDIR)/man3/pcre_copy_substring.3
+		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_dfa_exec.3 $(DESTDIR)$(MANDIR)/man3/pcre_dfa_exec.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_exec.3 $(DESTDIR)$(MANDIR)/man3/pcre_exec.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_free_substring.3 $(DESTDIR)$(MANDIR)/man3/pcre_free_substring.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_free_substring_list.3 $(DESTDIR)$(MANDIR)/man3/pcre_free_substring_list.3
@@ -250,6 +473,7 @@ install:        all @ON_WINDOWS@ wininst
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_get_substring_list.3 $(DESTDIR)$(MANDIR)/man3/pcre_get_substring_list.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_info.3 $(DESTDIR)$(MANDIR)/man3/pcre_info.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_maketables.3 $(DESTDIR)$(MANDIR)/man3/pcre_maketables.3
+		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_refcount.3 $(DESTDIR)$(MANDIR)/man3/pcre_refcount.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_study.3 $(DESTDIR)$(MANDIR)/man3/pcre_study.3
 		$(INSTALL_DATA) $(top_srcdir)/doc/pcre_version.3 $(DESTDIR)$(MANDIR)/man3/pcre_version.3
 		$(mkinstalldirs) $(DESTDIR)$(MANDIR)/man1
@@ -260,18 +484,67 @@ install:        all @ON_WINDOWS@ wininst
 		$(LIBTOOL) --mode=install $(INSTALL) pcretest@EXEEXT@ $(DESTDIR)$(BINDIR)/pcretest@EXEEXT@
 		$(INSTALL) pcre-config $(DESTDIR)$(BINDIR)/pcre-config
 		$(mkinstalldirs) $(DESTDIR)$(LIBDIR)/pkgconfig
-		$(INSTALL) libpcre.pc $(DESTDIR)$(LIBDIR)/pkgconfig/libpcre.pc
+		$(INSTALL_DATA) libpcre.pc $(DESTDIR)$(LIBDIR)/pkgconfig/libpcre.pc
+
+# The uninstall target removes all the files that were installed.
 
-# We deliberately omit dftables and chartables.c from 'make clean'; once made
-# chartables.c shouldn't change, and if people have edited the tables by hand,
-# you don't want to throw them away.
+uninstall:;     -rm -rf \
+		$(DESTDIR)$(LIBDIR)/libpcre.* \
+		$(DESTDIR)$(LIBDIR)/libpcreposix.* \
+		$(DESTDIR)$(LIBDIR)/libpcrecpp.* \
+		$(DESTDIR)$(INCDIR)/pcre.h \
+		$(DESTDIR)$(INCDIR)/pcreposix.h \
+		$(DESTDIR)$(INCDIR)/pcrecpp.h \
+		$(DESTDIR)$(INCDIR)/pcre_scanner.h \
+		$(DESTDIR)$(INCDIR)/pcre_stringpiece.h \
+		$(DESTDIR)$(MANDIR)/man3/pcre.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcreapi.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcrebuild.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcrecallout.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcrecompat.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcrecpp.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcrematching.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcrepattern.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcreperform.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcreposix.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcresample.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_compile.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_config.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_copy_named_substring.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_copy_substring.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_dfa_exec.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_exec.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_free_substring.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_free_substring_list.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_fullinfo.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_get_named_substring.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_get_stringnumber.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_get_substring.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_get_substring_list.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_info.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_maketables.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_refcount.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_study.3 \
+		$(DESTDIR)$(MANDIR)/man3/pcre_version.3 \
+		$(DESTDIR)$(MANDIR)/man1/pcregrep.1 \
+		$(DESTDIR)$(MANDIR)/man1/pcretest.1 \
+		$(DESTDIR)$(BINDIR)/pcregrep@EXEEXT@ \
+		$(DESTDIR)$(BINDIR)/pcretest@EXEEXT@ \
+		$(DESTDIR)$(BINDIR)/pcre-config \
+		$(DESTDIR)$(LIBDIR)/pkgconfig/libpcre.pc
+
+# We deliberately omit dftables and pcre_chartables.c from 'make clean'; once
+# made pcre_chartables.c shouldn't change, and if people have edited the tables
+# by hand, you don't want to throw them away.
 
-clean:;         -rm -rf *.@OBJEXT@ *.lo *.a *.la .libs pcretest@EXEEXT@ pcregrep@EXEEXT@ testtry
+clean:;         -rm -rf *.@OBJEXT@ *.lo *.a *.la .libs pcretest@EXEEXT@ pcre_stringpiece_unittest@EXEEXT@ pcrecpp_unittest@EXEEXT@ pcre_scanner_unittest@EXEEXT@ pcregrep@EXEEXT@ testtry
 
 # But "make distclean" should get back to a virgin distribution
 
 distclean:      clean
-		-rm -f chartables.c libtool pcre-config pcre.h \
+		-rm -f pcre_chartables.c libtool pcre-config libpcre.pc \
+		pcre.h pcre_stringpiece.h pcrecpp.h \
+		dftables@EXEEXT@ RunGrepTest RunTest \
 		Makefile config.h config.status config.log config.cache
 
 check:          runtest
@@ -283,5 +556,14 @@ test:           runtest
 
 runtest:        all @ON_WINDOWS@ @WIN_PREFIX@pcre.dll
 		@./RunTest
+		@./RunGrepTest
+		@echo ""
+		@echo "Testing C++ wrapper"
+		@echo ""; echo "Test 1++: stringpiece"
+		@./pcre_stringpiece_unittest@EXEEXT@
+		@echo ""; echo "Test 2++: RE class"
+		@./pcrecpp_unittest@EXEEXT@
+		@echo ""; echo "Test 3++: Scanner class"
+		@./pcre_scanner_unittest@EXEEXT@
 
 # End
diff -Nurp tin-1.7.8/pcre/NEWS tin-1.7.9/pcre/NEWS
--- tin-1.7.8/pcre/NEWS	2004-11-15 18:44:37.000000000 +0100
+++ tin-1.7.9/pcre/NEWS	2005-06-28 10:31:25.996221725 +0200
@@ -1,6 +1,38 @@
 News about PCRE releases
 ------------------------
 
+Release 6.0 07-Jun-05
+---------------------
+
+The release number has been increased to 6.0 because of the addition of several
+major new pieces of functionality.
+
+A new function, pcre_dfa_exec(), which implements pattern matching using a DFA
+algorithm, has been added. This has a number of advantages for certain cases,
+though it does run more slowly, and lacks the ability to capture substrings. On
+the other hand, it does find all matches, not just the first, and it works
+better for partial matching. The pcrematching man page discusses the
+differences.
+
+The pcretest program has been enhanced so that it can make use of the new
+pcre_dfa_exec() matching function and the extra features it provides.
+
+The distribution now includes a C++ wrapper library. This is built
+automatically if a C++ compiler is found. The pcrecpp man page discusses this
+interface.
+
+The code itself has been re-organized into many more files, one for each
+function, so it no longer requires everything to be linked in when static
+linkage is used. As a consequence, some internal functions have had to have
+their names exposed. These functions all have names starting with _pcre_. They
+are undocumented, and are not intended for use by outside callers.
+
+The pcregrep program has been enhanced with new functionality such as
+multiline-matching and options for output more matching context. See the
+ChangeLog for a complete list of changes to the library and the utility
+programs.
+
+
 Release 5.0 13-Sep-04
 ---------------------
 
diff -Nurp tin-1.7.8/pcre/NON-UNIX-USE tin-1.7.9/pcre/NON-UNIX-USE
--- tin-1.7.8/pcre/NON-UNIX-USE	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/NON-UNIX-USE	2005-06-28 10:31:26.016218044 +0200
@@ -15,7 +15,7 @@ PCRE consists entirely of code written i
 successfully on any system that has a Standard C compiler and library.
 
 
-GENERIC INSTRUCTIONS
+GENERIC INSTRUCTIONS FOR THE C LIBRARY
 
 The following are generic comments about building PCRE. The interspersed
 indented commands are suggestions from Mark Tetrode as to which commands you
@@ -51,18 +51,41 @@ character tables and writes them to that
 
   rem Mark Tetrode's commands
   rem Compile & run
-  cl -DSUPPORT_UTF8 dftables.c
-  dftables.exe > chartables.c
+  cl -DSUPPORT_UTF8 -DSUPPORT_UCP dftables.c
+  dftables.exe chartables.c
 
-(4) Compile maketables.c, get.c, study.c and pcre.c and link them all
-together into an object library in whichever form your system keeps such
-libraries. This is the pcre library (chartables.c is included by means of an
-#include directive). If your system has static and shared libraries, you may
-have to do this once for each type.
+(4) Compile the following source files:
 
+  pcre_chartables.c
+  pcre_compile.c
+  pcre_config.c
+  pcre_dfa_exec.c
+  pcre_exec.c
+  pcre_fullinfo.c
+  pcre_get.c
+  pcre_globals.c
+  pcre_info.c
+  pcre_maketables.c
+  pcre_ord2utf8.c
+  pcre_printint.c
+  pcre_refcount.c
+  pcre_study.c
+  pcre_tables.c
+  pcre_try_flipped.c
+  pcre_ucp_findchar.c
+  pcre_valid_utf8.c
+  pcre_version.c
+  pcre_xclass.c
+
+and link them all together into an object library in whichever form your system
+keeps such libraries. This is the pcre C library. If your system has static and
+shared libraries, you may have to do this once for each type.
+
+  rem These comments are out-of-date, referring to a previous release which
+  rem had fewer source files. Replace with the file names from above.
   rem Mark Tetrode's commands, for a static library
   rem Compile & lib
-  cl -DSUPPORT_UTF8 -DPOSIX_MALLOC_THRESHOLD=10 /c maketables.c get.c study.c pcre.c
+  cl -DSUPPORT_UTF8 -DSUPPORT_UCP -DPOSIX_MALLOC_THRESHOLD=10 /c maketables.c get.c study.c pcre.c
   lib /OUT:pcre.lib maketables.obj get.obj study.obj pcre.obj
 
 (5) Similarly, compile pcreposix.c and link it (on its own) as the pcreposix
@@ -70,7 +93,7 @@ library.
 
   rem Mark Tetrode's commands, for a static library
   rem Compile & lib
-  cl -DSUPPORT_UTF8 -DPOSIX_MALLOC_THRESHOLD=10 /c pcreposix.c
+  cl -DSUPPORT_UTF8 -DSUPPORT_UCP -DPOSIX_MALLOC_THRESHOLD=10 /c pcreposix.c
   lib /OUT:pcreposix.lib pcreposix.obj
 
 (6) Compile the test program pcretest.c. This needs the functions in the
@@ -78,7 +101,7 @@ pcre and pcreposix libraries when linkin
 
   rem Mark Tetrode's commands
   rem compile & link
-  cl pcretest.c pcre.lib pcreposix.lib
+  cl /F0x400000 pcretest.c pcre.lib pcreposix.lib
 
 (7) Run pcretest on the testinput files in the testdata directory, and check
 that the output matches the corresponding testoutput files. You must use the
@@ -87,13 +110,6 @@ format, with just LF characters as line 
 to change this if your system uses a different convention.
 
   rem Mark Tetrode's commands
-  rem Make a change, i.e. space, backspace, and save again - do this for all
-  rem to change UNIX to Win, \n to \n\r
-  write testoutput1
-  write testoutput2
-  write testoutput3
-  write testoutput4
-  write testoutput5
   pcretest testdata\testinput1 testdata\myoutput1
   windiff testdata\testoutput1 testdata\myoutput1
   pcretest -i testdata\testinput2 testdata\myoutput2
@@ -104,6 +120,21 @@ to change this if your system uses a dif
   windiff testdata\testoutput4 testdata\myoutput4
   pcretest testdata\testinput5 testdata\myoutput5
   windiff testdata\testoutput5 testdata\myoutput5
+  pcretest testdata\testinput6 testdata\myoutput6
+  windiff testdata\testoutput6 testdata\myoutput6
+
+Note that there are now three more tests (7, 8, 9) that did not exist when Mark
+wrote those comments. The test the new pcre_dfa_exec() function.
+
+
+THE C++ WRAPPER FUNCTIONS
+
+The PCRE distribution now contains some C++ wrapper functions and tests,
+contributed by Google Inc. On a system that can use "configure" and "make",
+the functions are automatically built into a library called pcrecpp. It should
+be straightforward to compile the .cc files manually on other systems. The
+files called xxx_unittest.cc are test programs for each of the corresponding
+xxx.cc files.
 
 
 FURTHER REMARKS
@@ -181,7 +212,9 @@ void  (*pcre_free)(void *) = free;
 
 BUILDING PCRE ON OPENVMS
 
-Dan Mooney sent the following comments about building PCRE on OpenVMS:
+Dan Mooney sent the following comments about building PCRE on OpenVMS. They
+relate to an older version of PCRE that used fewer source files, so the exact
+commands will need changing. See the current list of source files above.
 
 "It was quite easy to compile and link the library. I don't have a formal
 make file but the attached file [reproduced below] contains the OpenVMS DCL
diff -Nurp tin-1.7.8/pcre/README tin-1.7.9/pcre/README
--- tin-1.7.8/pcre/README	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/README	2005-06-28 10:31:26.041213443 +0200
@@ -7,14 +7,22 @@ The latest release of PCRE is always ava
 
 Please read the NEWS file if you are upgrading from a previous release.
 
-PCRE has its own native API, but a set of "wrapper" functions that are based on
-the POSIX API are also supplied in the library libpcreposix. Note that this
-just provides a POSIX calling interface to PCRE: the regular expressions
-themselves still follow Perl syntax and semantics. The header file
-for the POSIX-style functions is called pcreposix.h. The official POSIX name is
-regex.h, but I didn't want to risk possible problems with existing files of
-that name by distributing it that way. To use it with an existing program that
-uses the POSIX API, it will have to be renamed or pointed at by a link.
+
+The PCRE APIs
+-------------
+
+PCRE is written in C, and it has its own API. The distribution now includes a
+set of C++ wrapper functions, courtesy of Google Inc. (see the pcrecpp man page
+for details).
+
+Also included are a set of C wrapper functions that are based on the POSIX
+API. These end up in the library called libpcreposix. Note that this just
+provides a POSIX calling interface to PCRE: the regular expressions themselves
+still follow Perl syntax and semantics. The header file for the POSIX-style
+functions is called pcreposix.h. The official POSIX name is regex.h, but I
+didn't want to risk possible problems with existing files of that name by
+distributing it that way. To use it with an existing program that uses the
+POSIX API, it will have to be renamed or pointed at by a link.
 
 If you are using the POSIX interface to PCRE and there is already a POSIX regex
 library installed on your system, you must take care when linking programs to
@@ -112,7 +120,7 @@ library. You can read more about them in
 
   on the "configure" command.
 
-. PCRE has a counter which can be set to limit the amount of resources it uses.
+. PCRE has a counter that can be set to limit the amount of resources it uses.
   If the limit is exceeded during a match, the match fails. The default is ten
   million. You can change the default by setting, for example,
 
@@ -130,31 +138,56 @@ library. You can read more about them in
   is a representation of the compiled pattern, and this changes with the link
   size.
 
-. You can build PCRE so that its match() function does not call itself
-  recursively. Instead, it uses blocks of data from the heap via special
-  functions pcre_stack_malloc() and pcre_stack_free() to save data that would
-  otherwise be saved on the stack. To build PCRE like this, use
+. You can build PCRE so that its internal match() function that is called from
+  pcre_exec() does not call itself recursively. Instead, it uses blocks of data
+  from the heap via special functions pcre_stack_malloc() and pcre_stack_free()
+  to save data that would otherwise be saved on the stack. To build PCRE like
+  this, use
 
   --disable-stack-for-recursion
 
   on the "configure" command. PCRE runs more slowly in this mode, but it may be
-  necessary in environments with limited stack sizes.
+  necessary in environments with limited stack sizes. This applies only to the
+  pcre_exec() function; it does not apply to pcre_dfa_exec(), which does not
+  use deeply nested recursion.
+
+The "configure" script builds eight files for the basic C library:
+
+. pcre.h is the header file for C programs that call PCRE
+. Makefile is the makefile that builds the library
+. config.h contains build-time configuration options for the library
+. pcre-config is a script that shows the settings of "configure" options
+. libpcre.pc is data for the pkg-config command
+. libtool is a script that builds shared and/or static libraries
+. RunTest is a script for running tests on the library
+. RunGrepTest is a script for running tests on the pcregrep command
 
-The "configure" script builds seven files:
+In addition, if a C++ compiler is found, the following are also built:
 
-. pcre.h is build by copying pcre.in and making substitutions
-. Makefile is built by copying Makefile.in and making substitutions.
-. config.h is built by copying config.in and making substitutions.
-. pcre-config is built by copying pcre-config.in and making substitutions.
-. libpcre.pc is data for the pkg-config command, built from libpcre.pc.in
-. libtool is a script that builds shared and/or static libraries
-. RunTest is a script for running tests
+. pcrecpp.h is the header file for programs that call PCRE via the C++ wrapper
+. pcre_stringpiece.h is the header for the C++ "stringpiece" functions
 
-Once "configure" has run, you can run "make". It builds two libraries called
+The "configure" script also creates config.status, which is an executable
+script that can be run to recreate the configuration, and config.log, which
+contains compiler output from tests that "configure" runs.
+
+Once "configure" has run, you can run "make". It builds two libraries, called
 libpcre and libpcreposix, a test program called pcretest, and the pcregrep
-command. You can use "make install" to copy these, the public header files
-pcre.h and pcreposix.h, and the man pages to appropriate live directories on
-your system, in the normal way.
+command. If a C++ compiler was found on your system, it also builds the C++
+wrapper library, which is called libpcrecpp, and some test programs called
+pcrecpp_unittest, pcre_scanner_unittest, and pcre_stringpiece_unittest.
+
+The command "make test" runs all the appropriate tests. Details of the PCRE
+tests are given in a separate section of this document, below.
+
+You can use "make install" to copy the libraries, the public header files
+pcre.h, pcreposix.h, pcrecpp.h, and pcre_stringpiece.h (the last two only if
+the C++ wrapper was built), and the man pages to appropriate live directories
+on your system, in the normal way.
+
+If you want to remove PCRE from your system, you can run "make uninstall".
+This removes all the files that "make install" installed. However, it does not
+remove any directories, because these are often shared with other programs.
 
 
 Retrieving configuration information on Unix-like systems
@@ -187,9 +220,9 @@ pkgconfig.
 Shared libraries on Unix-like systems
 -------------------------------------
 
-The default distribution builds PCRE as two shared libraries and two static
-libraries, as long as the operating system supports shared libraries. Shared
-library support relies on the "libtool" script which is built as part of the
+The default distribution builds PCRE as shared libraries and static libraries,
+as long as the operating system supports shared libraries. Shared library
+support relies on the "libtool" script which is built as part of the
 "configure" process.
 
 The libtool script is used to compile and link both shared and static
@@ -218,7 +251,8 @@ order to cross-compile PCRE for some oth
 process, the dftables.c source file is compiled *and run* on the local host, in
 order to generate the default character tables (the chartables.c file). It
 therefore needs to be compiled with the local compiler, not the cross compiler.
-You can do this by specifying CC_FOR_BUILD (and if necessary CFLAGS_FOR_BUILD)
+You can do this by specifying CC_FOR_BUILD (and if necessary CFLAGS_FOR_BUILD;
+there are also CXX_FOR_BUILD and CXXFLAGS_FOR_BUILD for the C++ wrapper)
 when calling the "configure" command. If they are not specified, they default
 to the values of CC and CFLAGS.
 
@@ -240,13 +274,19 @@ Testing PCRE
 ------------
 
 To test PCRE on a Unix system, run the RunTest script that is created by the
-configuring process. (This can also be run by "make runtest", "make check", or
-"make test".) For other systems, see the instructions in NON-UNIX-USE.
-
-The script runs the pcretest test program (which is documented in its own man
-page) on each of the testinput files (in the testdata directory) in turn,
-and compares the output with the contents of the corresponding testoutput file.
-A file called testtry is used to hold the main output from pcretest
+configuring process. There is also a script called RunGrepTest that tests the
+options of the pcregrep command. If the C++ wrapper library is build, three
+test programs called pcrecpp_unittest, pcre_scanner_unittest, and
+pcre_stringpiece_unittest are provided.
+
+Both the scripts and all the program tests are run if you obey "make runtest",
+"make check", or "make test". For other systems, see the instructions in
+NON-UNIX-USE.
+
+The RunTest script runs the pcretest test program (which is documented in its
+own man page) on each of the testinput files (in the testdata directory) in
+turn, and compares the output with the contents of the corresponding testoutput
+file. A file called testtry is used to hold the main output from pcretest
 (testsavedregex is also used as a working file). To run pcretest on just one of
 the test files, give its number as an argument to RunTest, for example:
 
@@ -294,9 +334,14 @@ commented in the script, can be be used.
 The fifth test checks error handling with UTF-8 encoding, and internal UTF-8
 features of PCRE that are not relevant to Perl.
 
-The sixth and final test checks the support for Unicode character properties.
-It it not run automatically unless PCRE is built with Unicode property support.
-To to this you must set --enable-unicode-properties when running "configure".
+The sixth and test checks the support for Unicode character properties. It it
+not run automatically unless PCRE is built with Unicode property support. To to
+this you must set --enable-unicode-properties when running "configure".
+
+The seventh, eighth, and ninth tests check the pcre_dfa_exec() alternative
+matching function, in non-UTF-8 mode, UTF-8 mode, and UTF-8 mode with Unicode
+property support, respectively. The eighth and ninth tests are not run
+automatically unless PCRE is build with the relevant support.
 
 
 Character tables
@@ -348,14 +393,27 @@ The distribution should contain the foll
 
   dftables.c            auxiliary program for building chartables.c
 
-  get.c                 )
-  maketables.c          )
-  study.c               ) source of the functions
-  pcre.c                )   in the library
   pcreposix.c           )
-  printint.c            )
+  pcre_compile.c        )
+  pcre_config.c         )
+  pcre_dfa_exec.c       )
+  pcre_exec.c           )
+  pcre_fullinfo.c       )
+  pcre_get.c            ) sources for the functions in the library,
+  pcre_globals.c        )   and some internal functions that they use
+  pcre_info.c           )
+  pcre_maketables.c     )
+  pcre_ord2utf8.c       )
+  pcre_printint.c       )
+  pcre_study.c          )
+  pcre_tables.c         )
+  pcre_try_flipped.c    )
+  pcre_ucp_findchar.c   )
+  pcre_valid_utf8.c     )
+  pcre_version.c        )
+  pcre_xclass.c         )
 
-  ucp.c                 )
+  ucp_findchar.c        )
   ucp.h                 ) source for the code that is used for
   ucpinternal.h         )   Unicode property handling
   ucptable.c            )
@@ -364,9 +422,17 @@ The distribution should contain the foll
   pcre.in               "source" for the header for the external API; pcre.h
                           is built from this by "configure"
   pcreposix.h           header for the external POSIX wrapper API
-  internal.h            header for internal use
+  pcre_internal.h       header for internal use
   config.in             template for config.h, which is built by configure
 
+  pcrecpp.h.in          "source" for the header file for the C++ wrapper
+  pcrecpp.cc            )
+  pcre_scanner.cc       ) source for the C++ wrapper library
+
+  pcre_stringpiece.h.in "source" for pcre_stringpiece.h, the header for the
+                          C++ stringpiece functions
+  pcre_stringpiece.cc   source for the C++ stringpiece functions
+
 (B) Auxiliary files:
 
   AUTHORS               information about the author of PCRE
@@ -379,6 +445,7 @@ The distribution should contain the foll
   NON-UNIX-USE          notes on building PCRE on non-Unix systems
   README                this file
   RunTest.in            template for a Unix shell script for running tests
+  RunGrepTest.in        template for a Unix shell script for pcregrep tests
   config.guess          ) files used by libtool,
   config.sub            )   used only when building a shared library
   configure             a configuring shell script (built by autoconf)
@@ -399,22 +466,15 @@ The distribution should contain the foll
   perltest              Perl test program
   pcregrep.c            source of a grep utility that uses PCRE
   pcre-config.in        source of script which retains PCRE information
-  testdata/testinput1   test data, compatible with Perl
-  testdata/testinput2   test data for error messages and non-Perl things
-  testdata/testinput3   test data for locale-specific tests
-  testdata/testinput4   test data for UTF-8 tests compatible with Perl
-  testdata/testinput5   test data for other UTF-8 tests
-  testdata/testinput6   test data for Unicode property support tests
-  testdata/testoutput1  test results corresponding to testinput1
-  testdata/testoutput2  test results corresponding to testinput2
-  testdata/testoutput3  test results corresponding to testinput3
-  testdata/testoutput4  test results corresponding to testinput4
-  testdata/testoutput5  test results corresponding to testinput5
-  testdata/testoutput6  test results corresponding to testinput6
+  pcrecpp_unittest.c           )
+  pcre_scanner_unittest.c      ) test programs for the C++ wrapper
+  pcre_stringpiece_unittest.c  )
+  testdata/testinput*   test data for main library tests
+  testdata/testoutput*  expected test results
+  testdata/grep*        input and output for pcregrep tests
 
 (C) Auxiliary files for Win32 DLL
 
-  dll.mk
   libpcre.def
   libpcreposix.def
   pcre.def
@@ -423,5 +483,7 @@ The distribution should contain the foll
 
   makevp.bat
 
-Philip Hazel <ph10@cam.ac.uk>
-September 2004
+Philip Hazel
+Email local part: ph10
+Email domain: cam.ac.uk
+June 2005
diff -Nurp tin-1.7.8/pcre/RunTest.in tin-1.7.9/pcre/RunTest.in
--- tin-1.7.8/pcre/RunTest.in	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/RunTest.in	2005-06-28 10:31:26.073207553 +0200
@@ -6,7 +6,7 @@
 # Run PCRE tests
 
 cf=diff
-testdata=@top_srcdir@/testdata
+testdata=testdata
 
 # Select which tests to run; if no selection, run all
 
@@ -16,6 +16,9 @@ do3=no
 do4=no
 do5=no
 do6=no
+do7=no
+do8=no
+do9=no
 
 while [ $# -gt 0 ] ; do
   case $1 in
@@ -23,8 +26,11 @@ while [ $# -gt 0 ] ; do
     2) do2=yes;;
     3) do3=yes;;
     4) do4=yes;;
-    5) do5=yes;; 
-    6) do6=yes;; 
+    5) do5=yes;;
+    6) do6=yes;;
+    7) do7=yes;;
+    8) do8=yes;;
+    9) do9=yes;;
     *) echo "Unknown test number $1"; exit 1;;
   esac
   shift
@@ -33,48 +39,64 @@ done
 if [ "@LINK_SIZE@" != "" -a "@LINK_SIZE@" != "-DLINK_SIZE=2" ] ; then
   if [ $do2 = yes ] ; then
     echo "Can't run test 2 with an internal link size other than 2"
-    exit 1  
-  fi   
+    exit 1
+  fi
   if [ $do5 = yes ] ; then
     echo "Can't run test 5 with an internal link size other than 2"
-    exit 1  
-  fi   
+    exit 1
+  fi
   if [ $do6 = yes ] ; then
     echo "Can't run test 6 with an internal link size other than 2"
-    exit 1  
-  fi   
+    exit 1
+  fi
 fi
 
 if [ "@UTF8@" = "" ] ; then
   if [ $do4 = yes ] ; then
     echo "Can't run test 4 because UTF-8 support is not configured"
     exit 1
-  fi   
+  fi
   if [ $do5 = yes ] ; then
     echo "Can't run test 5 because UTF-8 support is not configured"
     exit 1
-  fi   
+  fi
   if [ $do6 = yes ] ; then
     echo "Can't run test 6 because UTF-8 support is not configured"
     exit 1
-  fi   
-fi    
+  fi
+  if [ $do8 = yes ] ; then
+    echo "Can't run test 8 because UTF-8 support is not configured"
+    exit 1
+  fi
+  if [ $do9 = yes ] ; then
+    echo "Can't run test 9 because UTF-8 support is not configured"
+    exit 1
+  fi
+fi
 
 if [ "@UCP@" = "" ] ; then
   if [ $do6 = yes ] ; then
     echo "Can't run test 6 because Unicode property support is not configured"
     exit 1
   fi
-fi      
+  if [ $do9 = yes ] ; then
+    echo "Can't run test 9 because Unicode property support is not configured"
+    exit 1
+  fi
+fi
 
 if [ $do1 = no -a $do2 = no -a $do3 = no -a $do4 = no -a \
-     $do5 = no -a $do6 = no ] ; then
+     $do5 = no -a $do6 = no -a $do7 = no -a $do8 = no -a \
+     $do9 = no ] ; then
   do1=yes
-  do2=yes 
+  do2=yes
   do3=yes
   if [ "@UTF8@" != "" ] ; then do4=yes; fi
   if [ "@UTF8@" != "" ] ; then do5=yes; fi
   if [ "@UTF8@" != "" -a "@UCP@" != "" ] ; then do6=yes; fi
+  do7=yes 
+  if [ "@UTF8@" != "" ] ; then do8=yes; fi
+  if [ "@UTF8@" != "" -a "@UCP@" != "" ] ; then do9=yes; fi
 fi
 
 # Show which release
@@ -89,15 +111,16 @@ if [ $do1 = yes ] ; then
   if [ $? = 0 ] ; then
     $cf testtry $testdata/testoutput1
     if [ $? != 0 ] ; then exit 1; fi
-    echo " " 
   else exit 1
   fi
+  echo "OK"
+  echo " "
 fi
 
 # PCRE tests that are not Perl-compatible - API & error tests, mostly
 
 if [ $do2 = yes ] ; then
-  if [ "@LINK_SIZE@" = "" -o "@LINK_SIZE@" = "-DLINK_SIZE=2" ] ; then   
+  if [ "@LINK_SIZE@" = "" -o "@LINK_SIZE@" = "-DLINK_SIZE=2" ] ; then
     echo "Test 2: API and error handling (not Perl compatible)"
     ./pcretest -i $testdata/testinput2 testtry
     if [ $? = 0 ] ; then
@@ -105,15 +128,12 @@ if [ $do2 = yes ] ; then
       if [ $? != 0 ] ; then exit 1; fi
     else exit 1
     fi
+    echo "OK"
+    echo " "
   else
-    echo Test 2 skipped for link size other than 2 \(@LINK_SIZE@\)    
-  fi   
-fi
-
-if [ $do1 = yes -a $do2 = yes ] ; then
-  echo " " 
-  echo "The two main tests ran OK"
-  echo " " 
+    echo Test 2 skipped for link size other than 2 \(@LINK_SIZE@\)
+    echo " " 
+  fi
 fi
 
 # Locale-specific tests, provided the "fr_FR" locale is available
@@ -125,21 +145,21 @@ if [ $do3 = yes ] ; then
     ./pcretest $testdata/testinput3 testtry
     if [ $? = 0 ] ; then
       $cf testtry $testdata/testoutput3
-      if [ $? != 0 ] ; then 
+      if [ $? != 0 ] ; then
         echo " "
         echo "Locale test did not run entirely successfully."
         echo "This usually means that there is a problem with the locale"
-        echo "settings rather than a bug in PCRE."    
+        echo "settings rather than a bug in PCRE."
       else
-      echo "Locale test ran OK" 
-      fi 
-      echo " " 
+      echo "OK"
+      fi
+      echo " "
     else exit 1
     fi
   else
     echo "Cannot test locale-specific features - 'fr_FR' locale not found,"
     echo "or the \"locale\" command is not available to check for it."
-    echo " " 
+    echo " "
   fi
 fi
 
@@ -147,46 +167,86 @@ fi
 
 if [ $do4 = yes ] ; then
   echo "Test 4: UTF-8 support (Perl compatible)"
-  ./pcretest $testdata/testinput4 testtry 
+  ./pcretest $testdata/testinput4 testtry
   if [ $? = 0 ] ; then
     $cf testtry $testdata/testoutput4
     if [ $? != 0 ] ; then exit 1; fi
   else exit 1
   fi
-  echo "UTF8 test ran OK"
+  echo "OK"
   echo " "
 fi
 
 if [ $do5 = yes ] ; then
-  if [ "@LINK_SIZE@" = "" -o "@LINK_SIZE@" = "-DLINK_SIZE=2" ] ; then   
+  if [ "@LINK_SIZE@" = "" -o "@LINK_SIZE@" = "-DLINK_SIZE=2" ] ; then
     echo "Test 5: API and internals for UTF-8 support (not Perl compatible)"
-    ./pcretest $testdata/testinput5 testtry 
+    ./pcretest $testdata/testinput5 testtry
     if [ $? = 0 ] ; then
       $cf testtry $testdata/testoutput5
       if [ $? != 0 ] ; then exit 1; fi
     else exit 1
     fi
-    echo "UTF8 internals test ran OK"
+    echo "OK"
     echo " "
   else
-    echo Test 5 skipped for link size other than 2 \(@LINK_SIZE@\)    
-  fi   
+    echo Test 5 skipped for link size other than 2 \(@LINK_SIZE@\)
+    echo " " 
+  fi
 fi
 
 if [ $do6 = yes ] ; then
-  if [ "@LINK_SIZE@" = "" -o "@LINK_SIZE@" = "-DLINK_SIZE=2" ] ; then   
+  if [ "@LINK_SIZE@" = "" -o "@LINK_SIZE@" = "-DLINK_SIZE=2" ] ; then
     echo "Test 6: Unicode property support"
-    ./pcretest $testdata/testinput6 testtry 
+    ./pcretest $testdata/testinput6 testtry
     if [ $? = 0 ] ; then
       $cf testtry $testdata/testoutput6
       if [ $? != 0 ] ; then exit 1; fi
     else exit 1
     fi
-    echo "Unicode properties test ran OK"
+    echo "OK"
     echo " "
-  else   
-    echo Test 6 skipped for link size other than 2 \(@LINK_SIZE@\)    
-  fi   
+  else
+    echo Test 6 skipped for link size other than 2 \(@LINK_SIZE@\)
+    echo " " 
+  fi
+fi
+
+# Tests for DFA matching support
+
+if [ $do7 = yes ] ; then
+  echo "Test 7: DFA matching"
+  ./pcretest -dfa $testdata/testinput7 testtry
+  if [ $? = 0 ] ; then
+    $cf testtry $testdata/testoutput7
+    if [ $? != 0 ] ; then exit 1; fi
+  else exit 1
+  fi
+  echo "OK"
+  echo " "
+fi
+
+if [ $do8 = yes ] ; then
+  echo "Test 8: DFA matching with UTF-8"
+  ./pcretest -dfa $testdata/testinput8 testtry
+  if [ $? = 0 ] ; then
+    $cf testtry $testdata/testoutput8
+    if [ $? != 0 ] ; then exit 1; fi
+  else exit 1
+  fi
+  echo "OK"
+  echo " "
+fi
+
+if [ $do9 = yes ] ; then
+  echo "Test 9: DFA matching with Unicode properties"
+  ./pcretest -dfa $testdata/testinput9 testtry
+  if [ $? = 0 ] ; then
+    $cf testtry $testdata/testoutput9
+    if [ $? != 0 ] ; then exit 1; fi
+  else exit 1
+  fi
+  echo "OK"
+  echo " "
 fi
 
 # End
diff -Nurp tin-1.7.8/pcre/configure.in tin-1.7.9/pcre/configure.in
--- tin-1.7.8/pcre/configure.in	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/configure.in	2005-06-28 10:31:26.095203504 +0200
@@ -20,9 +20,9 @@ dnl macro, and may be treated as octal c
 dnl digits for minor numbers less than 10. There are unlikely to be
 dnl that many releases anyway.
 
-PCRE_MAJOR=5
-PCRE_MINOR=0
-PCRE_DATE=13-Sep-2004
+PCRE_MAJOR=6
+PCRE_MINOR=1
+PCRE_DATE=21-Jun-2005
 PCRE_VERSION=${PCRE_MAJOR}.${PCRE_MINOR}
 
 dnl Default values for miscellaneous macros
@@ -34,11 +34,16 @@ dnl are built by default on Unix systems
 
 PCRE_LIB_VERSION=0:1:0
 PCRE_POSIXLIB_VERSION=0:0:0
+PCRE_CPPLIB_VERSION=0:0:0
 
 dnl Checks for programs.
 
 AC_PROG_CC
 
+dnl For the C++ wrapper libpcrecpp.
+
+AC_PROG_CXX
+
 dnl The icc compiler has the same options as gcc, so let the rest of the
 dnl configure script think it has gcc when setting up dnl options etc.
 dnl This is a nasty hack which no longer seems necessary with the update
@@ -60,7 +65,10 @@ dnl just have to adjust the Makefile by 
 dnl run "configure".
 
 CC_FOR_BUILD=${CC_FOR_BUILD:-'$(CC)'}
+CXX_FOR_BUILD=${CXX_FOR_BUILD:-'$(CXX)'}
 CFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD:-'$(CFLAGS)'}
+CPPFLAGS_FOR_BUILD=${CFLAGS_FOR_BUILD:-'$(CPPFLAGS)'}
+CXXFLAGS_FOR_BUILD=${CXXFLAGS_FOR_BUILD:-'$(CXXFLAGS)'}
 BUILD_EXEEXT=${BUILD_EXEEXT:-'$(EXEEXT)'}
 BUILD_OBJEXT=${BUILD_OBJEXT:-'$(OBJEXT)'}
 
@@ -69,14 +77,44 @@ dnl Checks for header files.
 AC_HEADER_STDC
 AC_CHECK_HEADERS(limits.h)
 
+dnl These are C++ header files
+
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+dnl I could be more clever here, given I'm doing AC_SUBST with this
+dnl (eg set a var to be the name of the include file I want).  But I'm not
+dnl so it's easy to change back to 'regular' autoconf vars if we needed to.
+AC_CHECK_HEADERS(string, [pcre_has_cpp_headers="1"],
+                         [pcre_has_cpp_headers="0"])
+AC_CHECK_HEADERS(bits/type_traits.h, [pcre_has_bits_type_traits="1"],
+                                     [pcre_has_bits_type_traits="0"])
+AC_CHECK_HEADERS(type_traits.h, [pcre_has_type_traits="1"],
+                                [pcre_has_type_traits="0"])
+dnl Using AC_SUBST eliminates the need to include config.h in a public .h file
+AC_SUBST(pcre_has_bits_type_traits)
+AC_SUBST(pcre_has_type_traits)
+AC_LANG_RESTORE
+
+dnl From the above, we now have enough info to know if C++ is fully installed
+if test -n "$ac_cv_prog_ac_ct_CXX" -a "$pcre_has_cpp_headers" = 1; then
+  MAYBE_CPP_TARGETS='$(CPP_TARGETS)'
+fi
+AC_SUBST(MAYBE_CPP_TARGETS)
+
+
 dnl Checks for typedefs, structures, and compiler characteristics.
 
 AC_C_CONST
 AC_TYPE_SIZE_T
 
+AC_CHECK_TYPES([long long], [pcre_has_long_long="1"], [pcre_has_long_long="0"])
+AC_CHECK_TYPES([unsigned long long], [pcre_has_ulong_long="1"], [pcre_has_ulong_long="0"])
+AC_SUBST(pcre_has_long_long)
+AC_SUBST(pcre_has_ulong_long)
+
 dnl Checks for library functions.
 
-AC_CHECK_FUNCS(bcopy memmove strerror)
+AC_CHECK_FUNCS(bcopy memmove strerror strtoq strtoll)
 
 dnl Handle --enable-utf8
 
@@ -157,10 +195,6 @@ AC_ARG_WITH(match-limit,
   MATCH_LIMIT=-DMATCH_LIMIT=$withval
 )
 
-dnl Now arrange to build libtool
-
-AC_PROG_LIBTOOL
-
 dnl Unicode character property support implies UTF-8 support
 
 if test "$UCP" != "" ; then
@@ -172,7 +206,9 @@ dnl "Export" these variables
 AC_SUBST(BUILD_EXEEXT)
 AC_SUBST(BUILD_OBJEXT)
 AC_SUBST(CC_FOR_BUILD)
+AC_SUBST(CXX_FOR_BUILD)
 AC_SUBST(CFLAGS_FOR_BUILD)
+AC_SUBST(CXXFLAGS_FOR_BUILD)
 AC_SUBST(EBCDIC)
 AC_SUBST(HAVE_MEMMOVE)
 AC_SUBST(HAVE_STRERROR)
@@ -186,6 +222,7 @@ AC_SUBST(PCRE_DATE)
 AC_SUBST(PCRE_VERSION)
 AC_SUBST(PCRE_LIB_VERSION)
 AC_SUBST(PCRE_POSIXLIB_VERSION)
+AC_SUBST(PCRE_CPPLIB_VERSION)
 AC_SUBST(POSIX_MALLOC_THRESHOLD)
 AC_SUBST(UCP)
 AC_SUBST(UTF8)
@@ -223,4 +260,4 @@ if test "x$enable_shared" = "xno" ; then
 fi
 
 dnl This must be last; it determines what files are written as well as config.h
-AC_OUTPUT(Makefile pcre.h:pcre.in pcre-config:pcre-config.in libpcre.pc:libpcre.pc.in RunTest:RunTest.in,[chmod a+x RunTest pcre-config])
+AC_OUTPUT(Makefile pcre.h:pcre.in pcre-config:pcre-config.in libpcre.pc:libpcre.pc.in pcrecpp.h:pcrecpp.h.in pcre_stringpiece.h:pcre_stringpiece.h.in RunGrepTest:RunGrepTest.in RunTest:RunTest.in,[chmod a+x RunTest RunGrepTest pcre-config])
diff -Nurp tin-1.7.8/pcre/dftables.c tin-1.7.9/pcre/dftables.c
--- tin-1.7.8/pcre/dftables.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/dftables.c	2005-06-28 10:31:26.105201663 +0200
@@ -2,13 +2,11 @@
 *      Perl-Compatible Regular Expressions       *
 *************************************************/
 
-/*
-PCRE is a library of functions to support regular expressions whose syntax
+/* PCRE is a library of functions to support regular expressions whose syntax
 and semantics are as close as possible to those of the Perl 5 language.
 
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2004 University of Cambridge
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
@@ -40,20 +38,19 @@ POSSIBILITY OF SUCH DAMAGE.
 */
 
 
-/* This is a support program to generate the file chartables.c, containing
-character tables of various kinds. They are built according to the default C
-locale and used as the default tables by PCRE. Now that pcre_maketables is
-a function visible to the outside world, we make use of its code from here in
-order to be consistent. */
+/* This is a freestanding support program to generate a file containing default
+character tables for PCRE. The tables are built according to the default C
+locale. Now that pcre_maketables is a function visible to the outside world, we
+make use of its code from here in order to be consistent. */
 
 #include <ctype.h>
 #include <stdio.h>
 #include <string.h>
 
-#include "internal.h"
+#include "pcre_internal.h"
 
-#define DFTABLES          /* maketables.c notices this */
-#include "maketables.c"
+#define DFTABLES          /* pcre_maketables.c notices this */
+#include "pcre_maketables.c"
 
 
 int main(int argc, char **argv)
@@ -61,6 +58,7 @@ int main(int argc, char **argv)
 int i;
 FILE *f;
 const unsigned char *tables = pcre_maketables();
+const unsigned char *base_of_tables = tables;
 
 if (argc != 2)
   {
@@ -86,10 +84,10 @@ fprintf(f,
   "program. If you edit it by hand, you might like to edit the Makefile to \n"
   "prevent its ever being regenerated.\n\n");
 fprintf(f,
-  "This file is #included in the compilation of pcre.c to build the default\n"
-  "character tables which are used when no tables are passed to the compile\n"
-  "function. */\n\n"
-  "static unsigned char pcre_default_tables[] = {\n\n"
+  "This file contains the default tables for characters with codes less than\n"
+  "128 (ASCII characters). These tables are used when no external tables are\n"
+  "passed to PCRE. */\n\n"
+  "const unsigned char _pcre_default_tables[] = {\n\n"
   "/* This table is a lower casing table. */\n\n");
 
 fprintf(f, "  ");
@@ -167,6 +165,7 @@ if (isprint(i-1)) fprintf(f, " %c ", i-1
 fprintf(f, " */\n\n/* End of chartables.c */\n");
 
 fclose(f);
+free((void *)base_of_tables);
 return 0;
 }
 
diff -Nurp tin-1.7.8/pcre/doc/pcre.3 tin-1.7.9/pcre/doc/pcre.3
--- tin-1.7.8/pcre/doc/pcre.3	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/doc/pcre.3	2005-06-28 10:31:26.887057735 +0200
@@ -6,15 +6,29 @@ PCRE - Perl-compatible regular expressio
 .sp
 The PCRE library is a set of functions that implement regular expression
 pattern matching using the same syntax and semantics as Perl, with just a few
-differences. The current implementation of PCRE (release 5.x) corresponds
+differences. The current implementation of PCRE (release 6.x) corresponds
 approximately with Perl 5.8, including support for UTF-8 encoded strings and
 Unicode general category properties. However, this support has to be explicitly
 enabled; it is not the default.
 .P
+In addition to the Perl-compatible matching function, PCRE also contains an
+alternative matching function that matches the same compiled patterns in a
+different way. In certain circumstances, the alternative function has some
+advantages. For a discussion of the two matching algorithms, see the
+.\" HREF
+\fBpcrematching\fP
+.\"
+page.
+.P
 PCRE is written in C and released as a C library. A number of people have
-written wrappers and interfaces of various kinds. A C++ class is included in
-these contributions, which can be found in the \fIContrib\fR directory at the
-primary FTP site, which is:
+written wrappers and interfaces of various kinds. In particular, Google Inc.
+have provided a comprehensive C++ wrapper. This is now included as part of the
+PCRE distribution. The
+.\" HREF
+\fBpcrecpp\fP
+.\"
+page has details of this interface. Other people's contributions can be found
+in the \fIContrib\fR directory at the primary FTP site, which is:
 .sp
 .\" HTML <a href="ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre">
 .\" </a>
@@ -43,6 +57,11 @@ available. The features themselves are d
 .\"
 page. Documentation about building PCRE for various operating systems can be
 found in the \fBREADME\fP file in the source distribution.
+.P
+The library contains a number of undocumented internal functions and data
+tables that are used by more than one of the exported external functions, but
+which are not intended for use by external callers. Their names all begin with
+"_pcre_", which hopefully will not provoke any name clashes.
 .
 .
 .SH "USER DOCUMENTATION"
@@ -55,23 +74,25 @@ all the sections are concatenated, for e
 follows:
 .sp
   pcre              this document
-  pcreapi           details of PCRE's native API
+  pcreapi           details of PCRE's native C API
   pcrebuild         options for building PCRE
   pcrecallout       details of the callout feature
   pcrecompat        discussion of Perl compatibility
+  pcrecpp           details of the C++ wrapper
   pcregrep          description of the \fBpcregrep\fP command
+  pcrematching      discussion of the two matching algorithms
   pcrepartial       details of the partial matching facility
 .\" JOIN
   pcrepattern       syntax and semantics of supported
                       regular expressions
   pcreperform       discussion of performance issues
-  pcreposix         the POSIX-compatible API
+  pcreposix         the POSIX-compatible C API
   pcreprecompile    details of saving and re-using precompiled patterns
   pcresample        discussion of the sample program
   pcretest          description of the \fBpcretest\fP testing command
 .sp
 In addition, in the "man" and HTML formats, there is a short page for each
-library function, listing its arguments and results.
+C library function, listing its arguments and results.
 .
 .
 .SH LIMITATIONS
@@ -99,9 +120,10 @@ depth of nesting of all kinds of parenth
 subpatterns, assertions, and other types of subpattern, is 200.
 .P
 The maximum length of a subject string is the largest positive number that an
-integer variable can hold. However, PCRE uses recursion to handle subpatterns
-and indefinite repetition. This means that the available stack space may limit
-the size of a subject string that can be processed by certain patterns.
+integer variable can hold. However, when using the traditional matching
+function, PCRE uses recursion to handle subpatterns and indefinite repetition.
+This means that the available stack space may limit the size of a subject
+string that can be processed by certain patterns.
 .sp
 .\" HTML <a name="utf8support"></a>
 .
@@ -167,7 +189,8 @@ bytes, for example: \ex{100}{3}.
 5. The dot metacharacter matches one UTF-8 character instead of a single byte.
 .P
 6. The escape sequence \eC can be used to match a single byte in UTF-8 mode,
-but its use can lead to some strange effects.
+but its use can lead to some strange effects. This facility is not available in
+the alternative matching function, \fBpcre_dfa_exec()\fP.
 .P
 7. The character escapes \eb, \eB, \ed, \eD, \es, \eS, \ew, and \eW correctly
 test characters of any code value, but the characters that PCRE recognizes as
@@ -190,15 +213,17 @@ values.
 .SH AUTHOR
 .rs
 .sp
-Philip Hazel <ph10@cam.ac.uk>
+Philip Hazel
 .br
 University Computing Service,
 .br
 Cambridge CB2 3QG, England.
-.br
-Phone: +44 1223 334714
+.P
+Putting an actual email address here seems to have been a spam magnet, so I've
+taken it away. If you want to email me, use my initial and surname, separated
+by a dot, at the domain ucs.cam.ac.uk.
 .sp
 .in 0
-Last updated: 09 September 2004
+Last updated: 07 March 2005
 .br
-Copyright (c) 1997-2004 University of Cambridge.
+Copyright (c) 1997-2005 University of Cambridge.
diff -Nurp tin-1.7.8/pcre/doc/pcrepattern.3 tin-1.7.9/pcre/doc/pcrepattern.3
--- tin-1.7.8/pcre/doc/pcrepattern.3	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/doc/pcrepattern.3	2005-06-28 10:31:26.949046324 +0200
@@ -1,4 +1,4 @@
-.TH PCRE 3
+.TH PCREPATTERN 3
 .SH NAME
 PCRE - Perl-compatible regular expressions
 .SH "PCRE REGULAR EXPRESSION DETAILS"
@@ -26,15 +26,35 @@ in the main
 .\"
 page.
 .P
+The remainder of this document discusses the patterns that are supported by
+PCRE when its main matching function, \fBpcre_exec()\fP, is used.
+From release 6.0, PCRE offers a second matching function,
+\fBpcre_dfa_exec()\fP, which matches using a different algorithm that is not
+Perl-compatible. The advantages and disadvantages of the alternative function,
+and how it differs from the normal function, are discussed in the
+.\" HREF
+\fBpcrematching\fP
+.\"
+page.
+.P
 A regular expression is a pattern that is matched against a subject string from
 left to right. Most characters stand for themselves in a pattern, and match the
 corresponding characters in the subject. As a trivial example, the pattern
 .sp
   The quick brown fox
 .sp
-matches a portion of a subject string that is identical to itself. The power of
-regular expressions comes from the ability to include alternatives and
-repetitions in the pattern. These are encoded in the pattern by the use of
+matches a portion of a subject string that is identical to itself. When
+caseless matching is specified (the PCRE_CASELESS option), letters are matched
+independently of case. In UTF-8 mode, PCRE always understands the concept of
+case for characters whose values are less than 128, so caseless matching is
+always possible. For characters with higher values, the concept of case is
+supported if PCRE is compiled with Unicode property support, but not otherwise.
+If you want to use caseless matching for characters 128 and above, you must
+ensure that PCRE is compiled with Unicode property support as well as with
+UTF-8 support.
+.P
+The power of regular expressions comes from the ability to include alternatives
+and repetitions in the pattern. These are encoded in the pattern by the use of
 \fImetacharacters\fP, which do not stand for themselves but instead are
 interpreted in some special way.
 .P
@@ -527,9 +547,13 @@ class as a literal string of bytes, or b
 When caseless matching is set, any letters in a class represent both their
 upper case and lower case versions, so for example, a caseless [aeiou] matches
 "A" as well as "a", and a caseless [^aeiou] does not match "A", whereas a
-caseful version would. When running in UTF-8 mode, PCRE supports the concept of
-case for characters with values greater than 128 only when it is compiled with
-Unicode property support.
+caseful version would. In UTF-8 mode, PCRE always understands the concept of
+case for characters whose values are less than 128, so caseless matching is
+always possible. For characters with higher values, the concept of case is
+supported if PCRE is compiled with Unicode property support, but not otherwise.
+If you want to use caseless matching for characters 128 and above, you must
+ensure that PCRE is compiled with Unicode property support as well as with
+UTF-8 support.
 .P
 The newline character is never treated in any special way in character classes,
 whatever the setting of the PCRE_DOTALL or PCRE_MULTILINE options is. A class
@@ -1451,6 +1475,6 @@ description of the interface to the call
 documentation.
 .P
 .in 0
-Last updated: 09 September 2004
+Last updated: 28 February 2005
 .br
-Copyright (c) 1997-2004 University of Cambridge.
+Copyright (c) 1997-2005 University of Cambridge.
diff -Nurp tin-1.7.8/pcre/get.c tin-1.7.9/pcre/get.c
--- tin-1.7.8/pcre/get.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/get.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,357 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2003 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This module contains some convenience functions for extracting substrings
-from the subject string after a regex match has succeeded. The original idea
-for these functions came from Scott Wimer. */
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-/*************************************************
-*           Find number for named string         *
-*************************************************/
-
-/* This function is used by the two extraction functions below, as well
-as being generally available.
-
-Arguments:
-  code        the compiled regex
-  stringname  the name whose number is required
-
-Returns:      the number of the named parentheses, or a negative number
-                (PCRE_ERROR_NOSUBSTRING) if not found
-*/
-
-int
-pcre_get_stringnumber(const pcre *code, const char *stringname)
-{
-int rc;
-int entrysize;
-int top, bot;
-uschar *nametable;
-
-if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
-  return rc;
-if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
-
-if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
-  return rc;
-if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
-  return rc;
-
-bot = 0;
-while (top > bot)
-  {
-  int mid = (top + bot) / 2;
-  uschar *entry = nametable + entrysize*mid;
-  int c = strcmp(stringname, (char *)(entry + 2));
-  if (c == 0) return (entry[0] << 8) + entry[1];
-  if (c > 0) bot = mid + 1; else top = mid;
-  }
-
-return PCRE_ERROR_NOSUBSTRING;
-}
-
-
-
-/*************************************************
-*      Copy captured string to given buffer      *
-*************************************************/
-
-/* This function copies a single captured substring into a given buffer.
-Note that we use memcpy() rather than strncpy() in case there are binary zeros
-in the string.
-
-Arguments:
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  stringnumber   the number of the required substring
-  buffer         where to put the substring
-  size           the size of the buffer
-
-Returns:         if successful:
-                   the length of the copied string, not including the zero
-                   that is put on the end; can be zero
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) buffer too small
-                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_copy_substring(const char *subject, int *ovector, int stringcount,
-  int stringnumber, char *buffer, int size)
-{
-int yield;
-if (stringnumber < 0 || stringnumber >= stringcount)
-  return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
-memcpy(buffer, subject + ovector[stringnumber], yield);
-buffer[yield] = 0;
-return yield;
-}
-
-
-
-/*************************************************
-*   Copy named captured string to given buffer   *
-*************************************************/
-
-/* This function copies a single captured substring into a given buffer,
-identifying it by name.
-
-Arguments:
-  code           the compiled regex
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  stringname     the name of the required substring
-  buffer         where to put the substring
-  size           the size of the buffer
-
-Returns:         if successful:
-                   the length of the copied string, not including the zero
-                   that is put on the end; can be zero
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) buffer too small
-                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_copy_named_substring(const pcre *code, const char *subject, int *ovector,
-  int stringcount, const char *stringname, char *buffer, int size)
-{
-int n = pcre_get_stringnumber(code, stringname);
-if (n <= 0) return n;
-return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size);
-}
-
-
-
-/*************************************************
-*      Copy all captured strings to new store    *
-*************************************************/
-
-/* This function gets one chunk of store and builds a list of pointers and all
-of the captured substrings in it. A NULL pointer is put on the end of the list.
-
-Arguments:
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  listptr        set to point to the list of pointers
-
-Returns:         if successful: 0
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) failed to get store
-*/
-
-int
-pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
-  const char ***listptr)
-{
-int i;
-int size = sizeof(char *);
-int double_count = stringcount * 2;
-char **stringlist;
-char *p;
-
-for (i = 0; i < double_count; i += 2)
-  size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
-
-stringlist = (char **)(pcre_malloc)(size);
-if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
-
-*listptr = (const char **)stringlist;
-p = (char *)(stringlist + stringcount + 1);
-
-for (i = 0; i < double_count; i += 2)
-  {
-  int len = ovector[i+1] - ovector[i];
-  memcpy(p, subject + ovector[i], len);
-  *stringlist++ = p;
-  p += len;
-  *p++ = 0;
-  }
-
-*stringlist = NULL;
-return 0;
-}
-
-
-
-/*************************************************
-*   Free store obtained by get_substring_list    *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument:   the result of a previous pcre_get_substring_list()
-Returns:    nothing
-*/
-
-void
-pcre_free_substring_list(const char **pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-
-
-/*************************************************
-*      Copy captured string to new store         *
-*************************************************/
-
-/* This function copies a single captured substring into a piece of new
-store
-
-Arguments:
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  stringnumber   the number of the required substring
-  stringptr      where to put a pointer to the substring
-
-Returns:         if successful:
-                   the length of the string, not including the zero that
-                   is put on the end; can be zero
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) failed to get store
-                   PCRE_ERROR_NOSUBSTRING (-7) substring not present
-*/
-
-int
-pcre_get_substring(const char *subject, int *ovector, int stringcount,
-  int stringnumber, const char **stringptr)
-{
-int yield;
-char *substring;
-if (stringnumber < 0 || stringnumber >= stringcount)
-  return PCRE_ERROR_NOSUBSTRING;
-stringnumber *= 2;
-yield = ovector[stringnumber+1] - ovector[stringnumber];
-substring = (char *)(pcre_malloc)(yield + 1);
-if (substring == NULL) return PCRE_ERROR_NOMEMORY;
-memcpy(substring, subject + ovector[stringnumber], yield);
-substring[yield] = 0;
-*stringptr = substring;
-return yield;
-}
-
-
-
-/*************************************************
-*   Copy named captured string to new store      *
-*************************************************/
-
-/* This function copies a single captured substring, identified by name, into
-new store.
-
-Arguments:
-  code           the compiled regex
-  subject        the subject string that was matched
-  ovector        pointer to the offsets table
-  stringcount    the number of substrings that were captured
-                   (i.e. the yield of the pcre_exec call, unless
-                   that was zero, in which case it should be 1/3
-                   of the offset table size)
-  stringname     the name of the required substring
-  stringptr      where to put the pointer
-
-Returns:         if successful:
-                   the length of the copied string, not including the zero
-                   that is put on the end; can be zero
-                 if not successful:
-                   PCRE_ERROR_NOMEMORY (-6) couldn't get memory
-                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
-*/
-
-int
-pcre_get_named_substring(const pcre *code, const char *subject, int *ovector,
-  int stringcount, const char *stringname, const char **stringptr)
-{
-int n = pcre_get_stringnumber(code, stringname);
-if (n <= 0) return n;
-return pcre_get_substring(subject, ovector, stringcount, n, stringptr);
-}
-
-
-
-
-/*************************************************
-*       Free store obtained by get_substring     *
-*************************************************/
-
-/* This function exists for the benefit of people calling PCRE from non-C
-programs that can call its functions, but not free() or (pcre_free)() directly.
-
-Argument:   the result of a previous pcre_get_substring()
-Returns:    nothing
-*/
-
-void
-pcre_free_substring(const char *pointer)
-{
-(pcre_free)((void *)pointer);
-}
-
-/* End of get.c */
diff -Nurp tin-1.7.8/pcre/internal.h tin-1.7.9/pcre/internal.h
--- tin-1.7.8/pcre/internal.h	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/internal.h	1970-01-01 01:00:00.000000000 +0100
@@ -1,752 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-
-/* This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file doc/Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This header contains definitions that are shared between the different
-modules, but which are not relevant to the outside. */
-
-/* Get the definitions provided by running "configure" */
-
-#include "config.h"
-
-/* Standard C headers plus the external interface definition. The only time
-setjmp and stdarg are used is when NO_RECURSE is set. */
-
-#include <ctype.h>
-#include <limits.h>
-#include <setjmp.h>
-#include <stdarg.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef PCRE_SPY
-#define PCRE_DEFINITION       /* Win32 __declspec(export) trigger for .dll */
-#endif
-
-/* We need to have types that specify unsigned 16-bit and 32-bit integers. We
-cannot determine these outside the compilation (e.g. by running a program as
-part of "configure") because PCRE is often cross-compiled for use on other
-systems. Instead we make use of the maximum sizes that are available at
-preprocessor time in standard C environments. */
-
-#if USHRT_MAX == 65535
-  typedef unsigned short pcre_uint16;
-#elif UINT_MAX == 65535
-  typedef unsigned int pcre_uint16;
-#else
-  #error Cannot determine a type for 16-bit unsigned integers
-#endif
-
-#if UINT_MAX == 4294967295
-  typedef unsigned int pcre_uint32;
-#elif ULONG_MAX == 4294967295
-  typedef unsigned long int pcre_uint32;
-#else
-  #error Cannot determine a type for 32-bit unsigned integers
-#endif
-
-/* All character handling must be done as unsigned characters. Otherwise there
-are problems with top-bit-set characters and functions such as isspace().
-However, we leave the interface to the outside world as char *, because that
-should make things easier for callers. We define a short type for unsigned char
-to save lots of typing. I tried "uchar", but it causes problems on Digital
-Unix, where it is defined in sys/types, so use "uschar" instead. */
-
-typedef unsigned char uschar;
-
-/* Include the public PCRE header */
-
-#include "pcre.h"
-
-/* When compiling for use with the Virtual Pascal compiler, these functions
-need to have their names changed. PCRE must be compiled with the -DVPCOMPAT
-option on the command line. */
-
-#ifdef VPCOMPAT
-#define strncmp(s1,s2,m) _strncmp(s1,s2,m)
-#define memcpy(d,s,n)    _memcpy(d,s,n)
-#define memmove(d,s,n)   _memmove(d,s,n)
-#define memset(s,c,n)    _memset(s,c,n)
-#else  /* VPCOMPAT */
-
-/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
-define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY
-is set. Otherwise, include an emulating function for those systems that have
-neither (there some non-Unix environments where this is the case). This assumes
-that all calls to memmove are moving strings upwards in store, which is the
-case in PCRE. */
-
-#if ! HAVE_MEMMOVE
-#undef  memmove        /* some systems may have a macro */
-#if HAVE_BCOPY
-#define memmove(a, b, c) bcopy(b, a, c)
-#else  /* HAVE_BCOPY */
-void *
-pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n)
-{
-int i;
-dest += n;
-src += n;
-for (i = 0; i < n; ++i) *(--dest) =  *(--src);
-}
-#define memmove(a, b, c) pcre_memmove(a, b, c)
-#endif   /* not HAVE_BCOPY */
-#endif   /* not HAVE_MEMMOVE */
-#endif   /* not VPCOMPAT */
-
-
-/* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored
-in big-endian order) by default. These are used, for example, to link from the
-start of a subpattern to its alternatives and its end. The use of 2 bytes per
-offset limits the size of the compiled regex to around 64K, which is big enough
-for almost everybody. However, I received a request for an even bigger limit.
-For this reason, and also to make the code easier to maintain, the storing and
-loading of offsets from the byte string is now handled by the macros that are
-defined here.
-
-The macros are controlled by the value of LINK_SIZE. This defaults to 2 in
-the config.h file, but can be overridden by using -D on the command line. This
-is automated on Unix systems via the "configure" command. */
-
-#if LINK_SIZE == 2
-
-#define PUT(a,n,d)   \
-  (a[n] = (d) >> 8), \
-  (a[(n)+1] = (d) & 255)
-
-#define GET(a,n) \
-  (((a)[n] << 8) | (a)[(n)+1])
-
-#define MAX_PATTERN_SIZE (1 << 16)
-
-
-#elif LINK_SIZE == 3
-
-#define PUT(a,n,d)       \
-  (a[n] = (d) >> 16),    \
-  (a[(n)+1] = (d) >> 8), \
-  (a[(n)+2] = (d) & 255)
-
-#define GET(a,n) \
-  (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2])
-
-#define MAX_PATTERN_SIZE (1 << 24)
-
-
-#elif LINK_SIZE == 4
-
-#define PUT(a,n,d)        \
-  (a[n] = (d) >> 24),     \
-  (a[(n)+1] = (d) >> 16), \
-  (a[(n)+2] = (d) >> 8),  \
-  (a[(n)+3] = (d) & 255)
-
-#define GET(a,n) \
-  (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3])
-
-#define MAX_PATTERN_SIZE (1 << 30)   /* Keep it positive */
-
-
-#else
-#error LINK_SIZE must be either 2, 3, or 4
-#endif
-
-
-/* Convenience macro defined in terms of the others */
-
-#define PUTINC(a,n,d)   PUT(a,n,d), a += LINK_SIZE
-
-
-/* PCRE uses some other 2-byte quantities that do not change when the size of
-offsets changes. There are used for repeat counts and for other things such as
-capturing parenthesis numbers in back references. */
-
-#define PUT2(a,n,d)   \
-  a[n] = (d) >> 8; \
-  a[(n)+1] = (d) & 255
-
-#define GET2(a,n) \
-  (((a)[n] << 8) | (a)[(n)+1])
-
-#define PUT2INC(a,n,d)  PUT2(a,n,d), a += 2
-
-
-/* In case there is no definition of offsetof() provided - though any proper
-Standard C system should have one. */
-
-#ifndef offsetof
-#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
-#endif
-
-
-/* These are the public options that can change during matching. */
-
-#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
-
-/* Private options flags start at the most significant end of the four bytes,
-but skip the top bit so we can use ints for convenience without getting tangled
-with negative values. The public options defined in pcre.h start at the least
-significant end. Make sure they don't overlap, though now that we have expanded
-to four bytes, there is plenty of space. */
-
-#define PCRE_FIRSTSET      0x40000000  /* first_byte is set */
-#define PCRE_REQCHSET      0x20000000  /* req_byte is set */
-#define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
-#define PCRE_ICHANGED      0x08000000  /* i option changes within regex */
-#define PCRE_NOPARTIAL     0x04000000  /* can't use partial with this regex */
-
-/* Options for the "extra" block produced by pcre_study(). */
-
-#define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
-
-/* Masks for identifying the public options which are permitted at compile
-time, run time or study time, respectively. */
-
-#define PUBLIC_OPTIONS \
-  (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
-   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
-   PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT)
-
-#define PUBLIC_EXEC_OPTIONS \
-  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
-   PCRE_PARTIAL)
-
-#define PUBLIC_STUDY_OPTIONS 0   /* None defined */
-
-/* Magic number to provide a small check against being handed junk. */
-
-#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
-
-/* Negative values for the firstchar and reqchar variables */
-
-#define REQ_UNSET (-2)
-#define REQ_NONE  (-1)
-
-/* Flags added to firstbyte or reqbyte; a "non-literal" item is either a
-variable-length repeat, or a anything other than literal characters. */
-
-#define REQ_CASELESS 0x0100    /* indicates caselessness */
-#define REQ_VARY     0x0200    /* reqbyte followed non-literal item */
-
-/* Miscellaneous definitions */
-
-typedef int BOOL;
-
-#define FALSE   0
-#define TRUE    1
-
-/* Escape items that are just an encoding of a particular data value. Note that
-ESC_n is defined as yet another macro, which is set in config.h to either \n
-(the default) or \r (which some people want). */
-
-#ifndef ESC_e
-#define ESC_e 27
-#endif
-
-#ifndef ESC_f
-#define ESC_f '\f'
-#endif
-
-#ifndef ESC_n
-#define ESC_n NEWLINE
-#endif
-
-#ifndef ESC_r
-#define ESC_r '\r'
-#endif
-
-/* We can't officially use ESC_t because it is a POSIX reserved identifier
-(presumably because of all the others like size_t). */
-
-#ifndef ESC_tee
-#define ESC_tee '\t'
-#endif
-
-/* These are escaped items that aren't just an encoding of a particular data
-value such as \n. They must have non-zero values, as check_escape() returns
-their negation. Also, they must appear in the same order as in the opcode
-definitions below, up to ESC_z. There's a dummy for OP_ANY because it
-corresponds to "." rather than an escape sequence. The final one must be
-ESC_REF as subsequent values are used for \1, \2, \3, etc. There is are two
-tests in the code for an escape greater than ESC_b and less than ESC_Z to
-detect the types that may be repeated. These are the types that consume
-characters. If any new escapes are put in between that don't consume a
-character, that code will have to change. */
-
-enum { ESC_A = 1, ESC_G, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W,
-       ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_X, ESC_Z, ESC_z, ESC_E,
-       ESC_Q, ESC_REF };
-
-/* Flag bits and data types for the extended class (OP_XCLASS) for classes that
-contain UTF-8 characters with values greater than 255. */
-
-#define XCL_NOT    0x01    /* Flag: this is a negative class */
-#define XCL_MAP    0x02    /* Flag: a 32-byte map is present */
-
-#define XCL_END       0    /* Marks end of individual items */
-#define XCL_SINGLE    1    /* Single item (one multibyte char) follows */
-#define XCL_RANGE     2    /* A range (two multibyte chars) follows */
-#define XCL_PROP      3    /* Unicode property (one property code) follows */
-#define XCL_NOTPROP   4    /* Unicode inverted property (ditto) */
-
-
-/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
-that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
-OP_EOD must correspond in order to the list of escapes immediately above.
-Note that whenever this list is updated, the two macro definitions that follow
-must also be updated to match. */
-
-enum {
-  OP_END,            /* 0 End of pattern */
-
-  /* Values corresponding to backslashed metacharacters */
-
-  OP_SOD,            /* 1 Start of data: \A */
-  OP_SOM,            /* 2 Start of match (subject + offset): \G */
-  OP_NOT_WORD_BOUNDARY,  /*  3 \B */
-  OP_WORD_BOUNDARY,      /*  4 \b */
-  OP_NOT_DIGIT,          /*  5 \D */
-  OP_DIGIT,              /*  6 \d */
-  OP_NOT_WHITESPACE,     /*  7 \S */
-  OP_WHITESPACE,         /*  8 \s */
-  OP_NOT_WORDCHAR,       /*  9 \W */
-  OP_WORDCHAR,           /* 10 \w */
-  OP_ANY,            /* 11 Match any character */
-  OP_ANYBYTE,        /* 12 Match any byte (\C); different to OP_ANY for UTF-8 */
-  OP_NOTPROP,        /* 13 \P (not Unicode property) */
-  OP_PROP,           /* 14 \p (Unicode property) */
-  OP_EXTUNI,         /* 15 \X (extended Unicode sequence */
-  OP_EODN,           /* 16 End of data or \n at end of data: \Z. */
-  OP_EOD,            /* 17 End of data: \z */
-
-  OP_OPT,            /* 18 Set runtime options */
-  OP_CIRC,           /* 19 Start of line - varies with multiline switch */
-  OP_DOLL,           /* 20 End of line - varies with multiline switch */
-  OP_CHAR,           /* 21 Match one character, casefully */
-  OP_CHARNC,         /* 22 Match one character, caselessly */
-  OP_NOT,            /* 23 Match anything but the following char */
-
-  OP_STAR,           /* 24 The maximizing and minimizing versions of */
-  OP_MINSTAR,        /* 25 all these opcodes must come in pairs, with */
-  OP_PLUS,           /* 26 the minimizing one second. */
-  OP_MINPLUS,        /* 27 This first set applies to single characters */
-  OP_QUERY,          /* 28 */
-  OP_MINQUERY,       /* 29 */
-  OP_UPTO,           /* 30 From 0 to n matches */
-  OP_MINUPTO,        /* 31 */
-  OP_EXACT,          /* 32 Exactly n matches */
-
-  OP_NOTSTAR,        /* 33 The maximizing and minimizing versions of */
-  OP_NOTMINSTAR,     /* 34 all these opcodes must come in pairs, with */
-  OP_NOTPLUS,        /* 35 the minimizing one second. */
-  OP_NOTMINPLUS,     /* 36 This set applies to "not" single characters */
-  OP_NOTQUERY,       /* 37 */
-  OP_NOTMINQUERY,    /* 38 */
-  OP_NOTUPTO,        /* 39 From 0 to n matches */
-  OP_NOTMINUPTO,     /* 40 */
-  OP_NOTEXACT,       /* 41 Exactly n matches */
-
-  OP_TYPESTAR,       /* 42 The maximizing and minimizing versions of */
-  OP_TYPEMINSTAR,    /* 43 all these opcodes must come in pairs, with */
-  OP_TYPEPLUS,       /* 44 the minimizing one second. These codes must */
-  OP_TYPEMINPLUS,    /* 45 be in exactly the same order as those above. */
-  OP_TYPEQUERY,      /* 46 This set applies to character types such as \d */
-  OP_TYPEMINQUERY,   /* 47 */
-  OP_TYPEUPTO,       /* 48 From 0 to n matches */
-  OP_TYPEMINUPTO,    /* 49 */
-  OP_TYPEEXACT,      /* 50 Exactly n matches */
-
-  OP_CRSTAR,         /* 51 The maximizing and minimizing versions of */
-  OP_CRMINSTAR,      /* 52 all these opcodes must come in pairs, with */
-  OP_CRPLUS,         /* 53 the minimizing one second. These codes must */
-  OP_CRMINPLUS,      /* 54 be in exactly the same order as those above. */
-  OP_CRQUERY,        /* 55 These are for character classes and back refs */
-  OP_CRMINQUERY,     /* 56 */
-  OP_CRRANGE,        /* 57 These are different to the three sets above. */
-  OP_CRMINRANGE,     /* 58 */
-
-  OP_CLASS,          /* 59 Match a character class, chars < 256 only */
-  OP_NCLASS,         /* 60 Same, but the bitmap was created from a negative
-                           class - the difference is relevant only when a UTF-8
-                           character > 255 is encountered. */
-
-  OP_XCLASS,         /* 61 Extended class for handling UTF-8 chars within the
-                           class. This does both positive and negative. */
-
-  OP_REF,            /* 62 Match a back reference */
-  OP_RECURSE,        /* 63 Match a numbered subpattern (possibly recursive) */
-  OP_CALLOUT,        /* 64 Call out to external function if provided */
-
-  OP_ALT,            /* 65 Start of alternation */
-  OP_KET,            /* 66 End of group that doesn't have an unbounded repeat */
-  OP_KETRMAX,        /* 67 These two must remain together and in this */
-  OP_KETRMIN,        /* 68 order. They are for groups the repeat for ever. */
-
-  /* The assertions must come before ONCE and COND */
-
-  OP_ASSERT,         /* 69 Positive lookahead */
-  OP_ASSERT_NOT,     /* 70 Negative lookahead */
-  OP_ASSERTBACK,     /* 71 Positive lookbehind */
-  OP_ASSERTBACK_NOT, /* 72 Negative lookbehind */
-  OP_REVERSE,        /* 73 Move pointer back - used in lookbehind assertions */
-
-  /* ONCE and COND must come after the assertions, with ONCE first, as there's
-  a test for >= ONCE for a subpattern that isn't an assertion. */
-
-  OP_ONCE,           /* 74 Once matched, don't back up into the subpattern */
-  OP_COND,           /* 75 Conditional group */
-  OP_CREF,           /* 76 Used to hold an extraction string number (cond ref) */
-
-  OP_BRAZERO,        /* 77 These two must remain together and in this */
-  OP_BRAMINZERO,     /* 78 order. */
-
-  OP_BRANUMBER,      /* 79 Used for extracting brackets whose number is greater
-                           than can fit into an opcode. */
-
-  OP_BRA             /* 80 This and greater values are used for brackets that
-                           extract substrings up to EXTRACT_BASIC_MAX. After
-                           that, use is made of OP_BRANUMBER. */
-};
-
-/* WARNING WARNING WARNING: There is an implicit assumption in pcre.c and
-study.c that all opcodes are less than 128 in value. This makes handling UTF-8
-character sequences easier. */
-
-/* The highest extraction number before we have to start using additional
-bytes. (Originally PCRE didn't have support for extraction counts highter than
-this number.) The value is limited by the number of opcodes left after OP_BRA,
-i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
-opcodes. */
-
-#define EXTRACT_BASIC_MAX  100
-
-
-/* This macro defines textual names for all the opcodes. There are used only
-for debugging, in pcre.c when DEBUG is defined, and also in pcretest.c. The
-macro is referenced only in printint.c. */
-
-#define OP_NAME_LIST \
-  "End", "\\A", "\\G", "\\B", "\\b", "\\D", "\\d",                \
-  "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte",                   \
-  "notprop", "prop", "extuni",                                    \
-  "\\Z", "\\z",                                                   \
-  "Opt", "^", "$", "char", "charnc", "not",                       \
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
-  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
-  "*", "*?", "+", "+?", "?", "??", "{", "{",                      \
-  "class", "nclass", "xclass", "Ref", "Recurse", "Callout",       \
-  "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",     \
-  "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cond ref",\
-  "Brazero", "Braminzero", "Branumber", "Bra"
-
-
-/* This macro defines the length of fixed length operations in the compiled
-regex. The lengths are used when searching for specific things, and also in the
-debugging printing of a compiled regex. We use a macro so that it can be
-incorporated both into pcre.c and pcretest.c without being publicly exposed.
-
-As things have been extended, some of these are no longer fixed lenths, but are
-minima instead. For example, the length of a single-character repeat may vary
-in UTF-8 mode. The code that uses this table must know about such things. */
-
-#define OP_LENGTHS \
-  1,                             /* End                                    */ \
-  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* \A, \G, \B, \B, \D, \d, \S, \s, \W, \w */ \
-  1, 1,                          /* Any, Anybyte                           */ \
-  2, 2, 1,                       /* NOTPROP, PROP, EXTUNI                  */ \
-  1, 1, 2, 1, 1,                 /* \Z, \z, Opt, ^, $                      */ \
-  2,                             /* Char  - the minimum length             */ \
-  2,                             /* Charnc  - the minimum length           */ \
-  2,                             /* not                                    */ \
-  /* Positive single-char repeats                            ** These are  */ \
-  2, 2, 2, 2, 2, 2,              /* *, *?, +, +?, ?, ??      ** minima in  */ \
-  4, 4, 4,                       /* upto, minupto, exact     ** UTF-8 mode */ \
-  /* Negative single-char repeats - only for chars < 256                   */ \
-  2, 2, 2, 2, 2, 2,              /* NOT *, *?, +, +?, ?, ??                */ \
-  4, 4, 4,                       /* NOT upto, minupto, exact               */ \
-  /* Positive type repeats                                                 */ \
-  2, 2, 2, 2, 2, 2,              /* Type *, *?, +, +?, ?, ??               */ \
-  4, 4, 4,                       /* Type upto, minupto, exact              */ \
-  /* Character class & ref repeats                                         */ \
-  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */ \
-  5, 5,                          /* CRRANGE, CRMINRANGE                    */ \
- 33,                             /* CLASS                                  */ \
- 33,                             /* NCLASS                                 */ \
-  0,                             /* XCLASS - variable length               */ \
-  3,                             /* REF                                    */ \
-  1+LINK_SIZE,                   /* RECURSE                                */ \
-  2+2*LINK_SIZE,                 /* CALLOUT                                */ \
-  1+LINK_SIZE,                   /* Alt                                    */ \
-  1+LINK_SIZE,                   /* Ket                                    */ \
-  1+LINK_SIZE,                   /* KetRmax                                */ \
-  1+LINK_SIZE,                   /* KetRmin                                */ \
-  1+LINK_SIZE,                   /* Assert                                 */ \
-  1+LINK_SIZE,                   /* Assert not                             */ \
-  1+LINK_SIZE,                   /* Assert behind                          */ \
-  1+LINK_SIZE,                   /* Assert behind not                      */ \
-  1+LINK_SIZE,                   /* Reverse                                */ \
-  1+LINK_SIZE,                   /* Once                                   */ \
-  1+LINK_SIZE,                   /* COND                                   */ \
-  3,                             /* CREF                                   */ \
-  1, 1,                          /* BRAZERO, BRAMINZERO                    */ \
-  3,                             /* BRANUMBER                              */ \
-  1+LINK_SIZE                    /* BRA                                    */ \
-
-
-/* A magic value for OP_CREF to indicate the "in recursion" condition. */
-
-#define CREF_RECURSE  0xffff
-
-/* The texts of compile-time error messages are defined as macros here so that
-they can be accessed by the POSIX wrapper and converted into error codes.  Yes,
-I could have used error codes in the first place, but didn't feel like changing
-just to accommodate the POSIX wrapper. */
-
-#define ERR1  "\\ at end of pattern"
-#define ERR2  "\\c at end of pattern"
-#define ERR3  "unrecognized character follows \\"
-#define ERR4  "numbers out of order in {} quantifier"
-#define ERR5  "number too big in {} quantifier"
-#define ERR6  "missing terminating ] for character class"
-#define ERR7  "invalid escape sequence in character class"
-#define ERR8  "range out of order in character class"
-#define ERR9  "nothing to repeat"
-#define ERR10 "operand of unlimited repeat could match the empty string"
-#define ERR11 "internal error: unexpected repeat"
-#define ERR12 "unrecognized character after (?"
-#define ERR13 "POSIX named classes are supported only within a class"
-#define ERR14 "missing )"
-#define ERR15 "reference to non-existent subpattern"
-#define ERR16 "erroffset passed as NULL"
-#define ERR17 "unknown option bit(s) set"
-#define ERR18 "missing ) after comment"
-#define ERR19 "parentheses nested too deeply"
-#define ERR20 "regular expression too large"
-#define ERR21 "failed to get memory"
-#define ERR22 "unmatched parentheses"
-#define ERR23 "internal error: code overflow"
-#define ERR24 "unrecognized character after (?<"
-#define ERR25 "lookbehind assertion is not fixed length"
-#define ERR26 "malformed number after (?("
-#define ERR27 "conditional group contains more than two branches"
-#define ERR28 "assertion expected after (?("
-#define ERR29 "(?R or (?digits must be followed by )"
-#define ERR30 "unknown POSIX class name"
-#define ERR31 "POSIX collating elements are not supported"
-#define ERR32 "this version of PCRE is not compiled with PCRE_UTF8 support"
-#define ERR33 "spare error"
-#define ERR34 "character value in \\x{...} sequence is too large"
-#define ERR35 "invalid condition (?(0)"
-#define ERR36 "\\C not allowed in lookbehind assertion"
-#define ERR37 "PCRE does not support \\L, \\l, \\N, \\U, or \\u"
-#define ERR38 "number after (?C is > 255"
-#define ERR39 "closing ) for (?C expected"
-#define ERR40 "recursive call could loop indefinitely"
-#define ERR41 "unrecognized character after (?P"
-#define ERR42 "syntax error after (?P"
-#define ERR43 "two named groups have the same name"
-#define ERR44 "invalid UTF-8 string"
-#define ERR45 "support for \\P, \\p, and \\X has not been compiled"
-#define ERR46 "malformed \\P or \\p sequence"
-#define ERR47 "unknown property name after \\P or \\p"
-
-/* The real format of the start of the pcre block; the index of names and the
-code vector run on as long as necessary after the end. We store an explicit
-offset to the name table so that if a regex is compiled on one host, saved, and
-then run on another where the size of pointers is different, all might still
-be well. For the case of compiled-on-4 and run-on-8, we include an extra
-pointer that is always NULL. For future-proofing, we also include a few dummy
-fields - even though you can never get this planning right!
-
-NOTE NOTE NOTE:
-Because people can now save and re-use compiled patterns, any additions to this
-structure should be made at the end, and something earlier (e.g. a new
-flag in the options or one of the dummy fields) should indicate that the new
-fields are present. Currently PCRE always sets the dummy fields to zero.
-NOTE NOTE NOTE:
-*/
-
-typedef struct real_pcre {
-  pcre_uint32 magic_number;
-  pcre_uint32 size;               /* Total that was malloced */
-  pcre_uint32 options;
-  pcre_uint32 dummy1;             /* For future use, maybe */
-
-  pcre_uint16 top_bracket;
-  pcre_uint16 top_backref;
-  pcre_uint16 first_byte;
-  pcre_uint16 req_byte;
-  pcre_uint16 name_table_offset;  /* Offset to name table that follows */
-  pcre_uint16 name_entry_size;    /* Size of any name items */
-  pcre_uint16 name_count;         /* Number of name items */
-  pcre_uint16 dummy2;             /* For future use, maybe */
-
-  const unsigned char *tables;    /* Pointer to tables or NULL for std */
-  const unsigned char *nullpad;   /* NULL padding */
-} real_pcre;
-
-/* The format of the block used to store data from pcre_study(). The same
-remark (see NOTE above) about extending this structure applies. */
-
-typedef struct pcre_study_data {
-  pcre_uint32 size;               /* Total that was malloced */
-  pcre_uint32 options;
-  uschar start_bits[32];
-} pcre_study_data;
-
-/* Structure for passing "static" information around between the functions
-doing the compiling, so that they are thread-safe. */
-
-typedef struct compile_data {
-  const uschar *lcc;            /* Points to lower casing table */
-  const uschar *fcc;            /* Points to case-flipping table */
-  const uschar *cbits;          /* Points to character type table */
-  const uschar *ctypes;         /* Points to table of type maps */
-  const uschar *start_code;     /* The start of the compiled code */
-  const uschar *start_pattern;  /* The start of the pattern */
-  uschar *name_table;           /* The name/number table */
-  int  names_found;             /* Number of entries so far */
-  int  name_entry_size;         /* Size of each entry */
-  int  top_backref;             /* Maximum back reference */
-  unsigned int backref_map;     /* Bitmap of low back refs */
-  int  req_varyopt;             /* "After variable item" flag for reqbyte */
-  BOOL nopartial;               /* Set TRUE if partial won't work */
-} compile_data;
-
-/* Structure for maintaining a chain of pointers to the currently incomplete
-branches, for testing for left recursion. */
-
-typedef struct branch_chain {
-  struct branch_chain *outer;
-  uschar *current;
-} branch_chain;
-
-/* Structure for items in a linked list that represents an explicit recursive
-call within the pattern. */
-
-typedef struct recursion_info {
-  struct recursion_info *prevrec; /* Previous recursion record (or NULL) */
-  int group_num;                /* Number of group that was called */
-  const uschar *after_call;     /* "Return value": points after the call in the expr */
-  const uschar *save_start;     /* Old value of md->start_match */
-  int *offset_save;             /* Pointer to start of saved offsets */
-  int saved_max;                /* Number of saved offsets */
-} recursion_info;
-
-/* When compiling in a mode that doesn't use recursive calls to match(),
-a structure is used to remember local variables on the heap. It is defined in
-pcre.c, close to the match() function, so that it is easy to keep it in step
-with any changes of local variable. However, the pointer to the current frame
-must be saved in some "static" place over a longjmp(). We declare the
-structure here so that we can put a pointer in the match_data structure.
-NOTE: This isn't used for a "normal" compilation of pcre. */
-
-struct heapframe;
-
-/* Structure for passing "static" information around between the functions
-doing the matching, so that they are thread-safe. */
-
-typedef struct match_data {
-  unsigned long int match_call_count; /* As it says */
-  unsigned long int match_limit;/* As it says */
-  int   *offset_vector;         /* Offset vector */
-  int    offset_end;            /* One past the end */
-  int    offset_max;            /* The maximum usable for return data */
-  const uschar *lcc;            /* Points to lower casing table */
-  const uschar *ctypes;         /* Points to table of type maps */
-  BOOL   offset_overflow;       /* Set if too many extractions */
-  BOOL   notbol;                /* NOTBOL flag */
-  BOOL   noteol;                /* NOTEOL flag */
-  BOOL   utf8;                  /* UTF8 flag */
-  BOOL   endonly;               /* Dollar not before final \n */
-  BOOL   notempty;              /* Empty string match not wanted */
-  BOOL   partial;               /* PARTIAL flag */
-  BOOL   hitend;                /* Hit the end of the subject at some point */
-  const uschar *start_code;     /* For use when recursing */
-  const uschar *start_subject;  /* Start of the subject string */
-  const uschar *end_subject;    /* End of the subject string */
-  const uschar *start_match;    /* Start of this match attempt */
-  const uschar *end_match_ptr;  /* Subject position at end match */
-  int    end_offset_top;        /* Highwater mark at end of match */
-  int    capture_last;          /* Most recent capture number */
-  int    start_offset;          /* The start offset value */
-  recursion_info *recursive;    /* Linked list of recursion data */
-  void  *callout_data;          /* To pass back to callouts */
-  struct heapframe *thisframe;  /* Used only when compiling for no recursion */
-} match_data;
-
-/* Bit definitions for entries in the pcre_ctypes table. */
-
-#define ctype_space   0x01
-#define ctype_letter  0x02
-#define ctype_digit   0x04
-#define ctype_xdigit  0x08
-#define ctype_word    0x10   /* alphameric or '_' */
-#define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
-
-/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
-of bits for a class map. Some classes are built by combining these tables. */
-
-#define cbit_space     0      /* [:space:] or \s */
-#define cbit_xdigit   32      /* [:xdigit:] */
-#define cbit_digit    64      /* [:digit:] or \d */
-#define cbit_upper    96      /* [:upper:] */
-#define cbit_lower   128      /* [:lower:] */
-#define cbit_word    160      /* [:word:] or \w */
-#define cbit_graph   192      /* [:graph:] */
-#define cbit_print   224      /* [:print:] */
-#define cbit_punct   256      /* [:punct:] */
-#define cbit_cntrl   288      /* [:cntrl:] */
-#define cbit_length  320      /* Length of the cbits table */
-
-/* Offsets of the various tables from the base tables pointer, and
-total length. */
-
-#define lcc_offset      0
-#define fcc_offset    256
-#define cbits_offset  512
-#define ctypes_offset (cbits_offset + cbit_length)
-#define tables_length (ctypes_offset + 256)
-
-/* End of internal.h */
diff -Nurp tin-1.7.8/pcre/maketables.c tin-1.7.9/pcre/maketables.c
--- tin-1.7.8/pcre/maketables.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/maketables.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,146 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-PCRE is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2003 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-
-/* This file is compiled on its own as part of the PCRE library. However,
-it is also included in the compilation of dftables.c, in which case the macro
-DFTABLES is defined. */
-
-#ifndef DFTABLES
-#include "internal.h"
-#endif
-
-
-
-/*************************************************
-*           Create PCRE character tables         *
-*************************************************/
-
-/* This function builds a set of character tables for use by PCRE and returns
-a pointer to them. They are build using the ctype functions, and consequently
-their contents will depend upon the current locale setting. When compiled as
-part of the library, the store is obtained via pcre_malloc(), but when compiled
-inside dftables, use malloc().
-
-Arguments:   none
-Returns:     pointer to the contiguous block of data
-*/
-
-const unsigned char *
-pcre_maketables(void)
-{
-unsigned char *yield, *p;
-int i;
-
-#ifndef DFTABLES
-yield = (unsigned char*)(pcre_malloc)(tables_length);
-#else
-yield = (unsigned char*)malloc(tables_length);
-#endif
-
-if (yield == NULL) return NULL;
-p = yield;
-
-/* First comes the lower casing table */
-
-for (i = 0; i < 256; i++) *p++ = tolower(i);
-
-/* Next the case-flipping table */
-
-for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
-
-/* Then the character class tables. Don't try to be clever and save effort
-on exclusive ones - in some locales things may be different. Note that the
-table for "space" includes everything "isspace" gives, including VT in the
-default locale. This makes it work for the POSIX class [:space:]. */
-
-memset(p, 0, cbit_length);
-for (i = 0; i < 256; i++)
-  {
-  if (isdigit(i))
-    {
-    p[cbit_digit  + i/8] |= 1 << (i&7);
-    p[cbit_word   + i/8] |= 1 << (i&7);
-    }
-  if (isupper(i))
-    {
-    p[cbit_upper  + i/8] |= 1 << (i&7);
-    p[cbit_word   + i/8] |= 1 << (i&7);
-    }
-  if (islower(i))
-    {
-    p[cbit_lower  + i/8] |= 1 << (i&7);
-    p[cbit_word   + i/8] |= 1 << (i&7);
-    }
-  if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
-  if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
-  if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
-  if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
-  if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
-  if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
-  if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
-  }
-p += cbit_length;
-
-/* Finally, the character type table. In this, we exclude VT from the white
-space chars, because Perl doesn't recognize it as such for \s and for comments
-within regexes. */
-
-for (i = 0; i < 256; i++)
-  {
-  int x = 0;
-  if (i != 0x0b && isspace(i)) x += ctype_space;
-  if (isalpha(i)) x += ctype_letter;
-  if (isdigit(i)) x += ctype_digit;
-  if (isxdigit(i)) x += ctype_xdigit;
-  if (isalnum(i) || i == '_') x += ctype_word;
-
-  /* Note: strchr includes the terminating zero in the characters it considers.
-  In this instance, that is ok because we want binary zero to be flagged as a
-  meta-character, which in this sense is any character that terminates a run
-  of data characters. */
-
-  if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta; *p++ = x; }
-
-return yield;
-}
-
-/* End of maketables.c */
diff -Nurp tin-1.7.8/pcre/pcre.c tin-1.7.9/pcre/pcre.c
--- tin-1.7.8/pcre/pcre.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/pcre.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,9195 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-
-/* Define DEBUG to get debugging output on stdout. */
-/* #define DEBUG */
-
-/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
-inline, and there are *still* stupid compilers about that don't like indented
-pre-processor statements. I suppose it's only been 10 years... */
-
-#ifdef DEBUG
-#define DPRINTF(p) printf p
-#else
-#define DPRINTF(p) /*nothing*/
-#endif
-
-/* Include the internals header, which itself includes "config.h", the Standard
-C headers, and the external pcre header. */
-
-#include "internal.h"
-
-/* If Unicode Property support is wanted, include a private copy of the
-function that does it, and the table that translates names to numbers. */
-
-#ifdef SUPPORT_UCP
-#include "ucp.c"
-#include "ucptypetable.c"
-#endif
-
-/* Maximum number of items on the nested bracket stacks at compile time. This
-applies to the nesting of all kinds of parentheses. It does not limit
-un-nested, non-capturing parentheses. This number can be made bigger if
-necessary - it is used to dimension one int and one unsigned char vector at
-compile time. */
-
-#define BRASTACK_SIZE 200
-
-
-/* Maximum number of ints of offset to save on the stack for recursive calls.
-If the offset vector is bigger, malloc is used. This should be a multiple of 3,
-because the offset vector is always a multiple of 3 long. */
-
-#define REC_STACK_SAVE_MAX 30
-
-
-/* The maximum remaining length of subject we are prepared to search for a
-req_byte match. */
-
-#define REQ_BYTE_MAX 1000
-
-
-/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that
-the definition is next to the definition of the opcodes in internal.h. */
-
-static const uschar OP_lengths[] = { OP_LENGTHS };
-
-/* Min and max values for the common repeats; for the maxima, 0 => infinity */
-
-static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
-static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
-
-/* Table for handling escaped characters in the range '0'-'z'. Positive returns
-are simple data values; negative values are for special things like \d and so
-on. Zero means further processing is needed (for things like \x), or the escape
-is invalid. */
-
-#if !EBCDIC   /* This is the "normal" table for ASCII systems */
-static const short int escapes[] = {
-     0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
-     0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
-   '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E,      0, -ESC_G,   /* @ - G */
-     0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
--ESC_P, -ESC_Q,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
--ESC_X,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
-   '`',      7, -ESC_b,      0, -ESC_d,  ESC_e,  ESC_f,      0,   /* ` - g */
-     0,      0,      0,      0,      0,      0,  ESC_n,      0,   /* h - o */
--ESC_p,      0,  ESC_r, -ESC_s,  ESC_tee,    0,      0, -ESC_w,   /* p - w */
-     0,      0, -ESC_z                                            /* x - z */
-};
-
-#else         /* This is the "abnormal" table for EBCDIC systems */
-static const short int escapes[] = {
-/*  48 */     0,     0,      0,     '.',    '<',   '(',    '+',    '|',
-/*  50 */   '&',     0,      0,       0,      0,     0,      0,      0,
-/*  58 */     0,     0,    '!',     '$',    '*',   ')',    ';',    '~',
-/*  60 */   '-',   '/',      0,       0,      0,     0,      0,      0,
-/*  68 */     0,     0,    '|',     ',',    '%',   '_',    '>',    '?',
-/*  70 */     0,     0,      0,       0,      0,     0,      0,      0,
-/*  78 */     0,   '`',    ':',     '#',    '@',  '\'',    '=',    '"',
-/*  80 */     0,     7, -ESC_b,       0, -ESC_d, ESC_e,  ESC_f,      0,
-/*  88 */     0,     0,      0,     '{',      0,     0,      0,      0,
-/*  90 */     0,     0,      0,     'l',      0, ESC_n,      0, -ESC_p,
-/*  98 */     0, ESC_r,      0,     '}',      0,     0,      0,      0,
-/*  A0 */     0,   '~', -ESC_s, ESC_tee,      0,     0, -ESC_w,      0,
-/*  A8 */     0,-ESC_z,      0,       0,      0,   '[',      0,      0,
-/*  B0 */     0,     0,      0,       0,      0,     0,      0,      0,
-/*  B8 */     0,     0,      0,       0,      0,   ']',    '=',    '-',
-/*  C0 */   '{',-ESC_A, -ESC_B,  -ESC_C, -ESC_D,-ESC_E,      0, -ESC_G,
-/*  C8 */     0,     0,      0,       0,      0,     0,      0,      0,
-/*  D0 */   '}',     0,      0,       0,      0,     0,      0, -ESC_P,
-/*  D8 */-ESC_Q,     0,      0,       0,      0,     0,      0,      0,
-/*  E0 */  '\\',     0, -ESC_S,       0,      0,     0, -ESC_W, -ESC_X,
-/*  E8 */     0,-ESC_Z,      0,       0,      0,     0,      0,      0,
-/*  F0 */     0,     0,      0,       0,      0,     0,      0,      0,
-/*  F8 */     0,     0,      0,       0,      0,     0,      0,      0
-};
-#endif
-
-
-/* Tables of names of POSIX character classes and their lengths. The list is
-terminated by a zero length entry. The first three must be alpha, upper, lower,
-as this is assumed for handling case independence. */
-
-static const char *const posix_names[] = {
-  "alpha", "lower", "upper",
-  "alnum", "ascii", "blank", "cntrl", "digit", "graph",
-  "print", "punct", "space", "word",  "xdigit" };
-
-static const uschar posix_name_lengths[] = {
-  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
-
-/* Table of class bit maps for each POSIX class; up to three may be combined
-to form the class. The table for [:blank:] is dynamically modified to remove
-the vertical space characters. */
-
-static const int posix_class_maps[] = {
-  cbit_lower, cbit_upper, -1,             /* alpha */
-  cbit_lower, -1,         -1,             /* lower */
-  cbit_upper, -1,         -1,             /* upper */
-  cbit_digit, cbit_lower, cbit_upper,     /* alnum */
-  cbit_print, cbit_cntrl, -1,             /* ascii */
-  cbit_space, -1,         -1,             /* blank - a GNU extension */
-  cbit_cntrl, -1,         -1,             /* cntrl */
-  cbit_digit, -1,         -1,             /* digit */
-  cbit_graph, -1,         -1,             /* graph */
-  cbit_print, -1,         -1,             /* print */
-  cbit_punct, -1,         -1,             /* punct */
-  cbit_space, -1,         -1,             /* space */
-  cbit_word,  -1,         -1,             /* word - a Perl extension */
-  cbit_xdigit,-1,         -1              /* xdigit */
-};
-
-/* Table to identify digits and hex digits. This is used when compiling
-patterns. Note that the tables in chartables are dependent on the locale, and
-may mark arbitrary characters as digits - but the PCRE compiling code expects
-to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have
-a private table here. It costs 256 bytes, but it is a lot faster than doing
-character value tests (at least in some simple cases I timed), and in some
-applications one wants PCRE to compile efficiently as well as match
-efficiently.
-
-For convenience, we use the same bit definitions as in chartables:
-
-  0x04   decimal digit
-  0x08   hexadecimal digit
-
-Then we can use ctype_digit and ctype_xdigit in the code. */
-
-#if !EBCDIC    /* This is the "normal" case, for ASCII systems */
-static const unsigned char digitab[] =
-  {
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - '  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */
-  0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  */
-  0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */
-  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  @ - G  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H - O  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  P - W  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  X - _  */
-  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  ` - g  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h - o  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  p - w  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  x -127 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
-
-#else          /* This is the "abnormal" case, for EBCDIC systems */
-static const unsigned char digitab[] =
-  {
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7  0 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 10 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  32- 39 20 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 30 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 40 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  72- |     */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 50 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  88- ¬     */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 60 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 104- ?     */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 70 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "     */
-  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* 128- g  80 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144- p  90 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160- x  A0 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 B0 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191    */
-  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  { - G  C0 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  } - P  D0 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223    */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  \ - X  E0 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239    */
-  0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  F0 */
-  0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255    */
-
-static const unsigned char ebcdic_chartab[] = { /* chartable partial dup */
-  0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*   0-  7 */
-  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, /*   8- 15 */
-  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  16- 23 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
-  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  32- 39 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63 */
-  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 */
-  0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80, /*  72- |  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 */
-  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, /*  88- ¬  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 */
-  0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80, /* 104- ?  */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 */
-  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "  */
-  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* 128- g  */
-  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143 */
-  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 144- p  */
-  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159 */
-  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 160- x  */
-  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175 */
-  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 */
-  0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
-  0x80,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  { - G  */
-  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207 */
-  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  } - P  */
-  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223 */
-  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /*  \ - X  */
-  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239 */
-  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
-  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255 */
-#endif
-
-
-/* Definition to allow mutual recursion */
-
-static BOOL
-  compile_regex(int, int, int *, uschar **, const uschar **, const char **,
-    BOOL, int, int *, int *, branch_chain *, compile_data *);
-
-/* Structure for building a chain of data that actually lives on the
-stack, for holding the values of the subject pointer at the start of each
-subpattern, so as to detect when an empty string has been matched by a
-subpattern - to break infinite loops. When NO_RECURSE is set, these blocks
-are on the heap, not on the stack. */
-
-typedef struct eptrblock {
-  struct eptrblock *epb_prev;
-  const uschar *epb_saved_eptr;
-} eptrblock;
-
-/* Flag bits for the match() function */
-
-#define match_condassert   0x01    /* Called to check a condition assertion */
-#define match_isgroup      0x02    /* Set if start of bracketed group */
-
-/* Non-error returns from the match() function. Error returns are externally
-defined PCRE_ERROR_xxx codes, which are all negative. */
-
-#define MATCH_MATCH        1
-#define MATCH_NOMATCH      0
-
-
-
-/*************************************************
-*               Global variables                 *
-*************************************************/
-
-/* PCRE is thread-clean and doesn't use any global variables in the normal
-sense. However, it calls memory allocation and free functions via the four
-indirections below, and it can optionally do callouts. These values can be
-changed by the caller, but are shared between all threads. However, when
-compiling for Virtual Pascal, things are done differently (see pcre.in). */
-
-#ifndef VPCOMPAT
-#ifdef __cplusplus
-extern "C" void *(*pcre_malloc)(size_t) = malloc;
-extern "C" void  (*pcre_free)(void *) = free;
-extern "C" void *(*pcre_stack_malloc)(size_t) = malloc;
-extern "C" void  (*pcre_stack_free)(void *) = free;
-extern "C" int   (*pcre_callout)(pcre_callout_block *) = NULL;
-#else
-void *(*pcre_malloc)(size_t) = malloc;
-void  (*pcre_free)(void *) = free;
-void *(*pcre_stack_malloc)(size_t) = malloc;
-void  (*pcre_stack_free)(void *) = free;
-int   (*pcre_callout)(pcre_callout_block *) = NULL;
-#endif
-#endif
-
-
-/*************************************************
-*    Macros and tables for character handling    *
-*************************************************/
-
-/* When UTF-8 encoding is being used, a character is no longer just a single
-byte. The macros for character handling generate simple sequences when used in
-byte-mode, and more complicated ones for UTF-8 characters. */
-
-#ifndef SUPPORT_UTF8
-#define GETCHAR(c, eptr) c = *eptr;
-#define GETCHARINC(c, eptr) c = *eptr++;
-#define GETCHARINCTEST(c, eptr) c = *eptr++;
-#define GETCHARLEN(c, eptr, len) c = *eptr;
-#define BACKCHAR(eptr)
-
-#else   /* SUPPORT_UTF8 */
-
-/* Get the next UTF-8 character, not advancing the pointer. This is called when
-we know we are in UTF-8 mode. */
-
-#define GETCHAR(c, eptr) \
-  c = *eptr; \
-  if ((c & 0xc0) == 0xc0) \
-    { \
-    int gcii; \
-    int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & utf8_table3[gcaa]) << gcss; \
-    for (gcii = 1; gcii <= gcaa; gcii++) \
-      { \
-      gcss -= 6; \
-      c |= (eptr[gcii] & 0x3f) << gcss; \
-      } \
-    }
-
-/* Get the next UTF-8 character, advancing the pointer. This is called when we
-know we are in UTF-8 mode. */
-
-#define GETCHARINC(c, eptr) \
-  c = *eptr++; \
-  if ((c & 0xc0) == 0xc0) \
-    { \
-    int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & utf8_table3[gcaa]) << gcss; \
-    while (gcaa-- > 0) \
-      { \
-      gcss -= 6; \
-      c |= (*eptr++ & 0x3f) << gcss; \
-      } \
-    }
-
-/* Get the next character, testing for UTF-8 mode, and advancing the pointer */
-
-#define GETCHARINCTEST(c, eptr) \
-  c = *eptr++; \
-  if (md->utf8 && (c & 0xc0) == 0xc0) \
-    { \
-    int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & utf8_table3[gcaa]) << gcss; \
-    while (gcaa-- > 0) \
-      { \
-      gcss -= 6; \
-      c |= (*eptr++ & 0x3f) << gcss; \
-      } \
-    }
-
-/* Get the next UTF-8 character, not advancing the pointer, incrementing length
-if there are extra bytes. This is called when we know we are in UTF-8 mode. */
-
-#define GETCHARLEN(c, eptr, len) \
-  c = *eptr; \
-  if ((c & 0xc0) == 0xc0) \
-    { \
-    int gcii; \
-    int gcaa = utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
-    int gcss = 6*gcaa; \
-    c = (c & utf8_table3[gcaa]) << gcss; \
-    for (gcii = 1; gcii <= gcaa; gcii++) \
-      { \
-      gcss -= 6; \
-      c |= (eptr[gcii] & 0x3f) << gcss; \
-      } \
-    len += gcaa; \
-    }
-
-/* If the pointer is not at the start of a character, move it back until
-it is. Called only in UTF-8 mode. */
-
-#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
-
-#endif
-
-
-
-/*************************************************
-*             Default character tables           *
-*************************************************/
-
-/* A default set of character tables is included in the PCRE binary. Its source
-is built by the maketables auxiliary program, which uses the default C ctypes
-functions, and put in the file chartables.c. These tables are used by PCRE
-whenever the caller of pcre_compile() does not provide an alternate set of
-tables. */
-
-#include "chartables.c"
-
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-*           Tables for UTF-8 support             *
-*************************************************/
-
-/* These are the breakpoints for different numbers of bytes in a UTF-8
-character. */
-
-static const int utf8_table1[] =
-  { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
-
-/* These are the indicator bits and the mask for the data bits to set in the
-first byte of a character, indexed by the number of additional bytes. */
-
-static const int utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-static const int utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-/* Table of the number of extra characters, indexed by the first character
-masked with 0x3f. The highest number for a valid UTF-8 character is in fact
-0x3d. */
-
-static const uschar utf8_table4[] = {
-  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
-
-
-/*************************************************
-*       Convert character value to UTF-8         *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
-  cvalue     the character value
-  buffer     pointer to buffer for result - at least 6 bytes long
-
-Returns:     number of characters placed in the buffer
-*/
-
-static int
-ord2utf8(int cvalue, uschar *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
-  if (cvalue <= utf8_table1[i]) break;
-buffer += i;
-for (j = i; j > 0; j--)
- {
- *buffer-- = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-*buffer = utf8_table2[i] | cvalue;
-return i + 1;
-}
-#endif
-
-
-
-/*************************************************
-*         Print compiled regex                   *
-*************************************************/
-
-/* The code for doing this is held in a separate file that is also included in
-pcretest.c. It defines a function called print_internals(). */
-
-#ifdef DEBUG
-#include "printint.c"
-#endif
-
-
-
-/*************************************************
-*          Return version string                 *
-*************************************************/
-
-#define STRING(a)  # a
-#define XSTRING(s) STRING(s)
-
-EXPORT const char *
-pcre_version(void)
-{
-return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
-}
-
-
-
-
-/*************************************************
-*         Flip bytes in an integer               *
-*************************************************/
-
-/* This function is called when the magic number in a regex doesn't match in
-order to flip its bytes to see if we are dealing with a pattern that was
-compiled on a host of different endianness. If so, this function is used to
-flip other byte values.
-
-Arguments:
-  value        the number to flip
-  n            the number of bytes to flip (assumed to be 2 or 4)
-
-Returns:       the flipped value
-*/
-
-static long int
-byteflip(long int value, int n)
-{
-if (n == 2) return ((value & 0x00ff) << 8) | ((value & 0xff00) >> 8);
-return ((value & 0x000000ff) << 24) |
-       ((value & 0x0000ff00) <<  8) |
-       ((value & 0x00ff0000) >>  8) |
-       ((value & 0xff000000) >> 24);
-}
-
-
-
-/*************************************************
-*       Test for a byte-flipped compiled regex   *
-*************************************************/
-
-/* This function is called from pce_exec() and also from pcre_fullinfo(). Its
-job is to test whether the regex is byte-flipped - that is, it was compiled on
-a system of opposite endianness. The function is called only when the native
-MAGIC_NUMBER test fails. If the regex is indeed flipped, we flip all the
-relevant values into a different data block, and return it.
-
-Arguments:
-  re               points to the regex
-  study            points to study data, or NULL
-  internal_re      points to a new regex block
-  internal_study   points to a new study block
-
-Returns:           the new block if is is indeed a byte-flipped regex
-                   NULL if it is not
-*/
-
-static real_pcre *
-try_flipped(const real_pcre *re, real_pcre *internal_re,
-  const pcre_study_data *study, pcre_study_data *internal_study)
-{
-if (byteflip(re->magic_number, sizeof(re->magic_number)) != MAGIC_NUMBER)
-  return NULL;
-
-*internal_re = *re;           /* To copy other fields */
-internal_re->size = byteflip(re->size, sizeof(re->size));
-internal_re->options = byteflip(re->options, sizeof(re->options));
-internal_re->top_bracket = byteflip(re->top_bracket, sizeof(re->top_bracket));
-internal_re->top_backref = byteflip(re->top_backref, sizeof(re->top_backref));
-internal_re->first_byte = byteflip(re->first_byte, sizeof(re->first_byte));
-internal_re->req_byte = byteflip(re->req_byte, sizeof(re->req_byte));
-internal_re->name_table_offset = byteflip(re->name_table_offset,
-  sizeof(re->name_table_offset));
-internal_re->name_entry_size = byteflip(re->name_entry_size,
-  sizeof(re->name_entry_size));
-internal_re->name_count = byteflip(re->name_count, sizeof(re->name_count));
-
-if (study != NULL)
-  {
-  *internal_study = *study;   /* To copy other fields */
-  internal_study->size = byteflip(study->size, sizeof(study->size));
-  internal_study->options = byteflip(study->options, sizeof(study->options));
-  }
-
-return internal_re;
-}
-
-
-
-/*************************************************
-* (Obsolete) Return info about compiled pattern  *
-*************************************************/
-
-/* This is the original "info" function. It picks potentially useful data out
-of the private structure, but its interface was too rigid. It remains for
-backwards compatibility. The public options are passed back in an int - though
-the re->options field has been expanded to a long int, all the public options
-at the low end of it, and so even on 16-bit systems this will still be OK.
-Therefore, I haven't changed the API for pcre_info().
-
-Arguments:
-  argument_re   points to compiled code
-  optptr        where to pass back the options
-  first_byte    where to pass back the first character,
-                or -1 if multiline and all branches start ^,
-                or -2 otherwise
-
-Returns:        number of capturing subpatterns
-                or negative values on error
-*/
-
-EXPORT int
-pcre_info(const pcre *argument_re, int *optptr, int *first_byte)
-{
-real_pcre internal_re;
-const real_pcre *re = (const real_pcre *)argument_re;
-if (re == NULL) return PCRE_ERROR_NULL;
-if (re->magic_number != MAGIC_NUMBER)
-  {
-  re = try_flipped(re, &internal_re, NULL, NULL);
-  if (re == NULL) return PCRE_ERROR_BADMAGIC;
-  }
-if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
-if (first_byte != NULL)
-  *first_byte = ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
-     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
-return re->top_bracket;
-}
-
-
-
-/*************************************************
-*        Return info about compiled pattern      *
-*************************************************/
-
-/* This is a newer "info" function which has an extensible interface so
-that additional items can be added compatibly.
-
-Arguments:
-  argument_re      points to compiled code
-  extra_data       points extra data, or NULL
-  what             what information is required
-  where            where to put the information
-
-Returns:           0 if data returned, negative on error
-*/
-
-EXPORT int
-pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data, int what,
-  void *where)
-{
-real_pcre internal_re;
-pcre_study_data internal_study;
-const real_pcre *re = (const real_pcre *)argument_re;
-const pcre_study_data *study = NULL;
-
-if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
-
-if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0)
-  study = (const pcre_study_data *)extra_data->study_data;
-
-if (re->magic_number != MAGIC_NUMBER)
-  {
-  re = try_flipped(re, &internal_re, study, &internal_study);
-  if (re == NULL) return PCRE_ERROR_BADMAGIC;
-  if (study != NULL) study = &internal_study;
-  }
-
-switch (what)
-  {
-  case PCRE_INFO_OPTIONS:
-  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
-  break;
-
-  case PCRE_INFO_SIZE:
-  *((size_t *)where) = re->size;
-  break;
-
-  case PCRE_INFO_STUDYSIZE:
-  *((size_t *)where) = (study == NULL)? 0 : study->size;
-  break;
-
-  case PCRE_INFO_CAPTURECOUNT:
-  *((int *)where) = re->top_bracket;
-  break;
-
-  case PCRE_INFO_BACKREFMAX:
-  *((int *)where) = re->top_backref;
-  break;
-
-  case PCRE_INFO_FIRSTBYTE:
-  *((int *)where) =
-    ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
-    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
-  break;
-
-  /* Make sure we pass back the pointer to the bit vector in the external
-  block, not the internal copy (with flipped integer fields). */
-
-  case PCRE_INFO_FIRSTTABLE:
-  *((const uschar **)where) =
-    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
-      ((const pcre_study_data *)extra_data->study_data)->start_bits : NULL;
-  break;
-
-  case PCRE_INFO_LASTLITERAL:
-  *((int *)where) =
-    ((re->options & PCRE_REQCHSET) != 0)? re->req_byte : -1;
-  break;
-
-  case PCRE_INFO_NAMEENTRYSIZE:
-  *((int *)where) = re->name_entry_size;
-  break;
-
-  case PCRE_INFO_NAMECOUNT:
-  *((int *)where) = re->name_count;
-  break;
-
-  case PCRE_INFO_NAMETABLE:
-  *((const uschar **)where) = (const uschar *)re + re->name_table_offset;
-  break;
-
-  case PCRE_INFO_DEFAULT_TABLES:
-  *((const uschar **)where) = (const uschar *)pcre_default_tables;
-  break;
-
-  default: return PCRE_ERROR_BADOPTION;
-  }
-
-return 0;
-}
-
-
-
-/*************************************************
-* Return info about what features are configured *
-*************************************************/
-
-/* This is function which has an extensible interface so that additional items
-can be added compatibly.
-
-Arguments:
-  what             what information is required
-  where            where to put the information
-
-Returns:           0 if data returned, negative on error
-*/
-
-EXPORT int
-pcre_config(int what, void *where)
-{
-switch (what)
-  {
-  case PCRE_CONFIG_UTF8:
-#ifdef SUPPORT_UTF8
-  *((int *)where) = 1;
-#else
-  *((int *)where) = 0;
-#endif
-  break;
-
-  case PCRE_CONFIG_UNICODE_PROPERTIES:
-#ifdef SUPPORT_UCP
-  *((int *)where) = 1;
-#else
-  *((int *)where) = 0;
-#endif
-  break;
-
-  case PCRE_CONFIG_NEWLINE:
-  *((int *)where) = NEWLINE;
-  break;
-
-  case PCRE_CONFIG_LINK_SIZE:
-  *((int *)where) = LINK_SIZE;
-  break;
-
-  case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD:
-  *((int *)where) = POSIX_MALLOC_THRESHOLD;
-  break;
-
-  case PCRE_CONFIG_MATCH_LIMIT:
-  *((unsigned int *)where) = MATCH_LIMIT;
-  break;
-
-  case PCRE_CONFIG_STACKRECURSE:
-#ifdef NO_RECURSE
-  *((int *)where) = 0;
-#else
-  *((int *)where) = 1;
-#endif
-  break;
-
-  default: return PCRE_ERROR_BADOPTION;
-  }
-
-return 0;
-}
-
-
-
-#ifdef DEBUG
-/*************************************************
-*        Debugging function to print chars       *
-*************************************************/
-
-/* Print a sequence of chars in printable format, stopping at the end of the
-subject if the requested.
-
-Arguments:
-  p           points to characters
-  length      number to print
-  is_subject  TRUE if printing from within md->start_subject
-  md          pointer to matching data block, if is_subject is TRUE
-
-Returns:     nothing
-*/
-
-static void
-pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
-{
-int c;
-if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
-while (length-- > 0)
-  if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c);
-}
-#endif
-
-
-
-
-/*************************************************
-*            Handle escapes                      *
-*************************************************/
-
-/* This function is called when a \ has been encountered. It either returns a
-positive value for a simple escape such as \n, or a negative value which
-encodes one of the more complicated things such as \d. When UTF-8 is enabled,
-a positive value greater than 255 may be returned. On entry, ptr is pointing at
-the \. On exit, it is on the final character of the escape sequence.
-
-Arguments:
-  ptrptr     points to the pattern position pointer
-  errorptr   points to the pointer to the error message
-  bracount   number of previous extracting brackets
-  options    the options bits
-  isclass    TRUE if inside a character class
-
-Returns:     zero or positive => a data character
-             negative => a special escape sequence
-             on error, errorptr is set
-*/
-
-static int
-check_escape(const uschar **ptrptr, const char **errorptr, int bracount,
-  int options, BOOL isclass)
-{
-const uschar *ptr = *ptrptr;
-int c, i;
-
-/* If backslash is at the end of the pattern, it's an error. */
-
-c = *(++ptr);
-if (c == 0) *errorptr = ERR1;
-
-/* Non-alphamerics are literals. For digits or letters, do an initial lookup in
-a table. A non-zero result is something that can be returned immediately.
-Otherwise further processing may be required. */
-
-#if !EBCDIC    /* ASCII coding */
-else if (c < '0' || c > 'z') {}                           /* Not alphameric */
-else if ((i = escapes[c - '0']) != 0) c = i;
-
-#else          /* EBCDIC coding */
-else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {}   /* Not alphameric */
-else if ((i = escapes[c - 0x48]) != 0)  c = i;
-#endif
-
-/* Escapes that need further processing, or are illegal. */
-
-else
-  {
-  const uschar *oldptr;
-  switch (c)
-    {
-    /* A number of Perl escapes are not handled by PCRE. We give an explicit
-    error. */
-
-    case 'l':
-    case 'L':
-    case 'N':
-    case 'u':
-    case 'U':
-    *errorptr = ERR37;
-    break;
-
-    /* The handling of escape sequences consisting of a string of digits
-    starting with one that is not zero is not straightforward. By experiment,
-    the way Perl works seems to be as follows:
-
-    Outside a character class, the digits are read as a decimal number. If the
-    number is less than 10, or if there are that many previous extracting
-    left brackets, then it is a back reference. Otherwise, up to three octal
-    digits are read to form an escaped byte. Thus \123 is likely to be octal
-    123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
-    value is greater than 377, the least significant 8 bits are taken. Inside a
-    character class, \ followed by a digit is always an octal number. */
-
-    case '1': case '2': case '3': case '4': case '5':
-    case '6': case '7': case '8': case '9':
-
-    if (!isclass)
-      {
-      oldptr = ptr;
-      c -= '0';
-      while ((digitab[ptr[1]] & ctype_digit) != 0)
-        c = c * 10 + *(++ptr) - '0';
-      if (c < 10 || c <= bracount)
-        {
-        c = -(ESC_REF + c);
-        break;
-        }
-      ptr = oldptr;      /* Put the pointer back and fall through */
-      }
-
-    /* Handle an octal number following \. If the first digit is 8 or 9, Perl
-    generates a binary zero byte and treats the digit as a following literal.
-    Thus we have to pull back the pointer by one. */
-
-    if ((c = *ptr) >= '8')
-      {
-      ptr--;
-      c = 0;
-      break;
-      }
-
-    /* \0 always starts an octal number, but we may drop through to here with a
-    larger first octal digit. */
-
-    case '0':
-    c -= '0';
-    while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7')
-        c = c * 8 + *(++ptr) - '0';
-    c &= 255;     /* Take least significant 8 bits */
-    break;
-
-    /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
-    which can be greater than 0xff, but only if the ddd are hex digits. */
-
-    case 'x':
-#ifdef SUPPORT_UTF8
-    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
-      {
-      const uschar *pt = ptr + 2;
-      register int count = 0;
-      c = 0;
-      while ((digitab[*pt] & ctype_xdigit) != 0)
-        {
-        int cc = *pt++;
-        count++;
-#if !EBCDIC    /* ASCII coding */
-        if (cc >= 'a') cc -= 32;               /* Convert to upper case */
-        c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
-#else          /* EBCDIC coding */
-        if (cc >= 'a' && cc <= 'z') cc += 64;  /* Convert to upper case */
-        c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
-#endif
-        }
-      if (*pt == '}')
-        {
-        if (c < 0 || count > 8) *errorptr = ERR34;
-        ptr = pt;
-        break;
-        }
-      /* If the sequence of hex digits does not end with '}', then we don't
-      recognize this construct; fall through to the normal \x handling. */
-      }
-#endif
-
-    /* Read just a single hex char */
-
-    c = 0;
-    while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0)
-      {
-      int cc;                               /* Some compilers don't like ++ */
-      cc = *(++ptr);                        /* in initializers */
-#if !EBCDIC    /* ASCII coding */
-      if (cc >= 'a') cc -= 32;              /* Convert to upper case */
-      c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
-#else          /* EBCDIC coding */
-      if (cc <= 'z') cc += 64;              /* Convert to upper case */
-      c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
-#endif
-      }
-    break;
-
-    /* Other special escapes not starting with a digit are straightforward */
-
-    case 'c':
-    c = *(++ptr);
-    if (c == 0)
-      {
-      *errorptr = ERR2;
-      return 0;
-      }
-
-    /* A letter is upper-cased; then the 0x40 bit is flipped. This coding
-    is ASCII-specific, but then the whole concept of \cx is ASCII-specific.
-    (However, an EBCDIC equivalent has now been added.) */
-
-#if !EBCDIC    /* ASCII coding */
-    if (c >= 'a' && c <= 'z') c -= 32;
-    c ^= 0x40;
-#else          /* EBCDIC coding */
-    if (c >= 'a' && c <= 'z') c += 64;
-    c ^= 0xC0;
-#endif
-    break;
-
-    /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
-    other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
-    for Perl compatibility, it is a literal. This code looks a bit odd, but
-    there used to be some cases other than the default, and there may be again
-    in future, so I haven't "optimized" it. */
-
-    default:
-    if ((options & PCRE_EXTRA) != 0) switch(c)
-      {
-      default:
-      *errorptr = ERR3;
-      break;
-      }
-    break;
-    }
-  }
-
-*ptrptr = ptr;
-return c;
-}
-
-
-
-#ifdef SUPPORT_UCP
-/*************************************************
-*               Handle \P and \p                 *
-*************************************************/
-
-/* This function is called after \P or \p has been encountered, provided that
-PCRE is compiled with support for Unicode properties. On entry, ptrptr is
-pointing at the P or p. On exit, it is pointing at the final character of the
-escape sequence.
-
-Argument:
-  ptrptr     points to the pattern position pointer
-  negptr     points to a boolean that is set TRUE for negation else FALSE
-  errorptr   points to the pointer to the error message
-
-Returns:     value from ucp_type_table, or -1 for an invalid type
-*/
-
-static int
-get_ucp(const uschar **ptrptr, BOOL *negptr, const char **errorptr)
-{
-int c, i, bot, top;
-const uschar *ptr = *ptrptr;
-char name[4];
-
-c = *(++ptr);
-if (c == 0) goto ERROR_RETURN;
-
-*negptr = FALSE;
-
-/* \P or \p can be followed by a one- or two-character name in {}, optionally
-preceded by ^ for negation. */
-
-if (c == '{')
-  {
-  if (ptr[1] == '^')
-    {
-    *negptr = TRUE;
-    ptr++;
-    }
-  for (i = 0; i <= 2; i++)
-    {
-    c = *(++ptr);
-    if (c == 0) goto ERROR_RETURN;
-    if (c == '}') break;
-    name[i] = c;
-    }
-  if (c !='}')   /* Try to distinguish error cases */
-    {
-    while (*(++ptr) != 0 && *ptr != '}');
-    if (*ptr == '}') goto UNKNOWN_RETURN; else goto ERROR_RETURN;
-    }
-  name[i] = 0;
-  }
-
-/* Otherwise there is just one following character */
-
-else
-  {
-  name[0] = c;
-  name[1] = 0;
-  }
-
-*ptrptr = ptr;
-
-/* Search for a recognized property name using binary chop */
-
-bot = 0;
-top = sizeof(utt)/sizeof(ucp_type_table);
-
-while (bot < top)
-  {
-  i = (bot + top)/2;
-  c = strcmp(name, utt[i].name);
-  if (c == 0) return utt[i].value;
-  if (c > 0) bot = i + 1; else top = i;
-  }
-
-UNKNOWN_RETURN:
-*errorptr = ERR47;
-*ptrptr = ptr;
-return -1;
-
-ERROR_RETURN:
-*errorptr = ERR46;
-*ptrptr = ptr;
-return -1;
-}
-#endif
-
-
-
-
-/*************************************************
-*            Check for counted repeat            *
-*************************************************/
-
-/* This function is called when a '{' is encountered in a place where it might
-start a quantifier. It looks ahead to see if it really is a quantifier or not.
-It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
-where the ddds are digits.
-
-Arguments:
-  p         pointer to the first char after '{'
-
-Returns:    TRUE or FALSE
-*/
-
-static BOOL
-is_counted_repeat(const uschar *p)
-{
-if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
-while ((digitab[*p] & ctype_digit) != 0) p++;
-if (*p == '}') return TRUE;
-
-if (*p++ != ',') return FALSE;
-if (*p == '}') return TRUE;
-
-if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
-while ((digitab[*p] & ctype_digit) != 0) p++;
-
-return (*p == '}');
-}
-
-
-
-/*************************************************
-*         Read repeat counts                     *
-*************************************************/
-
-/* Read an item of the form {n,m} and return the values. This is called only
-after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
-so the syntax is guaranteed to be correct, but we need to check the values.
-
-Arguments:
-  p          pointer to first char after '{'
-  minp       pointer to int for min
-  maxp       pointer to int for max
-             returned as -1 if no max
-  errorptr   points to pointer to error message
-
-Returns:     pointer to '}' on success;
-             current ptr on error, with errorptr set
-*/
-
-static const uschar *
-read_repeat_counts(const uschar *p, int *minp, int *maxp, const char **errorptr)
-{
-int min = 0;
-int max = -1;
-
-while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
-
-if (*p == '}') max = min; else
-  {
-  if (*(++p) != '}')
-    {
-    max = 0;
-    while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
-    if (max < min)
-      {
-      *errorptr = ERR4;
-      return p;
-      }
-    }
-  }
-
-/* Do paranoid checks, then fill in the required variables, and pass back the
-pointer to the terminating '}'. */
-
-if (min > 65535 || max > 65535)
-  *errorptr = ERR5;
-else
-  {
-  *minp = min;
-  *maxp = max;
-  }
-return p;
-}
-
-
-
-/*************************************************
-*      Find first significant op code            *
-*************************************************/
-
-/* This is called by several functions that scan a compiled expression looking
-for a fixed first character, or an anchoring op code etc. It skips over things
-that do not influence this. For some calls, a change of option is important.
-For some calls, it makes sense to skip negative forward and all backward
-assertions, and also the \b assertion; for others it does not.
-
-Arguments:
-  code         pointer to the start of the group
-  options      pointer to external options
-  optbit       the option bit whose changing is significant, or
-                 zero if none are
-  skipassert   TRUE if certain assertions are to be skipped
-
-Returns:       pointer to the first significant opcode
-*/
-
-static const uschar*
-first_significant_code(const uschar *code, int *options, int optbit,
-  BOOL skipassert)
-{
-for (;;)
-  {
-  switch ((int)*code)
-    {
-    case OP_OPT:
-    if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
-      *options = (int)code[1];
-    code += 2;
-    break;
-
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK:
-    case OP_ASSERTBACK_NOT:
-    if (!skipassert) return code;
-    do code += GET(code, 1); while (*code == OP_ALT);
-    code += OP_lengths[*code];
-    break;
-
-    case OP_WORD_BOUNDARY:
-    case OP_NOT_WORD_BOUNDARY:
-    if (!skipassert) return code;
-    /* Fall through */
-
-    case OP_CALLOUT:
-    case OP_CREF:
-    case OP_BRANUMBER:
-    code += OP_lengths[*code];
-    break;
-
-    default:
-    return code;
-    }
-  }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-*        Find the fixed length of a pattern      *
-*************************************************/
-
-/* Scan a pattern and compute the fixed length of subject that will match it,
-if the length is fixed. This is needed for dealing with backward assertions.
-In UTF8 mode, the result is in characters rather than bytes.
-
-Arguments:
-  code     points to the start of the pattern (the bracket)
-  options  the compiling options
-
-Returns:   the fixed length, or -1 if there is no fixed length,
-             or -2 if \C was encountered
-*/
-
-static int
-find_fixedlength(uschar *code, int options)
-{
-int length = -1;
-
-register int branchlength = 0;
-register uschar *cc = code + 1 + LINK_SIZE;
-
-/* Scan along the opcodes for this branch. If we get to the end of the
-branch, check the length against that of the other branches. */
-
-for (;;)
-  {
-  int d;
-  register int op = *cc;
-  if (op >= OP_BRA) op = OP_BRA;
-
-  switch (op)
-    {
-    case OP_BRA:
-    case OP_ONCE:
-    case OP_COND:
-    d = find_fixedlength(cc, options);
-    if (d < 0) return d;
-    branchlength += d;
-    do cc += GET(cc, 1); while (*cc == OP_ALT);
-    cc += 1 + LINK_SIZE;
-    break;
-
-    /* Reached end of a branch; if it's a ket it is the end of a nested
-    call. If it's ALT it is an alternation in a nested call. If it is
-    END it's the end of the outer call. All can be handled by the same code. */
-
-    case OP_ALT:
-    case OP_KET:
-    case OP_KETRMAX:
-    case OP_KETRMIN:
-    case OP_END:
-    if (length < 0) length = branchlength;
-      else if (length != branchlength) return -1;
-    if (*cc != OP_ALT) return length;
-    cc += 1 + LINK_SIZE;
-    branchlength = 0;
-    break;
-
-    /* Skip over assertive subpatterns */
-
-    case OP_ASSERT:
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK:
-    case OP_ASSERTBACK_NOT:
-    do cc += GET(cc, 1); while (*cc == OP_ALT);
-    /* Fall through */
-
-    /* Skip over things that don't match chars */
-
-    case OP_REVERSE:
-    case OP_BRANUMBER:
-    case OP_CREF:
-    case OP_OPT:
-    case OP_CALLOUT:
-    case OP_SOD:
-    case OP_SOM:
-    case OP_EOD:
-    case OP_EODN:
-    case OP_CIRC:
-    case OP_DOLL:
-    case OP_NOT_WORD_BOUNDARY:
-    case OP_WORD_BOUNDARY:
-    cc += OP_lengths[*cc];
-    break;
-
-    /* Handle literal characters */
-
-    case OP_CHAR:
-    case OP_CHARNC:
-    branchlength++;
-    cc += 2;
-#ifdef SUPPORT_UTF8
-    if ((options & PCRE_UTF8) != 0)
-      {
-      while ((*cc & 0xc0) == 0x80) cc++;
-      }
-#endif
-    break;
-
-    /* Handle exact repetitions. The count is already in characters, but we
-    need to skip over a multibyte character in UTF8 mode.  */
-
-    case OP_EXACT:
-    branchlength += GET2(cc,1);
-    cc += 4;
-#ifdef SUPPORT_UTF8
-    if ((options & PCRE_UTF8) != 0)
-      {
-      while((*cc & 0x80) == 0x80) cc++;
-      }
-#endif
-    break;
-
-    case OP_TYPEEXACT:
-    branchlength += GET2(cc,1);
-    cc += 4;
-    break;
-
-    /* Handle single-char matchers */
-
-    case OP_PROP:
-    case OP_NOTPROP:
-    cc++;
-    /* Fall through */
-
-    case OP_NOT_DIGIT:
-    case OP_DIGIT:
-    case OP_NOT_WHITESPACE:
-    case OP_WHITESPACE:
-    case OP_NOT_WORDCHAR:
-    case OP_WORDCHAR:
-    case OP_ANY:
-    branchlength++;
-    cc++;
-    break;
-
-    /* The single-byte matcher isn't allowed */
-
-    case OP_ANYBYTE:
-    return -2;
-
-    /* Check a class for variable quantification */
-
-#ifdef SUPPORT_UTF8
-    case OP_XCLASS:
-    cc += GET(cc, 1) - 33;
-    /* Fall through */
-#endif
-
-    case OP_CLASS:
-    case OP_NCLASS:
-    cc += 33;
-
-    switch (*cc)
-      {
-      case OP_CRSTAR:
-      case OP_CRMINSTAR:
-      case OP_CRQUERY:
-      case OP_CRMINQUERY:
-      return -1;
-
-      case OP_CRRANGE:
-      case OP_CRMINRANGE:
-      if (GET2(cc,1) != GET2(cc,3)) return -1;
-      branchlength += GET2(cc,1);
-      cc += 5;
-      break;
-
-      default:
-      branchlength++;
-      }
-    break;
-
-    /* Anything else is variable length */
-
-    default:
-    return -1;
-    }
-  }
-/* Control never gets here */
-}
-
-
-
-
-/*************************************************
-*    Scan compiled regex for numbered bracket    *
-*************************************************/
-
-/* This little function scans through a compiled pattern until it finds a
-capturing bracket with the given number.
-
-Arguments:
-  code        points to start of expression
-  utf8        TRUE in UTF-8 mode
-  number      the required bracket number
-
-Returns:      pointer to the opcode for the bracket, or NULL if not found
-*/
-
-static const uschar *
-find_bracket(const uschar *code, BOOL utf8, int number)
-{
-#ifndef SUPPORT_UTF8
-utf8 = utf8;               /* Stop pedantic compilers complaining */
-#endif
-
-for (;;)
-  {
-  register int c = *code;
-  if (c == OP_END) return NULL;
-  else if (c > OP_BRA)
-    {
-    int n = c - OP_BRA;
-    if (n > EXTRACT_BASIC_MAX) n = GET2(code, 2+LINK_SIZE);
-    if (n == number) return (uschar *)code;
-    code += OP_lengths[OP_BRA];
-    }
-  else
-    {
-    code += OP_lengths[c];
-
-#ifdef SUPPORT_UTF8
-
-    /* In UTF-8 mode, opcodes that are followed by a character may be followed
-    by a multi-byte character. The length in the table is a minimum, so we have
-    to scan along to skip the extra bytes. All opcodes are less than 128, so we
-    can use relatively efficient code. */
-
-    if (utf8) switch(c)
-      {
-      case OP_CHAR:
-      case OP_CHARNC:
-      case OP_EXACT:
-      case OP_UPTO:
-      case OP_MINUPTO:
-      case OP_STAR:
-      case OP_MINSTAR:
-      case OP_PLUS:
-      case OP_MINPLUS:
-      case OP_QUERY:
-      case OP_MINQUERY:
-      while ((*code & 0xc0) == 0x80) code++;
-      break;
-
-      /* XCLASS is used for classes that cannot be represented just by a bit
-      map. This includes negated single high-valued characters. The length in
-      the table is zero; the actual length is stored in the compiled code. */
-
-      case OP_XCLASS:
-      code += GET(code, 1) + 1;
-      break;
-      }
-#endif
-    }
-  }
-}
-
-
-
-/*************************************************
-*   Scan compiled regex for recursion reference  *
-*************************************************/
-
-/* This little function scans through a compiled pattern until it finds an
-instance of OP_RECURSE.
-
-Arguments:
-  code        points to start of expression
-  utf8        TRUE in UTF-8 mode
-
-Returns:      pointer to the opcode for OP_RECURSE, or NULL if not found
-*/
-
-static const uschar *
-find_recurse(const uschar *code, BOOL utf8)
-{
-#ifndef SUPPORT_UTF8
-utf8 = utf8;               /* Stop pedantic compilers complaining */
-#endif
-
-for (;;)
-  {
-  register int c = *code;
-  if (c == OP_END) return NULL;
-  else if (c == OP_RECURSE) return code;
-  else if (c > OP_BRA)
-    {
-    code += OP_lengths[OP_BRA];
-    }
-  else
-    {
-    code += OP_lengths[c];
-
-#ifdef SUPPORT_UTF8
-
-    /* In UTF-8 mode, opcodes that are followed by a character may be followed
-    by a multi-byte character. The length in the table is a minimum, so we have
-    to scan along to skip the extra bytes. All opcodes are less than 128, so we
-    can use relatively efficient code. */
-
-    if (utf8) switch(c)
-      {
-      case OP_CHAR:
-      case OP_CHARNC:
-      case OP_EXACT:
-      case OP_UPTO:
-      case OP_MINUPTO:
-      case OP_STAR:
-      case OP_MINSTAR:
-      case OP_PLUS:
-      case OP_MINPLUS:
-      case OP_QUERY:
-      case OP_MINQUERY:
-      while ((*code & 0xc0) == 0x80) code++;
-      break;
-
-      /* XCLASS is used for classes that cannot be represented just by a bit
-      map. This includes negated single high-valued characters. The length in
-      the table is zero; the actual length is stored in the compiled code. */
-
-      case OP_XCLASS:
-      code += GET(code, 1) + 1;
-      break;
-      }
-#endif
-    }
-  }
-}
-
-
-
-/*************************************************
-*    Scan compiled branch for non-emptiness      *
-*************************************************/
-
-/* This function scans through a branch of a compiled pattern to see whether it
-can match the empty string or not. It is called only from could_be_empty()
-below. Note that first_significant_code() skips over assertions. If we hit an
-unclosed bracket, we return "empty" - this means we've struck an inner bracket
-whose current branch will already have been scanned.
-
-Arguments:
-  code        points to start of search
-  endcode     points to where to stop
-  utf8        TRUE if in UTF8 mode
-
-Returns:      TRUE if what is matched could be empty
-*/
-
-static BOOL
-could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8)
-{
-register int c;
-for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0, TRUE);
-     code < endcode;
-     code = first_significant_code(code + OP_lengths[c], NULL, 0, TRUE))
-  {
-  const uschar *ccode;
-
-  c = *code;
-
-  if (c >= OP_BRA)
-    {
-    BOOL empty_branch;
-    if (GET(code, 1) == 0) return TRUE;    /* Hit unclosed bracket */
-
-    /* Scan a closed bracket */
-
-    empty_branch = FALSE;
-    do
-      {
-      if (!empty_branch && could_be_empty_branch(code, endcode, utf8))
-        empty_branch = TRUE;
-      code += GET(code, 1);
-      }
-    while (*code == OP_ALT);
-    if (!empty_branch) return FALSE;   /* All branches are non-empty */
-    code += 1 + LINK_SIZE;
-    c = *code;
-    }
-
-  else switch (c)
-    {
-    /* Check for quantifiers after a class */
-
-#ifdef SUPPORT_UTF8
-    case OP_XCLASS:
-    ccode = code + GET(code, 1);
-    goto CHECK_CLASS_REPEAT;
-#endif
-
-    case OP_CLASS:
-    case OP_NCLASS:
-    ccode = code + 33;
-
-#ifdef SUPPORT_UTF8
-    CHECK_CLASS_REPEAT:
-#endif
-
-    switch (*ccode)
-      {
-      case OP_CRSTAR:            /* These could be empty; continue */
-      case OP_CRMINSTAR:
-      case OP_CRQUERY:
-      case OP_CRMINQUERY:
-      break;
-
-      default:                   /* Non-repeat => class must match */
-      case OP_CRPLUS:            /* These repeats aren't empty */
-      case OP_CRMINPLUS:
-      return FALSE;
-
-      case OP_CRRANGE:
-      case OP_CRMINRANGE:
-      if (GET2(ccode, 1) > 0) return FALSE;  /* Minimum > 0 */
-      break;
-      }
-    break;
-
-    /* Opcodes that must match a character */
-
-    case OP_PROP:
-    case OP_NOTPROP:
-    case OP_EXTUNI:
-    case OP_NOT_DIGIT:
-    case OP_DIGIT:
-    case OP_NOT_WHITESPACE:
-    case OP_WHITESPACE:
-    case OP_NOT_WORDCHAR:
-    case OP_WORDCHAR:
-    case OP_ANY:
-    case OP_ANYBYTE:
-    case OP_CHAR:
-    case OP_CHARNC:
-    case OP_NOT:
-    case OP_PLUS:
-    case OP_MINPLUS:
-    case OP_EXACT:
-    case OP_NOTPLUS:
-    case OP_NOTMINPLUS:
-    case OP_NOTEXACT:
-    case OP_TYPEPLUS:
-    case OP_TYPEMINPLUS:
-    case OP_TYPEEXACT:
-    return FALSE;
-
-    /* End of branch */
-
-    case OP_KET:
-    case OP_KETRMAX:
-    case OP_KETRMIN:
-    case OP_ALT:
-    return TRUE;
-
-    /* In UTF-8 mode, STAR, MINSTAR, QUERY, MINQUERY, UPTO, and MINUPTO  may be
-    followed by a multibyte character */
-
-#ifdef SUPPORT_UTF8
-    case OP_STAR:
-    case OP_MINSTAR:
-    case OP_QUERY:
-    case OP_MINQUERY:
-    case OP_UPTO:
-    case OP_MINUPTO:
-    if (utf8) while ((code[2] & 0xc0) == 0x80) code++;
-    break;
-#endif
-    }
-  }
-
-return TRUE;
-}
-
-
-
-/*************************************************
-*    Scan compiled regex for non-emptiness       *
-*************************************************/
-
-/* This function is called to check for left recursive calls. We want to check
-the current branch of the current pattern to see if it could match the empty
-string. If it could, we must look outwards for branches at other levels,
-stopping when we pass beyond the bracket which is the subject of the recursion.
-
-Arguments:
-  code        points to start of the recursion
-  endcode     points to where to stop (current RECURSE item)
-  bcptr       points to the chain of current (unclosed) branch starts
-  utf8        TRUE if in UTF-8 mode
-
-Returns:      TRUE if what is matched could be empty
-*/
-
-static BOOL
-could_be_empty(const uschar *code, const uschar *endcode, branch_chain *bcptr,
-  BOOL utf8)
-{
-while (bcptr != NULL && bcptr->current >= code)
-  {
-  if (!could_be_empty_branch(bcptr->current, endcode, utf8)) return FALSE;
-  bcptr = bcptr->outer;
-  }
-return TRUE;
-}
-
-
-
-/*************************************************
-*           Check for POSIX class syntax         *
-*************************************************/
-
-/* This function is called when the sequence "[:" or "[." or "[=" is
-encountered in a character class. It checks whether this is followed by an
-optional ^ and then a sequence of letters, terminated by a matching ":]" or
-".]" or "=]".
-
-Argument:
-  ptr      pointer to the initial [
-  endptr   where to return the end pointer
-  cd       pointer to compile data
-
-Returns:   TRUE or FALSE
-*/
-
-static BOOL
-check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
-{
-int terminator;          /* Don't combine these lines; the Solaris cc */
-terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
-if (*(++ptr) == '^') ptr++;
-while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
-if (*ptr == terminator && ptr[1] == ']')
-  {
-  *endptr = ptr;
-  return TRUE;
-  }
-return FALSE;
-}
-
-
-
-
-/*************************************************
-*          Check POSIX class name                *
-*************************************************/
-
-/* This function is called to check the name given in a POSIX-style class entry
-such as [:alnum:].
-
-Arguments:
-  ptr        points to the first letter
-  len        the length of the name
-
-Returns:     a value representing the name, or -1 if unknown
-*/
-
-static int
-check_posix_name(const uschar *ptr, int len)
-{
-register int yield = 0;
-while (posix_name_lengths[yield] != 0)
-  {
-  if (len == posix_name_lengths[yield] &&
-    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
-  yield++;
-  }
-return -1;
-}
-
-
-/*************************************************
-*    Adjust OP_RECURSE items in repeated group   *
-*************************************************/
-
-/* OP_RECURSE items contain an offset from the start of the regex to the group
-that is referenced. This means that groups can be replicated for fixed
-repetition simply by copying (because the recursion is allowed to refer to
-earlier groups that are outside the current group). However, when a group is
-optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before
-it, after it has been compiled. This means that any OP_RECURSE items within it
-that refer to the group itself or any contained groups have to have their
-offsets adjusted. That is the job of this function. Before it is called, the
-partially compiled regex must be temporarily terminated with OP_END.
-
-Arguments:
-  group      points to the start of the group
-  adjust     the amount by which the group is to be moved
-  utf8       TRUE in UTF-8 mode
-  cd         contains pointers to tables etc.
-
-Returns:     nothing
-*/
-
-static void
-adjust_recurse(uschar *group, int adjust, BOOL utf8, compile_data *cd)
-{
-uschar *ptr = group;
-while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL)
-  {
-  int offset = GET(ptr, 1);
-  if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust);
-  ptr += 1 + LINK_SIZE;
-  }
-}
-
-
-
-/*************************************************
-*        Insert an automatic callout point       *
-*************************************************/
-
-/* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert
-callout points before each pattern item.
-
-Arguments:
-  code           current code pointer
-  ptr            current pattern pointer
-  cd             pointers to tables etc
-
-Returns:         new code pointer
-*/
-
-static uschar *
-auto_callout(uschar *code, const uschar *ptr, compile_data *cd)
-{
-*code++ = OP_CALLOUT;
-*code++ = 255;
-PUT(code, 0, ptr - cd->start_pattern);  /* Pattern offset */
-PUT(code, LINK_SIZE, 0);                /* Default length */
-return code + 2*LINK_SIZE;
-}
-
-
-
-/*************************************************
-*         Complete a callout item                *
-*************************************************/
-
-/* A callout item contains the length of the next item in the pattern, which
-we can't fill in till after we have reached the relevant point. This is used
-for both automatic and manual callouts.
-
-Arguments:
-  previous_callout   points to previous callout item
-  ptr                current pattern pointer
-  cd                 pointers to tables etc
-
-Returns:             nothing
-*/
-
-static void
-complete_callout(uschar *previous_callout, const uschar *ptr, compile_data *cd)
-{
-int length = ptr - cd->start_pattern - GET(previous_callout, 2);
-PUT(previous_callout, 2 + LINK_SIZE, length);
-}
-
-
-
-#ifdef SUPPORT_UCP
-/*************************************************
-*           Get othercase range                  *
-*************************************************/
-
-/* This function is passed the start and end of a class range, in UTF-8 mode
-with UCP support. It searches up the characters, looking for internal ranges of
-characters in the "other" case. Each call returns the next one, updating the
-start address.
-
-Arguments:
-  cptr        points to starting character value; updated
-  d           end value
-  ocptr       where to put start of othercase range
-  odptr       where to put end of othercase range
-
-Yield:        TRUE when range returned; FALSE when no more
-*/
-
-static BOOL
-get_othercase_range(int *cptr, int d, int *ocptr, int *odptr)
-{
-int c, chartype, othercase, next;
-
-for (c = *cptr; c <= d; c++)
-  {
-  if (ucp_findchar(c, &chartype, &othercase) == ucp_L && othercase != 0) break;
-  }
-
-if (c > d) return FALSE;
-
-*ocptr = othercase;
-next = othercase + 1;
-
-for (++c; c <= d; c++)
-  {
-  if (ucp_findchar(c, &chartype, &othercase) != ucp_L || othercase != next)
-    break;
-  next++;
-  }
-
-*odptr = next - 1;
-*cptr = c;
-
-return TRUE;
-}
-#endif  /* SUPPORT_UCP */
-
-
-/*************************************************
-*           Compile one branch                   *
-*************************************************/
-
-/* Scan the pattern, compiling it into the code vector. If the options are
-changed during the branch, the pointer is used to change the external options
-bits.
-
-Arguments:
-  optionsptr     pointer to the option bits
-  brackets       points to number of extracting brackets used
-  codeptr        points to the pointer to the current code point
-  ptrptr         points to the current pattern pointer
-  errorptr       points to pointer to error message
-  firstbyteptr   set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE)
-  reqbyteptr     set to the last literal character required, else < 0
-  bcptr          points to current branch chain
-  cd             contains pointers to tables etc.
-
-Returns:         TRUE on success
-                 FALSE, with *errorptr set on error
-*/
-
-static BOOL
-compile_branch(int *optionsptr, int *brackets, uschar **codeptr,
-  const uschar **ptrptr, const char **errorptr, int *firstbyteptr,
-  int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
-{
-int repeat_type, op_type;
-int repeat_min = 0, repeat_max = 0;      /* To please picky compilers */
-int bravalue = 0;
-int greedy_default, greedy_non_default;
-int firstbyte, reqbyte;
-int zeroreqbyte, zerofirstbyte;
-int req_caseopt, reqvary, tempreqvary;
-int condcount = 0;
-int options = *optionsptr;
-int after_manual_callout = 0;
-register int c;
-register uschar *code = *codeptr;
-uschar *tempcode;
-BOOL inescq = FALSE;
-BOOL groupsetfirstbyte = FALSE;
-const uschar *ptr = *ptrptr;
-const uschar *tempptr;
-uschar *previous = NULL;
-uschar *previous_callout = NULL;
-uschar classbits[32];
-
-#ifdef SUPPORT_UTF8
-BOOL class_utf8;
-BOOL utf8 = (options & PCRE_UTF8) != 0;
-uschar *class_utf8data;
-uschar utf8_char[6];
-#else
-BOOL utf8 = FALSE;
-#endif
-
-/* Set up the default and non-default settings for greediness */
-
-greedy_default = ((options & PCRE_UNGREEDY) != 0);
-greedy_non_default = greedy_default ^ 1;
-
-/* Initialize no first byte, no required byte. REQ_UNSET means "no char
-matching encountered yet". It gets changed to REQ_NONE if we hit something that
-matches a non-fixed char first char; reqbyte just remains unset if we never
-find one.
-
-When we hit a repeat whose minimum is zero, we may have to adjust these values
-to take the zero repeat into account. This is implemented by setting them to
-zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual
-item types that can be repeated set these backoff variables appropriately. */
-
-firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET;
-
-/* The variable req_caseopt contains either the REQ_CASELESS value or zero,
-according to the current setting of the caseless flag. REQ_CASELESS is a bit
-value > 255. It is added into the firstbyte or reqbyte variables to record the
-case status of the value. This is used only for ASCII characters. */
-
-req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
-
-/* Switch on next character until the end of the branch */
-
-for (;; ptr++)
-  {
-  BOOL negate_class;
-  BOOL possessive_quantifier;
-  BOOL is_quantifier;
-  int class_charcount;
-  int class_lastchar;
-  int newoptions;
-  int recno;
-  int skipbytes;
-  int subreqbyte;
-  int subfirstbyte;
-  int mclength;
-  uschar mcbuffer[8];
-
-  /* Next byte in the pattern */
-
-  c = *ptr;
-
-  /* If in \Q...\E, check for the end; if not, we have a literal */
-
-  if (inescq && c != 0)
-    {
-    if (c == '\\' && ptr[1] == 'E')
-      {
-      inescq = FALSE;
-      ptr++;
-      continue;
-      }
-    else
-      {
-      if (previous_callout != NULL)
-        {
-        complete_callout(previous_callout, ptr, cd);
-        previous_callout = NULL;
-        }
-      if ((options & PCRE_AUTO_CALLOUT) != 0)
-        {
-        previous_callout = code;
-        code = auto_callout(code, ptr, cd);
-        }
-      goto NORMAL_CHAR;
-      }
-    }
-
-  /* Fill in length of a previous callout, except when the next thing is
-  a quantifier. */
-
-  is_quantifier = c == '*' || c == '+' || c == '?' ||
-    (c == '{' && is_counted_repeat(ptr+1));
-
-  if (!is_quantifier && previous_callout != NULL &&
-       after_manual_callout-- <= 0)
-    {
-    complete_callout(previous_callout, ptr, cd);
-    previous_callout = NULL;
-    }
-
-  /* In extended mode, skip white space and comments */
-
-  if ((options & PCRE_EXTENDED) != 0)
-    {
-    if ((cd->ctypes[c] & ctype_space) != 0) continue;
-    if (c == '#')
-      {
-      /* The space before the ; is to avoid a warning on a silly compiler
-      on the Macintosh. */
-      while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
-      if (c != 0) continue;   /* Else fall through to handle end of string */
-      }
-    }
-
-  /* No auto callout for quantifiers. */
-
-  if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier)
-    {
-    previous_callout = code;
-    code = auto_callout(code, ptr, cd);
-    }
-
-  switch(c)
-    {
-    /* The branch terminates at end of string, |, or ). */
-
-    case 0:
-    case '|':
-    case ')':
-    *firstbyteptr = firstbyte;
-    *reqbyteptr = reqbyte;
-    *codeptr = code;
-    *ptrptr = ptr;
-    return TRUE;
-
-    /* Handle single-character metacharacters. In multiline mode, ^ disables
-    the setting of any following char as a first character. */
-
-    case '^':
-    if ((options & PCRE_MULTILINE) != 0)
-      {
-      if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
-      }
-    previous = NULL;
-    *code++ = OP_CIRC;
-    break;
-
-    case '$':
-    previous = NULL;
-    *code++ = OP_DOLL;
-    break;
-
-    /* There can never be a first char if '.' is first, whatever happens about
-    repeats. The value of reqbyte doesn't change either. */
-
-    case '.':
-    if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
-    zerofirstbyte = firstbyte;
-    zeroreqbyte = reqbyte;
-    previous = code;
-    *code++ = OP_ANY;
-    break;
-
-    /* Character classes. If the included characters are all < 255 in value, we
-    build a 32-byte bitmap of the permitted characters, except in the special
-    case where there is only one such character. For negated classes, we build
-    the map as usual, then invert it at the end. However, we use a different
-    opcode so that data characters > 255 can be handled correctly.
-
-    If the class contains characters outside the 0-255 range, a different
-    opcode is compiled. It may optionally have a bit map for characters < 256,
-    but those above are are explicitly listed afterwards. A flag byte tells
-    whether the bitmap is present, and whether this is a negated class or not.
-    */
-
-    case '[':
-    previous = code;
-
-    /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
-    they are encountered at the top level, so we'll do that too. */
-
-    if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
-        check_posix_syntax(ptr, &tempptr, cd))
-      {
-      *errorptr = (ptr[1] == ':')? ERR13 : ERR31;
-      goto FAILED;
-      }
-
-    /* If the first character is '^', set the negation flag and skip it. */
-
-    if ((c = *(++ptr)) == '^')
-      {
-      negate_class = TRUE;
-      c = *(++ptr);
-      }
-    else
-      {
-      negate_class = FALSE;
-      }
-
-    /* Keep a count of chars with values < 256 so that we can optimize the case
-    of just a single character (as long as it's < 256). For higher valued UTF-8
-    characters, we don't yet do any optimization. */
-
-    class_charcount = 0;
-    class_lastchar = -1;
-
-#ifdef SUPPORT_UTF8
-    class_utf8 = FALSE;                       /* No chars >= 256 */
-    class_utf8data = code + LINK_SIZE + 34;   /* For UTF-8 items */
-#endif
-
-    /* Initialize the 32-char bit map to all zeros. We have to build the
-    map in a temporary bit of store, in case the class contains only 1
-    character (< 256), because in that case the compiled code doesn't use the
-    bit map. */
-
-    memset(classbits, 0, 32 * sizeof(uschar));
-
-    /* Process characters until ] is reached. By writing this as a "do" it
-    means that an initial ] is taken as a data character. The first pass
-    through the regex checked the overall syntax, so we don't need to be very
-    strict here. At the start of the loop, c contains the first byte of the
-    character. */
-
-    do
-      {
-#ifdef SUPPORT_UTF8
-      if (utf8 && c > 127)
-        {                           /* Braces are required because the */
-        GETCHARLEN(c, ptr, ptr);    /* macro generates multiple statements */
-        }
-#endif
-
-      /* Inside \Q...\E everything is literal except \E */
-
-      if (inescq)
-        {
-        if (c == '\\' && ptr[1] == 'E')
-          {
-          inescq = FALSE;
-          ptr++;
-          continue;
-          }
-        else goto LONE_SINGLE_CHARACTER;
-        }
-
-      /* Handle POSIX class names. Perl allows a negation extension of the
-      form [:^name:]. A square bracket that doesn't match the syntax is
-      treated as a literal. We also recognize the POSIX constructions
-      [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
-      5.6 and 5.8 do. */
-
-      if (c == '[' &&
-          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
-          check_posix_syntax(ptr, &tempptr, cd))
-        {
-        BOOL local_negate = FALSE;
-        int posix_class, i;
-        register const uschar *cbits = cd->cbits;
-
-        if (ptr[1] != ':')
-          {
-          *errorptr = ERR31;
-          goto FAILED;
-          }
-
-        ptr += 2;
-        if (*ptr == '^')
-          {
-          local_negate = TRUE;
-          ptr++;
-          }
-
-        posix_class = check_posix_name(ptr, tempptr - ptr);
-        if (posix_class < 0)
-          {
-          *errorptr = ERR30;
-          goto FAILED;
-          }
-
-        /* If matching is caseless, upper and lower are converted to
-        alpha. This relies on the fact that the class table starts with
-        alpha, lower, upper as the first 3 entries. */
-
-        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
-          posix_class = 0;
-
-        /* Or into the map we are building up to 3 of the static class
-        tables, or their negations. The [:blank:] class sets up the same
-        chars as the [:space:] class (all white space). We remove the vertical
-        white space chars afterwards. */
-
-        posix_class *= 3;
-        for (i = 0; i < 3; i++)
-          {
-          BOOL blankclass = strncmp((char *)ptr, "blank", 5) == 0;
-          int taboffset = posix_class_maps[posix_class + i];
-          if (taboffset < 0) break;
-          if (local_negate)
-            {
-            if (i == 0)
-              for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+taboffset];
-            else
-              for (c = 0; c < 32; c++) classbits[c] &= ~cbits[c+taboffset];
-            if (blankclass) classbits[1] |= 0x3c;
-            }
-          else
-            {
-            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+taboffset];
-            if (blankclass) classbits[1] &= ~0x3c;
-            }
-          }
-
-        ptr = tempptr + 1;
-        class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
-        continue;    /* End of POSIX syntax handling */
-        }
-
-      /* Backslash may introduce a single character, or it may introduce one
-      of the specials, which just set a flag. Escaped items are checked for
-      validity in the pre-compiling pass. The sequence \b is a special case.
-      Inside a class (and only there) it is treated as backspace. Elsewhere
-      it marks a word boundary. Other escapes have preset maps ready to
-      or into the one we are building. We assume they have more than one
-      character in them, so set class_charcount bigger than one. */
-
-      if (c == '\\')
-        {
-        c = check_escape(&ptr, errorptr, *brackets, options, TRUE);
-
-        if (-c == ESC_b) c = '\b';       /* \b is backslash in a class */
-        else if (-c == ESC_X) c = 'X';   /* \X is literal X in a class */
-        else if (-c == ESC_Q)            /* Handle start of quoted string */
-          {
-          if (ptr[1] == '\\' && ptr[2] == 'E')
-            {
-            ptr += 2; /* avoid empty string */
-            }
-          else inescq = TRUE;
-          continue;
-          }
-
-        if (c < 0)
-          {
-          register const uschar *cbits = cd->cbits;
-          class_charcount += 2;     /* Greater than 1 is what matters */
-          switch (-c)
-            {
-            case ESC_d:
-            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_digit];
-            continue;
-
-            case ESC_D:
-            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit];
-            continue;
-
-            case ESC_w:
-            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_word];
-            continue;
-
-            case ESC_W:
-            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word];
-            continue;
-
-            case ESC_s:
-            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
-            classbits[1] &= ~0x08;   /* Perl 5.004 onwards omits VT from \s */
-            continue;
-
-            case ESC_S:
-            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space];
-            classbits[1] |= 0x08;    /* Perl 5.004 onwards omits VT from \s */
-            continue;
-
-#ifdef SUPPORT_UCP
-            case ESC_p:
-            case ESC_P:
-              {
-              BOOL negated;
-              int property = get_ucp(&ptr, &negated, errorptr);
-              if (property < 0) goto FAILED;
-              class_utf8 = TRUE;
-              *class_utf8data++ = ((-c == ESC_p) != negated)?
-                XCL_PROP : XCL_NOTPROP;
-              *class_utf8data++ = property;
-              class_charcount -= 2;   /* Not a < 256 character */
-              }
-            continue;
-#endif
-
-            /* Unrecognized escapes are faulted if PCRE is running in its
-            strict mode. By default, for compatibility with Perl, they are
-            treated as literals. */
-
-            default:
-            if ((options & PCRE_EXTRA) != 0)
-              {
-              *errorptr = ERR7;
-              goto FAILED;
-              }
-            c = *ptr;              /* The final character */
-            class_charcount -= 2;  /* Undo the default count from above */
-            }
-          }
-
-        /* Fall through if we have a single character (c >= 0). This may be
-        > 256 in UTF-8 mode. */
-
-        }   /* End of backslash handling */
-
-      /* A single character may be followed by '-' to form a range. However,
-      Perl does not permit ']' to be the end of the range. A '-' character
-      here is treated as a literal. */
-
-      if (ptr[1] == '-' && ptr[2] != ']')
-        {
-        int d;
-        ptr += 2;
-
-#ifdef SUPPORT_UTF8
-        if (utf8)
-          {                           /* Braces are required because the */
-          GETCHARLEN(d, ptr, ptr);    /* macro generates multiple statements */
-          }
-        else
-#endif
-        d = *ptr;  /* Not UTF-8 mode */
-
-        /* The second part of a range can be a single-character escape, but
-        not any of the other escapes. Perl 5.6 treats a hyphen as a literal
-        in such circumstances. */
-
-        if (d == '\\')
-          {
-          const uschar *oldptr = ptr;
-          d = check_escape(&ptr, errorptr, *brackets, options, TRUE);
-
-          /* \b is backslash; \X is literal X; any other special means the '-'
-          was literal */
-
-          if (d < 0)
-            {
-            if (d == -ESC_b) d = '\b';
-            else if (d == -ESC_X) d = 'X'; else
-              {
-              ptr = oldptr - 2;
-              goto LONE_SINGLE_CHARACTER;  /* A few lines below */
-              }
-            }
-          }
-
-        /* The check that the two values are in the correct order happens in
-        the pre-pass. Optimize one-character ranges */
-
-        if (d == c) goto LONE_SINGLE_CHARACTER;  /* A few lines below */
-
-        /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless
-        matching, we have to use an XCLASS with extra data items. Caseless
-        matching for characters > 127 is available only if UCP support is
-        available. */
-
-#ifdef SUPPORT_UTF8
-        if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
-          {
-          class_utf8 = TRUE;
-
-          /* With UCP support, we can find the other case equivalents of
-          the relevant characters. There may be several ranges. Optimize how
-          they fit with the basic range. */
-
-#ifdef SUPPORT_UCP
-          if ((options & PCRE_CASELESS) != 0)
-            {
-            int occ, ocd;
-            int cc = c;
-            int origd = d;
-            while (get_othercase_range(&cc, origd, &occ, &ocd))
-              {
-              if (occ >= c && ocd <= d) continue;  /* Skip embedded ranges */
-
-              if (occ < c  && ocd >= c - 1)        /* Extend the basic range */
-                {                                  /* if there is overlap,   */
-                c = occ;                           /* noting that if occ < c */
-                continue;                          /* we can't have ocd > d  */
-                }                                  /* because a subrange is  */
-              if (ocd > d && occ <= d + 1)         /* always shorter than    */
-                {                                  /* the basic range.       */
-                d = ocd;
-                continue;
-                }
-
-              if (occ == ocd)
-                {
-                *class_utf8data++ = XCL_SINGLE;
-                }
-              else
-                {
-                *class_utf8data++ = XCL_RANGE;
-                class_utf8data += ord2utf8(occ, class_utf8data);
-                }
-              class_utf8data += ord2utf8(ocd, class_utf8data);
-              }
-            }
-#endif  /* SUPPORT_UCP */
-
-          /* Now record the original range, possibly modified for UCP caseless
-          overlapping ranges. */
-
-          *class_utf8data++ = XCL_RANGE;
-          class_utf8data += ord2utf8(c, class_utf8data);
-          class_utf8data += ord2utf8(d, class_utf8data);
-
-          /* With UCP support, we are done. Without UCP support, there is no
-          caseless matching for UTF-8 characters > 127; we can use the bit map
-          for the smaller ones. */
-
-#ifdef SUPPORT_UCP
-          continue;    /* With next character in the class */
-#else
-          if ((options & PCRE_CASELESS) == 0 || c > 127) continue;
-
-          /* Adjust upper limit and fall through to set up the map */
-
-          d = 127;
-
-#endif  /* SUPPORT_UCP */
-          }
-#endif  /* SUPPORT_UTF8 */
-
-        /* We use the bit map for all cases when not in UTF-8 mode; else
-        ranges that lie entirely within 0-127 when there is UCP support; else
-        for partial ranges without UCP support. */
-
-        for (; c <= d; c++)
-          {
-          classbits[c/8] |= (1 << (c&7));
-          if ((options & PCRE_CASELESS) != 0)
-            {
-            int uc = cd->fcc[c];           /* flip case */
-            classbits[uc/8] |= (1 << (uc&7));
-            }
-          class_charcount++;                /* in case a one-char range */
-          class_lastchar = c;
-          }
-
-        continue;   /* Go get the next char in the class */
-        }
-
-      /* Handle a lone single character - we can get here for a normal
-      non-escape char, or after \ that introduces a single character or for an
-      apparent range that isn't. */
-
-      LONE_SINGLE_CHARACTER:
-
-      /* Handle a character that cannot go in the bit map */
-
-#ifdef SUPPORT_UTF8
-      if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
-        {
-        class_utf8 = TRUE;
-        *class_utf8data++ = XCL_SINGLE;
-        class_utf8data += ord2utf8(c, class_utf8data);
-
-#ifdef SUPPORT_UCP
-        if ((options & PCRE_CASELESS) != 0)
-          {
-          int chartype;
-          int othercase;
-          if (ucp_findchar(c, &chartype, &othercase) >= 0 && othercase > 0)
-            {
-            *class_utf8data++ = XCL_SINGLE;
-            class_utf8data += ord2utf8(othercase, class_utf8data);
-            }
-          }
-#endif  /* SUPPORT_UCP */
-
-        }
-      else
-#endif  /* SUPPORT_UTF8 */
-
-      /* Handle a single-byte character */
-        {
-        classbits[c/8] |= (1 << (c&7));
-        if ((options & PCRE_CASELESS) != 0)
-          {
-          c = cd->fcc[c];   /* flip case */
-          classbits[c/8] |= (1 << (c&7));
-          }
-        class_charcount++;
-        class_lastchar = c;
-        }
-      }
-
-    /* Loop until ']' reached; the check for end of string happens inside the
-    loop. This "while" is the end of the "do" above. */
-
-    while ((c = *(++ptr)) != ']' || inescq);
-
-    /* If class_charcount is 1, we saw precisely one character whose value is
-    less than 256. In non-UTF-8 mode we can always optimize. In UTF-8 mode, we
-    can optimize the negative case only if there were no characters >= 128
-    because OP_NOT and the related opcodes like OP_NOTSTAR operate on
-    single-bytes only. This is an historical hangover. Maybe one day we can
-    tidy these opcodes to handle multi-byte characters.
-
-    The optimization throws away the bit map. We turn the item into a
-    1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note
-    that OP_NOT does not support multibyte characters. In the positive case, it
-    can cause firstbyte to be set. Otherwise, there can be no first char if
-    this item is first, whatever repeat count may follow. In the case of
-    reqbyte, save the previous value for reinstating. */
-
-#ifdef SUPPORT_UTF8
-    if (class_charcount == 1 &&
-          (!utf8 ||
-          (!class_utf8 && (!negate_class || class_lastchar < 128))))
-
-#else
-    if (class_charcount == 1)
-#endif
-      {
-      zeroreqbyte = reqbyte;
-
-      /* The OP_NOT opcode works on one-byte characters only. */
-
-      if (negate_class)
-        {
-        if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
-        zerofirstbyte = firstbyte;
-        *code++ = OP_NOT;
-        *code++ = class_lastchar;
-        break;
-        }
-
-      /* For a single, positive character, get the value into mcbuffer, and
-      then we can handle this with the normal one-character code. */
-
-#ifdef SUPPORT_UTF8
-      if (utf8 && class_lastchar > 127)
-        mclength = ord2utf8(class_lastchar, mcbuffer);
-      else
-#endif
-        {
-        mcbuffer[0] = class_lastchar;
-        mclength = 1;
-        }
-      goto ONE_CHAR;
-      }       /* End of 1-char optimization */
-
-    /* The general case - not the one-char optimization. If this is the first
-    thing in the branch, there can be no first char setting, whatever the
-    repeat count. Any reqbyte setting must remain unchanged after any kind of
-    repeat. */
-
-    if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
-    zerofirstbyte = firstbyte;
-    zeroreqbyte = reqbyte;
-
-    /* If there are characters with values > 255, we have to compile an
-    extended class, with its own opcode. If there are no characters < 256,
-    we can omit the bitmap. */
-
-#ifdef SUPPORT_UTF8
-    if (class_utf8)
-      {
-      *class_utf8data++ = XCL_END;    /* Marks the end of extra data */
-      *code++ = OP_XCLASS;
-      code += LINK_SIZE;
-      *code = negate_class? XCL_NOT : 0;
-
-      /* If the map is required, install it, and move on to the end of
-      the extra data */
-
-      if (class_charcount > 0)
-        {
-        *code++ |= XCL_MAP;
-        memcpy(code, classbits, 32);
-        code = class_utf8data;
-        }
-
-      /* If the map is not required, slide down the extra data. */
-
-      else
-        {
-        int len = class_utf8data - (code + 33);
-        memmove(code + 1, code + 33, len);
-        code += len + 1;
-        }
-
-      /* Now fill in the complete length of the item */
-
-      PUT(previous, 1, code - previous);
-      break;   /* End of class handling */
-      }
-#endif
-
-    /* If there are no characters > 255, negate the 32-byte map if necessary,
-    and copy it into the code vector. If this is the first thing in the branch,
-    there can be no first char setting, whatever the repeat count. Any reqbyte
-    setting must remain unchanged after any kind of repeat. */
-
-    if (negate_class)
-      {
-      *code++ = OP_NCLASS;
-      for (c = 0; c < 32; c++) code[c] = ~classbits[c];
-      }
-    else
-      {
-      *code++ = OP_CLASS;
-      memcpy(code, classbits, 32);
-      }
-    code += 32;
-    break;
-
-    /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
-    has been tested above. */
-
-    case '{':
-    if (!is_quantifier) goto NORMAL_CHAR;
-    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorptr);
-    if (*errorptr != NULL) goto FAILED;
-    goto REPEAT;
-
-    case '*':
-    repeat_min = 0;
-    repeat_max = -1;
-    goto REPEAT;
-
-    case '+':
-    repeat_min = 1;
-    repeat_max = -1;
-    goto REPEAT;
-
-    case '?':
-    repeat_min = 0;
-    repeat_max = 1;
-
-    REPEAT:
-    if (previous == NULL)
-      {
-      *errorptr = ERR9;
-      goto FAILED;
-      }
-
-    if (repeat_min == 0)
-      {
-      firstbyte = zerofirstbyte;    /* Adjust for zero repeat */
-      reqbyte = zeroreqbyte;        /* Ditto */
-      }
-
-    /* Remember whether this is a variable length repeat */
-
-    reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY;
-
-    op_type = 0;                    /* Default single-char op codes */
-    possessive_quantifier = FALSE;  /* Default not possessive quantifier */
-
-    /* Save start of previous item, in case we have to move it up to make space
-    for an inserted OP_ONCE for the additional '+' extension. */
-
-    tempcode = previous;
-
-    /* If the next character is '+', we have a possessive quantifier. This
-    implies greediness, whatever the setting of the PCRE_UNGREEDY option.
-    If the next character is '?' this is a minimizing repeat, by default,
-    but if PCRE_UNGREEDY is set, it works the other way round. We change the
-    repeat type to the non-default. */
-
-    if (ptr[1] == '+')
-      {
-      repeat_type = 0;                  /* Force greedy */
-      possessive_quantifier = TRUE;
-      ptr++;
-      }
-    else if (ptr[1] == '?')
-      {
-      repeat_type = greedy_non_default;
-      ptr++;
-      }
-    else repeat_type = greedy_default;
-
-    /* If previous was a recursion, we need to wrap it inside brackets so that
-    it can be replicated if necessary. */
-
-    if (*previous == OP_RECURSE)
-      {
-      memmove(previous + 1 + LINK_SIZE, previous, 1 + LINK_SIZE);
-      code += 1 + LINK_SIZE;
-      *previous = OP_BRA;
-      PUT(previous, 1, code - previous);
-      *code = OP_KET;
-      PUT(code, 1, code - previous);
-      code += 1 + LINK_SIZE;
-      }
-
-    /* If previous was a character match, abolish the item and generate a
-    repeat item instead. If a char item has a minumum of more than one, ensure
-    that it is set in reqbyte - it might not be if a sequence such as x{3} is
-    the first thing in a branch because the x will have gone into firstbyte
-    instead.  */
-
-    if (*previous == OP_CHAR || *previous == OP_CHARNC)
-      {
-      /* Deal with UTF-8 characters that take up more than one byte. It's
-      easier to write this out separately than try to macrify it. Use c to
-      hold the length of the character in bytes, plus 0x80 to flag that it's a
-      length rather than a small character. */
-
-#ifdef SUPPORT_UTF8
-      if (utf8 && (code[-1] & 0x80) != 0)
-        {
-        uschar *lastchar = code - 1;
-        while((*lastchar & 0xc0) == 0x80) lastchar--;
-        c = code - lastchar;            /* Length of UTF-8 character */
-        memcpy(utf8_char, lastchar, c); /* Save the char */
-        c |= 0x80;                      /* Flag c as a length */
-        }
-      else
-#endif
-
-      /* Handle the case of a single byte - either with no UTF8 support, or
-      with UTF-8 disabled, or for a UTF-8 character < 128. */
-
-        {
-        c = code[-1];
-        if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt;
-        }
-
-      goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
-      }
-
-    /* If previous was a single negated character ([^a] or similar), we use
-    one of the special opcodes, replacing it. The code is shared with single-
-    character repeats by setting opt_type to add a suitable offset into
-    repeat_type. OP_NOT is currently used only for single-byte chars. */
-
-    else if (*previous == OP_NOT)
-      {
-      op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
-      c = previous[1];
-      goto OUTPUT_SINGLE_REPEAT;
-      }
-
-    /* If previous was a character type match (\d or similar), abolish it and
-    create a suitable repeat item. The code is shared with single-character
-    repeats by setting op_type to add a suitable offset into repeat_type. Note
-    the the Unicode property types will be present only when SUPPORT_UCP is
-    defined, but we don't wrap the little bits of code here because it just
-    makes it horribly messy. */
-
-    else if (*previous < OP_EODN)
-      {
-      uschar *oldcode;
-      int prop_type;
-      op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
-      c = *previous;
-
-      OUTPUT_SINGLE_REPEAT:
-      prop_type = (*previous == OP_PROP || *previous == OP_NOTPROP)?
-        previous[1] : -1;
-
-      oldcode = code;
-      code = previous;                  /* Usually overwrite previous item */
-
-      /* If the maximum is zero then the minimum must also be zero; Perl allows
-      this case, so we do too - by simply omitting the item altogether. */
-
-      if (repeat_max == 0) goto END_REPEAT;
-
-      /* All real repeats make it impossible to handle partial matching (maybe
-      one day we will be able to remove this restriction). */
-
-      if (repeat_max != 1) cd->nopartial = TRUE;
-
-      /* Combine the op_type with the repeat_type */
-
-      repeat_type += op_type;
-
-      /* A minimum of zero is handled either as the special case * or ?, or as
-      an UPTO, with the maximum given. */
-
-      if (repeat_min == 0)
-        {
-        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
-          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
-        else
-          {
-          *code++ = OP_UPTO + repeat_type;
-          PUT2INC(code, 0, repeat_max);
-          }
-        }
-
-      /* A repeat minimum of 1 is optimized into some special cases. If the
-      maximum is unlimited, we use OP_PLUS. Otherwise, the original item it
-      left in place and, if the maximum is greater than 1, we use OP_UPTO with
-      one less than the maximum. */
-
-      else if (repeat_min == 1)
-        {
-        if (repeat_max == -1)
-          *code++ = OP_PLUS + repeat_type;
-        else
-          {
-          code = oldcode;                 /* leave previous item in place */
-          if (repeat_max == 1) goto END_REPEAT;
-          *code++ = OP_UPTO + repeat_type;
-          PUT2INC(code, 0, repeat_max - 1);
-          }
-        }
-
-      /* The case {n,n} is just an EXACT, while the general case {n,m} is
-      handled as an EXACT followed by an UPTO. */
-
-      else
-        {
-        *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
-        PUT2INC(code, 0, repeat_min);
-
-        /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
-        we have to insert the character for the previous code. For a repeated
-        Unicode property match, there is an extra byte that defines the
-        required property. In UTF-8 mode, long characters have their length in
-        c, with the 0x80 bit as a flag. */
-
-        if (repeat_max < 0)
-          {
-#ifdef SUPPORT_UTF8
-          if (utf8 && c >= 128)
-            {
-            memcpy(code, utf8_char, c & 7);
-            code += c & 7;
-            }
-          else
-#endif
-            {
-            *code++ = c;
-            if (prop_type >= 0) *code++ = prop_type;
-            }
-          *code++ = OP_STAR + repeat_type;
-          }
-
-        /* Else insert an UPTO if the max is greater than the min, again
-        preceded by the character, for the previously inserted code. */
-
-        else if (repeat_max != repeat_min)
-          {
-#ifdef SUPPORT_UTF8
-          if (utf8 && c >= 128)
-            {
-            memcpy(code, utf8_char, c & 7);
-            code += c & 7;
-            }
-          else
-#endif
-          *code++ = c;
-          if (prop_type >= 0) *code++ = prop_type;
-          repeat_max -= repeat_min;
-          *code++ = OP_UPTO + repeat_type;
-          PUT2INC(code, 0, repeat_max);
-          }
-        }
-
-      /* The character or character type itself comes last in all cases. */
-
-#ifdef SUPPORT_UTF8
-      if (utf8 && c >= 128)
-        {
-        memcpy(code, utf8_char, c & 7);
-        code += c & 7;
-        }
-      else
-#endif
-      *code++ = c;
-
-      /* For a repeated Unicode property match, there is an extra byte that
-      defines the required property. */
-
-#ifdef SUPPORT_UCP
-      if (prop_type >= 0) *code++ = prop_type;
-#endif
-      }
-
-    /* If previous was a character class or a back reference, we put the repeat
-    stuff after it, but just skip the item if the repeat was {0,0}. */
-
-    else if (*previous == OP_CLASS ||
-             *previous == OP_NCLASS ||
-#ifdef SUPPORT_UTF8
-             *previous == OP_XCLASS ||
-#endif
-             *previous == OP_REF)
-      {
-      if (repeat_max == 0)
-        {
-        code = previous;
-        goto END_REPEAT;
-        }
-
-      /* All real repeats make it impossible to handle partial matching (maybe
-      one day we will be able to remove this restriction). */
-
-      if (repeat_max != 1) cd->nopartial = TRUE;
-
-      if (repeat_min == 0 && repeat_max == -1)
-        *code++ = OP_CRSTAR + repeat_type;
-      else if (repeat_min == 1 && repeat_max == -1)
-        *code++ = OP_CRPLUS + repeat_type;
-      else if (repeat_min == 0 && repeat_max == 1)
-        *code++ = OP_CRQUERY + repeat_type;
-      else
-        {
-        *code++ = OP_CRRANGE + repeat_type;
-        PUT2INC(code, 0, repeat_min);
-        if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
-        PUT2INC(code, 0, repeat_max);
-        }
-      }
-
-    /* If previous was a bracket group, we may have to replicate it in certain
-    cases. */
-
-    else if (*previous >= OP_BRA || *previous == OP_ONCE ||
-             *previous == OP_COND)
-      {
-      register int i;
-      int ketoffset = 0;
-      int len = code - previous;
-      uschar *bralink = NULL;
-
-      /* If the maximum repeat count is unlimited, find the end of the bracket
-      by scanning through from the start, and compute the offset back to it
-      from the current code pointer. There may be an OP_OPT setting following
-      the final KET, so we can't find the end just by going back from the code
-      pointer. */
-
-      if (repeat_max == -1)
-        {
-        register uschar *ket = previous;
-        do ket += GET(ket, 1); while (*ket != OP_KET);
-        ketoffset = code - ket;
-        }
-
-      /* The case of a zero minimum is special because of the need to stick
-      OP_BRAZERO in front of it, and because the group appears once in the
-      data, whereas in other cases it appears the minimum number of times. For
-      this reason, it is simplest to treat this case separately, as otherwise
-      the code gets far too messy. There are several special subcases when the
-      minimum is zero. */
-
-      if (repeat_min == 0)
-        {
-        /* If the maximum is also zero, we just omit the group from the output
-        altogether. */
-
-        if (repeat_max == 0)
-          {
-          code = previous;
-          goto END_REPEAT;
-          }
-
-        /* If the maximum is 1 or unlimited, we just have to stick in the
-        BRAZERO and do no more at this point. However, we do need to adjust
-        any OP_RECURSE calls inside the group that refer to the group itself or
-        any internal group, because the offset is from the start of the whole
-        regex. Temporarily terminate the pattern while doing this. */
-
-        if (repeat_max <= 1)
-          {
-          *code = OP_END;
-          adjust_recurse(previous, 1, utf8, cd);
-          memmove(previous+1, previous, len);
-          code++;
-          *previous++ = OP_BRAZERO + repeat_type;
-          }
-
-        /* If the maximum is greater than 1 and limited, we have to replicate
-        in a nested fashion, sticking OP_BRAZERO before each set of brackets.
-        The first one has to be handled carefully because it's the original
-        copy, which has to be moved up. The remainder can be handled by code
-        that is common with the non-zero minimum case below. We have to
-        adjust the value or repeat_max, since one less copy is required. Once
-        again, we may have to adjust any OP_RECURSE calls inside the group. */
-
-        else
-          {
-          int offset;
-          *code = OP_END;
-          adjust_recurse(previous, 2 + LINK_SIZE, utf8, cd);
-          memmove(previous + 2 + LINK_SIZE, previous, len);
-          code += 2 + LINK_SIZE;
-          *previous++ = OP_BRAZERO + repeat_type;
-          *previous++ = OP_BRA;
-
-          /* We chain together the bracket offset fields that have to be
-          filled in later when the ends of the brackets are reached. */
-
-          offset = (bralink == NULL)? 0 : previous - bralink;
-          bralink = previous;
-          PUTINC(previous, 0, offset);
-          }
-
-        repeat_max--;
-        }
-
-      /* If the minimum is greater than zero, replicate the group as many
-      times as necessary, and adjust the maximum to the number of subsequent
-      copies that we need. If we set a first char from the group, and didn't
-      set a required char, copy the latter from the former. */
-
-      else
-        {
-        if (repeat_min > 1)
-          {
-          if (groupsetfirstbyte && reqbyte < 0) reqbyte = firstbyte;
-          for (i = 1; i < repeat_min; i++)
-            {
-            memcpy(code, previous, len);
-            code += len;
-            }
-          }
-        if (repeat_max > 0) repeat_max -= repeat_min;
-        }
-
-      /* This code is common to both the zero and non-zero minimum cases. If
-      the maximum is limited, it replicates the group in a nested fashion,
-      remembering the bracket starts on a stack. In the case of a zero minimum,
-      the first one was set up above. In all cases the repeat_max now specifies
-      the number of additional copies needed. */
-
-      if (repeat_max >= 0)
-        {
-        for (i = repeat_max - 1; i >= 0; i--)
-          {
-          *code++ = OP_BRAZERO + repeat_type;
-
-          /* All but the final copy start a new nesting, maintaining the
-          chain of brackets outstanding. */
-
-          if (i != 0)
-            {
-            int offset;
-            *code++ = OP_BRA;
-            offset = (bralink == NULL)? 0 : code - bralink;
-            bralink = code;
-            PUTINC(code, 0, offset);
-            }
-
-          memcpy(code, previous, len);
-          code += len;
-          }
-
-        /* Now chain through the pending brackets, and fill in their length
-        fields (which are holding the chain links pro tem). */
-
-        while (bralink != NULL)
-          {
-          int oldlinkoffset;
-          int offset = code - bralink + 1;
-          uschar *bra = code - offset;
-          oldlinkoffset = GET(bra, 1);
-          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
-          *code++ = OP_KET;
-          PUTINC(code, 0, offset);
-          PUT(bra, 1, offset);
-          }
-        }
-
-      /* If the maximum is unlimited, set a repeater in the final copy. We
-      can't just offset backwards from the current code point, because we
-      don't know if there's been an options resetting after the ket. The
-      correct offset was computed above. */
-
-      else code[-ketoffset] = OP_KETRMAX + repeat_type;
-      }
-
-    /* Else there's some kind of shambles */
-
-    else
-      {
-      *errorptr = ERR11;
-      goto FAILED;
-      }
-
-    /* If the character following a repeat is '+', we wrap the entire repeated
-    item inside OP_ONCE brackets. This is just syntactic sugar, taken from
-    Sun's Java package. The repeated item starts at tempcode, not at previous,
-    which might be the first part of a string whose (former) last char we
-    repeated. However, we don't support '+' after a greediness '?'. */
-
-    if (possessive_quantifier)
-      {
-      int len = code - tempcode;
-      memmove(tempcode + 1+LINK_SIZE, tempcode, len);
-      code += 1 + LINK_SIZE;
-      len += 1 + LINK_SIZE;
-      tempcode[0] = OP_ONCE;
-      *code++ = OP_KET;
-      PUTINC(code, 0, len);
-      PUT(tempcode, 1, len);
-      }
-
-    /* In all case we no longer have a previous item. We also set the
-    "follows varying string" flag for subsequently encountered reqbytes if
-    it isn't already set and we have just passed a varying length item. */
-
-    END_REPEAT:
-    previous = NULL;
-    cd->req_varyopt |= reqvary;
-    break;
-
-
-    /* Start of nested bracket sub-expression, or comment or lookahead or
-    lookbehind or option setting or condition. First deal with special things
-    that can come after a bracket; all are introduced by ?, and the appearance
-    of any of them means that this is not a referencing group. They were
-    checked for validity in the first pass over the string, so we don't have to
-    check for syntax errors here.  */
-
-    case '(':
-    newoptions = options;
-    skipbytes = 0;
-
-    if (*(++ptr) == '?')
-      {
-      int set, unset;
-      int *optset;
-
-      switch (*(++ptr))
-        {
-        case '#':                 /* Comment; skip to ket */
-        ptr++;
-        while (*ptr != ')') ptr++;
-        continue;
-
-        case ':':                 /* Non-extracting bracket */
-        bravalue = OP_BRA;
-        ptr++;
-        break;
-
-        case '(':
-        bravalue = OP_COND;       /* Conditional group */
-
-        /* Condition to test for recursion */
-
-        if (ptr[1] == 'R')
-          {
-          code[1+LINK_SIZE] = OP_CREF;
-          PUT2(code, 2+LINK_SIZE, CREF_RECURSE);
-          skipbytes = 3;
-          ptr += 3;
-          }
-
-        /* Condition to test for a numbered subpattern match. We know that
-        if a digit follows ( then there will just be digits until ) because
-        the syntax was checked in the first pass. */
-
-        else if ((digitab[ptr[1]] && ctype_digit) != 0)
-          {
-          int condref;                 /* Don't amalgamate; some compilers */
-          condref = *(++ptr) - '0';    /* grumble at autoincrement in declaration */
-          while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
-          if (condref == 0)
-            {
-            *errorptr = ERR35;
-            goto FAILED;
-            }
-          ptr++;
-          code[1+LINK_SIZE] = OP_CREF;
-          PUT2(code, 2+LINK_SIZE, condref);
-          skipbytes = 3;
-          }
-        /* For conditions that are assertions, we just fall through, having
-        set bravalue above. */
-        break;
-
-        case '=':                 /* Positive lookahead */
-        bravalue = OP_ASSERT;
-        ptr++;
-        break;
-
-        case '!':                 /* Negative lookahead */
-        bravalue = OP_ASSERT_NOT;
-        ptr++;
-        break;
-
-        case '<':                 /* Lookbehinds */
-        switch (*(++ptr))
-          {
-          case '=':               /* Positive lookbehind */
-          bravalue = OP_ASSERTBACK;
-          ptr++;
-          break;
-
-          case '!':               /* Negative lookbehind */
-          bravalue = OP_ASSERTBACK_NOT;
-          ptr++;
-          break;
-          }
-        break;
-
-        case '>':                 /* One-time brackets */
-        bravalue = OP_ONCE;
-        ptr++;
-        break;
-
-        case 'C':                 /* Callout - may be followed by digits; */
-        previous_callout = code;  /* Save for later completion */
-        after_manual_callout = 1; /* Skip one item before completing */
-        *code++ = OP_CALLOUT;     /* Already checked that the terminating */
-          {                       /* closing parenthesis is present. */
-          int n = 0;
-          while ((digitab[*(++ptr)] & ctype_digit) != 0)
-            n = n * 10 + *ptr - '0';
-          if (n > 255)
-            {
-            *errorptr = ERR38;
-            goto FAILED;
-            }
-          *code++ = n;
-          PUT(code, 0, ptr - cd->start_pattern + 1);  /* Pattern offset */
-          PUT(code, LINK_SIZE, 0);                    /* Default length */
-          code += 2 * LINK_SIZE;
-          }
-        previous = NULL;
-        continue;
-
-        case 'P':                 /* Named subpattern handling */
-        if (*(++ptr) == '<')      /* Definition */
-          {
-          int i, namelen;
-          uschar *slot = cd->name_table;
-          const uschar *name;     /* Don't amalgamate; some compilers */
-          name = ++ptr;           /* grumble at autoincrement in declaration */
-
-          while (*ptr++ != '>');
-          namelen = ptr - name - 1;
-
-          for (i = 0; i < cd->names_found; i++)
-            {
-            int crc = memcmp(name, slot+2, namelen);
-            if (crc == 0)
-              {
-              if (slot[2+namelen] == 0)
-                {
-                *errorptr = ERR43;
-                goto FAILED;
-                }
-              crc = -1;             /* Current name is substring */
-              }
-            if (crc < 0)
-              {
-              memmove(slot + cd->name_entry_size, slot,
-                (cd->names_found - i) * cd->name_entry_size);
-              break;
-              }
-            slot += cd->name_entry_size;
-            }
-
-          PUT2(slot, 0, *brackets + 1);
-          memcpy(slot + 2, name, namelen);
-          slot[2+namelen] = 0;
-          cd->names_found++;
-          goto NUMBERED_GROUP;
-          }
-
-        if (*ptr == '=' || *ptr == '>')  /* Reference or recursion */
-          {
-          int i, namelen;
-          int type = *ptr++;
-          const uschar *name = ptr;
-          uschar *slot = cd->name_table;
-
-          while (*ptr != ')') ptr++;
-          namelen = ptr - name;
-
-          for (i = 0; i < cd->names_found; i++)
-            {
-            if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break;
-            slot += cd->name_entry_size;
-            }
-          if (i >= cd->names_found)
-            {
-            *errorptr = ERR15;
-            goto FAILED;
-            }
-
-          recno = GET2(slot, 0);
-
-          if (type == '>') goto HANDLE_RECURSION;  /* A few lines below */
-
-          /* Back reference */
-
-          previous = code;
-          *code++ = OP_REF;
-          PUT2INC(code, 0, recno);
-          cd->backref_map |= (recno < 32)? (1 << recno) : 1;
-          if (recno > cd->top_backref) cd->top_backref = recno;
-          continue;
-          }
-
-        /* Should never happen */
-        break;
-
-        case 'R':                 /* Pattern recursion */
-        ptr++;                    /* Same as (?0)      */
-        /* Fall through */
-
-        /* Recursion or "subroutine" call */
-
-        case '0': case '1': case '2': case '3': case '4':
-        case '5': case '6': case '7': case '8': case '9':
-          {
-          const uschar *called;
-          recno = 0;
-          while((digitab[*ptr] & ctype_digit) != 0)
-            recno = recno * 10 + *ptr++ - '0';
-
-          /* Come here from code above that handles a named recursion */
-
-          HANDLE_RECURSION:
-
-          previous = code;
-
-          /* Find the bracket that is being referenced. Temporarily end the
-          regex in case it doesn't exist. */
-
-          *code = OP_END;
-          called = (recno == 0)?
-            cd->start_code : find_bracket(cd->start_code, utf8, recno);
-
-          if (called == NULL)
-            {
-            *errorptr = ERR15;
-            goto FAILED;
-            }
-
-          /* If the subpattern is still open, this is a recursive call. We
-          check to see if this is a left recursion that could loop for ever,
-          and diagnose that case. */
-
-          if (GET(called, 1) == 0 && could_be_empty(called, code, bcptr, utf8))
-            {
-            *errorptr = ERR40;
-            goto FAILED;
-            }
-
-          /* Insert the recursion/subroutine item */
-
-          *code = OP_RECURSE;
-          PUT(code, 1, called - cd->start_code);
-          code += 1 + LINK_SIZE;
-          }
-        continue;
-
-        /* Character after (? not specially recognized */
-
-        default:                  /* Option setting */
-        set = unset = 0;
-        optset = &set;
-
-        while (*ptr != ')' && *ptr != ':')
-          {
-          switch (*ptr++)
-            {
-            case '-': optset = &unset; break;
-
-            case 'i': *optset |= PCRE_CASELESS; break;
-            case 'm': *optset |= PCRE_MULTILINE; break;
-            case 's': *optset |= PCRE_DOTALL; break;
-            case 'x': *optset |= PCRE_EXTENDED; break;
-            case 'U': *optset |= PCRE_UNGREEDY; break;
-            case 'X': *optset |= PCRE_EXTRA; break;
-            }
-          }
-
-        /* Set up the changed option bits, but don't change anything yet. */
-
-        newoptions = (options | set) & (~unset);
-
-        /* If the options ended with ')' this is not the start of a nested
-        group with option changes, so the options change at this level. Compile
-        code to change the ims options if this setting actually changes any of
-        them. We also pass the new setting back so that it can be put at the
-        start of any following branches, and when this group ends (if we are in
-        a group), a resetting item can be compiled.
-
-        Note that if this item is right at the start of the pattern, the
-        options will have been abstracted and made global, so there will be no
-        change to compile. */
-
-        if (*ptr == ')')
-          {
-          if ((options & PCRE_IMS) != (newoptions & PCRE_IMS))
-            {
-            *code++ = OP_OPT;
-            *code++ = newoptions & PCRE_IMS;
-            }
-
-          /* Change options at this level, and pass them back for use
-          in subsequent branches. Reset the greedy defaults and the case
-          value for firstbyte and reqbyte. */
-
-          *optionsptr = options = newoptions;
-          greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);
-          greedy_non_default = greedy_default ^ 1;
-          req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
-
-          previous = NULL;       /* This item can't be repeated */
-          continue;              /* It is complete */
-          }
-
-        /* If the options ended with ':' we are heading into a nested group
-        with possible change of options. Such groups are non-capturing and are
-        not assertions of any kind. All we need to do is skip over the ':';
-        the newoptions value is handled below. */
-
-        bravalue = OP_BRA;
-        ptr++;
-        }
-      }
-
-    /* If PCRE_NO_AUTO_CAPTURE is set, all unadorned brackets become
-    non-capturing and behave like (?:...) brackets */
-
-    else if ((options & PCRE_NO_AUTO_CAPTURE) != 0)
-      {
-      bravalue = OP_BRA;
-      }
-
-    /* Else we have a referencing group; adjust the opcode. If the bracket
-    number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
-    arrange for the true number to follow later, in an OP_BRANUMBER item. */
-
-    else
-      {
-      NUMBERED_GROUP:
-      if (++(*brackets) > EXTRACT_BASIC_MAX)
-        {
-        bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
-        code[1+LINK_SIZE] = OP_BRANUMBER;
-        PUT2(code, 2+LINK_SIZE, *brackets);
-        skipbytes = 3;
-        }
-      else bravalue = OP_BRA + *brackets;
-      }
-
-    /* Process nested bracketed re. Assertions may not be repeated, but other
-    kinds can be. We copy code into a non-register variable in order to be able
-    to pass its address because some compilers complain otherwise. Pass in a
-    new setting for the ims options if they have changed. */
-
-    previous = (bravalue >= OP_ONCE)? code : NULL;
-    *code = bravalue;
-    tempcode = code;
-    tempreqvary = cd->req_varyopt;     /* Save value before bracket */
-
-    if (!compile_regex(
-         newoptions,                   /* The complete new option state */
-         options & PCRE_IMS,           /* The previous ims option state */
-         brackets,                     /* Extracting bracket count */
-         &tempcode,                    /* Where to put code (updated) */
-         &ptr,                         /* Input pointer (updated) */
-         errorptr,                     /* Where to put an error message */
-         (bravalue == OP_ASSERTBACK ||
-          bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
-         skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
-         &subfirstbyte,                /* For possible first char */
-         &subreqbyte,                  /* For possible last char */
-         bcptr,                        /* Current branch chain */
-         cd))                          /* Tables block */
-      goto FAILED;
-
-    /* At the end of compiling, code is still pointing to the start of the
-    group, while tempcode has been updated to point past the end of the group
-    and any option resetting that may follow it. The pattern pointer (ptr)
-    is on the bracket. */
-
-    /* If this is a conditional bracket, check that there are no more than
-    two branches in the group. */
-
-    else if (bravalue == OP_COND)
-      {
-      uschar *tc = code;
-      condcount = 0;
-
-      do {
-         condcount++;
-         tc += GET(tc,1);
-         }
-      while (*tc != OP_KET);
-
-      if (condcount > 2)
-        {
-        *errorptr = ERR27;
-        goto FAILED;
-        }
-
-      /* If there is just one branch, we must not make use of its firstbyte or
-      reqbyte, because this is equivalent to an empty second branch. */
-
-      if (condcount == 1) subfirstbyte = subreqbyte = REQ_NONE;
-      }
-
-    /* Handle updating of the required and first characters. Update for normal
-    brackets of all kinds, and conditions with two branches (see code above).
-    If the bracket is followed by a quantifier with zero repeat, we have to
-    back off. Hence the definition of zeroreqbyte and zerofirstbyte outside the
-    main loop so that they can be accessed for the back off. */
-
-    zeroreqbyte = reqbyte;
-    zerofirstbyte = firstbyte;
-    groupsetfirstbyte = FALSE;
-
-    if (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_COND)
-      {
-      /* If we have not yet set a firstbyte in this branch, take it from the
-      subpattern, remembering that it was set here so that a repeat of more
-      than one can replicate it as reqbyte if necessary. If the subpattern has
-      no firstbyte, set "none" for the whole branch. In both cases, a zero
-      repeat forces firstbyte to "none". */
-
-      if (firstbyte == REQ_UNSET)
-        {
-        if (subfirstbyte >= 0)
-          {
-          firstbyte = subfirstbyte;
-          groupsetfirstbyte = TRUE;
-          }
-        else firstbyte = REQ_NONE;
-        zerofirstbyte = REQ_NONE;
-        }
-
-      /* If firstbyte was previously set, convert the subpattern's firstbyte
-      into reqbyte if there wasn't one, using the vary flag that was in
-      existence beforehand. */
-
-      else if (subfirstbyte >= 0 && subreqbyte < 0)
-        subreqbyte = subfirstbyte | tempreqvary;
-
-      /* If the subpattern set a required byte (or set a first byte that isn't
-      really the first byte - see above), set it. */
-
-      if (subreqbyte >= 0) reqbyte = subreqbyte;
-      }
-
-    /* For a forward assertion, we take the reqbyte, if set. This can be
-    helpful if the pattern that follows the assertion doesn't set a different
-    char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte
-    for an assertion, however because it leads to incorrect effect for patterns
-    such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead
-    of a firstbyte. This is overcome by a scan at the end if there's no
-    firstbyte, looking for an asserted first char. */
-
-    else if (bravalue == OP_ASSERT && subreqbyte >= 0) reqbyte = subreqbyte;
-
-    /* Now update the main code pointer to the end of the group. */
-
-    code = tempcode;
-
-    /* Error if hit end of pattern */
-
-    if (*ptr != ')')
-      {
-      *errorptr = ERR14;
-      goto FAILED;
-      }
-    break;
-
-    /* Check \ for being a real metacharacter; if not, fall through and handle
-    it as a data character at the start of a string. Escape items are checked
-    for validity in the pre-compiling pass. */
-
-    case '\\':
-    tempptr = ptr;
-    c = check_escape(&ptr, errorptr, *brackets, options, FALSE);
-
-    /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
-    are arranged to be the negation of the corresponding OP_values. For the
-    back references, the values are ESC_REF plus the reference number. Only
-    back references and those types that consume a character may be repeated.
-    We can test for values between ESC_b and ESC_Z for the latter; this may
-    have to change if any new ones are ever created. */
-
-    if (c < 0)
-      {
-      if (-c == ESC_Q)            /* Handle start of quoted string */
-        {
-        if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */
-          else inescq = TRUE;
-        continue;
-        }
-
-      /* For metasequences that actually match a character, we disable the
-      setting of a first character if it hasn't already been set. */
-
-      if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z)
-        firstbyte = REQ_NONE;
-
-      /* Set values to reset to if this is followed by a zero repeat. */
-
-      zerofirstbyte = firstbyte;
-      zeroreqbyte = reqbyte;
-
-      /* Back references are handled specially */
-
-      if (-c >= ESC_REF)
-        {
-        int number = -c - ESC_REF;
-        previous = code;
-        *code++ = OP_REF;
-        PUT2INC(code, 0, number);
-        }
-
-      /* So are Unicode property matches, if supported. We know that get_ucp
-      won't fail because it was tested in the pre-pass. */
-
-#ifdef SUPPORT_UCP
-      else if (-c == ESC_P || -c == ESC_p)
-        {
-        BOOL negated;
-        int value = get_ucp(&ptr, &negated, errorptr);
-        previous = code;
-        *code++ = ((-c == ESC_p) != negated)? OP_PROP : OP_NOTPROP;
-        *code++ = value;
-        }
-#endif
-
-      /* For the rest, we can obtain the OP value by negating the escape
-      value */
-
-      else
-        {
-        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
-        *code++ = -c;
-        }
-      continue;
-      }
-
-    /* We have a data character whose value is in c. In UTF-8 mode it may have
-    a value > 127. We set its representation in the length/buffer, and then
-    handle it as a data character. */
-
-#ifdef SUPPORT_UTF8
-    if (utf8 && c > 127)
-      mclength = ord2utf8(c, mcbuffer);
-    else
-#endif
-
-     {
-     mcbuffer[0] = c;
-     mclength = 1;
-     }
-
-    goto ONE_CHAR;
-
-    /* Handle a literal character. It is guaranteed not to be whitespace or #
-    when the extended flag is set. If we are in UTF-8 mode, it may be a
-    multi-byte literal character. */
-
-    default:
-    NORMAL_CHAR:
-    mclength = 1;
-    mcbuffer[0] = c;
-
-#ifdef SUPPORT_UTF8
-    if (utf8 && (c & 0xc0) == 0xc0)
-      {
-      while ((ptr[1] & 0xc0) == 0x80)
-        mcbuffer[mclength++] = *(++ptr);
-      }
-#endif
-
-    /* At this point we have the character's bytes in mcbuffer, and the length
-    in mclength. When not in UTF-8 mode, the length is always 1. */
-
-    ONE_CHAR:
-    previous = code;
-    *code++ = ((options & PCRE_CASELESS) != 0)? OP_CHARNC : OP_CHAR;
-    for (c = 0; c < mclength; c++) *code++ = mcbuffer[c];
-
-    /* Set the first and required bytes appropriately. If no previous first
-    byte, set it from this character, but revert to none on a zero repeat.
-    Otherwise, leave the firstbyte value alone, and don't change it on a zero
-    repeat. */
-
-    if (firstbyte == REQ_UNSET)
-      {
-      zerofirstbyte = REQ_NONE;
-      zeroreqbyte = reqbyte;
-
-      /* If the character is more than one byte long, we can set firstbyte
-      only if it is not to be matched caselessly. */
-
-      if (mclength == 1 || req_caseopt == 0)
-        {
-        firstbyte = mcbuffer[0] | req_caseopt;
-        if (mclength != 1) reqbyte = code[-1] | cd->req_varyopt;
-        }
-      else firstbyte = reqbyte = REQ_NONE;
-      }
-
-    /* firstbyte was previously set; we can set reqbyte only the length is
-    1 or the matching is caseful. */
-
-    else
-      {
-      zerofirstbyte = firstbyte;
-      zeroreqbyte = reqbyte;
-      if (mclength == 1 || req_caseopt == 0)
-        reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
-      }
-
-    break;            /* End of literal character handling */
-    }
-  }                   /* end of big loop */
-
-/* Control never reaches here by falling through, only by a goto for all the
-error states. Pass back the position in the pattern so that it can be displayed
-to the user for diagnosing the error. */
-
-FAILED:
-*ptrptr = ptr;
-return FALSE;
-}
-
-
-
-
-/*************************************************
-*     Compile sequence of alternatives           *
-*************************************************/
-
-/* On entry, ptr is pointing past the bracket character, but on return
-it points to the closing bracket, or vertical bar, or end of string.
-The code variable is pointing at the byte into which the BRA operator has been
-stored. If the ims options are changed at the start (for a (?ims: group) or
-during any branch, we need to insert an OP_OPT item at the start of every
-following branch to ensure they get set correctly at run time, and also pass
-the new options into every subsequent branch compile.
-
-Argument:
-  options        option bits, including any changes for this subpattern
-  oldims         previous settings of ims option bits
-  brackets       -> int containing the number of extracting brackets used
-  codeptr        -> the address of the current code pointer
-  ptrptr         -> the address of the current pattern pointer
-  errorptr       -> pointer to error message
-  lookbehind     TRUE if this is a lookbehind assertion
-  skipbytes      skip this many bytes at start (for OP_COND, OP_BRANUMBER)
-  firstbyteptr   place to put the first required character, or a negative number
-  reqbyteptr     place to put the last required character, or a negative number
-  bcptr          pointer to the chain of currently open branches
-  cd             points to the data block with tables pointers etc.
-
-Returns:      TRUE on success
-*/
-
-static BOOL
-compile_regex(int options, int oldims, int *brackets, uschar **codeptr,
-  const uschar **ptrptr, const char **errorptr, BOOL lookbehind, int skipbytes,
-  int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
-{
-const uschar *ptr = *ptrptr;
-uschar *code = *codeptr;
-uschar *last_branch = code;
-uschar *start_bracket = code;
-uschar *reverse_count = NULL;
-int firstbyte, reqbyte;
-int branchfirstbyte, branchreqbyte;
-branch_chain bc;
-
-bc.outer = bcptr;
-bc.current = code;
-
-firstbyte = reqbyte = REQ_UNSET;
-
-/* Offset is set zero to mark that this bracket is still open */
-
-PUT(code, 1, 0);
-code += 1 + LINK_SIZE + skipbytes;
-
-/* Loop for each alternative branch */
-
-for (;;)
-  {
-  /* Handle a change of ims options at the start of the branch */
-
-  if ((options & PCRE_IMS) != oldims)
-    {
-    *code++ = OP_OPT;
-    *code++ = options & PCRE_IMS;
-    }
-
-  /* Set up dummy OP_REVERSE if lookbehind assertion */
-
-  if (lookbehind)
-    {
-    *code++ = OP_REVERSE;
-    reverse_count = code;
-    PUTINC(code, 0, 0);
-    }
-
-  /* Now compile the branch */
-
-  if (!compile_branch(&options, brackets, &code, &ptr, errorptr,
-        &branchfirstbyte, &branchreqbyte, &bc, cd))
-    {
-    *ptrptr = ptr;
-    return FALSE;
-    }
-
-  /* If this is the first branch, the firstbyte and reqbyte values for the
-  branch become the values for the regex. */
-
-  if (*last_branch != OP_ALT)
-    {
-    firstbyte = branchfirstbyte;
-    reqbyte = branchreqbyte;
-    }
-
-  /* If this is not the first branch, the first char and reqbyte have to
-  match the values from all the previous branches, except that if the previous
-  value for reqbyte didn't have REQ_VARY set, it can still match, and we set
-  REQ_VARY for the regex. */
-
-  else
-    {
-    /* If we previously had a firstbyte, but it doesn't match the new branch,
-    we have to abandon the firstbyte for the regex, but if there was previously
-    no reqbyte, it takes on the value of the old firstbyte. */
-
-    if (firstbyte >= 0 && firstbyte != branchfirstbyte)
-      {
-      if (reqbyte < 0) reqbyte = firstbyte;
-      firstbyte = REQ_NONE;
-      }
-
-    /* If we (now or from before) have no firstbyte, a firstbyte from the
-    branch becomes a reqbyte if there isn't a branch reqbyte. */
-
-    if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0)
-        branchreqbyte = branchfirstbyte;
-
-    /* Now ensure that the reqbytes match */
-
-    if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY))
-      reqbyte = REQ_NONE;
-    else reqbyte |= branchreqbyte;   /* To "or" REQ_VARY */
-    }
-
-  /* If lookbehind, check that this branch matches a fixed-length string,
-  and put the length into the OP_REVERSE item. Temporarily mark the end of
-  the branch with OP_END. */
-
-  if (lookbehind)
-    {
-    int length;
-    *code = OP_END;
-    length = find_fixedlength(last_branch, options);
-    DPRINTF(("fixed length = %d\n", length));
-    if (length < 0)
-      {
-      *errorptr = (length == -2)? ERR36 : ERR25;
-      *ptrptr = ptr;
-      return FALSE;
-      }
-    PUT(reverse_count, 0, length);
-    }
-
-  /* Reached end of expression, either ')' or end of pattern. Go back through
-  the alternative branches and reverse the chain of offsets, with the field in
-  the BRA item now becoming an offset to the first alternative. If there are
-  no alternatives, it points to the end of the group. The length in the
-  terminating ket is always the length of the whole bracketed item. If any of
-  the ims options were changed inside the group, compile a resetting op-code
-  following, except at the very end of the pattern. Return leaving the pointer
-  at the terminating char. */
-
-  if (*ptr != '|')
-    {
-    int length = code - last_branch;
-    do
-      {
-      int prev_length = GET(last_branch, 1);
-      PUT(last_branch, 1, length);
-      length = prev_length;
-      last_branch -= length;
-      }
-    while (length > 0);
-
-    /* Fill in the ket */
-
-    *code = OP_KET;
-    PUT(code, 1, code - start_bracket);
-    code += 1 + LINK_SIZE;
-
-    /* Resetting option if needed */
-
-    if ((options & PCRE_IMS) != oldims && *ptr == ')')
-      {
-      *code++ = OP_OPT;
-      *code++ = oldims;
-      }
-
-    /* Set values to pass back */
-
-    *codeptr = code;
-    *ptrptr = ptr;
-    *firstbyteptr = firstbyte;
-    *reqbyteptr = reqbyte;
-    return TRUE;
-    }
-
-  /* Another branch follows; insert an "or" node. Its length field points back
-  to the previous branch while the bracket remains open. At the end the chain
-  is reversed. It's done like this so that the start of the bracket has a
-  zero offset until it is closed, making it possible to detect recursion. */
-
-  *code = OP_ALT;
-  PUT(code, 1, code - last_branch);
-  bc.current = last_branch = code;
-  code += 1 + LINK_SIZE;
-  ptr++;
-  }
-/* Control never reaches here */
-}
-
-
-
-
-/*************************************************
-*          Check for anchored expression         *
-*************************************************/
-
-/* Try to find out if this is an anchored regular expression. Consider each
-alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
-all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
-it's anchored. However, if this is a multiline pattern, then only OP_SOD
-counts, since OP_CIRC can match in the middle.
-
-We can also consider a regex to be anchored if OP_SOM starts all its branches.
-This is the code for \G, which means "match at start of match position, taking
-into account the match offset".
-
-A branch is also implicitly anchored if it starts with .* and DOTALL is set,
-because that will try the rest of the pattern at all possible matching points,
-so there is no point trying again.... er ....
-
-.... except when the .* appears inside capturing parentheses, and there is a
-subsequent back reference to those parentheses. We haven't enough information
-to catch that case precisely.
-
-At first, the best we could do was to detect when .* was in capturing brackets
-and the highest back reference was greater than or equal to that level.
-However, by keeping a bitmap of the first 31 back references, we can catch some
-of the more common cases more precisely.
-
-Arguments:
-  code           points to start of expression (the bracket)
-  options        points to the options setting
-  bracket_map    a bitmap of which brackets we are inside while testing; this
-                  handles up to substring 31; after that we just have to take
-                  the less precise approach
-  backref_map    the back reference bitmap
-
-Returns:     TRUE or FALSE
-*/
-
-static BOOL
-is_anchored(register const uschar *code, int *options, unsigned int bracket_map,
-  unsigned int backref_map)
-{
-do {
-   const uschar *scode =
-     first_significant_code(code + 1+LINK_SIZE, options, PCRE_MULTILINE, FALSE);
-   register int op = *scode;
-
-   /* Capturing brackets */
-
-   if (op > OP_BRA)
-     {
-     int new_map;
-     op -= OP_BRA;
-     if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
-     new_map = bracket_map | ((op < 32)? (1 << op) : 1);
-     if (!is_anchored(scode, options, new_map, backref_map)) return FALSE;
-     }
-
-   /* Other brackets */
-
-   else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
-     {
-     if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE;
-     }
-
-   /* .* is not anchored unless DOTALL is set and it isn't in brackets that
-   are or may be referenced. */
-
-   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
-            (*options & PCRE_DOTALL) != 0)
-     {
-     if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
-     }
-
-   /* Check for explicit anchoring */
-
-   else if (op != OP_SOD && op != OP_SOM &&
-           ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
-     return FALSE;
-   code += GET(code, 1);
-   }
-while (*code == OP_ALT);   /* Loop for each alternative */
-return TRUE;
-}
-
-
-
-/*************************************************
-*         Check for starting with ^ or .*        *
-*************************************************/
-
-/* This is called to find out if every branch starts with ^ or .* so that
-"first char" processing can be done to speed things up in multiline
-matching and for non-DOTALL patterns that start with .* (which must start at
-the beginning or after \n). As in the case of is_anchored() (see above), we
-have to take account of back references to capturing brackets that contain .*
-because in that case we can't make the assumption.
-
-Arguments:
-  code           points to start of expression (the bracket)
-  bracket_map    a bitmap of which brackets we are inside while testing; this
-                  handles up to substring 31; after that we just have to take
-                  the less precise approach
-  backref_map    the back reference bitmap
-
-Returns:         TRUE or FALSE
-*/
-
-static BOOL
-is_startline(const uschar *code, unsigned int bracket_map,
-  unsigned int backref_map)
-{
-do {
-   const uschar *scode = first_significant_code(code + 1+LINK_SIZE, NULL, 0,
-     FALSE);
-   register int op = *scode;
-
-   /* Capturing brackets */
-
-   if (op > OP_BRA)
-     {
-     int new_map;
-     op -= OP_BRA;
-     if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
-     new_map = bracket_map | ((op < 32)? (1 << op) : 1);
-     if (!is_startline(scode, new_map, backref_map)) return FALSE;
-     }
-
-   /* Other brackets */
-
-   else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
-     { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; }
-
-   /* .* means "start at start or after \n" if it isn't in brackets that
-   may be referenced. */
-
-   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
-     {
-     if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
-     }
-
-   /* Check for explicit circumflex */
-
-   else if (op != OP_CIRC) return FALSE;
-
-   /* Move on to the next alternative */
-
-   code += GET(code, 1);
-   }
-while (*code == OP_ALT);  /* Loop for each alternative */
-return TRUE;
-}
-
-
-
-/*************************************************
-*       Check for asserted fixed first char      *
-*************************************************/
-
-/* During compilation, the "first char" settings from forward assertions are
-discarded, because they can cause conflicts with actual literals that follow.
-However, if we end up without a first char setting for an unanchored pattern,
-it is worth scanning the regex to see if there is an initial asserted first
-char. If all branches start with the same asserted char, or with a bracket all
-of whose alternatives start with the same asserted char (recurse ad lib), then
-we return that char, otherwise -1.
-
-Arguments:
-  code       points to start of expression (the bracket)
-  options    pointer to the options (used to check casing changes)
-  inassert   TRUE if in an assertion
-
-Returns:     -1 or the fixed first char
-*/
-
-static int
-find_firstassertedchar(const uschar *code, int *options, BOOL inassert)
-{
-register int c = -1;
-do {
-   int d;
-   const uschar *scode =
-     first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS, TRUE);
-   register int op = *scode;
-
-   if (op >= OP_BRA) op = OP_BRA;
-
-   switch(op)
-     {
-     default:
-     return -1;
-
-     case OP_BRA:
-     case OP_ASSERT:
-     case OP_ONCE:
-     case OP_COND:
-     if ((d = find_firstassertedchar(scode, options, op == OP_ASSERT)) < 0)
-       return -1;
-     if (c < 0) c = d; else if (c != d) return -1;
-     break;
-
-     case OP_EXACT:       /* Fall through */
-     scode += 2;
-
-     case OP_CHAR:
-     case OP_CHARNC:
-     case OP_PLUS:
-     case OP_MINPLUS:
-     if (!inassert) return -1;
-     if (c < 0)
-       {
-       c = scode[1];
-       if ((*options & PCRE_CASELESS) != 0) c |= REQ_CASELESS;
-       }
-     else if (c != scode[1]) return -1;
-     break;
-     }
-
-   code += GET(code, 1);
-   }
-while (*code == OP_ALT);
-return c;
-}
-
-
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-*         Validate a UTF-8 string                *
-*************************************************/
-
-/* This function is called (optionally) at the start of compile or match, to
-validate that a supposed UTF-8 string is actually valid. The early check means
-that subsequent code can assume it is dealing with a valid string. The check
-can be turned off for maximum performance, but then consequences of supplying
-an invalid string are then undefined.
-
-Arguments:
-  string       points to the string
-  length       length of string, or -1 if the string is zero-terminated
-
-Returns:       < 0    if the string is a valid UTF-8 string
-               >= 0   otherwise; the value is the offset of the bad byte
-*/
-
-static int
-valid_utf8(const uschar *string, int length)
-{
-register const uschar *p;
-
-if (length < 0)
-  {
-  for (p = string; *p != 0; p++);
-  length = p - string;
-  }
-
-for (p = string; length-- > 0; p++)
-  {
-  register int ab;
-  register int c = *p;
-  if (c < 128) continue;
-  if ((c & 0xc0) != 0xc0) return p - string;
-  ab = utf8_table4[c & 0x3f];  /* Number of additional bytes */
-  if (length < ab) return p - string;
-  length -= ab;
-
-  /* Check top bits in the second byte */
-  if ((*(++p) & 0xc0) != 0x80) return p - string;
-
-  /* Check for overlong sequences for each different length */
-  switch (ab)
-    {
-    /* Check for xx00 000x */
-    case 1:
-    if ((c & 0x3e) == 0) return p - string;
-    continue;   /* We know there aren't any more bytes to check */
-
-    /* Check for 1110 0000, xx0x xxxx */
-    case 2:
-    if (c == 0xe0 && (*p & 0x20) == 0) return p - string;
-    break;
-
-    /* Check for 1111 0000, xx00 xxxx */
-    case 3:
-    if (c == 0xf0 && (*p & 0x30) == 0) return p - string;
-    break;
-
-    /* Check for 1111 1000, xx00 0xxx */
-    case 4:
-    if (c == 0xf8 && (*p & 0x38) == 0) return p - string;
-    break;
-
-    /* Check for leading 0xfe or 0xff, and then for 1111 1100, xx00 00xx */
-    case 5:
-    if (c == 0xfe || c == 0xff ||
-       (c == 0xfc && (*p & 0x3c) == 0)) return p - string;
-    break;
-    }
-
-  /* Check for valid bytes after the 2nd, if any; all must start 10 */
-  while (--ab > 0)
-    {
-    if ((*(++p) & 0xc0) != 0x80) return p - string;
-    }
-  }
-
-return -1;
-}
-#endif
-
-
-
-/*************************************************
-*        Compile a Regular Expression            *
-*************************************************/
-
-/* This function takes a string and returns a pointer to a block of store
-holding a compiled version of the expression.
-
-Arguments:
-  pattern      the regular expression
-  options      various option bits
-  errorptr     pointer to pointer to error text
-  erroroffset  ptr offset in pattern where error was detected
-  tables       pointer to character tables or NULL
-
-Returns:       pointer to compiled data block, or NULL on error,
-               with errorptr and erroroffset set
-*/
-
-EXPORT pcre *
-pcre_compile(const char *pattern, int options, const char **errorptr,
-  int *erroroffset, const unsigned char *tables)
-{
-real_pcre *re;
-int length = 1 + LINK_SIZE;      /* For initial BRA plus length */
-int runlength;
-int c, firstbyte, reqbyte;
-int bracount = 0;
-int branch_extra = 0;
-int branch_newextra;
-int item_count = -1;
-int name_count = 0;
-int max_name_size = 0;
-int lastitemlength = 0;
-#ifdef SUPPORT_UTF8
-BOOL utf8;
-BOOL class_utf8;
-#endif
-BOOL inescq = FALSE;
-unsigned int brastackptr = 0;
-size_t size;
-uschar *code;
-const uschar *codestart;
-const uschar *ptr;
-compile_data compile_block;
-int brastack[BRASTACK_SIZE];
-uschar bralenstack[BRASTACK_SIZE];
-
-/* We can't pass back an error message if errorptr is NULL; I guess the best we
-can do is just return NULL. */
-
-if (errorptr == NULL) return NULL;
-*errorptr = NULL;
-
-/* However, we can give a message for this error */
-
-if (erroroffset == NULL)
-  {
-  *errorptr = ERR16;
-  return NULL;
-  }
-*erroroffset = 0;
-
-/* Can't support UTF8 unless PCRE has been compiled to include the code. */
-
-#ifdef SUPPORT_UTF8
-utf8 = (options & PCRE_UTF8) != 0;
-if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 &&
-     (*erroroffset = valid_utf8((uschar *)pattern, -1)) >= 0)
-  {
-  *errorptr = ERR44;
-  return NULL;
-  }
-#else
-if ((options & PCRE_UTF8) != 0)
-  {
-  *errorptr = ERR32;
-  return NULL;
-  }
-#endif
-
-if ((options & ~PUBLIC_OPTIONS) != 0)
-  {
-  *errorptr = ERR17;
-  return NULL;
-  }
-
-/* Set up pointers to the individual character tables */
-
-if (tables == NULL) tables = pcre_default_tables;
-compile_block.lcc = tables + lcc_offset;
-compile_block.fcc = tables + fcc_offset;
-compile_block.cbits = tables + cbits_offset;
-compile_block.ctypes = tables + ctypes_offset;
-
-/* Maximum back reference and backref bitmap. This is updated for numeric
-references during the first pass, but for named references during the actual
-compile pass. The bitmap records up to 31 back references to help in deciding
-whether (.*) can be treated as anchored or not. */
-
-compile_block.top_backref = 0;
-compile_block.backref_map = 0;
-
-/* Reflect pattern for debugging output */
-
-DPRINTF(("------------------------------------------------------------------\n"));
-DPRINTF(("%s\n", pattern));
-
-/* The first thing to do is to make a pass over the pattern to compute the
-amount of store required to hold the compiled code. This does not have to be
-perfect as long as errors are overestimates. At the same time we can detect any
-flag settings right at the start, and extract them. Make an attempt to correct
-for any counted white space if an "extended" flag setting appears late in the
-pattern. We can't be so clever for #-comments. */
-
-ptr = (const uschar *)(pattern - 1);
-while ((c = *(++ptr)) != 0)
-  {
-  int min, max;
-  int class_optcount;
-  int bracket_length;
-  int duplength;
-
-  /* If we are inside a \Q...\E sequence, all chars are literal */
-
-  if (inescq)
-    {
-    if ((options & PCRE_AUTO_CALLOUT) != 0) length += 2 + 2*LINK_SIZE;
-    goto NORMAL_CHAR;
-    }
-
-  /* Otherwise, first check for ignored whitespace and comments */
-
-  if ((options & PCRE_EXTENDED) != 0)
-    {
-    if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
-    if (c == '#')
-      {
-      /* The space before the ; is to avoid a warning on a silly compiler
-      on the Macintosh. */
-      while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
-      if (c == 0) break;
-      continue;
-      }
-    }
-
-  item_count++;    /* Is zero for the first non-comment item */
-
-  /* Allow space for auto callout before every item except quantifiers. */
-
-  if ((options & PCRE_AUTO_CALLOUT) != 0 &&
-       c != '*' && c != '+' && c != '?' &&
-       (c != '{' || !is_counted_repeat(ptr + 1)))
-    length += 2 + 2*LINK_SIZE;
-
-  switch(c)
-    {
-    /* A backslashed item may be an escaped data character or it may be a
-    character type. */
-
-    case '\\':
-    c = check_escape(&ptr, errorptr, bracount, options, FALSE);
-    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-
-    lastitemlength = 1;     /* Default length of last item for repeats */
-
-    if (c >= 0)             /* Data character */
-      {
-      length += 2;          /* For a one-byte character */
-
-#ifdef SUPPORT_UTF8
-      if (utf8 && c > 127)
-        {
-        int i;
-        for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
-          if (c <= utf8_table1[i]) break;
-        length += i;
-        lastitemlength += i;
-        }
-#endif
-
-      continue;
-      }
-
-    /* If \Q, enter "literal" mode */
-
-    if (-c == ESC_Q)
-      {
-      inescq = TRUE;
-      continue;
-      }
-
-    /* \X is supported only if Unicode property support is compiled */
-
-#ifndef SUPPORT_UCP
-    if (-c == ESC_X)
-      {
-      *errorptr = ERR45;
-      goto PCRE_ERROR_RETURN;
-      }
-#endif
-
-    /* \P and \p are for Unicode properties, but only when the support has
-    been compiled. Each item needs 2 bytes. */
-
-    else if (-c == ESC_P || -c == ESC_p)
-      {
-#ifdef SUPPORT_UCP
-      BOOL negated;
-      length += 2;
-      lastitemlength = 2;
-      if (get_ucp(&ptr, &negated, errorptr) < 0) goto PCRE_ERROR_RETURN;
-      continue;
-#else
-      *errorptr = ERR45;
-      goto PCRE_ERROR_RETURN;
-#endif
-      }
-
-    /* Other escapes need one byte */
-
-    length++;
-
-    /* A back reference needs an additional 2 bytes, plus either one or 5
-    bytes for a repeat. We also need to keep the value of the highest
-    back reference. */
-
-    if (c <= -ESC_REF)
-      {
-      int refnum = -c - ESC_REF;
-      compile_block.backref_map |= (refnum < 32)? (1 << refnum) : 1;
-      if (refnum > compile_block.top_backref)
-        compile_block.top_backref = refnum;
-      length += 2;   /* For single back reference */
-      if (ptr[1] == '{' && is_counted_repeat(ptr+2))
-        {
-        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        if ((min == 0 && (max == 1 || max == -1)) ||
-          (min == 1 && max == -1))
-            length++;
-        else length += 5;
-        if (ptr[1] == '?') ptr++;
-        }
-      }
-    continue;
-
-    case '^':     /* Single-byte metacharacters */
-    case '.':
-    case '$':
-    length++;
-    lastitemlength = 1;
-    continue;
-
-    case '*':            /* These repeats won't be after brackets; */
-    case '+':            /* those are handled separately */
-    case '?':
-    length++;
-    goto POSESSIVE;      /* A few lines below */
-
-    /* This covers the cases of braced repeats after a single char, metachar,
-    class, or back reference. */
-
-    case '{':
-    if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR;
-    ptr = read_repeat_counts(ptr+1, &min, &max, errorptr);
-    if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-
-    /* These special cases just insert one extra opcode */
-
-    if ((min == 0 && (max == 1 || max == -1)) ||
-      (min == 1 && max == -1))
-        length++;
-
-    /* These cases might insert additional copies of a preceding character. */
-
-    else
-      {
-      if (min != 1)
-        {
-        length -= lastitemlength;   /* Uncount the original char or metachar */
-        if (min > 0) length += 3 + lastitemlength;
-        }
-      length += lastitemlength + ((max > 0)? 3 : 1);
-      }
-
-    if (ptr[1] == '?') ptr++;      /* Needs no extra length */
-
-    POSESSIVE:                     /* Test for possessive quantifier */
-    if (ptr[1] == '+')
-      {
-      ptr++;
-      length += 2 + 2*LINK_SIZE;   /* Allow for atomic brackets */
-      }
-    continue;
-
-    /* An alternation contains an offset to the next branch or ket. If any ims
-    options changed in the previous branch(es), and/or if we are in a
-    lookbehind assertion, extra space will be needed at the start of the
-    branch. This is handled by branch_extra. */
-
-    case '|':
-    length += 1 + LINK_SIZE + branch_extra;
-    continue;
-
-    /* A character class uses 33 characters provided that all the character
-    values are less than 256. Otherwise, it uses a bit map for low valued
-    characters, and individual items for others. Don't worry about character
-    types that aren't allowed in classes - they'll get picked up during the
-    compile. A character class that contains only one single-byte character
-    uses 2 or 3 bytes, depending on whether it is negated or not. Notice this
-    where we can. (In UTF-8 mode we can do this only for chars < 128.) */
-
-    case '[':
-    if (*(++ptr) == '^')
-      {
-      class_optcount = 10;  /* Greater than one */
-      ptr++;
-      }
-    else class_optcount = 0;
-
-#ifdef SUPPORT_UTF8
-    class_utf8 = FALSE;
-#endif
-
-    /* Written as a "do" so that an initial ']' is taken as data */
-
-    if (*ptr != 0) do
-      {
-      /* Inside \Q...\E everything is literal except \E */
-
-      if (inescq)
-        {
-        if (*ptr != '\\' || ptr[1] != 'E') goto GET_ONE_CHARACTER;
-        inescq = FALSE;
-        ptr += 1;
-        continue;
-        }
-
-      /* Outside \Q...\E, check for escapes */
-
-      if (*ptr == '\\')
-        {
-        c = check_escape(&ptr, errorptr, bracount, options, TRUE);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-
-        /* \b is backspace inside a class; \X is literal */
-
-        if (-c == ESC_b) c = '\b';
-        else if (-c == ESC_X) c = 'X';
-
-        /* \Q enters quoting mode */
-
-        else if (-c == ESC_Q)
-          {
-          inescq = TRUE;
-          continue;
-          }
-
-        /* Handle escapes that turn into characters */
-
-        if (c >= 0) goto NON_SPECIAL_CHARACTER;
-
-        /* Escapes that are meta-things. The normal ones just affect the
-        bit map, but Unicode properties require an XCLASS extended item. */
-
-        else
-          {
-          class_optcount = 10;         /* \d, \s etc; make sure > 1 */
-#ifdef SUPPORT_UTF8
-          if (-c == ESC_p || -c == ESC_P)
-            {
-            if (!class_utf8)
-              {
-              class_utf8 = TRUE;
-              length += LINK_SIZE + 2;
-              }
-            length += 2;
-            }
-#endif
-          }
-        }
-
-      /* Check the syntax for POSIX stuff. The bits we actually handle are
-      checked during the real compile phase. */
-
-      else if (*ptr == '[' && check_posix_syntax(ptr, &ptr, &compile_block))
-        {
-        ptr++;
-        class_optcount = 10;    /* Make sure > 1 */
-        }
-
-      /* Anything else increments the possible optimization count. We have to
-      detect ranges here so that we can compute the number of extra ranges for
-      caseless wide characters when UCP support is available. If there are wide
-      characters, we are going to have to use an XCLASS, even for single
-      characters. */
-
-      else
-        {
-        int d;
-
-        GET_ONE_CHARACTER:
-
-#ifdef SUPPORT_UTF8
-        if (utf8)
-          {
-          int extra = 0;
-          GETCHARLEN(c, ptr, extra);
-          ptr += extra;
-          }
-        else c = *ptr;
-#else
-        c = *ptr;
-#endif
-
-        /* Come here from handling \ above when it escapes to a char value */
-
-        NON_SPECIAL_CHARACTER:
-        class_optcount++;
-
-        d = -1;
-        if (ptr[1] == '-')
-          {
-          uschar const *hyptr = ptr++;
-          if (ptr[1] == '\\')
-            {
-            ptr++;
-            d = check_escape(&ptr, errorptr, bracount, options, TRUE);
-            if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-            if (-d == ESC_b) d = '\b';        /* backspace */
-            else if (-d == ESC_X) d = 'X';    /* literal X in a class */
-            }
-          else if (ptr[1] != 0 && ptr[1] != ']')
-            {
-            ptr++;
-#ifdef SUPPORT_UTF8
-            if (utf8)
-              {
-              int extra = 0;
-              GETCHARLEN(d, ptr, extra);
-              ptr += extra;
-              }
-            else
-#endif
-            d = *ptr;
-            }
-          if (d < 0) ptr = hyptr;      /* go back to hyphen as data */
-          }
-
-        /* If d >= 0 we have a range. In UTF-8 mode, if the end is > 255, or >
-        127 for caseless matching, we will need to use an XCLASS. */
-
-        if (d >= 0)
-          {
-          class_optcount = 10;     /* Ensure > 1 */
-          if (d < c)
-            {
-            *errorptr = ERR8;
-            goto PCRE_ERROR_RETURN;
-            }
-
-#ifdef SUPPORT_UTF8
-          if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
-            {
-            uschar buffer[6];
-            if (!class_utf8)         /* Allow for XCLASS overhead */
-              {
-              class_utf8 = TRUE;
-              length += LINK_SIZE + 2;
-              }
-
-#ifdef SUPPORT_UCP
-            /* If we have UCP support, find out how many extra ranges are
-            needed to map the other case of characters within this range. We
-            have to mimic the range optimization here, because extending the
-            range upwards might push d over a boundary that makes is use
-            another byte in the UTF-8 representation. */
-
-            if ((options & PCRE_CASELESS) != 0)
-              {
-              int occ, ocd;
-              int cc = c;
-              int origd = d;
-              while (get_othercase_range(&cc, origd, &occ, &ocd))
-                {
-                if (occ >= c && ocd <= d) continue;   /* Skip embedded */
-
-                if (occ < c  && ocd >= c - 1)  /* Extend the basic range */
-                  {                            /* if there is overlap,   */
-                  c = occ;                     /* noting that if occ < c */
-                  continue;                    /* we can't have ocd > d  */
-                  }                            /* because a subrange is  */
-                if (ocd > d && occ <= d + 1)   /* always shorter than    */
-                  {                            /* the basic range.       */
-                  d = ocd;
-                  continue;
-                  }
-
-                /* An extra item is needed */
-
-                length += 1 + ord2utf8(occ, buffer) +
-                  ((occ == ocd)? 0 : ord2utf8(ocd, buffer));
-                }
-              }
-#endif  /* SUPPORT_UCP */
-
-            /* The length of the (possibly extended) range */
-
-            length += 1 + ord2utf8(c, buffer) + ord2utf8(d, buffer);
-            }
-#endif  /* SUPPORT_UTF8 */
-
-          }
-
-        /* We have a single character. There is nothing to be done unless we
-        are in UTF-8 mode. If the char is > 255, or 127 when caseless, we must
-        allow for an XCL_SINGLE item, doubled for caselessness if there is UCP
-        support. */
-
-        else
-          {
-#ifdef SUPPORT_UTF8
-          if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
-            {
-            uschar buffer[6];
-            class_optcount = 10;     /* Ensure > 1 */
-            if (!class_utf8)         /* Allow for XCLASS overhead */
-              {
-              class_utf8 = TRUE;
-              length += LINK_SIZE + 2;
-              }
-#ifdef SUPPORT_UCP
-            length += (((options & PCRE_CASELESS) != 0)? 2 : 1) *
-              (1 + ord2utf8(c, buffer));
-#else   /* SUPPORT_UCP */
-            length += 1 + ord2utf8(c, buffer);
-#endif  /* SUPPORT_UCP */
-            }
-#endif  /* SUPPORT_UTF8 */
-          }
-        }
-      }
-    while (*(++ptr) != 0 && (inescq || *ptr != ']')); /* Concludes "do" above */
-
-    if (*ptr == 0)                          /* Missing terminating ']' */
-      {
-      *errorptr = ERR6;
-      goto PCRE_ERROR_RETURN;
-      }
-
-    /* We can optimize when there was only one optimizable character. Repeats
-    for positive and negated single one-byte chars are handled by the general
-    code. Here, we handle repeats for the class opcodes. */
-
-    if (class_optcount == 1) length += 3; else
-      {
-      length += 33;
-
-      /* A repeat needs either 1 or 5 bytes. If it is a possessive quantifier,
-      we also need extra for wrapping the whole thing in a sub-pattern. */
-
-      if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2))
-        {
-        ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
-        if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-        if ((min == 0 && (max == 1 || max == -1)) ||
-          (min == 1 && max == -1))
-            length++;
-        else length += 5;
-        if (ptr[1] == '+')
-          {
-          ptr++;
-          length += 2 + 2*LINK_SIZE;
-          }
-        else if (ptr[1] == '?') ptr++;
-        }
-      }
-    continue;
-
-    /* Brackets may be genuine groups or special things */
-
-    case '(':
-    branch_newextra = 0;
-    bracket_length = 1 + LINK_SIZE;
-
-    /* Handle special forms of bracket, which all start (? */
-
-    if (ptr[1] == '?')
-      {
-      int set, unset;
-      int *optset;
-
-      switch (c = ptr[2])
-        {
-        /* Skip over comments entirely */
-        case '#':
-        ptr += 3;
-        while (*ptr != 0 && *ptr != ')') ptr++;
-        if (*ptr == 0)
-          {
-          *errorptr = ERR18;
-          goto PCRE_ERROR_RETURN;
-          }
-        continue;
-
-        /* Non-referencing groups and lookaheads just move the pointer on, and
-        then behave like a non-special bracket, except that they don't increment
-        the count of extracting brackets. Ditto for the "once only" bracket,
-        which is in Perl from version 5.005. */
-
-        case ':':
-        case '=':
-        case '!':
-        case '>':
-        ptr += 2;
-        break;
-
-        /* (?R) specifies a recursive call to the regex, which is an extension
-        to provide the facility which can be obtained by (?p{perl-code}) in
-        Perl 5.6. In Perl 5.8 this has become (??{perl-code}).
-
-        From PCRE 4.00, items such as (?3) specify subroutine-like "calls" to
-        the appropriate numbered brackets. This includes both recursive and
-        non-recursive calls. (?R) is now synonymous with (?0). */
-
-        case 'R':
-        ptr++;
-
-        case '0': case '1': case '2': case '3': case '4':
-        case '5': case '6': case '7': case '8': case '9':
-        ptr += 2;
-        if (c != 'R')
-          while ((digitab[*(++ptr)] & ctype_digit) != 0);
-        if (*ptr != ')')
-          {
-          *errorptr = ERR29;
-          goto PCRE_ERROR_RETURN;
-          }
-        length += 1 + LINK_SIZE;
-
-        /* If this item is quantified, it will get wrapped inside brackets so
-        as to use the code for quantified brackets. We jump down and use the
-        code that handles this for real brackets. */
-
-        if (ptr[1] == '+' || ptr[1] == '*' || ptr[1] == '?' || ptr[1] == '{')
-          {
-          length += 2 + 2 * LINK_SIZE;       /* to make bracketed */
-          duplength = 5 + 3 * LINK_SIZE;
-          goto HANDLE_QUANTIFIED_BRACKETS;
-          }
-        continue;
-
-        /* (?C) is an extension which provides "callout" - to provide a bit of
-        the functionality of the Perl (?{...}) feature. An optional number may
-        follow (default is zero). */
-
-        case 'C':
-        ptr += 2;
-        while ((digitab[*(++ptr)] & ctype_digit) != 0);
-        if (*ptr != ')')
-          {
-          *errorptr = ERR39;
-          goto PCRE_ERROR_RETURN;
-          }
-        length += 2 + 2*LINK_SIZE;
-        continue;
-
-        /* Named subpatterns are an extension copied from Python */
-
-        case 'P':
-        ptr += 3;
-        if (*ptr == '<')
-          {
-          const uschar *p;    /* Don't amalgamate; some compilers */
-          p = ++ptr;          /* grumble at autoincrement in declaration */
-          while ((compile_block.ctypes[*ptr] & ctype_word) != 0) ptr++;
-          if (*ptr != '>')
-            {
-            *errorptr = ERR42;
-            goto PCRE_ERROR_RETURN;
-            }
-          name_count++;
-          if (ptr - p > max_name_size) max_name_size = (ptr - p);
-          break;
-          }
-
-        if (*ptr == '=' || *ptr == '>')
-          {
-          while ((compile_block.ctypes[*(++ptr)] & ctype_word) != 0);
-          if (*ptr != ')')
-            {
-            *errorptr = ERR42;
-            goto PCRE_ERROR_RETURN;
-            }
-          break;
-          }
-
-        /* Unknown character after (?P */
-
-        *errorptr = ERR41;
-        goto PCRE_ERROR_RETURN;
-
-        /* Lookbehinds are in Perl from version 5.005 */
-
-        case '<':
-        ptr += 3;
-        if (*ptr == '=' || *ptr == '!')
-          {
-          branch_newextra = 1 + LINK_SIZE;
-          length += 1 + LINK_SIZE;         /* For the first branch */
-          break;
-          }
-        *errorptr = ERR24;
-        goto PCRE_ERROR_RETURN;
-
-        /* Conditionals are in Perl from version 5.005. The bracket must either
-        be followed by a number (for bracket reference) or by an assertion
-        group, or (a PCRE extension) by 'R' for a recursion test. */
-
-        case '(':
-        if (ptr[3] == 'R' && ptr[4] == ')')
-          {
-          ptr += 4;
-          length += 3;
-          }
-        else if ((digitab[ptr[3]] & ctype_digit) != 0)
-          {
-          ptr += 4;
-          length += 3;
-          while ((digitab[*ptr] & ctype_digit) != 0) ptr++;
-          if (*ptr != ')')
-            {
-            *errorptr = ERR26;
-            goto PCRE_ERROR_RETURN;
-            }
-          }
-        else   /* An assertion must follow */
-          {
-          ptr++;   /* Can treat like ':' as far as spacing is concerned */
-          if (ptr[2] != '?' ||
-             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
-            {
-            ptr += 2;    /* To get right offset in message */
-            *errorptr = ERR28;
-            goto PCRE_ERROR_RETURN;
-            }
-          }
-        break;
-
-        /* Else loop checking valid options until ) is met. Anything else is an
-        error. If we are without any brackets, i.e. at top level, the settings
-        act as if specified in the options, so massage the options immediately.
-        This is for backward compatibility with Perl 5.004. */
-
-        default:
-        set = unset = 0;
-        optset = &set;
-        ptr += 2;
-
-        for (;; ptr++)
-          {
-          c = *ptr;
-          switch (c)
-            {
-            case 'i':
-            *optset |= PCRE_CASELESS;
-            continue;
-
-            case 'm':
-            *optset |= PCRE_MULTILINE;
-            continue;
-
-            case 's':
-            *optset |= PCRE_DOTALL;
-            continue;
-
-            case 'x':
-            *optset |= PCRE_EXTENDED;
-            continue;
-
-            case 'X':
-            *optset |= PCRE_EXTRA;
-            continue;
-
-            case 'U':
-            *optset |= PCRE_UNGREEDY;
-            continue;
-
-            case '-':
-            optset = &unset;
-            continue;
-
-            /* A termination by ')' indicates an options-setting-only item; if
-            this is at the very start of the pattern (indicated by item_count
-            being zero), we use it to set the global options. This is helpful
-            when analyzing the pattern for first characters, etc. Otherwise
-            nothing is done here and it is handled during the compiling
-            process.
-
-            [Historical note: Up to Perl 5.8, options settings at top level
-            were always global settings, wherever they appeared in the pattern.
-            That is, they were equivalent to an external setting. From 5.8
-            onwards, they apply only to what follows (which is what you might
-            expect).] */
-
-            case ')':
-            if (item_count == 0)
-              {
-              options = (options | set) & (~unset);
-              set = unset = 0;     /* To save length */
-              item_count--;        /* To allow for several */
-              }
-
-            /* Fall through */
-
-            /* A termination by ':' indicates the start of a nested group with
-            the given options set. This is again handled at compile time, but
-            we must allow for compiled space if any of the ims options are
-            set. We also have to allow for resetting space at the end of
-            the group, which is why 4 is added to the length and not just 2.
-            If there are several changes of options within the same group, this
-            will lead to an over-estimate on the length, but this shouldn't
-            matter very much. We also have to allow for resetting options at
-            the start of any alternations, which we do by setting
-            branch_newextra to 2. Finally, we record whether the case-dependent
-            flag ever changes within the regex. This is used by the "required
-            character" code. */
-
-            case ':':
-            if (((set|unset) & PCRE_IMS) != 0)
-              {
-              length += 4;
-              branch_newextra = 2;
-              if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
-              }
-            goto END_OPTIONS;
-
-            /* Unrecognized option character */
-
-            default:
-            *errorptr = ERR12;
-            goto PCRE_ERROR_RETURN;
-            }
-          }
-
-        /* If we hit a closing bracket, that's it - this is a freestanding
-        option-setting. We need to ensure that branch_extra is updated if
-        necessary. The only values branch_newextra can have here are 0 or 2.
-        If the value is 2, then branch_extra must either be 2 or 5, depending
-        on whether this is a lookbehind group or not. */
-
-        END_OPTIONS:
-        if (c == ')')
-          {
-          if (branch_newextra == 2 &&
-              (branch_extra == 0 || branch_extra == 1+LINK_SIZE))
-            branch_extra += branch_newextra;
-          continue;
-          }
-
-        /* If options were terminated by ':' control comes here. Fall through
-        to handle the group below. */
-        }
-      }
-
-    /* Extracting brackets must be counted so we can process escapes in a
-    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
-    need an additional 3 bytes of store per extracting bracket. However, if
-    PCRE_NO_AUTO)CAPTURE is set, unadorned brackets become non-capturing, so we
-    must leave the count alone (it will aways be zero). */
-
-    else if ((options & PCRE_NO_AUTO_CAPTURE) == 0)
-      {
-      bracount++;
-      if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
-      }
-
-    /* Save length for computing whole length at end if there's a repeat that
-    requires duplication of the group. Also save the current value of
-    branch_extra, and start the new group with the new value. If non-zero, this
-    will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
-
-    if (brastackptr >= sizeof(brastack)/sizeof(int))
-      {
-      *errorptr = ERR19;
-      goto PCRE_ERROR_RETURN;
-      }
-
-    bralenstack[brastackptr] = branch_extra;
-    branch_extra = branch_newextra;
-
-    brastack[brastackptr++] = length;
-    length += bracket_length;
-    continue;
-
-    /* Handle ket. Look for subsequent max/min; for certain sets of values we
-    have to replicate this bracket up to that many times. If brastackptr is
-    0 this is an unmatched bracket which will generate an error, but take care
-    not to try to access brastack[-1] when computing the length and restoring
-    the branch_extra value. */
-
-    case ')':
-    length += 1 + LINK_SIZE;
-    if (brastackptr > 0)
-      {
-      duplength = length - brastack[--brastackptr];
-      branch_extra = bralenstack[brastackptr];
-      }
-    else duplength = 0;
-
-    /* The following code is also used when a recursion such as (?3) is
-    followed by a quantifier, because in that case, it has to be wrapped inside
-    brackets so that the quantifier works. The value of duplength must be
-    set before arrival. */
-
-    HANDLE_QUANTIFIED_BRACKETS:
-
-    /* Leave ptr at the final char; for read_repeat_counts this happens
-    automatically; for the others we need an increment. */
-
-    if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2))
-      {
-      ptr = read_repeat_counts(ptr+2, &min, &max, errorptr);
-      if (*errorptr != NULL) goto PCRE_ERROR_RETURN;
-      }
-    else if (c == '*') { min = 0; max = -1; ptr++; }
-    else if (c == '+') { min = 1; max = -1; ptr++; }
-    else if (c == '?') { min = 0; max = 1;  ptr++; }
-    else { min = 1; max = 1; }
-
-    /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
-    group, and if the maximum is greater than zero, we have to replicate
-    maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
-    bracket set. */
-
-    if (min == 0)
-      {
-      length++;
-      if (max > 0) length += (max - 1) * (duplength + 3 + 2*LINK_SIZE);
-      }
-
-    /* When the minimum is greater than zero, we have to replicate up to
-    minval-1 times, with no additions required in the copies. Then, if there
-    is a limited maximum we have to replicate up to maxval-1 times allowing
-    for a BRAZERO item before each optional copy and nesting brackets for all
-    but one of the optional copies. */
-
-    else
-      {
-      length += (min - 1) * duplength;
-      if (max > min)   /* Need this test as max=-1 means no limit */
-        length += (max - min) * (duplength + 3 + 2*LINK_SIZE)
-          - (2 + 2*LINK_SIZE);
-      }
-
-    /* Allow space for once brackets for "possessive quantifier" */
-
-    if (ptr[1] == '+')
-      {
-      ptr++;
-      length += 2 + 2*LINK_SIZE;
-      }
-    continue;
-
-    /* Non-special character. It won't be space or # in extended mode, so it is
-    always a genuine character. If we are in a \Q...\E sequence, check for the
-    end; if not, we have a literal. */
-
-    default:
-    NORMAL_CHAR:
-
-    if (inescq && c == '\\' && ptr[1] == 'E')
-      {
-      inescq = FALSE;
-      ptr++;
-      continue;
-      }
-
-    length += 2;          /* For a one-byte character */
-    lastitemlength = 1;   /* Default length of last item for repeats */
-
-    /* In UTF-8 mode, check for additional bytes. */
-
-#ifdef SUPPORT_UTF8
-    if (utf8 && (c & 0xc0) == 0xc0)
-      {
-      while ((ptr[1] & 0xc0) == 0x80)         /* Can't flow over the end */
-        {                                     /* because the end is marked */
-        lastitemlength++;                     /* by a zero byte. */
-        length++;
-        ptr++;
-        }
-      }
-#endif
-
-    continue;
-    }
-  }
-
-length += 2 + LINK_SIZE;    /* For final KET and END */
-
-if ((options & PCRE_AUTO_CALLOUT) != 0)
-  length += 2 + 2*LINK_SIZE;  /* For final callout */
-
-if (length > MAX_PATTERN_SIZE)
-  {
-  *errorptr = ERR20;
-  return NULL;
-  }
-
-/* Compute the size of data block needed and get it, either from malloc or
-externally provided function. */
-
-size = length + sizeof(real_pcre) + name_count * (max_name_size + 3);
-re = (real_pcre *)(pcre_malloc)(size);
-
-if (re == NULL)
-  {
-  *errorptr = ERR21;
-  return NULL;
-  }
-
-/* Put in the magic number, and save the sizes, options, and character table
-pointer. NULL is used for the default character tables. The nullpad field is at
-the end; it's there to help in the case when a regex compiled on a system with
-4-byte pointers is run on another with 8-byte pointers. */
-
-re->magic_number = MAGIC_NUMBER;
-re->size = size;
-re->options = options;
-re->dummy1 = re->dummy2 = 0;
-re->name_table_offset = sizeof(real_pcre);
-re->name_entry_size = max_name_size + 3;
-re->name_count = name_count;
-re->tables = (tables == pcre_default_tables)? NULL : tables;
-re->nullpad = NULL;
-
-/* The starting points of the name/number translation table and of the code are
-passed around in the compile data block. */
-
-compile_block.names_found = 0;
-compile_block.name_entry_size = max_name_size + 3;
-compile_block.name_table = (uschar *)re + re->name_table_offset;
-codestart = compile_block.name_table + re->name_entry_size * re->name_count;
-compile_block.start_code = codestart;
-compile_block.start_pattern = (const uschar *)pattern;
-compile_block.req_varyopt = 0;
-compile_block.nopartial = FALSE;
-
-/* Set up a starting, non-extracting bracket, then compile the expression. On
-error, *errorptr will be set non-NULL, so we don't need to look at the result
-of the function here. */
-
-ptr = (const uschar *)pattern;
-code = (uschar *)codestart;
-*code = OP_BRA;
-bracount = 0;
-(void)compile_regex(options, options & PCRE_IMS, &bracount, &code, &ptr,
-  errorptr, FALSE, 0, &firstbyte, &reqbyte, NULL, &compile_block);
-re->top_bracket = bracount;
-re->top_backref = compile_block.top_backref;
-
-if (compile_block.nopartial) re->options |= PCRE_NOPARTIAL;
-
-/* If not reached end of pattern on success, there's an excess bracket. */
-
-if (*errorptr == NULL && *ptr != 0) *errorptr = ERR22;
-
-/* Fill in the terminating state and check for disastrous overflow, but
-if debugging, leave the test till after things are printed out. */
-
-*code++ = OP_END;
-
-#ifndef DEBUG
-if (code - codestart > length) *errorptr = ERR23;
-#endif
-
-/* Give an error if there's back reference to a non-existent capturing
-subpattern. */
-
-if (re->top_backref > re->top_bracket) *errorptr = ERR15;
-
-/* Failed to compile, or error while post-processing */
-
-if (*errorptr != NULL)
-  {
-  (pcre_free)(re);
-  PCRE_ERROR_RETURN:
-  *erroroffset = ptr - (const uschar *)pattern;
-  return NULL;
-  }
-
-/* If the anchored option was not passed, set the flag if we can determine that
-the pattern is anchored by virtue of ^ characters or \A or anything else (such
-as starting with .* when DOTALL is set).
-
-Otherwise, if we know what the first character has to be, save it, because that
-speeds up unanchored matches no end. If not, see if we can set the
-PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
-start with ^. and also when all branches start with .* for non-DOTALL matches.
-*/
-
-if ((options & PCRE_ANCHORED) == 0)
-  {
-  int temp_options = options;
-  if (is_anchored(codestart, &temp_options, 0, compile_block.backref_map))
-    re->options |= PCRE_ANCHORED;
-  else
-    {
-    if (firstbyte < 0)
-      firstbyte = find_firstassertedchar(codestart, &temp_options, FALSE);
-    if (firstbyte >= 0)   /* Remove caseless flag for non-caseable chars */
-      {
-      int ch = firstbyte & 255;
-      re->first_byte = ((firstbyte & REQ_CASELESS) != 0 &&
-         compile_block.fcc[ch] == ch)? ch : firstbyte;
-      re->options |= PCRE_FIRSTSET;
-      }
-    else if (is_startline(codestart, 0, compile_block.backref_map))
-      re->options |= PCRE_STARTLINE;
-    }
-  }
-
-/* For an anchored pattern, we use the "required byte" only if it follows a
-variable length item in the regex. Remove the caseless flag for non-caseable
-bytes. */
-
-if (reqbyte >= 0 &&
-     ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0))
-  {
-  int ch = reqbyte & 255;
-  re->req_byte = ((reqbyte & REQ_CASELESS) != 0 &&
-    compile_block.fcc[ch] == ch)? (reqbyte & ~REQ_CASELESS) : reqbyte;
-  re->options |= PCRE_REQCHSET;
-  }
-
-/* Print out the compiled data for debugging */
-
-#ifdef DEBUG
-
-printf("Length = %d top_bracket = %d top_backref = %d\n",
-  length, re->top_bracket, re->top_backref);
-
-if (re->options != 0)
-  {
-  printf("%s%s%s%s%s%s%s%s%s%s\n",
-    ((re->options & PCRE_NOPARTIAL) != 0)? "nopartial " : "",
-    ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
-    ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
-    ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
-    ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
-    ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
-    ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
-    ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
-    ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
-    ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
-  }
-
-if ((re->options & PCRE_FIRSTSET) != 0)
-  {
-  int ch = re->first_byte & 255;
-  const char *caseless = ((re->first_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
-  if (isprint(ch)) printf("First char = %c%s\n", ch, caseless);
-    else printf("First char = \\x%02x%s\n", ch, caseless);
-  }
-
-if ((re->options & PCRE_REQCHSET) != 0)
-  {
-  int ch = re->req_byte & 255;
-  const char *caseless = ((re->req_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
-  if (isprint(ch)) printf("Req char = %c%s\n", ch, caseless);
-    else printf("Req char = \\x%02x%s\n", ch, caseless);
-  }
-
-print_internals(re, stdout);
-
-/* This check is done here in the debugging case so that the code that
-was compiled can be seen. */
-
-if (code - codestart > length)
-  {
-  *errorptr = ERR23;
-  (pcre_free)(re);
-  *erroroffset = ptr - (uschar *)pattern;
-  return NULL;
-  }
-#endif
-
-return (pcre *)re;
-}
-
-
-
-/*************************************************
-*          Match a back-reference                *
-*************************************************/
-
-/* If a back reference hasn't been set, the length that is passed is greater
-than the number of characters left in the string, so the match fails.
-
-Arguments:
-  offset      index into the offset vector
-  eptr        points into the subject
-  length      length to be matched
-  md          points to match data block
-  ims         the ims flags
-
-Returns:      TRUE if matched
-*/
-
-static BOOL
-match_ref(int offset, register const uschar *eptr, int length, match_data *md,
-  unsigned long int ims)
-{
-const uschar *p = md->start_subject + md->offset_vector[offset];
-
-#ifdef DEBUG
-if (eptr >= md->end_subject)
-  printf("matching subject <null>");
-else
-  {
-  printf("matching subject ");
-  pchars(eptr, length, TRUE, md);
-  }
-printf(" against backref ");
-pchars(p, length, FALSE, md);
-printf("\n");
-#endif
-
-/* Always fail if not enough characters left */
-
-if (length > md->end_subject - eptr) return FALSE;
-
-/* Separate the caselesss case for speed */
-
-if ((ims & PCRE_CASELESS) != 0)
-  {
-  while (length-- > 0)
-    if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
-  }
-else
-  { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
-
-return TRUE;
-}
-
-
-#ifdef SUPPORT_UTF8
-/*************************************************
-*       Match character against an XCLASS        *
-*************************************************/
-
-/* This function is called from within the XCLASS code below, to match a
-character against an extended class which might match values > 255.
-
-Arguments:
-  c           the character
-  data        points to the flag byte of the XCLASS data
-
-Returns:      TRUE if character matches, else FALSE
-*/
-
-static BOOL
-match_xclass(int c, const uschar *data)
-{
-int t;
-BOOL negated = (*data & XCL_NOT) != 0;
-
-/* Character values < 256 are matched against a bitmap, if one is present. If
-not, we still carry on, because there may be ranges that start below 256 in the
-additional data. */
-
-if (c < 256)
-  {
-  if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0)
-    return !negated;   /* char found */
-  }
-
-/* First skip the bit map if present. Then match against the list of Unicode
-properties or large chars or ranges that end with a large char. We won't ever
-encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */
-
-if ((*data++ & XCL_MAP) != 0) data += 32;
-
-while ((t = *data++) != XCL_END)
-  {
-  int x, y;
-  if (t == XCL_SINGLE)
-    {
-    GETCHARINC(x, data);
-    if (c == x) return !negated;
-    }
-  else if (t == XCL_RANGE)
-    {
-    GETCHARINC(x, data);
-    GETCHARINC(y, data);
-    if (c >= x && c <= y) return !negated;
-    }
-
-#ifdef SUPPORT_UCP
-  else  /* XCL_PROP & XCL_NOTPROP */
-    {
-    int chartype, othercase;
-    int rqdtype = *data++;
-    int category = ucp_findchar(c, &chartype, &othercase);
-    if (rqdtype >= 128)
-      {
-      if ((rqdtype - 128 == category) == (t == XCL_PROP)) return !negated;
-      }
-    else
-      {
-      if ((rqdtype == chartype) == (t == XCL_PROP)) return !negated;
-      }
-    }
-#endif  /* SUPPORT_UCP */
-  }
-
-return negated;   /* char did not match */
-}
-#endif
-
-
-/***************************************************************************
-****************************************************************************
-                   RECURSION IN THE match() FUNCTION
-
-The match() function is highly recursive. Some regular expressions can cause
-it to recurse thousands of times. I was writing for Unix, so I just let it
-call itself recursively. This uses the stack for saving everything that has
-to be saved for a recursive call. On Unix, the stack can be large, and this
-works fine.
-
-It turns out that on non-Unix systems there are problems with programs that
-use a lot of stack. (This despite the fact that every last chip has oodles
-of memory these days, and techniques for extending the stack have been known
-for decades.) So....
-
-There is a fudge, triggered by defining NO_RECURSE, which avoids recursive
-calls by keeping local variables that need to be preserved in blocks of memory
-obtained from malloc instead instead of on the stack. Macros are used to
-achieve this so that the actual code doesn't look very different to what it
-always used to.
-****************************************************************************
-***************************************************************************/
-
-
-/* These versions of the macros use the stack, as normal */
-
-#ifndef NO_RECURSE
-#define REGISTER register
-#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg) rx = match(ra,rb,rc,rd,re,rf,rg)
-#define RRETURN(ra) return ra
-#else
-
-
-/* These versions of the macros manage a private stack on the heap. Note
-that the rd argument of RMATCH isn't actually used. It's the md argument of
-match(), which never changes. */
-
-#define REGISTER
-
-#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg)\
-  {\
-  heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\
-  if (setjmp(frame->Xwhere) == 0)\
-    {\
-    newframe->Xeptr = ra;\
-    newframe->Xecode = rb;\
-    newframe->Xoffset_top = rc;\
-    newframe->Xims = re;\
-    newframe->Xeptrb = rf;\
-    newframe->Xflags = rg;\
-    newframe->Xprevframe = frame;\
-    frame = newframe;\
-    DPRINTF(("restarting from line %d\n", __LINE__));\
-    goto HEAP_RECURSE;\
-    }\
-  else\
-    {\
-    DPRINTF(("longjumped back to line %d\n", __LINE__));\
-    frame = md->thisframe;\
-    rx = frame->Xresult;\
-    }\
-  }
-
-#define RRETURN(ra)\
-  {\
-  heapframe *newframe = frame;\
-  frame = newframe->Xprevframe;\
-  (pcre_stack_free)(newframe);\
-  if (frame != NULL)\
-    {\
-    frame->Xresult = ra;\
-    md->thisframe = frame;\
-    longjmp(frame->Xwhere, 1);\
-    }\
-  return ra;\
-  }
-
-
-/* Structure for remembering the local variables in a private frame */
-
-typedef struct heapframe {
-  struct heapframe *Xprevframe;
-
-  /* Function arguments that may change */
-
-  const uschar *Xeptr;
-  const uschar *Xecode;
-  int Xoffset_top;
-  long int Xims;
-  eptrblock *Xeptrb;
-  int Xflags;
-
-  /* Function local variables */
-
-  const uschar *Xcallpat;
-  const uschar *Xcharptr;
-  const uschar *Xdata;
-  const uschar *Xnext;
-  const uschar *Xpp;
-  const uschar *Xprev;
-  const uschar *Xsaved_eptr;
-
-  recursion_info Xnew_recursive;
-
-  BOOL Xcur_is_word;
-  BOOL Xcondition;
-  BOOL Xminimize;
-  BOOL Xprev_is_word;
-
-  unsigned long int Xoriginal_ims;
-
-#ifdef SUPPORT_UCP
-  int Xprop_type;
-  int Xprop_fail_result;
-  int Xprop_category;
-  int Xprop_chartype;
-  int Xprop_othercase;
-  int Xprop_test_against;
-  int *Xprop_test_variable;
-#endif
-
-  int Xctype;
-  int Xfc;
-  int Xfi;
-  int Xlength;
-  int Xmax;
-  int Xmin;
-  int Xnumber;
-  int Xoffset;
-  int Xop;
-  int Xsave_capture_last;
-  int Xsave_offset1, Xsave_offset2, Xsave_offset3;
-  int Xstacksave[REC_STACK_SAVE_MAX];
-
-  eptrblock Xnewptrb;
-
-  /* Place to pass back result, and where to jump back to */
-
-  int  Xresult;
-  jmp_buf Xwhere;
-
-} heapframe;
-
-#endif
-
-
-/***************************************************************************
-***************************************************************************/
-
-
-
-/*************************************************
-*         Match from current position            *
-*************************************************/
-
-/* On entry ecode points to the first opcode, and eptr to the first character
-in the subject string, while eptrb holds the value of eptr at the start of the
-last bracketed group - used for breaking infinite loops matching zero-length
-strings. This function is called recursively in many circumstances. Whenever it
-returns a negative (error) response, the outer incarnation must also return the
-same response.
-
-Performance note: It might be tempting to extract commonly used fields from the
-md structure (e.g. utf8, end_subject) into individual variables to improve
-performance. Tests using gcc on a SPARC disproved this; in the first case, it
-made performance worse.
-
-Arguments:
-   eptr        pointer in subject
-   ecode       position in code
-   offset_top  current top pointer
-   md          pointer to "static" info for the match
-   ims         current /i, /m, and /s options
-   eptrb       pointer to chain of blocks containing eptr at start of
-                 brackets - for testing for empty matches
-   flags       can contain
-                 match_condassert - this is an assertion condition
-                 match_isgroup - this is the start of a bracketed group
-
-Returns:       MATCH_MATCH if matched            )  these values are >= 0
-               MATCH_NOMATCH if failed to match  )
-               a negative PCRE_ERROR_xxx value if aborted by an error condition
-                 (e.g. stopped by recursion limit)
-*/
-
-static int
-match(REGISTER const uschar *eptr, REGISTER const uschar *ecode,
-  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
-  int flags)
-{
-/* These variables do not need to be preserved over recursion in this function,
-so they can be ordinary variables in all cases. Mark them with "register"
-because they are used a lot in loops. */
-
-register int rrc;    /* Returns from recursive calls */
-register int i;      /* Used for loops not involving calls to RMATCH() */
-register int c;      /* Character values not kept over RMATCH() calls */
-
-/* When recursion is not being used, all "local" variables that have to be
-preserved over calls to RMATCH() are part of a "frame" which is obtained from
-heap storage. Set up the top-level frame here; others are obtained from the
-heap whenever RMATCH() does a "recursion". See the macro definitions above. */
-
-#ifdef NO_RECURSE
-heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe));
-frame->Xprevframe = NULL;            /* Marks the top level */
-
-/* Copy in the original argument variables */
-
-frame->Xeptr = eptr;
-frame->Xecode = ecode;
-frame->Xoffset_top = offset_top;
-frame->Xims = ims;
-frame->Xeptrb = eptrb;
-frame->Xflags = flags;
-
-/* This is where control jumps back to to effect "recursion" */
-
-HEAP_RECURSE:
-
-/* Macros make the argument variables come from the current frame */
-
-#define eptr               frame->Xeptr
-#define ecode              frame->Xecode
-#define offset_top         frame->Xoffset_top
-#define ims                frame->Xims
-#define eptrb              frame->Xeptrb
-#define flags              frame->Xflags
-
-/* Ditto for the local variables */
-
-#ifdef SUPPORT_UTF8
-#define charptr            frame->Xcharptr
-#endif
-#define callpat            frame->Xcallpat
-#define data               frame->Xdata
-#define next               frame->Xnext
-#define pp                 frame->Xpp
-#define prev               frame->Xprev
-#define saved_eptr         frame->Xsaved_eptr
-
-#define new_recursive      frame->Xnew_recursive
-
-#define cur_is_word        frame->Xcur_is_word
-#define condition          frame->Xcondition
-#define minimize           frame->Xminimize
-#define prev_is_word       frame->Xprev_is_word
-
-#define original_ims       frame->Xoriginal_ims
-
-#ifdef SUPPORT_UCP
-#define prop_type          frame->Xprop_type
-#define prop_fail_result   frame->Xprop_fail_result
-#define prop_category      frame->Xprop_category
-#define prop_chartype      frame->Xprop_chartype
-#define prop_othercase     frame->Xprop_othercase
-#define prop_test_against  frame->Xprop_test_against
-#define prop_test_variable frame->Xprop_test_variable
-#endif
-
-#define ctype              frame->Xctype
-#define fc                 frame->Xfc
-#define fi                 frame->Xfi
-#define length             frame->Xlength
-#define max                frame->Xmax
-#define min                frame->Xmin
-#define number             frame->Xnumber
-#define offset             frame->Xoffset
-#define op                 frame->Xop
-#define save_capture_last  frame->Xsave_capture_last
-#define save_offset1       frame->Xsave_offset1
-#define save_offset2       frame->Xsave_offset2
-#define save_offset3       frame->Xsave_offset3
-#define stacksave          frame->Xstacksave
-
-#define newptrb            frame->Xnewptrb
-
-/* When recursion is being used, local variables are allocated on the stack and
-get preserved during recursion in the normal way. In this environment, fi and
-i, and fc and c, can be the same variables. */
-
-#else
-#define fi i
-#define fc c
-
-
-#ifdef SUPPORT_UTF8                /* Many of these variables are used ony */
-const uschar *charptr;             /* small blocks of the code. My normal  */
-#endif                             /* style of coding would have declared  */
-const uschar *callpat;             /* them within each of those blocks.    */
-const uschar *data;                /* However, in order to accommodate the */
-const uschar *next;                /* version of this code that uses an    */
-const uschar *pp;                  /* external "stack" implemented on the  */
-const uschar *prev;                /* heap, it is easier to declare them   */
-const uschar *saved_eptr;          /* all here, so the declarations can    */
-                                   /* be cut out in a block. The only      */
-recursion_info new_recursive;      /* declarations within blocks below are */
-                                   /* for variables that do not have to    */
-BOOL cur_is_word;                  /* be preserved over a recursive call   */
-BOOL condition;                    /* to RMATCH().                         */
-BOOL minimize;
-BOOL prev_is_word;
-
-unsigned long int original_ims;
-
-#ifdef SUPPORT_UCP
-int prop_type;
-int prop_fail_result;
-int prop_category;
-int prop_chartype;
-int prop_othercase;
-int prop_test_against;
-int *prop_test_variable;
-#endif
-
-int ctype;
-int length;
-int max;
-int min;
-int number;
-int offset;
-int op;
-int save_capture_last;
-int save_offset1, save_offset2, save_offset3;
-int stacksave[REC_STACK_SAVE_MAX];
-
-eptrblock newptrb;
-#endif
-
-/* These statements are here to stop the compiler complaining about unitialized
-variables. */
-
-#ifdef SUPPORT_UCP
-prop_fail_result = 0;
-prop_test_against = 0;
-prop_test_variable = NULL;
-#endif
-
-/* OK, now we can get on with the real code of the function. Recursion is
-specified by the macros RMATCH and RRETURN. When NO_RECURSE is *not* defined,
-these just turn into a recursive call to match() and a "return", respectively.
-However, RMATCH isn't like a function call because it's quite a complicated
-macro. It has to be used in one particular way. This shouldn't, however, impact
-performance when true recursion is being used. */
-
-if (md->match_call_count++ >= md->match_limit) RRETURN(PCRE_ERROR_MATCHLIMIT);
-
-original_ims = ims;    /* Save for resetting on ')' */
-
-/* At the start of a bracketed group, add the current subject pointer to the
-stack of such pointers, to be re-instated at the end of the group when we hit
-the closing ket. When match() is called in other circumstances, we don't add to
-this stack. */
-
-if ((flags & match_isgroup) != 0)
-  {
-  newptrb.epb_prev = eptrb;
-  newptrb.epb_saved_eptr = eptr;
-  eptrb = &newptrb;
-  }
-
-/* Now start processing the operations. */
-
-for (;;)
-  {
-  op = *ecode;
-  minimize = FALSE;
-
-  /* For partial matching, remember if we ever hit the end of the subject after
-  matching at least one subject character. */
-
-  if (md->partial &&
-      eptr >= md->end_subject &&
-      eptr > md->start_match)
-    md->hitend = TRUE;
-
-  /* Opening capturing bracket. If there is space in the offset vector, save
-  the current subject position in the working slot at the top of the vector. We
-  mustn't change the current values of the data slot, because they may be set
-  from a previous iteration of this group, and be referred to by a reference
-  inside the group.
-
-  If the bracket fails to match, we need to restore this value and also the
-  values of the final offsets, in case they were set by a previous iteration of
-  the same bracket.
-
-  If there isn't enough space in the offset vector, treat this as if it were a
-  non-capturing bracket. Don't worry about setting the flag for the error case
-  here; that is handled in the code for KET. */
-
-  if (op > OP_BRA)
-    {
-    number = op - OP_BRA;
-
-    /* For extended extraction brackets (large number), we have to fish out the
-    number from a dummy opcode at the start. */
-
-    if (number > EXTRACT_BASIC_MAX)
-      number = GET2(ecode, 2+LINK_SIZE);
-    offset = number << 1;
-
-#ifdef DEBUG
-    printf("start bracket %d subject=", number);
-    pchars(eptr, 16, TRUE, md);
-    printf("\n");
-#endif
-
-    if (offset < md->offset_max)
-      {
-      save_offset1 = md->offset_vector[offset];
-      save_offset2 = md->offset_vector[offset+1];
-      save_offset3 = md->offset_vector[md->offset_end - number];
-      save_capture_last = md->capture_last;
-
-      DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
-      md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
-
-      do
-        {
-        RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
-          match_isgroup);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        md->capture_last = save_capture_last;
-        ecode += GET(ecode, 1);
-        }
-      while (*ecode == OP_ALT);
-
-      DPRINTF(("bracket %d failed\n", number));
-
-      md->offset_vector[offset] = save_offset1;
-      md->offset_vector[offset+1] = save_offset2;
-      md->offset_vector[md->offset_end - number] = save_offset3;
-
-      RRETURN(MATCH_NOMATCH);
-      }
-
-    /* Insufficient room for saving captured contents */
-
-    else op = OP_BRA;
-    }
-
-  /* Other types of node can be handled by a switch */
-
-  switch(op)
-    {
-    case OP_BRA:     /* Non-capturing bracket: optimized */
-    DPRINTF(("start bracket 0\n"));
-    do
-      {
-      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
-        match_isgroup);
-      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-      ecode += GET(ecode, 1);
-      }
-    while (*ecode == OP_ALT);
-    DPRINTF(("bracket 0 failed\n"));
-    RRETURN(MATCH_NOMATCH);
-
-    /* Conditional group: compilation checked that there are no more than
-    two branches. If the condition is false, skipping the first branch takes us
-    past the end if there is only one branch, but that's OK because that is
-    exactly what going to the ket would do. */
-
-    case OP_COND:
-    if (ecode[LINK_SIZE+1] == OP_CREF) /* Condition extract or recurse test */
-      {
-      offset = GET2(ecode, LINK_SIZE+2) << 1;  /* Doubled ref number */
-      condition = (offset == CREF_RECURSE * 2)?
-        (md->recursive != NULL) :
-        (offset < offset_top && md->offset_vector[offset] >= 0);
-      RMATCH(rrc, eptr, ecode + (condition?
-        (LINK_SIZE + 4) : (LINK_SIZE + 1 + GET(ecode, 1))),
-        offset_top, md, ims, eptrb, match_isgroup);
-      RRETURN(rrc);
-      }
-
-    /* The condition is an assertion. Call match() to evaluate it - setting
-    the final argument TRUE causes it to stop at the end of an assertion. */
-
-    else
-      {
-      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
-          match_condassert | match_isgroup);
-      if (rrc == MATCH_MATCH)
-        {
-        ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE+2);
-        while (*ecode == OP_ALT) ecode += GET(ecode, 1);
-        }
-      else if (rrc != MATCH_NOMATCH)
-        {
-        RRETURN(rrc);         /* Need braces because of following else */
-        }
-      else ecode += GET(ecode, 1);
-      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
-        match_isgroup);
-      RRETURN(rrc);
-      }
-    /* Control never reaches here */
-
-    /* Skip over conditional reference or large extraction number data if
-    encountered. */
-
-    case OP_CREF:
-    case OP_BRANUMBER:
-    ecode += 3;
-    break;
-
-    /* End of the pattern. If we are in a recursion, we should restore the
-    offsets appropriately and continue from after the call. */
-
-    case OP_END:
-    if (md->recursive != NULL && md->recursive->group_num == 0)
-      {
-      recursion_info *rec = md->recursive;
-      DPRINTF(("Hit the end in a (?0) recursion\n"));
-      md->recursive = rec->prevrec;
-      memmove(md->offset_vector, rec->offset_save,
-        rec->saved_max * sizeof(int));
-      md->start_match = rec->save_start;
-      ims = original_ims;
-      ecode = rec->after_call;
-      break;
-      }
-
-    /* Otherwise, if PCRE_NOTEMPTY is set, fail if we have matched an empty
-    string - backtracking will then try other alternatives, if any. */
-
-    if (md->notempty && eptr == md->start_match) RRETURN(MATCH_NOMATCH);
-    md->end_match_ptr = eptr;          /* Record where we ended */
-    md->end_offset_top = offset_top;   /* and how many extracts were taken */
-    RRETURN(MATCH_MATCH);
-
-    /* Change option settings */
-
-    case OP_OPT:
-    ims = ecode[1];
-    ecode += 2;
-    DPRINTF(("ims set to %02lx\n", ims));
-    break;
-
-    /* Assertion brackets. Check the alternative branches in turn - the
-    matching won't pass the KET for an assertion. If any one branch matches,
-    the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
-    start of each branch to move the current point backwards, so the code at
-    this level is identical to the lookahead case. */
-
-    case OP_ASSERT:
-    case OP_ASSERTBACK:
-    do
-      {
-      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
-        match_isgroup);
-      if (rrc == MATCH_MATCH) break;
-      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-      ecode += GET(ecode, 1);
-      }
-    while (*ecode == OP_ALT);
-    if (*ecode == OP_KET) RRETURN(MATCH_NOMATCH);
-
-    /* If checking an assertion for a condition, return MATCH_MATCH. */
-
-    if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
-
-    /* Continue from after the assertion, updating the offsets high water
-    mark, since extracts may have been taken during the assertion. */
-
-    do ecode += GET(ecode,1); while (*ecode == OP_ALT);
-    ecode += 1 + LINK_SIZE;
-    offset_top = md->end_offset_top;
-    continue;
-
-    /* Negative assertion: all branches must fail to match */
-
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK_NOT:
-    do
-      {
-      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
-        match_isgroup);
-      if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH);
-      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-      ecode += GET(ecode,1);
-      }
-    while (*ecode == OP_ALT);
-
-    if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
-
-    ecode += 1 + LINK_SIZE;
-    continue;
-
-    /* Move the subject pointer back. This occurs only at the start of
-    each branch of a lookbehind assertion. If we are too close to the start to
-    move back, this match function fails. When working with UTF-8 we move
-    back a number of characters, not bytes. */
-
-    case OP_REVERSE:
-#ifdef SUPPORT_UTF8
-    if (md->utf8)
-      {
-      c = GET(ecode,1);
-      for (i = 0; i < c; i++)
-        {
-        eptr--;
-        if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
-        BACKCHAR(eptr)
-        }
-      }
-    else
-#endif
-
-    /* No UTF-8 support, or not in UTF-8 mode: count is byte count */
-
-      {
-      eptr -= GET(ecode,1);
-      if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
-      }
-
-    /* Skip to next op code */
-
-    ecode += 1 + LINK_SIZE;
-    break;
-
-    /* The callout item calls an external function, if one is provided, passing
-    details of the match so far. This is mainly for debugging, though the
-    function is able to force a failure. */
-
-    case OP_CALLOUT:
-    if (pcre_callout != NULL)
-      {
-      pcre_callout_block cb;
-      cb.version          = 1;   /* Version 1 of the callout block */
-      cb.callout_number   = ecode[1];
-      cb.offset_vector    = md->offset_vector;
-      cb.subject          = (const char *)md->start_subject;
-      cb.subject_length   = md->end_subject - md->start_subject;
-      cb.start_match      = md->start_match - md->start_subject;
-      cb.current_position = eptr - md->start_subject;
-      cb.pattern_position = GET(ecode, 2);
-      cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
-      cb.capture_top      = offset_top/2;
-      cb.capture_last     = md->capture_last;
-      cb.callout_data     = md->callout_data;
-      if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH);
-      if (rrc < 0) RRETURN(rrc);
-      }
-    ecode += 2 + 2*LINK_SIZE;
-    break;
-
-    /* Recursion either matches the current regex, or some subexpression. The
-    offset data is the offset to the starting bracket from the start of the
-    whole pattern. (This is so that it works from duplicated subpatterns.)
-
-    If there are any capturing brackets started but not finished, we have to
-    save their starting points and reinstate them after the recursion. However,
-    we don't know how many such there are (offset_top records the completed
-    total) so we just have to save all the potential data. There may be up to
-    65535 such values, which is too large to put on the stack, but using malloc
-    for small numbers seems expensive. As a compromise, the stack is used when
-    there are no more than REC_STACK_SAVE_MAX values to store; otherwise malloc
-    is used. A problem is what to do if the malloc fails ... there is no way of
-    returning to the top level with an error. Save the top REC_STACK_SAVE_MAX
-    values on the stack, and accept that the rest may be wrong.
-
-    There are also other values that have to be saved. We use a chained
-    sequence of blocks that actually live on the stack. Thanks to Robin Houston
-    for the original version of this logic. */
-
-    case OP_RECURSE:
-      {
-      callpat = md->start_code + GET(ecode, 1);
-      new_recursive.group_num = *callpat - OP_BRA;
-
-      /* For extended extraction brackets (large number), we have to fish out
-      the number from a dummy opcode at the start. */
-
-      if (new_recursive.group_num > EXTRACT_BASIC_MAX)
-        new_recursive.group_num = GET2(callpat, 2+LINK_SIZE);
-
-      /* Add to "recursing stack" */
-
-      new_recursive.prevrec = md->recursive;
-      md->recursive = &new_recursive;
-
-      /* Find where to continue from afterwards */
-
-      ecode += 1 + LINK_SIZE;
-      new_recursive.after_call = ecode;
-
-      /* Now save the offset data. */
-
-      new_recursive.saved_max = md->offset_end;
-      if (new_recursive.saved_max <= REC_STACK_SAVE_MAX)
-        new_recursive.offset_save = stacksave;
-      else
-        {
-        new_recursive.offset_save =
-          (int *)(pcre_malloc)(new_recursive.saved_max * sizeof(int));
-        if (new_recursive.offset_save == NULL) RRETURN(PCRE_ERROR_NOMEMORY);
-        }
-
-      memcpy(new_recursive.offset_save, md->offset_vector,
-            new_recursive.saved_max * sizeof(int));
-      new_recursive.save_start = md->start_match;
-      md->start_match = eptr;
-
-      /* OK, now we can do the recursion. For each top-level alternative we
-      restore the offset and recursion data. */
-
-      DPRINTF(("Recursing into group %d\n", new_recursive.group_num));
-      do
-        {
-        RMATCH(rrc, eptr, callpat + 1 + LINK_SIZE, offset_top, md, ims,
-            eptrb, match_isgroup);
-        if (rrc == MATCH_MATCH)
-          {
-          md->recursive = new_recursive.prevrec;
-          if (new_recursive.offset_save != stacksave)
-            (pcre_free)(new_recursive.offset_save);
-          RRETURN(MATCH_MATCH);
-          }
-        else if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-
-        md->recursive = &new_recursive;
-        memcpy(md->offset_vector, new_recursive.offset_save,
-            new_recursive.saved_max * sizeof(int));
-        callpat += GET(callpat, 1);
-        }
-      while (*callpat == OP_ALT);
-
-      DPRINTF(("Recursion didn't match\n"));
-      md->recursive = new_recursive.prevrec;
-      if (new_recursive.offset_save != stacksave)
-        (pcre_free)(new_recursive.offset_save);
-      RRETURN(MATCH_NOMATCH);
-      }
-    /* Control never reaches here */
-
-    /* "Once" brackets are like assertion brackets except that after a match,
-    the point in the subject string is not moved back. Thus there can never be
-    a move back into the brackets. Friedl calls these "atomic" subpatterns.
-    Check the alternative branches in turn - the matching won't pass the KET
-    for this kind of subpattern. If any one branch matches, we carry on as at
-    the end of a normal bracket, leaving the subject pointer. */
-
-    case OP_ONCE:
-      {
-      prev = ecode;
-      saved_eptr = eptr;
-
-      do
-        {
-        RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims,
-          eptrb, match_isgroup);
-        if (rrc == MATCH_MATCH) break;
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        ecode += GET(ecode,1);
-        }
-      while (*ecode == OP_ALT);
-
-      /* If hit the end of the group (which could be repeated), fail */
-
-      if (*ecode != OP_ONCE && *ecode != OP_ALT) RRETURN(MATCH_NOMATCH);
-
-      /* Continue as from after the assertion, updating the offsets high water
-      mark, since extracts may have been taken. */
-
-      do ecode += GET(ecode,1); while (*ecode == OP_ALT);
-
-      offset_top = md->end_offset_top;
-      eptr = md->end_match_ptr;
-
-      /* For a non-repeating ket, just continue at this level. This also
-      happens for a repeating ket if no characters were matched in the group.
-      This is the forcible breaking of infinite loops as implemented in Perl
-      5.005. If there is an options reset, it will get obeyed in the normal
-      course of events. */
-
-      if (*ecode == OP_KET || eptr == saved_eptr)
-        {
-        ecode += 1+LINK_SIZE;
-        break;
-        }
-
-      /* The repeating kets try the rest of the pattern or restart from the
-      preceding bracket, in the appropriate order. We need to reset any options
-      that changed within the bracket before re-running it, so check the next
-      opcode. */
-
-      if (ecode[1+LINK_SIZE] == OP_OPT)
-        {
-        ims = (ims & ~PCRE_IMS) | ecode[4];
-        DPRINTF(("ims set to %02lx at group repeat\n", ims));
-        }
-
-      if (*ecode == OP_KETRMIN)
-        {
-        RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        }
-      else  /* OP_KETRMAX */
-        {
-        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        }
-      }
-    RRETURN(MATCH_NOMATCH);
-
-    /* An alternation is the end of a branch; scan along to find the end of the
-    bracketed group and go to there. */
-
-    case OP_ALT:
-    do ecode += GET(ecode,1); while (*ecode == OP_ALT);
-    break;
-
-    /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
-    that it may occur zero times. It may repeat infinitely, or not at all -
-    i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
-    repeat limits are compiled as a number of copies, with the optional ones
-    preceded by BRAZERO or BRAMINZERO. */
-
-    case OP_BRAZERO:
-      {
-      next = ecode+1;
-      RMATCH(rrc, eptr, next, offset_top, md, ims, eptrb, match_isgroup);
-      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-      do next += GET(next,1); while (*next == OP_ALT);
-      ecode = next + 1+LINK_SIZE;
-      }
-    break;
-
-    case OP_BRAMINZERO:
-      {
-      next = ecode+1;
-      do next += GET(next,1); while (*next == OP_ALT);
-      RMATCH(rrc, eptr, next + 1+LINK_SIZE, offset_top, md, ims, eptrb,
-        match_isgroup);
-      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-      ecode++;
-      }
-    break;
-
-    /* End of a group, repeated or non-repeating. If we are at the end of
-    an assertion "group", stop matching and return MATCH_MATCH, but record the
-    current high water mark for use by positive assertions. Do this also
-    for the "once" (not-backup up) groups. */
-
-    case OP_KET:
-    case OP_KETRMIN:
-    case OP_KETRMAX:
-      {
-      prev = ecode - GET(ecode, 1);
-      saved_eptr = eptrb->epb_saved_eptr;
-
-      /* Back up the stack of bracket start pointers. */
-
-      eptrb = eptrb->epb_prev;
-
-      if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
-          *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
-          *prev == OP_ONCE)
-        {
-        md->end_match_ptr = eptr;      /* For ONCE */
-        md->end_offset_top = offset_top;
-        RRETURN(MATCH_MATCH);
-        }
-
-      /* In all other cases except a conditional group we have to check the
-      group number back at the start and if necessary complete handling an
-      extraction by setting the offsets and bumping the high water mark. */
-
-      if (*prev != OP_COND)
-        {
-        number = *prev - OP_BRA;
-
-        /* For extended extraction brackets (large number), we have to fish out
-        the number from a dummy opcode at the start. */
-
-        if (number > EXTRACT_BASIC_MAX) number = GET2(prev, 2+LINK_SIZE);
-        offset = number << 1;
-
-#ifdef DEBUG
-        printf("end bracket %d", number);
-        printf("\n");
-#endif
-
-        /* Test for a numbered group. This includes groups called as a result
-        of recursion. Note that whole-pattern recursion is coded as a recurse
-        into group 0, so it won't be picked up here. Instead, we catch it when
-        the OP_END is reached. */
-
-        if (number > 0)
-          {
-          md->capture_last = number;
-          if (offset >= md->offset_max) md->offset_overflow = TRUE; else
-            {
-            md->offset_vector[offset] =
-              md->offset_vector[md->offset_end - number];
-            md->offset_vector[offset+1] = eptr - md->start_subject;
-            if (offset_top <= offset) offset_top = offset + 2;
-            }
-
-          /* Handle a recursively called group. Restore the offsets
-          appropriately and continue from after the call. */
-
-          if (md->recursive != NULL && md->recursive->group_num == number)
-            {
-            recursion_info *rec = md->recursive;
-            DPRINTF(("Recursion (%d) succeeded - continuing\n", number));
-            md->recursive = rec->prevrec;
-            md->start_match = rec->save_start;
-            memcpy(md->offset_vector, rec->offset_save,
-              rec->saved_max * sizeof(int));
-            ecode = rec->after_call;
-            ims = original_ims;
-            break;
-            }
-          }
-        }
-
-      /* Reset the value of the ims flags, in case they got changed during
-      the group. */
-
-      ims = original_ims;
-      DPRINTF(("ims reset to %02lx\n", ims));
-
-      /* For a non-repeating ket, just continue at this level. This also
-      happens for a repeating ket if no characters were matched in the group.
-      This is the forcible breaking of infinite loops as implemented in Perl
-      5.005. If there is an options reset, it will get obeyed in the normal
-      course of events. */
-
-      if (*ecode == OP_KET || eptr == saved_eptr)
-        {
-        ecode += 1 + LINK_SIZE;
-        break;
-        }
-
-      /* The repeating kets try the rest of the pattern or restart from the
-      preceding bracket, in the appropriate order. */
-
-      if (*ecode == OP_KETRMIN)
-        {
-        RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        }
-      else  /* OP_KETRMAX */
-        {
-        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
-        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-        }
-      }
-
-    RRETURN(MATCH_NOMATCH);
-
-    /* Start of subject unless notbol, or after internal newline if multiline */
-
-    case OP_CIRC:
-    if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH);
-    if ((ims & PCRE_MULTILINE) != 0)
-      {
-      if (eptr != md->start_subject && eptr[-1] != NEWLINE)
-        RRETURN(MATCH_NOMATCH);
-      ecode++;
-      break;
-      }
-    /* ... else fall through */
-
-    /* Start of subject assertion */
-
-    case OP_SOD:
-    if (eptr != md->start_subject) RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    /* Start of match assertion */
-
-    case OP_SOM:
-    if (eptr != md->start_subject + md->start_offset) RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    /* Assert before internal newline if multiline, or before a terminating
-    newline unless endonly is set, else end of subject unless noteol is set. */
-
-    case OP_DOLL:
-    if ((ims & PCRE_MULTILINE) != 0)
-      {
-      if (eptr < md->end_subject)
-        { if (*eptr != NEWLINE) RRETURN(MATCH_NOMATCH); }
-      else
-        { if (md->noteol) RRETURN(MATCH_NOMATCH); }
-      ecode++;
-      break;
-      }
-    else
-      {
-      if (md->noteol) RRETURN(MATCH_NOMATCH);
-      if (!md->endonly)
-        {
-        if (eptr < md->end_subject - 1 ||
-           (eptr == md->end_subject - 1 && *eptr != NEWLINE))
-          RRETURN(MATCH_NOMATCH);
-        ecode++;
-        break;
-        }
-      }
-    /* ... else fall through */
-
-    /* End of subject assertion (\z) */
-
-    case OP_EOD:
-    if (eptr < md->end_subject) RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    /* End of subject or ending \n assertion (\Z) */
-
-    case OP_EODN:
-    if (eptr < md->end_subject - 1 ||
-       (eptr == md->end_subject - 1 && *eptr != NEWLINE)) RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    /* Word boundary assertions */
-
-    case OP_NOT_WORD_BOUNDARY:
-    case OP_WORD_BOUNDARY:
-      {
-
-      /* Find out if the previous and current characters are "word" characters.
-      It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to
-      be "non-word" characters. */
-
-#ifdef SUPPORT_UTF8
-      if (md->utf8)
-        {
-        if (eptr == md->start_subject) prev_is_word = FALSE; else
-          {
-          const uschar *lastptr = eptr - 1;
-          while((*lastptr & 0xc0) == 0x80) lastptr--;
-          GETCHAR(c, lastptr);
-          prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
-          }
-        if (eptr >= md->end_subject) cur_is_word = FALSE; else
-          {
-          GETCHAR(c, eptr);
-          cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
-          }
-        }
-      else
-#endif
-
-      /* More streamlined when not in UTF-8 mode */
-
-        {
-        prev_is_word = (eptr != md->start_subject) &&
-          ((md->ctypes[eptr[-1]] & ctype_word) != 0);
-        cur_is_word = (eptr < md->end_subject) &&
-          ((md->ctypes[*eptr] & ctype_word) != 0);
-        }
-
-      /* Now see if the situation is what we want */
-
-      if ((*ecode++ == OP_WORD_BOUNDARY)?
-           cur_is_word == prev_is_word : cur_is_word != prev_is_word)
-        RRETURN(MATCH_NOMATCH);
-      }
-    break;
-
-    /* Match a single character type; inline for speed */
-
-    case OP_ANY:
-    if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == NEWLINE)
-      RRETURN(MATCH_NOMATCH);
-    if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
-#ifdef SUPPORT_UTF8
-    if (md->utf8)
-      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-#endif
-    ecode++;
-    break;
-
-    /* Match a single byte, even in UTF-8 mode. This opcode really does match
-    any byte, even newline, independent of the setting of PCRE_DOTALL. */
-
-    case OP_ANYBYTE:
-    if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    case OP_NOT_DIGIT:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-    if (
-#ifdef SUPPORT_UTF8
-       c < 256 &&
-#endif
-       (md->ctypes[c] & ctype_digit) != 0
-       )
-      RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    case OP_DIGIT:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-    if (
-#ifdef SUPPORT_UTF8
-       c >= 256 ||
-#endif
-       (md->ctypes[c] & ctype_digit) == 0
-       )
-      RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    case OP_NOT_WHITESPACE:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-    if (
-#ifdef SUPPORT_UTF8
-       c < 256 &&
-#endif
-       (md->ctypes[c] & ctype_space) != 0
-       )
-      RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    case OP_WHITESPACE:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-    if (
-#ifdef SUPPORT_UTF8
-       c >= 256 ||
-#endif
-       (md->ctypes[c] & ctype_space) == 0
-       )
-      RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    case OP_NOT_WORDCHAR:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-    if (
-#ifdef SUPPORT_UTF8
-       c < 256 &&
-#endif
-       (md->ctypes[c] & ctype_word) != 0
-       )
-      RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-    case OP_WORDCHAR:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-    if (
-#ifdef SUPPORT_UTF8
-       c >= 256 ||
-#endif
-       (md->ctypes[c] & ctype_word) == 0
-       )
-      RRETURN(MATCH_NOMATCH);
-    ecode++;
-    break;
-
-#ifdef SUPPORT_UCP
-    /* Check the next character by Unicode property. We will get here only
-    if the support is in the binary; otherwise a compile-time error occurs. */
-
-    case OP_PROP:
-    case OP_NOTPROP:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-      {
-      int chartype, rqdtype;
-      int othercase;
-      int category = ucp_findchar(c, &chartype, &othercase);
-
-      rqdtype = *(++ecode);
-      ecode++;
-
-      if (rqdtype >= 128)
-        {
-        if ((rqdtype - 128 != category) == (op == OP_PROP))
-          RRETURN(MATCH_NOMATCH);
-        }
-      else
-        {
-        if ((rqdtype != chartype) == (op == OP_PROP))
-          RRETURN(MATCH_NOMATCH);
-        }
-      }
-    break;
-
-    /* Match an extended Unicode sequence. We will get here only if the support
-    is in the binary; otherwise a compile-time error occurs. */
-
-    case OP_EXTUNI:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    GETCHARINCTEST(c, eptr);
-      {
-      int chartype;
-      int othercase;
-      int category = ucp_findchar(c, &chartype, &othercase);
-      if (category == ucp_M) RRETURN(MATCH_NOMATCH);
-      while (eptr < md->end_subject)
-        {
-        int len = 1;
-        if (!md->utf8) c = *eptr; else
-          {
-          GETCHARLEN(c, eptr, len);
-          }
-        category = ucp_findchar(c, &chartype, &othercase);
-        if (category != ucp_M) break;
-        eptr += len;
-        }
-      }
-    ecode++;
-    break;
-#endif
-
-
-    /* Match a back reference, possibly repeatedly. Look past the end of the
-    item to see if there is repeat information following. The code is similar
-    to that for character classes, but repeated for efficiency. Then obey
-    similar code to character type repeats - written out again for speed.
-    However, if the referenced string is the empty string, always treat
-    it as matched, any number of times (otherwise there could be infinite
-    loops). */
-
-    case OP_REF:
-      {
-      offset = GET2(ecode, 1) << 1;               /* Doubled ref number */
-      ecode += 3;                                 /* Advance past item */
-
-      /* If the reference is unset, set the length to be longer than the amount
-      of subject left; this ensures that every attempt at a match fails. We
-      can't just fail here, because of the possibility of quantifiers with zero
-      minima. */
-
-      length = (offset >= offset_top || md->offset_vector[offset] < 0)?
-        md->end_subject - eptr + 1 :
-        md->offset_vector[offset+1] - md->offset_vector[offset];
-
-      /* Set up for repetition, or handle the non-repeated case */
-
-      switch (*ecode)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        c = *ecode++ - OP_CRSTAR;
-        minimize = (c & 1) != 0;
-        min = rep_min[c];                 /* Pick up values from tables; */
-        max = rep_max[c];                 /* zero for max => infinity */
-        if (max == 0) max = INT_MAX;
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        minimize = (*ecode == OP_CRMINRANGE);
-        min = GET2(ecode, 1);
-        max = GET2(ecode, 3);
-        if (max == 0) max = INT_MAX;
-        ecode += 5;
-        break;
-
-        default:               /* No repeat follows */
-        if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
-        eptr += length;
-        continue;              /* With the main loop */
-        }
-
-      /* If the length of the reference is zero, just continue with the
-      main loop. */
-
-      if (length == 0) continue;
-
-      /* First, ensure the minimum number of matches are present. We get back
-      the length of the reference string explicitly rather than passing the
-      address of eptr, so that eptr can be a register variable. */
-
-      for (i = 1; i <= min; i++)
-        {
-        if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
-        eptr += length;
-        }
-
-      /* If min = max, continue at the same level without recursion.
-      They are not both allowed to be zero. */
-
-      if (min == max) continue;
-
-      /* If minimizing, keep trying and advancing the pointer */
-
-      if (minimize)
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || !match_ref(offset, eptr, length, md, ims))
-            RRETURN(MATCH_NOMATCH);
-          eptr += length;
-          }
-        /* Control never gets here */
-        }
-
-      /* If maximizing, find the longest string and work backwards */
-
-      else
-        {
-        pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (!match_ref(offset, eptr, length, md, ims)) break;
-          eptr += length;
-          }
-        while (eptr >= pp)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          eptr -= length;
-          }
-        RRETURN(MATCH_NOMATCH);
-        }
-      }
-    /* Control never gets here */
-
-
-
-    /* Match a bit-mapped character class, possibly repeatedly. This op code is
-    used when all the characters in the class have values in the range 0-255,
-    and either the matching is caseful, or the characters are in the range
-    0-127 when UTF-8 processing is enabled. The only difference between
-    OP_CLASS and OP_NCLASS occurs when a data character outside the range is
-    encountered.
-
-    First, look past the end of the item to see if there is repeat information
-    following. Then obey similar code to character type repeats - written out
-    again for speed. */
-
-    case OP_NCLASS:
-    case OP_CLASS:
-      {
-      data = ecode + 1;                /* Save for matching */
-      ecode += 33;                     /* Advance past the item */
-
-      switch (*ecode)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        c = *ecode++ - OP_CRSTAR;
-        minimize = (c & 1) != 0;
-        min = rep_min[c];                 /* Pick up values from tables; */
-        max = rep_max[c];                 /* zero for max => infinity */
-        if (max == 0) max = INT_MAX;
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        minimize = (*ecode == OP_CRMINRANGE);
-        min = GET2(ecode, 1);
-        max = GET2(ecode, 3);
-        if (max == 0) max = INT_MAX;
-        ecode += 5;
-        break;
-
-        default:               /* No repeat follows */
-        min = max = 1;
-        break;
-        }
-
-      /* First, ensure the minimum number of matches are present. */
-
-#ifdef SUPPORT_UTF8
-      /* UTF-8 mode */
-      if (md->utf8)
-        {
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          GETCHARINC(c, eptr);
-          if (c > 255)
-            {
-            if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
-            }
-          else
-            {
-            if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
-            }
-          }
-        }
-      else
-#endif
-      /* Not UTF-8 mode */
-        {
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          c = *eptr++;
-          if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
-          }
-        }
-
-      /* If max == min we can continue with the main loop without the
-      need to recurse. */
-
-      if (min == max) continue;
-
-      /* If minimizing, keep testing the rest of the expression and advancing
-      the pointer while it matches the class. */
-
-      if (minimize)
-        {
-#ifdef SUPPORT_UTF8
-        /* UTF-8 mode */
-        if (md->utf8)
-          {
-          for (fi = min;; fi++)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-            GETCHARINC(c, eptr);
-            if (c > 255)
-              {
-              if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
-              }
-            else
-              {
-              if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
-              }
-            }
-          }
-        else
-#endif
-        /* Not UTF-8 mode */
-          {
-          for (fi = min;; fi++)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-            c = *eptr++;
-            if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
-            }
-          }
-        /* Control never gets here */
-        }
-
-      /* If maximizing, find the longest possible run, then work backwards. */
-
-      else
-        {
-        pp = eptr;
-
-#ifdef SUPPORT_UTF8
-        /* UTF-8 mode */
-        if (md->utf8)
-          {
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(c, eptr, len);
-            if (c > 255)
-              {
-              if (op == OP_CLASS) break;
-              }
-            else
-              {
-              if ((data[c/8] & (1 << (c&7))) == 0) break;
-              }
-            eptr += len;
-            }
-          for (;;)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (eptr-- == pp) break;        /* Stop if tried at original pos */
-            BACKCHAR(eptr);
-            }
-          }
-        else
-#endif
-          /* Not UTF-8 mode */
-          {
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject) break;
-            c = *eptr;
-            if ((data[c/8] & (1 << (c&7))) == 0) break;
-            eptr++;
-            }
-          while (eptr >= pp)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            eptr--;
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            }
-          }
-
-        RRETURN(MATCH_NOMATCH);
-        }
-      }
-    /* Control never gets here */
-
-
-    /* Match an extended character class. This opcode is encountered only
-    in UTF-8 mode, because that's the only time it is compiled. */
-
-#ifdef SUPPORT_UTF8
-    case OP_XCLASS:
-      {
-      data = ecode + 1 + LINK_SIZE;                /* Save for matching */
-      ecode += GET(ecode, 1);                      /* Advance past the item */
-
-      switch (*ecode)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        c = *ecode++ - OP_CRSTAR;
-        minimize = (c & 1) != 0;
-        min = rep_min[c];                 /* Pick up values from tables; */
-        max = rep_max[c];                 /* zero for max => infinity */
-        if (max == 0) max = INT_MAX;
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        minimize = (*ecode == OP_CRMINRANGE);
-        min = GET2(ecode, 1);
-        max = GET2(ecode, 3);
-        if (max == 0) max = INT_MAX;
-        ecode += 5;
-        break;
-
-        default:               /* No repeat follows */
-        min = max = 1;
-        break;
-        }
-
-      /* First, ensure the minimum number of matches are present. */
-
-      for (i = 1; i <= min; i++)
-        {
-        if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-        GETCHARINC(c, eptr);
-        if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH);
-        }
-
-      /* If max == min we can continue with the main loop without the
-      need to recurse. */
-
-      if (min == max) continue;
-
-      /* If minimizing, keep testing the rest of the expression and advancing
-      the pointer while it matches the class. */
-
-      if (minimize)
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          GETCHARINC(c, eptr);
-          if (!match_xclass(c, data)) RRETURN(MATCH_NOMATCH);
-          }
-        /* Control never gets here */
-        }
-
-      /* If maximizing, find the longest possible run, then work backwards. */
-
-      else
-        {
-        pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          int len = 1;
-          if (eptr >= md->end_subject) break;
-          GETCHARLEN(c, eptr, len);
-          if (!match_xclass(c, data)) break;
-          eptr += len;
-          }
-        for(;;)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (eptr-- == pp) break;        /* Stop if tried at original pos */
-          BACKCHAR(eptr)
-          }
-        RRETURN(MATCH_NOMATCH);
-        }
-
-      /* Control never gets here */
-      }
-#endif    /* End of XCLASS */
-
-    /* Match a single character, casefully */
-
-    case OP_CHAR:
-#ifdef SUPPORT_UTF8
-    if (md->utf8)
-      {
-      length = 1;
-      ecode++;
-      GETCHARLEN(fc, ecode, length);
-      if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
-      while (length-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH);
-      }
-    else
-#endif
-
-    /* Non-UTF-8 mode */
-      {
-      if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
-      if (ecode[1] != *eptr++) RRETURN(MATCH_NOMATCH);
-      ecode += 2;
-      }
-    break;
-
-    /* Match a single character, caselessly */
-
-    case OP_CHARNC:
-#ifdef SUPPORT_UTF8
-    if (md->utf8)
-      {
-      length = 1;
-      ecode++;
-      GETCHARLEN(fc, ecode, length);
-
-      if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
-
-      /* If the pattern character's value is < 128, we have only one byte, and
-      can use the fast lookup table. */
-
-      if (fc < 128)
-        {
-        if (md->lcc[*ecode++] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
-        }
-
-      /* Otherwise we must pick up the subject character */
-
-      else
-        {
-        int dc;
-        GETCHARINC(dc, eptr);
-        ecode += length;
-
-        /* If we have Unicode property support, we can use it to test the other
-        case of the character, if there is one. The result of ucp_findchar() is
-        < 0 if the char isn't found, and othercase is returned as zero if there
-        isn't one. */
-
-        if (fc != dc)
-          {
-#ifdef SUPPORT_UCP
-          int chartype;
-          int othercase;
-          if (ucp_findchar(fc, &chartype, &othercase) < 0 || dc != othercase)
-#endif
-            RRETURN(MATCH_NOMATCH);
-          }
-        }
-      }
-    else
-#endif   /* SUPPORT_UTF8 */
-
-    /* Non-UTF-8 mode */
-      {
-      if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
-      if (md->lcc[ecode[1]] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
-      ecode += 2;
-      }
-    break;
-
-    /* Match a single character repeatedly; different opcodes share code. */
-
-    case OP_EXACT:
-    min = max = GET2(ecode, 1);
-    ecode += 3;
-    goto REPEATCHAR;
-
-    case OP_UPTO:
-    case OP_MINUPTO:
-    min = 0;
-    max = GET2(ecode, 1);
-    minimize = *ecode == OP_MINUPTO;
-    ecode += 3;
-    goto REPEATCHAR;
-
-    case OP_STAR:
-    case OP_MINSTAR:
-    case OP_PLUS:
-    case OP_MINPLUS:
-    case OP_QUERY:
-    case OP_MINQUERY:
-    c = *ecode++ - OP_STAR;
-    minimize = (c & 1) != 0;
-    min = rep_min[c];                 /* Pick up values from tables; */
-    max = rep_max[c];                 /* zero for max => infinity */
-    if (max == 0) max = INT_MAX;
-
-    /* Common code for all repeated single-character matches. We can give
-    up quickly if there are fewer than the minimum number of characters left in
-    the subject. */
-
-    REPEATCHAR:
-#ifdef SUPPORT_UTF8
-    if (md->utf8)
-      {
-      length = 1;
-      charptr = ecode;
-      GETCHARLEN(fc, ecode, length);
-      if (min * length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
-      ecode += length;
-
-      /* Handle multibyte character matching specially here. There is
-      support for caseless matching if UCP support is present. */
-
-      if (length > 1)
-        {
-        int oclength = 0;
-        uschar occhars[8];
-
-#ifdef SUPPORT_UCP
-        int othercase;
-        int chartype;
-        if ((ims & PCRE_CASELESS) != 0 &&
-             ucp_findchar(fc, &chartype, &othercase) >= 0 &&
-             othercase > 0)
-          oclength = ord2utf8(othercase, occhars);
-#endif  /* SUPPORT_UCP */
-
-        for (i = 1; i <= min; i++)
-          {
-          if (memcmp(eptr, charptr, length) == 0) eptr += length;
-          /* Need braces because of following else */
-          else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
-          else
-            {
-            if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
-            eptr += oclength;
-            }
-          }
-
-        if (min == max) continue;
-
-        if (minimize)
-          {
-          for (fi = min;; fi++)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-            if (memcmp(eptr, charptr, length) == 0) eptr += length;
-            /* Need braces because of following else */
-            else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
-            else
-              {
-              if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
-              eptr += oclength;
-              }
-            }
-          /* Control never gets here */
-          }
-        else
-          {
-          pp = eptr;
-          for (i = min; i < max; i++)
-            {
-            if (eptr > md->end_subject - length) break;
-            if (memcmp(eptr, charptr, length) == 0) eptr += length;
-            else if (oclength == 0) break;
-            else
-              {
-              if (memcmp(eptr, occhars, oclength) != 0) break;
-              eptr += oclength;
-              }
-            }
-          while (eptr >= pp)
-           {
-           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-           eptr -= length;
-           }
-          RRETURN(MATCH_NOMATCH);
-          }
-        /* Control never gets here */
-        }
-
-      /* If the length of a UTF-8 character is 1, we fall through here, and
-      obey the code as for non-UTF-8 characters below, though in this case the
-      value of fc will always be < 128. */
-      }
-    else
-#endif  /* SUPPORT_UTF8 */
-
-    /* When not in UTF-8 mode, load a single-byte character. */
-      {
-      if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
-      fc = *ecode++;
-      }
-
-    /* The value of fc at this point is always less than 256, though we may or
-    may not be in UTF-8 mode. The code is duplicated for the caseless and
-    caseful cases, for speed, since matching characters is likely to be quite
-    common. First, ensure the minimum number of matches are present. If min =
-    max, continue at the same level without recursing. Otherwise, if
-    minimizing, keep trying the rest of the expression and advancing one
-    matching character if failing, up to the maximum. Alternatively, if
-    maximizing, find the maximum number of characters and work backwards. */
-
-    DPRINTF(("matching %c{%d,%d} against subject %.*s\n", fc, min, max,
-      max, eptr));
-
-    if ((ims & PCRE_CASELESS) != 0)
-      {
-      fc = md->lcc[fc];
-      for (i = 1; i <= min; i++)
-        if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
-      if (min == max) continue;
-      if (minimize)
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || eptr >= md->end_subject ||
-              fc != md->lcc[*eptr++])
-            RRETURN(MATCH_NOMATCH);
-          }
-        /* Control never gets here */
-        }
-      else
-        {
-        pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break;
-          eptr++;
-          }
-        while (eptr >= pp)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          eptr--;
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          }
-        RRETURN(MATCH_NOMATCH);
-        }
-      /* Control never gets here */
-      }
-
-    /* Caseful comparisons (includes all multi-byte characters) */
-
-    else
-      {
-      for (i = 1; i <= min; i++) if (fc != *eptr++) RRETURN(MATCH_NOMATCH);
-      if (min == max) continue;
-      if (minimize)
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || eptr >= md->end_subject || fc != *eptr++)
-            RRETURN(MATCH_NOMATCH);
-          }
-        /* Control never gets here */
-        }
-      else
-        {
-        pp = eptr;
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject || fc != *eptr) break;
-          eptr++;
-          }
-        while (eptr >= pp)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          eptr--;
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          }
-        RRETURN(MATCH_NOMATCH);
-        }
-      }
-    /* Control never gets here */
-
-    /* Match a negated single one-byte character. The character we are
-    checking can be multibyte. */
-
-    case OP_NOT:
-    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-    ecode++;
-    GETCHARINCTEST(c, eptr);
-    if ((ims & PCRE_CASELESS) != 0)
-      {
-#ifdef SUPPORT_UTF8
-      if (c < 256)
-#endif
-      c = md->lcc[c];
-      if (md->lcc[*ecode++] == c) RRETURN(MATCH_NOMATCH);
-      }
-    else
-      {
-      if (*ecode++ == c) RRETURN(MATCH_NOMATCH);
-      }
-    break;
-
-    /* Match a negated single one-byte character repeatedly. This is almost a
-    repeat of the code for a repeated single character, but I haven't found a
-    nice way of commoning these up that doesn't require a test of the
-    positive/negative option for each character match. Maybe that wouldn't add
-    very much to the time taken, but character matching *is* what this is all
-    about... */
-
-    case OP_NOTEXACT:
-    min = max = GET2(ecode, 1);
-    ecode += 3;
-    goto REPEATNOTCHAR;
-
-    case OP_NOTUPTO:
-    case OP_NOTMINUPTO:
-    min = 0;
-    max = GET2(ecode, 1);
-    minimize = *ecode == OP_NOTMINUPTO;
-    ecode += 3;
-    goto REPEATNOTCHAR;
-
-    case OP_NOTSTAR:
-    case OP_NOTMINSTAR:
-    case OP_NOTPLUS:
-    case OP_NOTMINPLUS:
-    case OP_NOTQUERY:
-    case OP_NOTMINQUERY:
-    c = *ecode++ - OP_NOTSTAR;
-    minimize = (c & 1) != 0;
-    min = rep_min[c];                 /* Pick up values from tables; */
-    max = rep_max[c];                 /* zero for max => infinity */
-    if (max == 0) max = INT_MAX;
-
-    /* Common code for all repeated single-byte matches. We can give up quickly
-    if there are fewer than the minimum number of bytes left in the
-    subject. */
-
-    REPEATNOTCHAR:
-    if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
-    fc = *ecode++;
-
-    /* The code is duplicated for the caseless and caseful cases, for speed,
-    since matching characters is likely to be quite common. First, ensure the
-    minimum number of matches are present. If min = max, continue at the same
-    level without recursing. Otherwise, if minimizing, keep trying the rest of
-    the expression and advancing one matching character if failing, up to the
-    maximum. Alternatively, if maximizing, find the maximum number of
-    characters and work backwards. */
-
-    DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", fc, min, max,
-      max, eptr));
-
-    if ((ims & PCRE_CASELESS) != 0)
-      {
-      fc = md->lcc[fc];
-
-#ifdef SUPPORT_UTF8
-      /* UTF-8 mode */
-      if (md->utf8)
-        {
-        register int d;
-        for (i = 1; i <= min; i++)
-          {
-          GETCHARINC(d, eptr);
-          if (d < 256) d = md->lcc[d];
-          if (fc == d) RRETURN(MATCH_NOMATCH);
-          }
-        }
-      else
-#endif
-
-      /* Not UTF-8 mode */
-        {
-        for (i = 1; i <= min; i++)
-          if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
-        }
-
-      if (min == max) continue;
-
-      if (minimize)
-        {
-#ifdef SUPPORT_UTF8
-        /* UTF-8 mode */
-        if (md->utf8)
-          {
-          register int d;
-          for (fi = min;; fi++)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            GETCHARINC(d, eptr);
-            if (d < 256) d = md->lcc[d];
-            if (fi >= max || eptr >= md->end_subject || fc == d)
-              RRETURN(MATCH_NOMATCH);
-            }
-          }
-        else
-#endif
-        /* Not UTF-8 mode */
-          {
-          for (fi = min;; fi++)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (fi >= max || eptr >= md->end_subject || fc == md->lcc[*eptr++])
-              RRETURN(MATCH_NOMATCH);
-            }
-          }
-        /* Control never gets here */
-        }
-
-      /* Maximize case */
-
-      else
-        {
-        pp = eptr;
-
-#ifdef SUPPORT_UTF8
-        /* UTF-8 mode */
-        if (md->utf8)
-          {
-          register int d;
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(d, eptr, len);
-            if (d < 256) d = md->lcc[d];
-            if (fc == d) break;
-            eptr += len;
-            }
-          for(;;)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (eptr-- == pp) break;        /* Stop if tried at original pos */
-            BACKCHAR(eptr);
-            }
-          }
-        else
-#endif
-        /* Not UTF-8 mode */
-          {
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break;
-            eptr++;
-            }
-          while (eptr >= pp)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            eptr--;
-            }
-          }
-
-        RRETURN(MATCH_NOMATCH);
-        }
-      /* Control never gets here */
-      }
-
-    /* Caseful comparisons */
-
-    else
-      {
-#ifdef SUPPORT_UTF8
-      /* UTF-8 mode */
-      if (md->utf8)
-        {
-        register int d;
-        for (i = 1; i <= min; i++)
-          {
-          GETCHARINC(d, eptr);
-          if (fc == d) RRETURN(MATCH_NOMATCH);
-          }
-        }
-      else
-#endif
-      /* Not UTF-8 mode */
-        {
-        for (i = 1; i <= min; i++)
-          if (fc == *eptr++) RRETURN(MATCH_NOMATCH);
-        }
-
-      if (min == max) continue;
-
-      if (minimize)
-        {
-#ifdef SUPPORT_UTF8
-        /* UTF-8 mode */
-        if (md->utf8)
-          {
-          register int d;
-          for (fi = min;; fi++)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            GETCHARINC(d, eptr);
-            if (fi >= max || eptr >= md->end_subject || fc == d)
-              RRETURN(MATCH_NOMATCH);
-            }
-          }
-        else
-#endif
-        /* Not UTF-8 mode */
-          {
-          for (fi = min;; fi++)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (fi >= max || eptr >= md->end_subject || fc == *eptr++)
-              RRETURN(MATCH_NOMATCH);
-            }
-          }
-        /* Control never gets here */
-        }
-
-      /* Maximize case */
-
-      else
-        {
-        pp = eptr;
-
-#ifdef SUPPORT_UTF8
-        /* UTF-8 mode */
-        if (md->utf8)
-          {
-          register int d;
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(d, eptr, len);
-            if (fc == d) break;
-            eptr += len;
-            }
-          for(;;)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            if (eptr-- == pp) break;        /* Stop if tried at original pos */
-            BACKCHAR(eptr);
-            }
-          }
-        else
-#endif
-        /* Not UTF-8 mode */
-          {
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || fc == *eptr) break;
-            eptr++;
-            }
-          while (eptr >= pp)
-            {
-            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-            eptr--;
-            }
-          }
-
-        RRETURN(MATCH_NOMATCH);
-        }
-      }
-    /* Control never gets here */
-
-    /* Match a single character type repeatedly; several different opcodes
-    share code. This is very similar to the code for single characters, but we
-    repeat it in the interests of efficiency. */
-
-    case OP_TYPEEXACT:
-    min = max = GET2(ecode, 1);
-    minimize = TRUE;
-    ecode += 3;
-    goto REPEATTYPE;
-
-    case OP_TYPEUPTO:
-    case OP_TYPEMINUPTO:
-    min = 0;
-    max = GET2(ecode, 1);
-    minimize = *ecode == OP_TYPEMINUPTO;
-    ecode += 3;
-    goto REPEATTYPE;
-
-    case OP_TYPESTAR:
-    case OP_TYPEMINSTAR:
-    case OP_TYPEPLUS:
-    case OP_TYPEMINPLUS:
-    case OP_TYPEQUERY:
-    case OP_TYPEMINQUERY:
-    c = *ecode++ - OP_TYPESTAR;
-    minimize = (c & 1) != 0;
-    min = rep_min[c];                 /* Pick up values from tables; */
-    max = rep_max[c];                 /* zero for max => infinity */
-    if (max == 0) max = INT_MAX;
-
-    /* Common code for all repeated single character type matches. Note that
-    in UTF-8 mode, '.' matches a character of any length, but for the other
-    character types, the valid characters are all one-byte long. */
-
-    REPEATTYPE:
-    ctype = *ecode++;      /* Code for the character type */
-
-#ifdef SUPPORT_UCP
-    if (ctype == OP_PROP || ctype == OP_NOTPROP)
-      {
-      prop_fail_result = ctype == OP_NOTPROP;
-      prop_type = *ecode++;
-      if (prop_type >= 128)
-        {
-        prop_test_against = prop_type - 128;
-        prop_test_variable = &prop_category;
-        }
-      else
-        {
-        prop_test_against = prop_type;
-        prop_test_variable = &prop_chartype;
-        }
-      }
-    else prop_type = -1;
-#endif
-
-    /* First, ensure the minimum number of matches are present. Use inline
-    code for maximizing the speed, and do the type test once at the start
-    (i.e. keep it out of the loop). Also we can test that there are at least
-    the minimum number of bytes before we start. This isn't as effective in
-    UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that
-    is tidier. Also separate the UCP code, which can be the same for both UTF-8
-    and single-bytes. */
-
-    if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
-    if (min > 0)
-      {
-#ifdef SUPPORT_UCP
-      if (prop_type > 0)
-        {
-        for (i = 1; i <= min; i++)
-          {
-          GETCHARINC(c, eptr);
-          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
-            RRETURN(MATCH_NOMATCH);
-          }
-        }
-
-      /* Match extended Unicode sequences. We will get here only if the
-      support is in the binary; otherwise a compile-time error occurs. */
-
-      else if (ctype == OP_EXTUNI)
-        {
-        for (i = 1; i <= min; i++)
-          {
-          GETCHARINCTEST(c, eptr);
-          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-          if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
-          while (eptr < md->end_subject)
-            {
-            int len = 1;
-            if (!md->utf8) c = *eptr; else
-              {
-              GETCHARLEN(c, eptr, len);
-              }
-            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-            if (prop_category != ucp_M) break;
-            eptr += len;
-            }
-          }
-        }
-
-      else
-#endif     /* SUPPORT_UCP */
-
-/* Handle all other cases when the coding is UTF-8 */
-
-#ifdef SUPPORT_UTF8
-      if (md->utf8) switch(ctype)
-        {
-        case OP_ANY:
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject ||
-             (*eptr++ == NEWLINE && (ims & PCRE_DOTALL) == 0))
-            RRETURN(MATCH_NOMATCH);
-          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-          }
-        break;
-
-        case OP_ANYBYTE:
-        eptr += min;
-        break;
-
-        case OP_NOT_DIGIT:
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          GETCHARINC(c, eptr);
-          if (c < 128 && (md->ctypes[c] & ctype_digit) != 0)
-            RRETURN(MATCH_NOMATCH);
-          }
-        break;
-
-        case OP_DIGIT:
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject ||
-             *eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0)
-            RRETURN(MATCH_NOMATCH);
-          /* No need to skip more bytes - we know it's a 1-byte character */
-          }
-        break;
-
-        case OP_NOT_WHITESPACE:
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject ||
-             (*eptr < 128 && (md->ctypes[*eptr++] & ctype_space) != 0))
-            RRETURN(MATCH_NOMATCH);
-          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-          }
-        break;
-
-        case OP_WHITESPACE:
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject ||
-             *eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0)
-            RRETURN(MATCH_NOMATCH);
-          /* No need to skip more bytes - we know it's a 1-byte character */
-          }
-        break;
-
-        case OP_NOT_WORDCHAR:
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject ||
-             (*eptr < 128 && (md->ctypes[*eptr++] & ctype_word) != 0))
-            RRETURN(MATCH_NOMATCH);
-          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-          }
-        break;
-
-        case OP_WORDCHAR:
-        for (i = 1; i <= min; i++)
-          {
-          if (eptr >= md->end_subject ||
-             *eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0)
-            RRETURN(MATCH_NOMATCH);
-          /* No need to skip more bytes - we know it's a 1-byte character */
-          }
-        break;
-
-        default:
-        RRETURN(PCRE_ERROR_INTERNAL);
-        }  /* End switch(ctype) */
-
-      else
-#endif     /* SUPPORT_UTF8 */
-
-      /* Code for the non-UTF-8 case for minimum matching of operators other
-      than OP_PROP and OP_NOTPROP. */
-
-      switch(ctype)
-        {
-        case OP_ANY:
-        if ((ims & PCRE_DOTALL) == 0)
-          {
-          for (i = 1; i <= min; i++)
-            if (*eptr++ == NEWLINE) RRETURN(MATCH_NOMATCH);
-          }
-        else eptr += min;
-        break;
-
-        case OP_ANYBYTE:
-        eptr += min;
-        break;
-
-        case OP_NOT_DIGIT:
-        for (i = 1; i <= min; i++)
-          if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
-        break;
-
-        case OP_DIGIT:
-        for (i = 1; i <= min; i++)
-          if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
-        break;
-
-        case OP_NOT_WHITESPACE:
-        for (i = 1; i <= min; i++)
-          if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
-        break;
-
-        case OP_WHITESPACE:
-        for (i = 1; i <= min; i++)
-          if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
-        break;
-
-        case OP_NOT_WORDCHAR:
-        for (i = 1; i <= min; i++)
-          if ((md->ctypes[*eptr++] & ctype_word) != 0)
-            RRETURN(MATCH_NOMATCH);
-        break;
-
-        case OP_WORDCHAR:
-        for (i = 1; i <= min; i++)
-          if ((md->ctypes[*eptr++] & ctype_word) == 0)
-            RRETURN(MATCH_NOMATCH);
-        break;
-
-        default:
-        RRETURN(PCRE_ERROR_INTERNAL);
-        }
-      }
-
-    /* If min = max, continue at the same level without recursing */
-
-    if (min == max) continue;
-
-    /* If minimizing, we have to test the rest of the pattern before each
-    subsequent match. Again, separate the UTF-8 case for speed, and also
-    separate the UCP cases. */
-
-    if (minimize)
-      {
-#ifdef SUPPORT_UCP
-      if (prop_type > 0)
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          GETCHARINC(c, eptr);
-          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
-            RRETURN(MATCH_NOMATCH);
-          }
-        }
-
-      /* Match extended Unicode sequences. We will get here only if the
-      support is in the binary; otherwise a compile-time error occurs. */
-
-      else if (ctype == OP_EXTUNI)
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          GETCHARINCTEST(c, eptr);
-          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-          if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
-          while (eptr < md->end_subject)
-            {
-            int len = 1;
-            if (!md->utf8) c = *eptr; else
-              {
-              GETCHARLEN(c, eptr, len);
-              }
-            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-            if (prop_category != ucp_M) break;
-            eptr += len;
-            }
-          }
-        }
-
-      else
-#endif     /* SUPPORT_UCP */
-
-#ifdef SUPPORT_UTF8
-      /* UTF-8 mode */
-      if (md->utf8)
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-
-          GETCHARINC(c, eptr);
-          switch(ctype)
-            {
-            case OP_ANY:
-            if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_ANYBYTE:
-            break;
-
-            case OP_NOT_DIGIT:
-            if (c < 256 && (md->ctypes[c] & ctype_digit) != 0)
-              RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_DIGIT:
-            if (c >= 256 || (md->ctypes[c] & ctype_digit) == 0)
-              RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_NOT_WHITESPACE:
-            if (c < 256 && (md->ctypes[c] & ctype_space) != 0)
-              RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_WHITESPACE:
-            if  (c >= 256 || (md->ctypes[c] & ctype_space) == 0)
-              RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_NOT_WORDCHAR:
-            if (c < 256 && (md->ctypes[c] & ctype_word) != 0)
-              RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_WORDCHAR:
-            if (c >= 256 && (md->ctypes[c] & ctype_word) == 0)
-              RRETURN(MATCH_NOMATCH);
-            break;
-
-            default:
-            RRETURN(PCRE_ERROR_INTERNAL);
-            }
-          }
-        }
-      else
-#endif
-      /* Not UTF-8 mode */
-        {
-        for (fi = min;; fi++)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
-          c = *eptr++;
-          switch(ctype)
-            {
-            case OP_ANY:
-            if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_ANYBYTE:
-            break;
-
-            case OP_NOT_DIGIT:
-            if ((md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_DIGIT:
-            if ((md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_NOT_WHITESPACE:
-            if ((md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_WHITESPACE:
-            if  ((md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_NOT_WORDCHAR:
-            if ((md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH);
-            break;
-
-            case OP_WORDCHAR:
-            if ((md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH);
-            break;
-
-            default:
-            RRETURN(PCRE_ERROR_INTERNAL);
-            }
-          }
-        }
-      /* Control never gets here */
-      }
-
-    /* If maximizing it is worth using inline code for speed, doing the type
-    test once at the start (i.e. keep it out of the loop). Again, keep the
-    UTF-8 and UCP stuff separate. */
-
-    else
-      {
-      pp = eptr;  /* Remember where we started */
-
-#ifdef SUPPORT_UCP
-      if (prop_type > 0)
-        {
-        for (i = min; i < max; i++)
-          {
-          int len = 1;
-          if (eptr >= md->end_subject) break;
-          GETCHARLEN(c, eptr, len);
-          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
-            break;
-          eptr+= len;
-          }
-
-        /* eptr is now past the end of the maximum run */
-
-        for(;;)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (eptr-- == pp) break;        /* Stop if tried at original pos */
-          BACKCHAR(eptr);
-          }
-        }
-
-      /* Match extended Unicode sequences. We will get here only if the
-      support is in the binary; otherwise a compile-time error occurs. */
-
-      else if (ctype == OP_EXTUNI)
-        {
-        for (i = min; i < max; i++)
-          {
-          if (eptr >= md->end_subject) break;
-          GETCHARINCTEST(c, eptr);
-          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-          if (prop_category == ucp_M) break;
-          while (eptr < md->end_subject)
-            {
-            int len = 1;
-            if (!md->utf8) c = *eptr; else
-              {
-              GETCHARLEN(c, eptr, len);
-              }
-            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-            if (prop_category != ucp_M) break;
-            eptr += len;
-            }
-          }
-
-        /* eptr is now past the end of the maximum run */
-
-        for(;;)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (eptr-- == pp) break;        /* Stop if tried at original pos */
-          for (;;)                        /* Move back over one extended */
-            {
-            int len = 1;
-            BACKCHAR(eptr);
-            if (!md->utf8) c = *eptr; else
-              {
-              GETCHARLEN(c, eptr, len);
-              }
-            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
-            if (prop_category != ucp_M) break;
-            eptr--;
-            }
-          }
-        }
-
-      else
-#endif   /* SUPPORT_UCP */
-
-#ifdef SUPPORT_UTF8
-      /* UTF-8 mode */
-
-      if (md->utf8)
-        {
-        switch(ctype)
-          {
-          case OP_ANY:
-
-          /* Special code is required for UTF8, but when the maximum is unlimited
-          we don't need it, so we repeat the non-UTF8 code. This is probably
-          worth it, because .* is quite a common idiom. */
-
-          if (max < INT_MAX)
-            {
-            if ((ims & PCRE_DOTALL) == 0)
-              {
-              for (i = min; i < max; i++)
-                {
-                if (eptr >= md->end_subject || *eptr == NEWLINE) break;
-                eptr++;
-                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-                }
-              }
-            else
-              {
-              for (i = min; i < max; i++)
-                {
-                eptr++;
-                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
-                }
-              }
-            }
-
-          /* Handle unlimited UTF-8 repeat */
-
-          else
-            {
-            if ((ims & PCRE_DOTALL) == 0)
-              {
-              for (i = min; i < max; i++)
-                {
-                if (eptr >= md->end_subject || *eptr == NEWLINE) break;
-                eptr++;
-                }
-              break;
-              }
-            else
-              {
-              c = max - min;
-              if (c > md->end_subject - eptr) c = md->end_subject - eptr;
-              eptr += c;
-              }
-            }
-          break;
-
-          /* The byte case is the same as non-UTF8 */
-
-          case OP_ANYBYTE:
-          c = max - min;
-          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
-          eptr += c;
-          break;
-
-          case OP_NOT_DIGIT:
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(c, eptr, len);
-            if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break;
-            eptr+= len;
-            }
-          break;
-
-          case OP_DIGIT:
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(c, eptr, len);
-            if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break;
-            eptr+= len;
-            }
-          break;
-
-          case OP_NOT_WHITESPACE:
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(c, eptr, len);
-            if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break;
-            eptr+= len;
-            }
-          break;
-
-          case OP_WHITESPACE:
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(c, eptr, len);
-            if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break;
-            eptr+= len;
-            }
-          break;
-
-          case OP_NOT_WORDCHAR:
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(c, eptr, len);
-            if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break;
-            eptr+= len;
-            }
-          break;
-
-          case OP_WORDCHAR:
-          for (i = min; i < max; i++)
-            {
-            int len = 1;
-            if (eptr >= md->end_subject) break;
-            GETCHARLEN(c, eptr, len);
-            if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break;
-            eptr+= len;
-            }
-          break;
-
-          default:
-          RRETURN(PCRE_ERROR_INTERNAL);
-          }
-
-        /* eptr is now past the end of the maximum run */
-
-        for(;;)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          if (eptr-- == pp) break;        /* Stop if tried at original pos */
-          BACKCHAR(eptr);
-          }
-        }
-      else
-#endif
-
-      /* Not UTF-8 mode */
-        {
-        switch(ctype)
-          {
-          case OP_ANY:
-          if ((ims & PCRE_DOTALL) == 0)
-            {
-            for (i = min; i < max; i++)
-              {
-              if (eptr >= md->end_subject || *eptr == NEWLINE) break;
-              eptr++;
-              }
-            break;
-            }
-          /* For DOTALL case, fall through and treat as \C */
-
-          case OP_ANYBYTE:
-          c = max - min;
-          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
-          eptr += c;
-          break;
-
-          case OP_NOT_DIGIT:
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
-              break;
-            eptr++;
-            }
-          break;
-
-          case OP_DIGIT:
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
-              break;
-            eptr++;
-            }
-          break;
-
-          case OP_NOT_WHITESPACE:
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
-              break;
-            eptr++;
-            }
-          break;
-
-          case OP_WHITESPACE:
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
-              break;
-            eptr++;
-            }
-          break;
-
-          case OP_NOT_WORDCHAR:
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
-              break;
-            eptr++;
-            }
-          break;
-
-          case OP_WORDCHAR:
-          for (i = min; i < max; i++)
-            {
-            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
-              break;
-            eptr++;
-            }
-          break;
-
-          default:
-          RRETURN(PCRE_ERROR_INTERNAL);
-          }
-
-        /* eptr is now past the end of the maximum run */
-
-        while (eptr >= pp)
-          {
-          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
-          eptr--;
-          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
-          }
-        }
-
-      /* Get here if we can't make it match with any permitted repetitions */
-
-      RRETURN(MATCH_NOMATCH);
-      }
-    /* Control never gets here */
-
-    /* There's been some horrible disaster. Since all codes > OP_BRA are
-    for capturing brackets, and there shouldn't be any gaps between 0 and
-    OP_BRA, arrival here can only mean there is something seriously wrong
-    in the code above or the OP_xxx definitions. */
-
-    default:
-    DPRINTF(("Unknown opcode %d\n", *ecode));
-    RRETURN(PCRE_ERROR_UNKNOWN_NODE);
-    }
-
-  /* Do not stick any code in here without much thought; it is assumed
-  that "continue" in the code above comes out to here to repeat the main
-  loop. */
-
-  }             /* End of main loop */
-/* Control never reaches here */
-}
-
-
-/***************************************************************************
-****************************************************************************
-                   RECURSION IN THE match() FUNCTION
-
-Undefine all the macros that were defined above to handle this. */
-
-#ifdef NO_RECURSE
-#undef eptr
-#undef ecode
-#undef offset_top
-#undef ims
-#undef eptrb
-#undef flags
-
-#undef callpat
-#undef charptr
-#undef data
-#undef next
-#undef pp
-#undef prev
-#undef saved_eptr
-
-#undef new_recursive
-
-#undef cur_is_word
-#undef condition
-#undef minimize
-#undef prev_is_word
-
-#undef original_ims
-
-#undef ctype
-#undef length
-#undef max
-#undef min
-#undef number
-#undef offset
-#undef op
-#undef save_capture_last
-#undef save_offset1
-#undef save_offset2
-#undef save_offset3
-#undef stacksave
-
-#undef newptrb
-
-#endif
-
-/* These two are defined as macros in both cases */
-
-#undef fc
-#undef fi
-
-/***************************************************************************
-***************************************************************************/
-
-
-
-/*************************************************
-*         Execute a Regular Expression           *
-*************************************************/
-
-/* This function applies a compiled re to a subject string and picks out
-portions of the string if it matches. Two elements in the vector are set for
-each substring: the offsets to the start and end of the substring.
-
-Arguments:
-  argument_re     points to the compiled expression
-  extra_data      points to extra data or is NULL
-  subject         points to the subject string
-  length          length of subject string (may contain binary zeros)
-  start_offset    where to start in the subject string
-  options         option bits
-  offsets         points to a vector of ints to be filled in with offsets
-  offsetcount     the number of elements in the vector
-
-Returns:          > 0 => success; value is the number of elements filled in
-                  = 0 => success, but offsets is not big enough
-                   -1 => failed to match
-                 < -1 => some kind of unexpected problem
-*/
-
-EXPORT int
-pcre_exec(const pcre *argument_re, const pcre_extra *extra_data,
-  const char *subject, int length, int start_offset, int options, int *offsets,
-  int offsetcount)
-{
-int rc, resetcount, ocount;
-int first_byte = -1;
-int req_byte = -1;
-int req_byte2 = -1;
-unsigned long int ims = 0;
-BOOL using_temporary_offsets = FALSE;
-BOOL anchored;
-BOOL startline;
-BOOL first_byte_caseless = FALSE;
-BOOL req_byte_caseless = FALSE;
-match_data match_block;
-const uschar *tables;
-const uschar *start_bits = NULL;
-const uschar *start_match = (const uschar *)subject + start_offset;
-const uschar *end_subject;
-const uschar *req_byte_ptr = start_match - 1;
-
-pcre_study_data internal_study;
-const pcre_study_data *study;
-
-real_pcre internal_re;
-const real_pcre *external_re = (const real_pcre *)argument_re;
-const real_pcre *re = external_re;
-
-/* Plausibility checks */
-
-if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
-if (re == NULL || subject == NULL ||
-   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
-if (offsetcount < 0) return PCRE_ERROR_BADCOUNT;
-
-/* Fish out the optional data from the extra_data structure, first setting
-the default values. */
-
-study = NULL;
-match_block.match_limit = MATCH_LIMIT;
-match_block.callout_data = NULL;
-
-/* The table pointer is always in native byte order. */
-
-tables = external_re->tables;
-
-if (extra_data != NULL)
-  {
-  register unsigned int flags = extra_data->flags;
-  if ((flags & PCRE_EXTRA_STUDY_DATA) != 0)
-    study = (const pcre_study_data *)extra_data->study_data;
-  if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0)
-    match_block.match_limit = extra_data->match_limit;
-  if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)
-    match_block.callout_data = extra_data->callout_data;
-  if ((flags & PCRE_EXTRA_TABLES) != 0) tables = extra_data->tables;
-  }
-
-/* If the exec call supplied NULL for tables, use the inbuilt ones. This
-is a feature that makes it possible to save compiled regex and re-use them
-in other programs later. */
-
-if (tables == NULL) tables = pcre_default_tables;
-
-/* Check that the first field in the block is the magic number. If it is not,
-test for a regex that was compiled on a host of opposite endianness. If this is
-the case, flipped values are put in internal_re and internal_study if there was
-study data too. */
-
-if (re->magic_number != MAGIC_NUMBER)
-  {
-  re = try_flipped(re, &internal_re, study, &internal_study);
-  if (re == NULL) return PCRE_ERROR_BADMAGIC;
-  if (study != NULL) study = &internal_study;
-  }
-
-/* Set up other data */
-
-anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
-startline = (re->options & PCRE_STARTLINE) != 0;
-
-/* The code starts after the real_pcre block and the capture name table. */
-
-match_block.start_code = (const uschar *)external_re + re->name_table_offset +
-  re->name_count * re->name_entry_size;
-
-match_block.start_subject = (const uschar *)subject;
-match_block.start_offset = start_offset;
-match_block.end_subject = match_block.start_subject + length;
-end_subject = match_block.end_subject;
-
-match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
-match_block.utf8 = (re->options & PCRE_UTF8) != 0;
-
-match_block.notbol = (options & PCRE_NOTBOL) != 0;
-match_block.noteol = (options & PCRE_NOTEOL) != 0;
-match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
-match_block.partial = (options & PCRE_PARTIAL) != 0;
-match_block.hitend = FALSE;
-
-match_block.recursive = NULL;                   /* No recursion at top level */
-
-match_block.lcc = tables + lcc_offset;
-match_block.ctypes = tables + ctypes_offset;
-
-/* Partial matching is supported only for a restricted set of regexes at the
-moment. */
-
-if (match_block.partial && (re->options & PCRE_NOPARTIAL) != 0)
-  return PCRE_ERROR_BADPARTIAL;
-
-/* Check a UTF-8 string if required. Unfortunately there's no way of passing
-back the character offset. */
-
-#ifdef SUPPORT_UTF8
-if (match_block.utf8 && (options & PCRE_NO_UTF8_CHECK) == 0)
-  {
-  if (valid_utf8((uschar *)subject, length) >= 0)
-    return PCRE_ERROR_BADUTF8;
-  if (start_offset > 0 && start_offset < length)
-    {
-    int tb = ((uschar *)subject)[start_offset];
-    if (tb > 127)
-      {
-      tb &= 0xc0;
-      if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET;
-      }
-    }
-  }
-#endif
-
-/* The ims options can vary during the matching as a result of the presence
-of (?ims) items in the pattern. They are kept in a local variable so that
-restoring at the exit of a group is easy. */
-
-ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
-
-/* If the expression has got more back references than the offsets supplied can
-hold, we get a temporary chunk of working store to use during the matching.
-Otherwise, we can use the vector supplied, rounding down its size to a multiple
-of 3. */
-
-ocount = offsetcount - (offsetcount % 3);
-
-if (re->top_backref > 0 && re->top_backref >= ocount/3)
-  {
-  ocount = re->top_backref * 3 + 3;
-  match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
-  if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
-  using_temporary_offsets = TRUE;
-  DPRINTF(("Got memory to hold back references\n"));
-  }
-else match_block.offset_vector = offsets;
-
-match_block.offset_end = ocount;
-match_block.offset_max = (2*ocount)/3;
-match_block.offset_overflow = FALSE;
-match_block.capture_last = -1;
-
-/* Compute the minimum number of offsets that we need to reset each time. Doing
-this makes a huge difference to execution time when there aren't many brackets
-in the pattern. */
-
-resetcount = 2 + re->top_bracket * 2;
-if (resetcount > offsetcount) resetcount = ocount;
-
-/* Reset the working variable associated with each extraction. These should
-never be used unless previously set, but they get saved and restored, and so we
-initialize them to avoid reading uninitialized locations. */
-
-if (match_block.offset_vector != NULL)
-  {
-  register int *iptr = match_block.offset_vector + ocount;
-  register int *iend = iptr - resetcount/2 + 1;
-  while (--iptr >= iend) *iptr = -1;
-  }
-
-/* Set up the first character to match, if available. The first_byte value is
-never set for an anchored regular expression, but the anchoring may be forced
-at run time, so we have to test for anchoring. The first char may be unset for
-an unanchored pattern, of course. If there's no first char and the pattern was
-studied, there may be a bitmap of possible first characters. */
-
-if (!anchored)
-  {
-  if ((re->options & PCRE_FIRSTSET) != 0)
-    {
-    first_byte = re->first_byte & 255;
-    if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE)
-      first_byte = match_block.lcc[first_byte];
-    }
-  else
-    if (!startline && study != NULL &&
-      (study->options & PCRE_STUDY_MAPPED) != 0)
-        start_bits = study->start_bits;
-  }
-
-/* For anchored or unanchored matches, there may be a "last known required
-character" set. */
-
-if ((re->options & PCRE_REQCHSET) != 0)
-  {
-  req_byte = re->req_byte & 255;
-  req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0;
-  req_byte2 = (tables + fcc_offset)[req_byte];  /* case flipped */
-  }
-
-/* Loop for handling unanchored repeated matching attempts; for anchored regexs
-the loop runs just once. */
-
-do
-  {
-  /* Reset the maximum number of extractions we might see. */
-
-  if (match_block.offset_vector != NULL)
-    {
-    register int *iptr = match_block.offset_vector;
-    register int *iend = iptr + resetcount;
-    while (iptr < iend) *iptr++ = -1;
-    }
-
-  /* Advance to a unique first char if possible */
-
-  if (first_byte >= 0)
-    {
-    if (first_byte_caseless)
-      while (start_match < end_subject &&
-             match_block.lcc[*start_match] != first_byte)
-        start_match++;
-    else
-      while (start_match < end_subject && *start_match != first_byte)
-        start_match++;
-    }
-
-  /* Or to just after \n for a multiline match if possible */
-
-  else if (startline)
-    {
-    if (start_match > match_block.start_subject + start_offset)
-      {
-      while (start_match < end_subject && start_match[-1] != NEWLINE)
-        start_match++;
-      }
-    }
-
-  /* Or to a non-unique first char after study */
-
-  else if (start_bits != NULL)
-    {
-    while (start_match < end_subject)
-      {
-      register unsigned int c = *start_match;
-      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
-      }
-    }
-
-#ifdef DEBUG  /* Sigh. Some compilers never learn. */
-  printf(">>>> Match against: ");
-  pchars(start_match, end_subject - start_match, TRUE, &match_block);
-  printf("\n");
-#endif
-
-  /* If req_byte is set, we know that that character must appear in the subject
-  for the match to succeed. If the first character is set, req_byte must be
-  later in the subject; otherwise the test starts at the match point. This
-  optimization can save a huge amount of backtracking in patterns with nested
-  unlimited repeats that aren't going to match. Writing separate code for
-  cased/caseless versions makes it go faster, as does using an autoincrement
-  and backing off on a match.
-
-  HOWEVER: when the subject string is very, very long, searching to its end can
-  take a long time, and give bad performance on quite ordinary patterns. This
-  showed up when somebody was matching /^C/ on a 32-megabyte string... so we
-  don't do this when the string is sufficiently long.
-
-  ALSO: this processing is disabled when partial matching is requested.
-  */
-
-  if (req_byte >= 0 &&
-      end_subject - start_match < REQ_BYTE_MAX &&
-      !match_block.partial)
-    {
-    register const uschar *p = start_match + ((first_byte >= 0)? 1 : 0);
-
-    /* We don't need to repeat the search if we haven't yet reached the
-    place we found it at last time. */
-
-    if (p > req_byte_ptr)
-      {
-      if (req_byte_caseless)
-        {
-        while (p < end_subject)
-          {
-          register int pp = *p++;
-          if (pp == req_byte || pp == req_byte2) { p--; break; }
-          }
-        }
-      else
-        {
-        while (p < end_subject)
-          {
-          if (*p++ == req_byte) { p--; break; }
-          }
-        }
-
-      /* If we can't find the required character, break the matching loop */
-
-      if (p >= end_subject) break;
-
-      /* If we have found the required character, save the point where we
-      found it, so that we don't search again next time round the loop if
-      the start hasn't passed this character yet. */
-
-      req_byte_ptr = p;
-      }
-    }
-
-  /* When a match occurs, substrings will be set for all internal extractions;
-  we just need to set up the whole thing as substring 0 before returning. If
-  there were too many extractions, set the return code to zero. In the case
-  where we had to get some local store to hold offsets for backreferences, copy
-  those back references that we can. In this case there need not be overflow
-  if certain parts of the pattern were not used. */
-
-  match_block.start_match = start_match;
-  match_block.match_call_count = 0;
-
-  rc = match(start_match, match_block.start_code, 2, &match_block, ims, NULL,
-    match_isgroup);
-
-  if (rc == MATCH_NOMATCH)
-    {
-    start_match++;
-#ifdef SUPPORT_UTF8
-    if (match_block.utf8)
-      while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
-        start_match++;
-#endif
-    continue;
-    }
-
-  if (rc != MATCH_MATCH)
-    {
-    DPRINTF((">>>> error: returning %d\n", rc));
-    return rc;
-    }
-
-  /* We have a match! Copy the offset information from temporary store if
-  necessary */
-
-  if (using_temporary_offsets)
-    {
-    if (offsetcount >= 4)
-      {
-      memcpy(offsets + 2, match_block.offset_vector + 2,
-        (offsetcount - 2) * sizeof(int));
-      DPRINTF(("Copied offsets from temporary memory\n"));
-      }
-    if (match_block.end_offset_top > offsetcount)
-      match_block.offset_overflow = TRUE;
-
-    DPRINTF(("Freeing temporary memory\n"));
-    (pcre_free)(match_block.offset_vector);
-    }
-
-  rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
-
-  if (offsetcount < 2) rc = 0; else
-    {
-    offsets[0] = start_match - match_block.start_subject;
-    offsets[1] = match_block.end_match_ptr - match_block.start_subject;
-    }
-
-  DPRINTF((">>>> returning %d\n", rc));
-  return rc;
-  }
-
-/* This "while" is the end of the "do" above */
-
-while (!anchored && start_match <= end_subject);
-
-if (using_temporary_offsets)
-  {
-  DPRINTF(("Freeing temporary memory\n"));
-  (pcre_free)(match_block.offset_vector);
-  }
-
-if (match_block.partial && match_block.hitend)
-  {
-  DPRINTF((">>>> returning PCRE_ERROR_PARTIAL\n"));
-  return PCRE_ERROR_PARTIAL;
-  }
-else
-  {
-  DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n"));
-  return PCRE_ERROR_NOMATCH;
-  }
-}
-
-/* End of pcre.c */
diff -Nurp tin-1.7.8/pcre/pcre.def tin-1.7.9/pcre/pcre.def
--- tin-1.7.8/pcre/pcre.def	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/pcre.def	1970-01-01 01:00:00.000000000 +0100
@@ -1,22 +0,0 @@
-EXPORTS
-
-pcre_malloc DATA
-pcre_free DATA
-
-pcre_compile
-pcre_copy_substring
-pcre_exec
-pcre_get_substring
-pcre_get_substring_list
-pcre_free_substring
-pcre_free_substring_list
-pcre_info
-pcre_fullinfo
-pcre_maketables
-pcre_study
-pcre_version
-
-regcomp
-regexec
-regerror
-regfree
diff -Nurp tin-1.7.8/pcre/pcre.in tin-1.7.9/pcre/pcre.in
--- tin-1.7.8/pcre/pcre.in	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/pcre.in	2005-06-28 10:31:26.138195590 +0200
@@ -5,7 +5,7 @@
 /* In its original form, this is the .in file that is transformed by
 "configure" into pcre.h.
 
-           Copyright (c) 1997-2004 University of Cambridge
+           Copyright (c) 1997-2005 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
@@ -46,7 +46,7 @@ make changes to pcre.in. */
 #define PCRE_MINOR          @PCRE_MINOR@
 #define PCRE_DATE           @PCRE_DATE@
 
-/* Win32 uses DLL by default */
+/* Win32 uses DLL by default; it needs special stuff for exported functions. */
 
 #ifdef _WIN32
 #  ifdef PCRE_DEFINITION
@@ -59,8 +59,15 @@ make changes to pcre.in. */
 #    endif
 #  endif
 #endif
+
+/* For other operating systems, we use the standard "extern". */
+
 #ifndef PCRE_DATA_SCOPE
-#  define PCRE_DATA_SCOPE     extern
+#  ifdef __cplusplus
+#    define PCRE_DATA_SCOPE     extern "C"
+#  else
+#    define PCRE_DATA_SCOPE     extern
+#  endif
 #endif
 
 /* Have to include stdlib.h in order to ensure that size_t is defined;
@@ -76,22 +83,25 @@ extern "C" {
 
 /* Options */
 
-#define PCRE_CASELESS           0x0001
-#define PCRE_MULTILINE          0x0002
-#define PCRE_DOTALL             0x0004
-#define PCRE_EXTENDED           0x0008
-#define PCRE_ANCHORED           0x0010
-#define PCRE_DOLLAR_ENDONLY     0x0020
-#define PCRE_EXTRA              0x0040
-#define PCRE_NOTBOL             0x0080
-#define PCRE_NOTEOL             0x0100
-#define PCRE_UNGREEDY           0x0200
-#define PCRE_NOTEMPTY           0x0400
-#define PCRE_UTF8               0x0800
-#define PCRE_NO_AUTO_CAPTURE    0x1000
-#define PCRE_NO_UTF8_CHECK      0x2000
-#define PCRE_AUTO_CALLOUT       0x4000
-#define PCRE_PARTIAL            0x8000
+#define PCRE_CASELESS           0x00000001
+#define PCRE_MULTILINE          0x00000002
+#define PCRE_DOTALL             0x00000004
+#define PCRE_EXTENDED           0x00000008
+#define PCRE_ANCHORED           0x00000010
+#define PCRE_DOLLAR_ENDONLY     0x00000020
+#define PCRE_EXTRA              0x00000040
+#define PCRE_NOTBOL             0x00000080
+#define PCRE_NOTEOL             0x00000100
+#define PCRE_UNGREEDY           0x00000200
+#define PCRE_NOTEMPTY           0x00000400
+#define PCRE_UTF8               0x00000800
+#define PCRE_NO_AUTO_CAPTURE    0x00001000
+#define PCRE_NO_UTF8_CHECK      0x00002000
+#define PCRE_AUTO_CALLOUT       0x00004000
+#define PCRE_PARTIAL            0x00008000
+#define PCRE_DFA_SHORTEST       0x00010000
+#define PCRE_DFA_RESTART        0x00020000
+#define PCRE_FIRSTLINE          0x00040000
 
 /* Exec-time and get/set-time error codes */
 
@@ -110,6 +120,11 @@ extern "C" {
 #define PCRE_ERROR_BADPARTIAL     (-13)
 #define PCRE_ERROR_INTERNAL       (-14)
 #define PCRE_ERROR_BADCOUNT       (-15)
+#define PCRE_ERROR_DFA_UITEM      (-16)
+#define PCRE_ERROR_DFA_UCOND      (-17)
+#define PCRE_ERROR_DFA_UMLIMIT    (-18)
+#define PCRE_ERROR_DFA_WSSIZE     (-19)
+#define PCRE_ERROR_DFA_RECURSE    (-20)
 
 /* Request types for pcre_fullinfo() */
 
@@ -187,9 +202,8 @@ typedef struct pcre_callout_block {
 /* Indirection for store get and free functions. These can be set to
 alternative malloc/free functions if required. Special ones are used in the
 non-recursive case for "frames". There is also an optional callout function
-that is triggered by the (?) regex item. Some magic is required for Win32 DLL;
-it is null on other OS. For Virtual Pascal, these have to be different again.
-*/
+that is triggered by the (?) regex item. For Virtual Pascal, these definitions
+have to take another form. */
 
 #ifndef VPCOMPAT
 PCRE_DATA_SCOPE void *(*pcre_malloc)(size_t);
@@ -198,39 +212,44 @@ PCRE_DATA_SCOPE void *(*pcre_stack_mallo
 PCRE_DATA_SCOPE void  (*pcre_stack_free)(void *);
 PCRE_DATA_SCOPE int   (*pcre_callout)(pcre_callout_block *);
 #else   /* VPCOMPAT */
-extern void *pcre_malloc(size_t);
-extern void  pcre_free(void *);
-extern void *pcre_stack_malloc(size_t);
-extern void  pcre_stack_free(void *);
-extern int   pcre_callout(pcre_callout_block *);
+PCRE_DATA_SCOPE void *pcre_malloc(size_t);
+PCRE_DATA_SCOPE void  pcre_free(void *);
+PCRE_DATA_SCOPE void *pcre_stack_malloc(size_t);
+PCRE_DATA_SCOPE void  pcre_stack_free(void *);
+PCRE_DATA_SCOPE int   pcre_callout(pcre_callout_block *);
 #endif  /* VPCOMPAT */
 
 /* Exported PCRE functions */
 
-extern pcre *pcre_compile(const char *, int, const char **,
-              int *, const unsigned char *);
-extern int  pcre_config(int, void *);
-extern int  pcre_copy_named_substring(const pcre *, const char *,
-              int *, int, const char *, char *, int);
-extern int  pcre_copy_substring(const char *, int *, int, int,
-              char *, int);
-extern int  pcre_exec(const pcre *, const pcre_extra *,
-              const char *, int, int, int, int *, int);
-extern void pcre_free_substring(const char *);
-extern void pcre_free_substring_list(const char **);
-extern int  pcre_fullinfo(const pcre *, const pcre_extra *, int,
-              void *);
-extern int  pcre_get_named_substring(const pcre *, const char *,
-              int *, int,  const char *, const char **);
-extern int  pcre_get_stringnumber(const pcre *, const char *);
-extern int  pcre_get_substring(const char *, int *, int, int,
-              const char **);
-extern int  pcre_get_substring_list(const char *, int *, int,
-              const char ***);
-extern int  pcre_info(const pcre *, int *, int *);
-extern const unsigned char *pcre_maketables(void);
-extern pcre_extra *pcre_study(const pcre *, int, const char **);
-extern const char *pcre_version(void);
+PCRE_DATA_SCOPE pcre *pcre_compile(const char *, int, const char **, int *,
+                  const unsigned char *);
+PCRE_DATA_SCOPE pcre *pcre_compile2(const char *, int, int *, const char **,
+                  int *, const unsigned char *);
+PCRE_DATA_SCOPE int  pcre_config(int, void *);
+PCRE_DATA_SCOPE int  pcre_copy_named_substring(const pcre *, const char *,
+                  int *, int, const char *, char *, int);
+PCRE_DATA_SCOPE int  pcre_copy_substring(const char *, int *, int, int, char *,
+                  int);
+PCRE_DATA_SCOPE int  pcre_dfa_exec(const pcre *, const pcre_extra *,
+                  const char *, int, int, int, int *, int , int *, int);
+PCRE_DATA_SCOPE int  pcre_exec(const pcre *, const pcre_extra *, const char *,
+                   int, int, int, int *, int);
+PCRE_DATA_SCOPE void pcre_free_substring(const char *);
+PCRE_DATA_SCOPE void pcre_free_substring_list(const char **);
+PCRE_DATA_SCOPE int  pcre_fullinfo(const pcre *, const pcre_extra *, int,
+                  void *);
+PCRE_DATA_SCOPE int  pcre_get_named_substring(const pcre *, const char *,
+                  int *, int, const char *, const char **);
+PCRE_DATA_SCOPE int  pcre_get_stringnumber(const pcre *, const char *);
+PCRE_DATA_SCOPE int  pcre_get_substring(const char *, int *, int, int,
+                  const char **);
+PCRE_DATA_SCOPE int  pcre_get_substring_list(const char *, int *, int,
+                  const char ***);
+PCRE_DATA_SCOPE int  pcre_info(const pcre *, int *, int *);
+PCRE_DATA_SCOPE const unsigned char *pcre_maketables(void);
+PCRE_DATA_SCOPE int  pcre_refcount(pcre *, int);
+PCRE_DATA_SCOPE pcre_extra *pcre_study(const pcre *, int, const char **);
+PCRE_DATA_SCOPE const char *pcre_version(void);
 
 #ifdef __cplusplus
 }  /* extern "C" */
diff -Nurp tin-1.7.8/pcre/pcre_chartables.c tin-1.7.9/pcre/pcre_chartables.c
--- tin-1.7.8/pcre/pcre_chartables.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_chartables.c	2005-06-29 11:30:21.329989370 +0200
@@ -0,0 +1,183 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* This file is automatically written by the dftables auxiliary 
+program. If you edit it by hand, you might like to edit the Makefile to 
+prevent its ever being regenerated.
+
+This file contains the default tables for characters with codes less than
+128 (ASCII characters). These tables are used when no external tables are
+passed to PCRE. */
+
+const unsigned char _pcre_default_tables[] = {
+
+/* This table is a lower casing table. */
+
+    0,  1,  2,  3,  4,  5,  6,  7,
+    8,  9, 10, 11, 12, 13, 14, 15,
+   16, 17, 18, 19, 20, 21, 22, 23,
+   24, 25, 26, 27, 28, 29, 30, 31,
+   32, 33, 34, 35, 36, 37, 38, 39,
+   40, 41, 42, 43, 44, 45, 46, 47,
+   48, 49, 50, 51, 52, 53, 54, 55,
+   56, 57, 58, 59, 60, 61, 62, 63,
+   64, 97, 98, 99,100,101,102,103,
+  104,105,106,107,108,109,110,111,
+  112,113,114,115,116,117,118,119,
+  120,121,122, 91, 92, 93, 94, 95,
+   96, 97, 98, 99,100,101,102,103,
+  104,105,106,107,108,109,110,111,
+  112,113,114,115,116,117,118,119,
+  120,121,122,123,124,125,126,127,
+  128,129,130,131,132,133,134,135,
+  136,137,138,139,140,141,142,143,
+  144,145,146,147,148,149,150,151,
+  152,153,154,155,156,157,158,159,
+  160,161,162,163,164,165,166,167,
+  168,169,170,171,172,173,174,175,
+  176,177,178,179,180,181,182,183,
+  184,185,186,187,188,189,190,191,
+  192,193,194,195,196,197,198,199,
+  200,201,202,203,204,205,206,207,
+  208,209,210,211,212,213,214,215,
+  216,217,218,219,220,221,222,223,
+  224,225,226,227,228,229,230,231,
+  232,233,234,235,236,237,238,239,
+  240,241,242,243,244,245,246,247,
+  248,249,250,251,252,253,254,255,
+
+/* This table is a case flipping table. */
+
+    0,  1,  2,  3,  4,  5,  6,  7,
+    8,  9, 10, 11, 12, 13, 14, 15,
+   16, 17, 18, 19, 20, 21, 22, 23,
+   24, 25, 26, 27, 28, 29, 30, 31,
+   32, 33, 34, 35, 36, 37, 38, 39,
+   40, 41, 42, 43, 44, 45, 46, 47,
+   48, 49, 50, 51, 52, 53, 54, 55,
+   56, 57, 58, 59, 60, 61, 62, 63,
+   64, 97, 98, 99,100,101,102,103,
+  104,105,106,107,108,109,110,111,
+  112,113,114,115,116,117,118,119,
+  120,121,122, 91, 92, 93, 94, 95,
+   96, 65, 66, 67, 68, 69, 70, 71,
+   72, 73, 74, 75, 76, 77, 78, 79,
+   80, 81, 82, 83, 84, 85, 86, 87,
+   88, 89, 90,123,124,125,126,127,
+  128,129,130,131,132,133,134,135,
+  136,137,138,139,140,141,142,143,
+  144,145,146,147,148,149,150,151,
+  152,153,154,155,156,157,158,159,
+  160,161,162,163,164,165,166,167,
+  168,169,170,171,172,173,174,175,
+  176,177,178,179,180,181,182,183,
+  184,185,186,187,188,189,190,191,
+  192,193,194,195,196,197,198,199,
+  200,201,202,203,204,205,206,207,
+  208,209,210,211,212,213,214,215,
+  216,217,218,219,220,221,222,223,
+  224,225,226,227,228,229,230,231,
+  232,233,234,235,236,237,238,239,
+  240,241,242,243,244,245,246,247,
+  248,249,250,251,252,253,254,255,
+
+/* This table contains bit maps for various character classes.
+Each map is 32 bytes long and the bits run from the least
+significant end of each byte. The classes that have their own
+maps are: space, xdigit, digit, upper, lower, word, graph
+print, punct, and cntrl. Other classes are built from combinations. */
+
+  0x00,0x3e,0x00,0x00,0x01,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
+  0x7e,0x00,0x00,0x00,0x7e,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0xfe,0xff,0xff,0x07,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0x07,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0x00,0x00,0xff,0x03,
+  0xfe,0xff,0xff,0x87,0xfe,0xff,0xff,0x07,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0xfe,0xff,0xff,0xff,
+  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,
+  0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x7f,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0x00,0x00,0x00,0x00,0xfe,0xff,0x00,0xfc,
+  0x01,0x00,0x00,0xf8,0x01,0x00,0x00,0x78,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+  0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
+
+/* This table identifies various classes of character by individual bits:
+  0x01   white space character
+  0x02   letter
+  0x04   decimal digit
+  0x08   hexadecimal digit
+  0x10   alphanumeric or '_'
+  0x80   regular expression metacharacter or binary zero
+*/
+
+  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
+  0x00,0x01,0x01,0x00,0x01,0x01,0x00,0x00, /*   8- 15 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
+  0x01,0x00,0x00,0x00,0x80,0x00,0x00,0x00, /*    - '  */
+  0x80,0x80,0x80,0x80,0x00,0x00,0x80,0x00, /*  ( - /  */
+  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
+  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x80, /*  8 - ?  */
+  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  @ - G  */
+  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  H - O  */
+  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  P - W  */
+  0x12,0x12,0x12,0x80,0x00,0x00,0x80,0x10, /*  X - _  */
+  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  ` - g  */
+  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  h - o  */
+  0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  p - w  */
+  0x12,0x12,0x12,0x80,0x80,0x00,0x00,0x00, /*  x -127 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
+
+/* End of chartables.c */
diff -Nurp tin-1.7.8/pcre/pcre_compile.c tin-1.7.9/pcre/pcre_compile.c
--- tin-1.7.8/pcre/pcre_compile.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_compile.c	2005-06-28 10:31:26.198184547 +0200
@@ -0,0 +1,5034 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_compile(), along with
+supporting internal functions that are not used by other modules. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*      Code parameters and static tables         *
+*************************************************/
+
+/* Maximum number of items on the nested bracket stacks at compile time. This
+applies to the nesting of all kinds of parentheses. It does not limit
+un-nested, non-capturing parentheses. This number can be made bigger if
+necessary - it is used to dimension one int and one unsigned char vector at
+compile time. */
+
+#define BRASTACK_SIZE 200
+
+
+/* Table for handling escaped characters in the range '0'-'z'. Positive returns
+are simple data values; negative values are for special things like \d and so
+on. Zero means further processing is needed (for things like \x), or the escape
+is invalid. */
+
+#if !EBCDIC   /* This is the "normal" table for ASCII systems */
+static const short int escapes[] = {
+     0,      0,      0,      0,      0,      0,      0,      0,   /* 0 - 7 */
+     0,      0,    ':',    ';',    '<',    '=',    '>',    '?',   /* 8 - ? */
+   '@', -ESC_A, -ESC_B, -ESC_C, -ESC_D, -ESC_E,      0, -ESC_G,   /* @ - G */
+     0,      0,      0,      0,      0,      0,      0,      0,   /* H - O */
+-ESC_P, -ESC_Q,      0, -ESC_S,      0,      0,      0, -ESC_W,   /* P - W */
+-ESC_X,      0, -ESC_Z,    '[',   '\\',    ']',    '^',    '_',   /* X - _ */
+   '`',      7, -ESC_b,      0, -ESC_d,  ESC_e,  ESC_f,      0,   /* ` - g */
+     0,      0,      0,      0,      0,      0,  ESC_n,      0,   /* h - o */
+-ESC_p,      0,  ESC_r, -ESC_s,  ESC_tee,    0,      0, -ESC_w,   /* p - w */
+     0,      0, -ESC_z                                            /* x - z */
+};
+
+#else         /* This is the "abnormal" table for EBCDIC systems */
+static const short int escapes[] = {
+/*  48 */     0,     0,      0,     '.',    '<',   '(',    '+',    '|',
+/*  50 */   '&',     0,      0,       0,      0,     0,      0,      0,
+/*  58 */     0,     0,    '!',     '$',    '*',   ')',    ';',    '~',
+/*  60 */   '-',   '/',      0,       0,      0,     0,      0,      0,
+/*  68 */     0,     0,    '|',     ',',    '%',   '_',    '>',    '?',
+/*  70 */     0,     0,      0,       0,      0,     0,      0,      0,
+/*  78 */     0,   '`',    ':',     '#',    '@',  '\'',    '=',    '"',
+/*  80 */     0,     7, -ESC_b,       0, -ESC_d, ESC_e,  ESC_f,      0,
+/*  88 */     0,     0,      0,     '{',      0,     0,      0,      0,
+/*  90 */     0,     0,      0,     'l',      0, ESC_n,      0, -ESC_p,
+/*  98 */     0, ESC_r,      0,     '}',      0,     0,      0,      0,
+/*  A0 */     0,   '~', -ESC_s, ESC_tee,      0,     0, -ESC_w,      0,
+/*  A8 */     0,-ESC_z,      0,       0,      0,   '[',      0,      0,
+/*  B0 */     0,     0,      0,       0,      0,     0,      0,      0,
+/*  B8 */     0,     0,      0,       0,      0,   ']',    '=',    '-',
+/*  C0 */   '{',-ESC_A, -ESC_B,  -ESC_C, -ESC_D,-ESC_E,      0, -ESC_G,
+/*  C8 */     0,     0,      0,       0,      0,     0,      0,      0,
+/*  D0 */   '}',     0,      0,       0,      0,     0,      0, -ESC_P,
+/*  D8 */-ESC_Q,     0,      0,       0,      0,     0,      0,      0,
+/*  E0 */  '\\',     0, -ESC_S,       0,      0,     0, -ESC_W, -ESC_X,
+/*  E8 */     0,-ESC_Z,      0,       0,      0,     0,      0,      0,
+/*  F0 */     0,     0,      0,       0,      0,     0,      0,      0,
+/*  F8 */     0,     0,      0,       0,      0,     0,      0,      0
+};
+#endif
+
+
+/* Tables of names of POSIX character classes and their lengths. The list is
+terminated by a zero length entry. The first three must be alpha, upper, lower,
+as this is assumed for handling case independence. */
+
+static const char *const posix_names[] = {
+  "alpha", "lower", "upper",
+  "alnum", "ascii", "blank", "cntrl", "digit", "graph",
+  "print", "punct", "space", "word",  "xdigit" };
+
+static const uschar posix_name_lengths[] = {
+  5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 4, 6, 0 };
+
+/* Table of class bit maps for each POSIX class; up to three may be combined
+to form the class. The table for [:blank:] is dynamically modified to remove
+the vertical space characters. */
+
+static const int posix_class_maps[] = {
+  cbit_lower, cbit_upper, -1,             /* alpha */
+  cbit_lower, -1,         -1,             /* lower */
+  cbit_upper, -1,         -1,             /* upper */
+  cbit_digit, cbit_lower, cbit_upper,     /* alnum */
+  cbit_print, cbit_cntrl, -1,             /* ascii */
+  cbit_space, -1,         -1,             /* blank - a GNU extension */
+  cbit_cntrl, -1,         -1,             /* cntrl */
+  cbit_digit, -1,         -1,             /* digit */
+  cbit_graph, -1,         -1,             /* graph */
+  cbit_print, -1,         -1,             /* print */
+  cbit_punct, -1,         -1,             /* punct */
+  cbit_space, -1,         -1,             /* space */
+  cbit_word,  -1,         -1,             /* word - a Perl extension */
+  cbit_xdigit,-1,         -1              /* xdigit */
+};
+
+
+/* The texts of compile-time error messages. These are "char *" because they
+are passed to the outside world. */
+
+static const char *error_texts[] = {
+  "no error",
+  "\\ at end of pattern",
+  "\\c at end of pattern",
+  "unrecognized character follows \\",
+  "numbers out of order in {} quantifier",
+  /* 5 */
+  "number too big in {} quantifier",
+  "missing terminating ] for character class",
+  "invalid escape sequence in character class",
+  "range out of order in character class",
+  "nothing to repeat",
+  /* 10 */
+  "operand of unlimited repeat could match the empty string",
+  "internal error: unexpected repeat",
+  "unrecognized character after (?",
+  "POSIX named classes are supported only within a class",
+  "missing )",
+  /* 15 */
+  "reference to non-existent subpattern",
+  "erroffset passed as NULL",
+  "unknown option bit(s) set",
+  "missing ) after comment",
+  "parentheses nested too deeply",
+  /* 20 */
+  "regular expression too large",
+  "failed to get memory",
+  "unmatched parentheses",
+  "internal error: code overflow",
+  "unrecognized character after (?<",
+  /* 25 */
+  "lookbehind assertion is not fixed length",
+  "malformed number after (?(",
+  "conditional group contains more than two branches",
+  "assertion expected after (?(",
+  "(?R or (?digits must be followed by )",
+  /* 30 */
+  "unknown POSIX class name",
+  "POSIX collating elements are not supported",
+  "this version of PCRE is not compiled with PCRE_UTF8 support",
+  "spare error",
+  "character value in \\x{...} sequence is too large",
+  /* 35 */
+  "invalid condition (?(0)",
+  "\\C not allowed in lookbehind assertion",
+  "PCRE does not support \\L, \\l, \\N, \\U, or \\u",
+  "number after (?C is > 255",
+  "closing ) for (?C expected",
+  /* 40 */
+  "recursive call could loop indefinitely",
+  "unrecognized character after (?P",
+  "syntax error after (?P",
+  "two named groups have the same name",
+  "invalid UTF-8 string",
+  /* 45 */
+  "support for \\P, \\p, and \\X has not been compiled",
+  "malformed \\P or \\p sequence",
+  "unknown property name after \\P or \\p"
+};
+
+
+/* Table to identify digits and hex digits. This is used when compiling
+patterns. Note that the tables in chartables are dependent on the locale, and
+may mark arbitrary characters as digits - but the PCRE compiling code expects
+to handle only 0-9, a-z, and A-Z as digits when compiling. That is why we have
+a private table here. It costs 256 bytes, but it is a lot faster than doing
+character value tests (at least in some simple cases I timed), and in some
+applications one wants PCRE to compile efficiently as well as match
+efficiently.
+
+For convenience, we use the same bit definitions as in chartables:
+
+  0x04   decimal digit
+  0x08   hexadecimal digit
+
+Then we can use ctype_digit and ctype_xdigit in the code. */
+
+#if !EBCDIC    /* This is the "normal" case, for ASCII systems */
+static const unsigned char digitab[] =
+  {
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - '  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ( - /  */
+  0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  */
+  0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00, /*  8 - ?  */
+  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  @ - G  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H - O  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  P - W  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  X - _  */
+  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  ` - g  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h - o  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  p - w  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  x -127 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 128-135 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 136-143 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144-151 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 152-159 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160-167 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 168-175 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 176-183 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 192-199 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 200-207 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 208-215 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 216-223 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 224-231 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 232-239 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 240-247 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};/* 248-255 */
+
+#else          /* This is the "abnormal" case, for EBCDIC systems */
+static const unsigned char digitab[] =
+  {
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   0-  7  0 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*   8- 15    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  16- 23 10 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  32- 39 20 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 30 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 40 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  72- |     */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 50 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  88- ¬     */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 60 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 104- ?     */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 70 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "     */
+  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /* 128- g  80 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 144- p  90 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 160- x  A0 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 B0 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 184-191    */
+  0x00,0x08,0x08,0x08,0x08,0x08,0x08,0x00, /*  { - G  C0 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  } - P  D0 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223    */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  \ - X  E0 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239    */
+  0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c,0x0c, /*  0 - 7  F0 */
+  0x0c,0x0c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255    */
+
+static const unsigned char ebcdic_chartab[] = { /* chartable partial dup */
+  0x80,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*   0-  7 */
+  0x00,0x00,0x00,0x00,0x01,0x01,0x00,0x00, /*   8- 15 */
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  16- 23 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  24- 31 */
+  0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00, /*  32- 39 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  40- 47 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  48- 55 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  56- 63 */
+  0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*    - 71 */
+  0x00,0x00,0x00,0x80,0x00,0x80,0x80,0x80, /*  72- |  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  & - 87 */
+  0x00,0x00,0x00,0x80,0x80,0x80,0x00,0x00, /*  88- ¬  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  - -103 */
+  0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x80, /* 104- ?  */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 112-119 */
+  0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /* 120- "  */
+  0x00,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /* 128- g  */
+  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  h -143 */
+  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /* 144- p  */
+  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  q -159 */
+  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /* 160- x  */
+  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  y -175 */
+  0x80,0x00,0x00,0x00,0x00,0x00,0x00,0x00, /*  ^ -183 */
+  0x00,0x00,0x80,0x00,0x00,0x00,0x00,0x00, /* 184-191 */
+  0x80,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x12, /*  { - G  */
+  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  H -207 */
+  0x00,0x12,0x12,0x12,0x12,0x12,0x12,0x12, /*  } - P  */
+  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Q -223 */
+  0x00,0x00,0x12,0x12,0x12,0x12,0x12,0x12, /*  \ - X  */
+  0x12,0x12,0x00,0x00,0x00,0x00,0x00,0x00, /*  Y -239 */
+  0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c,0x1c, /*  0 - 7  */
+  0x1c,0x1c,0x00,0x00,0x00,0x00,0x00,0x00};/*  8 -255 */
+#endif
+
+
+/* Definition to allow mutual recursion */
+
+static BOOL
+  compile_regex(int, int, int *, uschar **, const uschar **, int *, BOOL, int,
+    int *, int *, branch_chain *, compile_data *);
+
+
+
+/*************************************************
+*            Handle escapes                      *
+*************************************************/
+
+/* This function is called when a \ has been encountered. It either returns a
+positive value for a simple escape such as \n, or a negative value which
+encodes one of the more complicated things such as \d. When UTF-8 is enabled,
+a positive value greater than 255 may be returned. On entry, ptr is pointing at
+the \. On exit, it is on the final character of the escape sequence.
+
+Arguments:
+  ptrptr         points to the pattern position pointer
+  errorcodeptr   points to the errorcode variable
+  bracount       number of previous extracting brackets
+  options        the options bits
+  isclass        TRUE if inside a character class
+
+Returns:         zero or positive => a data character
+                 negative => a special escape sequence
+                 on error, errorptr is set
+*/
+
+static int
+check_escape(const uschar **ptrptr, int *errorcodeptr, int bracount,
+  int options, BOOL isclass)
+{
+const uschar *ptr = *ptrptr;
+int c, i;
+
+/* If backslash is at the end of the pattern, it's an error. */
+
+c = *(++ptr);
+if (c == 0) *errorcodeptr = ERR1;
+
+/* Non-alphamerics are literals. For digits or letters, do an initial lookup in
+a table. A non-zero result is something that can be returned immediately.
+Otherwise further processing may be required. */
+
+#if !EBCDIC    /* ASCII coding */
+else if (c < '0' || c > 'z') {}                           /* Not alphameric */
+else if ((i = escapes[c - '0']) != 0) c = i;
+
+#else          /* EBCDIC coding */
+else if (c < 'a' || (ebcdic_chartab[c] & 0x0E) == 0) {}   /* Not alphameric */
+else if ((i = escapes[c - 0x48]) != 0)  c = i;
+#endif
+
+/* Escapes that need further processing, or are illegal. */
+
+else
+  {
+  const uschar *oldptr;
+  switch (c)
+    {
+    /* A number of Perl escapes are not handled by PCRE. We give an explicit
+    error. */
+
+    case 'l':
+    case 'L':
+    case 'N':
+    case 'u':
+    case 'U':
+    *errorcodeptr = ERR37;
+    break;
+
+    /* The handling of escape sequences consisting of a string of digits
+    starting with one that is not zero is not straightforward. By experiment,
+    the way Perl works seems to be as follows:
+
+    Outside a character class, the digits are read as a decimal number. If the
+    number is less than 10, or if there are that many previous extracting
+    left brackets, then it is a back reference. Otherwise, up to three octal
+    digits are read to form an escaped byte. Thus \123 is likely to be octal
+    123 (cf \0123, which is octal 012 followed by the literal 3). If the octal
+    value is greater than 377, the least significant 8 bits are taken. Inside a
+    character class, \ followed by a digit is always an octal number. */
+
+    case '1': case '2': case '3': case '4': case '5':
+    case '6': case '7': case '8': case '9':
+
+    if (!isclass)
+      {
+      oldptr = ptr;
+      c -= '0';
+      while ((digitab[ptr[1]] & ctype_digit) != 0)
+        c = c * 10 + *(++ptr) - '0';
+      if (c < 10 || c <= bracount)
+        {
+        c = -(ESC_REF + c);
+        break;
+        }
+      ptr = oldptr;      /* Put the pointer back and fall through */
+      }
+
+    /* Handle an octal number following \. If the first digit is 8 or 9, Perl
+    generates a binary zero byte and treats the digit as a following literal.
+    Thus we have to pull back the pointer by one. */
+
+    if ((c = *ptr) >= '8')
+      {
+      ptr--;
+      c = 0;
+      break;
+      }
+
+    /* \0 always starts an octal number, but we may drop through to here with a
+    larger first octal digit. */
+
+    case '0':
+    c -= '0';
+    while(i++ < 2 && ptr[1] >= '0' && ptr[1] <= '7')
+        c = c * 8 + *(++ptr) - '0';
+    c &= 255;     /* Take least significant 8 bits */
+    break;
+
+    /* \x is complicated when UTF-8 is enabled. \x{ddd} is a character number
+    which can be greater than 0xff, but only if the ddd are hex digits. */
+
+    case 'x':
+#ifdef SUPPORT_UTF8
+    if (ptr[1] == '{' && (options & PCRE_UTF8) != 0)
+      {
+      const uschar *pt = ptr + 2;
+      register int count = 0;
+      c = 0;
+      while ((digitab[*pt] & ctype_xdigit) != 0)
+        {
+        int cc = *pt++;
+        count++;
+#if !EBCDIC    /* ASCII coding */
+        if (cc >= 'a') cc -= 32;               /* Convert to upper case */
+        c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
+#else          /* EBCDIC coding */
+        if (cc >= 'a' && cc <= 'z') cc += 64;  /* Convert to upper case */
+        c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
+#endif
+        }
+      if (*pt == '}')
+        {
+        if (c < 0 || count > 8) *errorcodeptr = ERR34;
+        ptr = pt;
+        break;
+        }
+      /* If the sequence of hex digits does not end with '}', then we don't
+      recognize this construct; fall through to the normal \x handling. */
+      }
+#endif
+
+    /* Read just a single hex char */
+
+    c = 0;
+    while (i++ < 2 && (digitab[ptr[1]] & ctype_xdigit) != 0)
+      {
+      int cc;                               /* Some compilers don't like ++ */
+      cc = *(++ptr);                        /* in initializers */
+#if !EBCDIC    /* ASCII coding */
+      if (cc >= 'a') cc -= 32;              /* Convert to upper case */
+      c = c * 16 + cc - ((cc < 'A')? '0' : ('A' - 10));
+#else          /* EBCDIC coding */
+      if (cc <= 'z') cc += 64;              /* Convert to upper case */
+      c = c * 16 + cc - ((cc >= '0')? '0' : ('A' - 10));
+#endif
+      }
+    break;
+
+    /* Other special escapes not starting with a digit are straightforward */
+
+    case 'c':
+    c = *(++ptr);
+    if (c == 0)
+      {
+      *errorcodeptr = ERR2;
+      return 0;
+      }
+
+    /* A letter is upper-cased; then the 0x40 bit is flipped. This coding
+    is ASCII-specific, but then the whole concept of \cx is ASCII-specific.
+    (However, an EBCDIC equivalent has now been added.) */
+
+#if !EBCDIC    /* ASCII coding */
+    if (c >= 'a' && c <= 'z') c -= 32;
+    c ^= 0x40;
+#else          /* EBCDIC coding */
+    if (c >= 'a' && c <= 'z') c += 64;
+    c ^= 0xC0;
+#endif
+    break;
+
+    /* PCRE_EXTRA enables extensions to Perl in the matter of escapes. Any
+    other alphameric following \ is an error if PCRE_EXTRA was set; otherwise,
+    for Perl compatibility, it is a literal. This code looks a bit odd, but
+    there used to be some cases other than the default, and there may be again
+    in future, so I haven't "optimized" it. */
+
+    default:
+    if ((options & PCRE_EXTRA) != 0) switch(c)
+      {
+      default:
+      *errorcodeptr = ERR3;
+      break;
+      }
+    break;
+    }
+  }
+
+*ptrptr = ptr;
+return c;
+}
+
+
+
+#ifdef SUPPORT_UCP
+/*************************************************
+*               Handle \P and \p                 *
+*************************************************/
+
+/* This function is called after \P or \p has been encountered, provided that
+PCRE is compiled with support for Unicode properties. On entry, ptrptr is
+pointing at the P or p. On exit, it is pointing at the final character of the
+escape sequence.
+
+Argument:
+  ptrptr         points to the pattern position pointer
+  negptr         points to a boolean that is set TRUE for negation else FALSE
+  errorcodeptr   points to the error code variable
+
+Returns:     value from ucp_type_table, or -1 for an invalid type
+*/
+
+static int
+get_ucp(const uschar **ptrptr, BOOL *negptr, int *errorcodeptr)
+{
+int c, i, bot, top;
+const uschar *ptr = *ptrptr;
+char name[4];
+
+c = *(++ptr);
+if (c == 0) goto ERROR_RETURN;
+
+*negptr = FALSE;
+
+/* \P or \p can be followed by a one- or two-character name in {}, optionally
+preceded by ^ for negation. */
+
+if (c == '{')
+  {
+  if (ptr[1] == '^')
+    {
+    *negptr = TRUE;
+    ptr++;
+    }
+  for (i = 0; i <= 2; i++)
+    {
+    c = *(++ptr);
+    if (c == 0) goto ERROR_RETURN;
+    if (c == '}') break;
+    name[i] = c;
+    }
+  if (c !='}')   /* Try to distinguish error cases */
+    {
+    while (*(++ptr) != 0 && *ptr != '}');
+    if (*ptr == '}') goto UNKNOWN_RETURN; else goto ERROR_RETURN;
+    }
+  name[i] = 0;
+  }
+
+/* Otherwise there is just one following character */
+
+else
+  {
+  name[0] = c;
+  name[1] = 0;
+  }
+
+*ptrptr = ptr;
+
+/* Search for a recognized property name using binary chop */
+
+bot = 0;
+top = _pcre_utt_size;
+
+while (bot < top)
+  {
+  i = (bot + top)/2;
+  c = strcmp(name, _pcre_utt[i].name);
+  if (c == 0) return _pcre_utt[i].value;
+  if (c > 0) bot = i + 1; else top = i;
+  }
+
+UNKNOWN_RETURN:
+*errorcodeptr = ERR47;
+*ptrptr = ptr;
+return -1;
+
+ERROR_RETURN:
+*errorcodeptr = ERR46;
+*ptrptr = ptr;
+return -1;
+}
+#endif
+
+
+
+
+/*************************************************
+*            Check for counted repeat            *
+*************************************************/
+
+/* This function is called when a '{' is encountered in a place where it might
+start a quantifier. It looks ahead to see if it really is a quantifier or not.
+It is only a quantifier if it is one of the forms {ddd} {ddd,} or {ddd,ddd}
+where the ddds are digits.
+
+Arguments:
+  p         pointer to the first char after '{'
+
+Returns:    TRUE or FALSE
+*/
+
+static BOOL
+is_counted_repeat(const uschar *p)
+{
+if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
+while ((digitab[*p] & ctype_digit) != 0) p++;
+if (*p == '}') return TRUE;
+
+if (*p++ != ',') return FALSE;
+if (*p == '}') return TRUE;
+
+if ((digitab[*p++] & ctype_digit) == 0) return FALSE;
+while ((digitab[*p] & ctype_digit) != 0) p++;
+
+return (*p == '}');
+}
+
+
+
+/*************************************************
+*         Read repeat counts                     *
+*************************************************/
+
+/* Read an item of the form {n,m} and return the values. This is called only
+after is_counted_repeat() has confirmed that a repeat-count quantifier exists,
+so the syntax is guaranteed to be correct, but we need to check the values.
+
+Arguments:
+  p              pointer to first char after '{'
+  minp           pointer to int for min
+  maxp           pointer to int for max
+                 returned as -1 if no max
+  errorcodeptr   points to error code variable
+
+Returns:         pointer to '}' on success;
+                 current ptr on error, with errorcodeptr set non-zero
+*/
+
+static const uschar *
+read_repeat_counts(const uschar *p, int *minp, int *maxp, int *errorcodeptr)
+{
+int min = 0;
+int max = -1;
+
+while ((digitab[*p] & ctype_digit) != 0) min = min * 10 + *p++ - '0';
+
+if (*p == '}') max = min; else
+  {
+  if (*(++p) != '}')
+    {
+    max = 0;
+    while((digitab[*p] & ctype_digit) != 0) max = max * 10 + *p++ - '0';
+    if (max < min)
+      {
+      *errorcodeptr = ERR4;
+      return p;
+      }
+    }
+  }
+
+/* Do paranoid checks, then fill in the required variables, and pass back the
+pointer to the terminating '}'. */
+
+if (min > 65535 || max > 65535)
+  *errorcodeptr = ERR5;
+else
+  {
+  *minp = min;
+  *maxp = max;
+  }
+return p;
+}
+
+
+
+/*************************************************
+*      Find first significant op code            *
+*************************************************/
+
+/* This is called by several functions that scan a compiled expression looking
+for a fixed first character, or an anchoring op code etc. It skips over things
+that do not influence this. For some calls, a change of option is important.
+For some calls, it makes sense to skip negative forward and all backward
+assertions, and also the \b assertion; for others it does not.
+
+Arguments:
+  code         pointer to the start of the group
+  options      pointer to external options
+  optbit       the option bit whose changing is significant, or
+                 zero if none are
+  skipassert   TRUE if certain assertions are to be skipped
+
+Returns:       pointer to the first significant opcode
+*/
+
+static const uschar*
+first_significant_code(const uschar *code, int *options, int optbit,
+  BOOL skipassert)
+{
+for (;;)
+  {
+  switch ((int)*code)
+    {
+    case OP_OPT:
+    if (optbit > 0 && ((int)code[1] & optbit) != (*options & optbit))
+      *options = (int)code[1];
+    code += 2;
+    break;
+
+    case OP_ASSERT_NOT:
+    case OP_ASSERTBACK:
+    case OP_ASSERTBACK_NOT:
+    if (!skipassert) return code;
+    do code += GET(code, 1); while (*code == OP_ALT);
+    code += _pcre_OP_lengths[*code];
+    break;
+
+    case OP_WORD_BOUNDARY:
+    case OP_NOT_WORD_BOUNDARY:
+    if (!skipassert) return code;
+    /* Fall through */
+
+    case OP_CALLOUT:
+    case OP_CREF:
+    case OP_BRANUMBER:
+    code += _pcre_OP_lengths[*code];
+    break;
+
+    default:
+    return code;
+    }
+  }
+/* Control never reaches here */
+}
+
+
+
+
+/*************************************************
+*        Find the fixed length of a pattern      *
+*************************************************/
+
+/* Scan a pattern and compute the fixed length of subject that will match it,
+if the length is fixed. This is needed for dealing with backward assertions.
+In UTF8 mode, the result is in characters rather than bytes.
+
+Arguments:
+  code     points to the start of the pattern (the bracket)
+  options  the compiling options
+
+Returns:   the fixed length, or -1 if there is no fixed length,
+             or -2 if \C was encountered
+*/
+
+static int
+find_fixedlength(uschar *code, int options)
+{
+int length = -1;
+
+register int branchlength = 0;
+register uschar *cc = code + 1 + LINK_SIZE;
+
+/* Scan along the opcodes for this branch. If we get to the end of the
+branch, check the length against that of the other branches. */
+
+for (;;)
+  {
+  int d;
+  register int op = *cc;
+  if (op >= OP_BRA) op = OP_BRA;
+
+  switch (op)
+    {
+    case OP_BRA:
+    case OP_ONCE:
+    case OP_COND:
+    d = find_fixedlength(cc, options);
+    if (d < 0) return d;
+    branchlength += d;
+    do cc += GET(cc, 1); while (*cc == OP_ALT);
+    cc += 1 + LINK_SIZE;
+    break;
+
+    /* Reached end of a branch; if it's a ket it is the end of a nested
+    call. If it's ALT it is an alternation in a nested call. If it is
+    END it's the end of the outer call. All can be handled by the same code. */
+
+    case OP_ALT:
+    case OP_KET:
+    case OP_KETRMAX:
+    case OP_KETRMIN:
+    case OP_END:
+    if (length < 0) length = branchlength;
+      else if (length != branchlength) return -1;
+    if (*cc != OP_ALT) return length;
+    cc += 1 + LINK_SIZE;
+    branchlength = 0;
+    break;
+
+    /* Skip over assertive subpatterns */
+
+    case OP_ASSERT:
+    case OP_ASSERT_NOT:
+    case OP_ASSERTBACK:
+    case OP_ASSERTBACK_NOT:
+    do cc += GET(cc, 1); while (*cc == OP_ALT);
+    /* Fall through */
+
+    /* Skip over things that don't match chars */
+
+    case OP_REVERSE:
+    case OP_BRANUMBER:
+    case OP_CREF:
+    case OP_OPT:
+    case OP_CALLOUT:
+    case OP_SOD:
+    case OP_SOM:
+    case OP_EOD:
+    case OP_EODN:
+    case OP_CIRC:
+    case OP_DOLL:
+    case OP_NOT_WORD_BOUNDARY:
+    case OP_WORD_BOUNDARY:
+    cc += _pcre_OP_lengths[*cc];
+    break;
+
+    /* Handle literal characters */
+
+    case OP_CHAR:
+    case OP_CHARNC:
+    branchlength++;
+    cc += 2;
+#ifdef SUPPORT_UTF8
+    if ((options & PCRE_UTF8) != 0)
+      {
+      while ((*cc & 0xc0) == 0x80) cc++;
+      }
+#endif
+    break;
+
+    /* Handle exact repetitions. The count is already in characters, but we
+    need to skip over a multibyte character in UTF8 mode.  */
+
+    case OP_EXACT:
+    branchlength += GET2(cc,1);
+    cc += 4;
+#ifdef SUPPORT_UTF8
+    if ((options & PCRE_UTF8) != 0)
+      {
+      while((*cc & 0x80) == 0x80) cc++;
+      }
+#endif
+    break;
+
+    case OP_TYPEEXACT:
+    branchlength += GET2(cc,1);
+    cc += 4;
+    break;
+
+    /* Handle single-char matchers */
+
+    case OP_PROP:
+    case OP_NOTPROP:
+    cc++;
+    /* Fall through */
+
+    case OP_NOT_DIGIT:
+    case OP_DIGIT:
+    case OP_NOT_WHITESPACE:
+    case OP_WHITESPACE:
+    case OP_NOT_WORDCHAR:
+    case OP_WORDCHAR:
+    case OP_ANY:
+    branchlength++;
+    cc++;
+    break;
+
+    /* The single-byte matcher isn't allowed */
+
+    case OP_ANYBYTE:
+    return -2;
+
+    /* Check a class for variable quantification */
+
+#ifdef SUPPORT_UTF8
+    case OP_XCLASS:
+    cc += GET(cc, 1) - 33;
+    /* Fall through */
+#endif
+
+    case OP_CLASS:
+    case OP_NCLASS:
+    cc += 33;
+
+    switch (*cc)
+      {
+      case OP_CRSTAR:
+      case OP_CRMINSTAR:
+      case OP_CRQUERY:
+      case OP_CRMINQUERY:
+      return -1;
+
+      case OP_CRRANGE:
+      case OP_CRMINRANGE:
+      if (GET2(cc,1) != GET2(cc,3)) return -1;
+      branchlength += GET2(cc,1);
+      cc += 5;
+      break;
+
+      default:
+      branchlength++;
+      }
+    break;
+
+    /* Anything else is variable length */
+
+    default:
+    return -1;
+    }
+  }
+/* Control never gets here */
+}
+
+
+
+
+/*************************************************
+*    Scan compiled regex for numbered bracket    *
+*************************************************/
+
+/* This little function scans through a compiled pattern until it finds a
+capturing bracket with the given number.
+
+Arguments:
+  code        points to start of expression
+  utf8        TRUE in UTF-8 mode
+  number      the required bracket number
+
+Returns:      pointer to the opcode for the bracket, or NULL if not found
+*/
+
+static const uschar *
+find_bracket(const uschar *code, BOOL utf8, int number)
+{
+#ifndef SUPPORT_UTF8
+utf8 = utf8;               /* Stop pedantic compilers complaining */
+#endif
+
+for (;;)
+  {
+  register int c = *code;
+  if (c == OP_END) return NULL;
+  else if (c > OP_BRA)
+    {
+    int n = c - OP_BRA;
+    if (n > EXTRACT_BASIC_MAX) n = GET2(code, 2+LINK_SIZE);
+    if (n == number) return (uschar *)code;
+    code += _pcre_OP_lengths[OP_BRA];
+    }
+  else
+    {
+    code += _pcre_OP_lengths[c];
+
+#ifdef SUPPORT_UTF8
+
+    /* In UTF-8 mode, opcodes that are followed by a character may be followed
+    by a multi-byte character. The length in the table is a minimum, so we have
+    to scan along to skip the extra bytes. All opcodes are less than 128, so we
+    can use relatively efficient code. */
+
+    if (utf8) switch(c)
+      {
+      case OP_CHAR:
+      case OP_CHARNC:
+      case OP_EXACT:
+      case OP_UPTO:
+      case OP_MINUPTO:
+      case OP_STAR:
+      case OP_MINSTAR:
+      case OP_PLUS:
+      case OP_MINPLUS:
+      case OP_QUERY:
+      case OP_MINQUERY:
+      while ((*code & 0xc0) == 0x80) code++;
+      break;
+
+      /* XCLASS is used for classes that cannot be represented just by a bit
+      map. This includes negated single high-valued characters. The length in
+      the table is zero; the actual length is stored in the compiled code. */
+
+      case OP_XCLASS:
+      code += GET(code, 1) + 1;
+      break;
+      }
+#endif
+    }
+  }
+}
+
+
+
+/*************************************************
+*   Scan compiled regex for recursion reference  *
+*************************************************/
+
+/* This little function scans through a compiled pattern until it finds an
+instance of OP_RECURSE.
+
+Arguments:
+  code        points to start of expression
+  utf8        TRUE in UTF-8 mode
+
+Returns:      pointer to the opcode for OP_RECURSE, or NULL if not found
+*/
+
+static const uschar *
+find_recurse(const uschar *code, BOOL utf8)
+{
+#ifndef SUPPORT_UTF8
+utf8 = utf8;               /* Stop pedantic compilers complaining */
+#endif
+
+for (;;)
+  {
+  register int c = *code;
+  if (c == OP_END) return NULL;
+  else if (c == OP_RECURSE) return code;
+  else if (c > OP_BRA)
+    {
+    code += _pcre_OP_lengths[OP_BRA];
+    }
+  else
+    {
+    code += _pcre_OP_lengths[c];
+
+#ifdef SUPPORT_UTF8
+
+    /* In UTF-8 mode, opcodes that are followed by a character may be followed
+    by a multi-byte character. The length in the table is a minimum, so we have
+    to scan along to skip the extra bytes. All opcodes are less than 128, so we
+    can use relatively efficient code. */
+
+    if (utf8) switch(c)
+      {
+      case OP_CHAR:
+      case OP_CHARNC:
+      case OP_EXACT:
+      case OP_UPTO:
+      case OP_MINUPTO:
+      case OP_STAR:
+      case OP_MINSTAR:
+      case OP_PLUS:
+      case OP_MINPLUS:
+      case OP_QUERY:
+      case OP_MINQUERY:
+      while ((*code & 0xc0) == 0x80) code++;
+      break;
+
+      /* XCLASS is used for classes that cannot be represented just by a bit
+      map. This includes negated single high-valued characters. The length in
+      the table is zero; the actual length is stored in the compiled code. */
+
+      case OP_XCLASS:
+      code += GET(code, 1) + 1;
+      break;
+      }
+#endif
+    }
+  }
+}
+
+
+
+/*************************************************
+*    Scan compiled branch for non-emptiness      *
+*************************************************/
+
+/* This function scans through a branch of a compiled pattern to see whether it
+can match the empty string or not. It is called only from could_be_empty()
+below. Note that first_significant_code() skips over assertions. If we hit an
+unclosed bracket, we return "empty" - this means we've struck an inner bracket
+whose current branch will already have been scanned.
+
+Arguments:
+  code        points to start of search
+  endcode     points to where to stop
+  utf8        TRUE if in UTF8 mode
+
+Returns:      TRUE if what is matched could be empty
+*/
+
+static BOOL
+could_be_empty_branch(const uschar *code, const uschar *endcode, BOOL utf8)
+{
+register int c;
+for (code = first_significant_code(code + 1 + LINK_SIZE, NULL, 0, TRUE);
+     code < endcode;
+     code = first_significant_code(code + _pcre_OP_lengths[c], NULL, 0, TRUE))
+  {
+  const uschar *ccode;
+
+  c = *code;
+
+  if (c >= OP_BRA)
+    {
+    BOOL empty_branch;
+    if (GET(code, 1) == 0) return TRUE;    /* Hit unclosed bracket */
+
+    /* Scan a closed bracket */
+
+    empty_branch = FALSE;
+    do
+      {
+      if (!empty_branch && could_be_empty_branch(code, endcode, utf8))
+        empty_branch = TRUE;
+      code += GET(code, 1);
+      }
+    while (*code == OP_ALT);
+    if (!empty_branch) return FALSE;   /* All branches are non-empty */
+    code += 1 + LINK_SIZE;
+    c = *code;
+    }
+
+  else switch (c)
+    {
+    /* Check for quantifiers after a class */
+
+#ifdef SUPPORT_UTF8
+    case OP_XCLASS:
+    ccode = code + GET(code, 1);
+    goto CHECK_CLASS_REPEAT;
+#endif
+
+    case OP_CLASS:
+    case OP_NCLASS:
+    ccode = code + 33;
+
+#ifdef SUPPORT_UTF8
+    CHECK_CLASS_REPEAT:
+#endif
+
+    switch (*ccode)
+      {
+      case OP_CRSTAR:            /* These could be empty; continue */
+      case OP_CRMINSTAR:
+      case OP_CRQUERY:
+      case OP_CRMINQUERY:
+      break;
+
+      default:                   /* Non-repeat => class must match */
+      case OP_CRPLUS:            /* These repeats aren't empty */
+      case OP_CRMINPLUS:
+      return FALSE;
+
+      case OP_CRRANGE:
+      case OP_CRMINRANGE:
+      if (GET2(ccode, 1) > 0) return FALSE;  /* Minimum > 0 */
+      break;
+      }
+    break;
+
+    /* Opcodes that must match a character */
+
+    case OP_PROP:
+    case OP_NOTPROP:
+    case OP_EXTUNI:
+    case OP_NOT_DIGIT:
+    case OP_DIGIT:
+    case OP_NOT_WHITESPACE:
+    case OP_WHITESPACE:
+    case OP_NOT_WORDCHAR:
+    case OP_WORDCHAR:
+    case OP_ANY:
+    case OP_ANYBYTE:
+    case OP_CHAR:
+    case OP_CHARNC:
+    case OP_NOT:
+    case OP_PLUS:
+    case OP_MINPLUS:
+    case OP_EXACT:
+    case OP_NOTPLUS:
+    case OP_NOTMINPLUS:
+    case OP_NOTEXACT:
+    case OP_TYPEPLUS:
+    case OP_TYPEMINPLUS:
+    case OP_TYPEEXACT:
+    return FALSE;
+
+    /* End of branch */
+
+    case OP_KET:
+    case OP_KETRMAX:
+    case OP_KETRMIN:
+    case OP_ALT:
+    return TRUE;
+
+    /* In UTF-8 mode, STAR, MINSTAR, QUERY, MINQUERY, UPTO, and MINUPTO  may be
+    followed by a multibyte character */
+
+#ifdef SUPPORT_UTF8
+    case OP_STAR:
+    case OP_MINSTAR:
+    case OP_QUERY:
+    case OP_MINQUERY:
+    case OP_UPTO:
+    case OP_MINUPTO:
+    if (utf8) while ((code[2] & 0xc0) == 0x80) code++;
+    break;
+#endif
+    }
+  }
+
+return TRUE;
+}
+
+
+
+/*************************************************
+*    Scan compiled regex for non-emptiness       *
+*************************************************/
+
+/* This function is called to check for left recursive calls. We want to check
+the current branch of the current pattern to see if it could match the empty
+string. If it could, we must look outwards for branches at other levels,
+stopping when we pass beyond the bracket which is the subject of the recursion.
+
+Arguments:
+  code        points to start of the recursion
+  endcode     points to where to stop (current RECURSE item)
+  bcptr       points to the chain of current (unclosed) branch starts
+  utf8        TRUE if in UTF-8 mode
+
+Returns:      TRUE if what is matched could be empty
+*/
+
+static BOOL
+could_be_empty(const uschar *code, const uschar *endcode, branch_chain *bcptr,
+  BOOL utf8)
+{
+while (bcptr != NULL && bcptr->current >= code)
+  {
+  if (!could_be_empty_branch(bcptr->current, endcode, utf8)) return FALSE;
+  bcptr = bcptr->outer;
+  }
+return TRUE;
+}
+
+
+
+/*************************************************
+*           Check for POSIX class syntax         *
+*************************************************/
+
+/* This function is called when the sequence "[:" or "[." or "[=" is
+encountered in a character class. It checks whether this is followed by an
+optional ^ and then a sequence of letters, terminated by a matching ":]" or
+".]" or "=]".
+
+Argument:
+  ptr      pointer to the initial [
+  endptr   where to return the end pointer
+  cd       pointer to compile data
+
+Returns:   TRUE or FALSE
+*/
+
+static BOOL
+check_posix_syntax(const uschar *ptr, const uschar **endptr, compile_data *cd)
+{
+int terminator;          /* Don't combine these lines; the Solaris cc */
+terminator = *(++ptr);   /* compiler warns about "non-constant" initializer. */
+if (*(++ptr) == '^') ptr++;
+while ((cd->ctypes[*ptr] & ctype_letter) != 0) ptr++;
+if (*ptr == terminator && ptr[1] == ']')
+  {
+  *endptr = ptr;
+  return TRUE;
+  }
+return FALSE;
+}
+
+
+
+
+/*************************************************
+*          Check POSIX class name                *
+*************************************************/
+
+/* This function is called to check the name given in a POSIX-style class entry
+such as [:alnum:].
+
+Arguments:
+  ptr        points to the first letter
+  len        the length of the name
+
+Returns:     a value representing the name, or -1 if unknown
+*/
+
+static int
+check_posix_name(const uschar *ptr, int len)
+{
+register int yield = 0;
+while (posix_name_lengths[yield] != 0)
+  {
+  if (len == posix_name_lengths[yield] &&
+    strncmp((const char *)ptr, posix_names[yield], len) == 0) return yield;
+  yield++;
+  }
+return -1;
+}
+
+
+/*************************************************
+*    Adjust OP_RECURSE items in repeated group   *
+*************************************************/
+
+/* OP_RECURSE items contain an offset from the start of the regex to the group
+that is referenced. This means that groups can be replicated for fixed
+repetition simply by copying (because the recursion is allowed to refer to
+earlier groups that are outside the current group). However, when a group is
+optional (i.e. the minimum quantifier is zero), OP_BRAZERO is inserted before
+it, after it has been compiled. This means that any OP_RECURSE items within it
+that refer to the group itself or any contained groups have to have their
+offsets adjusted. That is the job of this function. Before it is called, the
+partially compiled regex must be temporarily terminated with OP_END.
+
+Arguments:
+  group      points to the start of the group
+  adjust     the amount by which the group is to be moved
+  utf8       TRUE in UTF-8 mode
+  cd         contains pointers to tables etc.
+
+Returns:     nothing
+*/
+
+static void
+adjust_recurse(uschar *group, int adjust, BOOL utf8, compile_data *cd)
+{
+uschar *ptr = group;
+while ((ptr = (uschar *)find_recurse(ptr, utf8)) != NULL)
+  {
+  int offset = GET(ptr, 1);
+  if (cd->start_code + offset >= group) PUT(ptr, 1, offset + adjust);
+  ptr += 1 + LINK_SIZE;
+  }
+}
+
+
+
+/*************************************************
+*        Insert an automatic callout point       *
+*************************************************/
+
+/* This function is called when the PCRE_AUTO_CALLOUT option is set, to insert
+callout points before each pattern item.
+
+Arguments:
+  code           current code pointer
+  ptr            current pattern pointer
+  cd             pointers to tables etc
+
+Returns:         new code pointer
+*/
+
+static uschar *
+auto_callout(uschar *code, const uschar *ptr, compile_data *cd)
+{
+*code++ = OP_CALLOUT;
+*code++ = 255;
+PUT(code, 0, ptr - cd->start_pattern);  /* Pattern offset */
+PUT(code, LINK_SIZE, 0);                /* Default length */
+return code + 2*LINK_SIZE;
+}
+
+
+
+/*************************************************
+*         Complete a callout item                *
+*************************************************/
+
+/* A callout item contains the length of the next item in the pattern, which
+we can't fill in till after we have reached the relevant point. This is used
+for both automatic and manual callouts.
+
+Arguments:
+  previous_callout   points to previous callout item
+  ptr                current pattern pointer
+  cd                 pointers to tables etc
+
+Returns:             nothing
+*/
+
+static void
+complete_callout(uschar *previous_callout, const uschar *ptr, compile_data *cd)
+{
+int length = ptr - cd->start_pattern - GET(previous_callout, 2);
+PUT(previous_callout, 2 + LINK_SIZE, length);
+}
+
+
+
+#ifdef SUPPORT_UCP
+/*************************************************
+*           Get othercase range                  *
+*************************************************/
+
+/* This function is passed the start and end of a class range, in UTF-8 mode
+with UCP support. It searches up the characters, looking for internal ranges of
+characters in the "other" case. Each call returns the next one, updating the
+start address.
+
+Arguments:
+  cptr        points to starting character value; updated
+  d           end value
+  ocptr       where to put start of othercase range
+  odptr       where to put end of othercase range
+
+Yield:        TRUE when range returned; FALSE when no more
+*/
+
+static BOOL
+get_othercase_range(int *cptr, int d, int *ocptr, int *odptr)
+{
+int c, chartype, othercase, next;
+
+for (c = *cptr; c <= d; c++)
+  {
+  if (_pcre_ucp_findchar(c, &chartype, &othercase) == ucp_L && othercase != 0)
+    break;
+  }
+
+if (c > d) return FALSE;
+
+*ocptr = othercase;
+next = othercase + 1;
+
+for (++c; c <= d; c++)
+  {
+  if (_pcre_ucp_findchar(c, &chartype, &othercase) != ucp_L ||
+        othercase != next)
+    break;
+  next++;
+  }
+
+*odptr = next - 1;
+*cptr = c;
+
+return TRUE;
+}
+#endif  /* SUPPORT_UCP */
+
+
+/*************************************************
+*           Compile one branch                   *
+*************************************************/
+
+/* Scan the pattern, compiling it into the code vector. If the options are
+changed during the branch, the pointer is used to change the external options
+bits.
+
+Arguments:
+  optionsptr     pointer to the option bits
+  brackets       points to number of extracting brackets used
+  codeptr        points to the pointer to the current code point
+  ptrptr         points to the current pattern pointer
+  errorcodeptr   points to error code variable
+  firstbyteptr   set to initial literal character, or < 0 (REQ_UNSET, REQ_NONE)
+  reqbyteptr     set to the last literal character required, else < 0
+  bcptr          points to current branch chain
+  cd             contains pointers to tables etc.
+
+Returns:         TRUE on success
+                 FALSE, with *errorcodeptr set non-zero on error
+*/
+
+static BOOL
+compile_branch(int *optionsptr, int *brackets, uschar **codeptr,
+  const uschar **ptrptr, int *errorcodeptr, int *firstbyteptr,
+  int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
+{
+int repeat_type, op_type;
+int repeat_min = 0, repeat_max = 0;      /* To please picky compilers */
+int bravalue = 0;
+int greedy_default, greedy_non_default;
+int firstbyte, reqbyte;
+int zeroreqbyte, zerofirstbyte;
+int req_caseopt, reqvary, tempreqvary;
+int condcount = 0;
+int options = *optionsptr;
+int after_manual_callout = 0;
+register int c;
+register uschar *code = *codeptr;
+uschar *tempcode;
+BOOL inescq = FALSE;
+BOOL groupsetfirstbyte = FALSE;
+const uschar *ptr = *ptrptr;
+const uschar *tempptr;
+uschar *previous = NULL;
+uschar *previous_callout = NULL;
+uschar classbits[32];
+
+#ifdef SUPPORT_UTF8
+BOOL class_utf8;
+BOOL utf8 = (options & PCRE_UTF8) != 0;
+uschar *class_utf8data;
+uschar utf8_char[6];
+#else
+BOOL utf8 = FALSE;
+#endif
+
+/* Set up the default and non-default settings for greediness */
+
+greedy_default = ((options & PCRE_UNGREEDY) != 0);
+greedy_non_default = greedy_default ^ 1;
+
+/* Initialize no first byte, no required byte. REQ_UNSET means "no char
+matching encountered yet". It gets changed to REQ_NONE if we hit something that
+matches a non-fixed char first char; reqbyte just remains unset if we never
+find one.
+
+When we hit a repeat whose minimum is zero, we may have to adjust these values
+to take the zero repeat into account. This is implemented by setting them to
+zerofirstbyte and zeroreqbyte when such a repeat is encountered. The individual
+item types that can be repeated set these backoff variables appropriately. */
+
+firstbyte = reqbyte = zerofirstbyte = zeroreqbyte = REQ_UNSET;
+
+/* The variable req_caseopt contains either the REQ_CASELESS value or zero,
+according to the current setting of the caseless flag. REQ_CASELESS is a bit
+value > 255. It is added into the firstbyte or reqbyte variables to record the
+case status of the value. This is used only for ASCII characters. */
+
+req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
+
+/* Switch on next character until the end of the branch */
+
+for (;; ptr++)
+  {
+  BOOL negate_class;
+  BOOL possessive_quantifier;
+  BOOL is_quantifier;
+  int class_charcount;
+  int class_lastchar;
+  int newoptions;
+  int recno;
+  int skipbytes;
+  int subreqbyte;
+  int subfirstbyte;
+  int mclength;
+  uschar mcbuffer[8];
+
+  /* Next byte in the pattern */
+
+  c = *ptr;
+
+  /* If in \Q...\E, check for the end; if not, we have a literal */
+
+  if (inescq && c != 0)
+    {
+    if (c == '\\' && ptr[1] == 'E')
+      {
+      inescq = FALSE;
+      ptr++;
+      continue;
+      }
+    else
+      {
+      if (previous_callout != NULL)
+        {
+        complete_callout(previous_callout, ptr, cd);
+        previous_callout = NULL;
+        }
+      if ((options & PCRE_AUTO_CALLOUT) != 0)
+        {
+        previous_callout = code;
+        code = auto_callout(code, ptr, cd);
+        }
+      goto NORMAL_CHAR;
+      }
+    }
+
+  /* Fill in length of a previous callout, except when the next thing is
+  a quantifier. */
+
+  is_quantifier = c == '*' || c == '+' || c == '?' ||
+    (c == '{' && is_counted_repeat(ptr+1));
+
+  if (!is_quantifier && previous_callout != NULL &&
+       after_manual_callout-- <= 0)
+    {
+    complete_callout(previous_callout, ptr, cd);
+    previous_callout = NULL;
+    }
+
+  /* In extended mode, skip white space and comments */
+
+  if ((options & PCRE_EXTENDED) != 0)
+    {
+    if ((cd->ctypes[c] & ctype_space) != 0) continue;
+    if (c == '#')
+      {
+      /* The space before the ; is to avoid a warning on a silly compiler
+      on the Macintosh. */
+      while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
+      if (c != 0) continue;   /* Else fall through to handle end of string */
+      }
+    }
+
+  /* No auto callout for quantifiers. */
+
+  if ((options & PCRE_AUTO_CALLOUT) != 0 && !is_quantifier)
+    {
+    previous_callout = code;
+    code = auto_callout(code, ptr, cd);
+    }
+
+  switch(c)
+    {
+    /* The branch terminates at end of string, |, or ). */
+
+    case 0:
+    case '|':
+    case ')':
+    *firstbyteptr = firstbyte;
+    *reqbyteptr = reqbyte;
+    *codeptr = code;
+    *ptrptr = ptr;
+    return TRUE;
+
+    /* Handle single-character metacharacters. In multiline mode, ^ disables
+    the setting of any following char as a first character. */
+
+    case '^':
+    if ((options & PCRE_MULTILINE) != 0)
+      {
+      if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
+      }
+    previous = NULL;
+    *code++ = OP_CIRC;
+    break;
+
+    case '$':
+    previous = NULL;
+    *code++ = OP_DOLL;
+    break;
+
+    /* There can never be a first char if '.' is first, whatever happens about
+    repeats. The value of reqbyte doesn't change either. */
+
+    case '.':
+    if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
+    zerofirstbyte = firstbyte;
+    zeroreqbyte = reqbyte;
+    previous = code;
+    *code++ = OP_ANY;
+    break;
+
+    /* Character classes. If the included characters are all < 255 in value, we
+    build a 32-byte bitmap of the permitted characters, except in the special
+    case where there is only one such character. For negated classes, we build
+    the map as usual, then invert it at the end. However, we use a different
+    opcode so that data characters > 255 can be handled correctly.
+
+    If the class contains characters outside the 0-255 range, a different
+    opcode is compiled. It may optionally have a bit map for characters < 256,
+    but those above are are explicitly listed afterwards. A flag byte tells
+    whether the bitmap is present, and whether this is a negated class or not.
+    */
+
+    case '[':
+    previous = code;
+
+    /* PCRE supports POSIX class stuff inside a class. Perl gives an error if
+    they are encountered at the top level, so we'll do that too. */
+
+    if ((ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
+        check_posix_syntax(ptr, &tempptr, cd))
+      {
+      *errorcodeptr = (ptr[1] == ':')? ERR13 : ERR31;
+      goto FAILED;
+      }
+
+    /* If the first character is '^', set the negation flag and skip it. */
+
+    if ((c = *(++ptr)) == '^')
+      {
+      negate_class = TRUE;
+      c = *(++ptr);
+      }
+    else
+      {
+      negate_class = FALSE;
+      }
+
+    /* Keep a count of chars with values < 256 so that we can optimize the case
+    of just a single character (as long as it's < 256). For higher valued UTF-8
+    characters, we don't yet do any optimization. */
+
+    class_charcount = 0;
+    class_lastchar = -1;
+
+#ifdef SUPPORT_UTF8
+    class_utf8 = FALSE;                       /* No chars >= 256 */
+    class_utf8data = code + LINK_SIZE + 34;   /* For UTF-8 items */
+#endif
+
+    /* Initialize the 32-char bit map to all zeros. We have to build the
+    map in a temporary bit of store, in case the class contains only 1
+    character (< 256), because in that case the compiled code doesn't use the
+    bit map. */
+
+    memset(classbits, 0, 32 * sizeof(uschar));
+
+    /* Process characters until ] is reached. By writing this as a "do" it
+    means that an initial ] is taken as a data character. The first pass
+    through the regex checked the overall syntax, so we don't need to be very
+    strict here. At the start of the loop, c contains the first byte of the
+    character. */
+
+    do
+      {
+#ifdef SUPPORT_UTF8
+      if (utf8 && c > 127)
+        {                           /* Braces are required because the */
+        GETCHARLEN(c, ptr, ptr);    /* macro generates multiple statements */
+        }
+#endif
+
+      /* Inside \Q...\E everything is literal except \E */
+
+      if (inescq)
+        {
+        if (c == '\\' && ptr[1] == 'E')
+          {
+          inescq = FALSE;
+          ptr++;
+          continue;
+          }
+        else goto LONE_SINGLE_CHARACTER;
+        }
+
+      /* Handle POSIX class names. Perl allows a negation extension of the
+      form [:^name:]. A square bracket that doesn't match the syntax is
+      treated as a literal. We also recognize the POSIX constructions
+      [.ch.] and [=ch=] ("collating elements") and fault them, as Perl
+      5.6 and 5.8 do. */
+
+      if (c == '[' &&
+          (ptr[1] == ':' || ptr[1] == '.' || ptr[1] == '=') &&
+          check_posix_syntax(ptr, &tempptr, cd))
+        {
+        BOOL local_negate = FALSE;
+        int posix_class, i;
+        register const uschar *cbits = cd->cbits;
+
+        if (ptr[1] != ':')
+          {
+          *errorcodeptr = ERR31;
+          goto FAILED;
+          }
+
+        ptr += 2;
+        if (*ptr == '^')
+          {
+          local_negate = TRUE;
+          ptr++;
+          }
+
+        posix_class = check_posix_name(ptr, tempptr - ptr);
+        if (posix_class < 0)
+          {
+          *errorcodeptr = ERR30;
+          goto FAILED;
+          }
+
+        /* If matching is caseless, upper and lower are converted to
+        alpha. This relies on the fact that the class table starts with
+        alpha, lower, upper as the first 3 entries. */
+
+        if ((options & PCRE_CASELESS) != 0 && posix_class <= 2)
+          posix_class = 0;
+
+        /* Or into the map we are building up to 3 of the static class
+        tables, or their negations. The [:blank:] class sets up the same
+        chars as the [:space:] class (all white space). We remove the vertical
+        white space chars afterwards. */
+
+        posix_class *= 3;
+        for (i = 0; i < 3; i++)
+          {
+          BOOL blankclass = strncmp((char *)ptr, "blank", 5) == 0;
+          int taboffset = posix_class_maps[posix_class + i];
+          if (taboffset < 0) break;
+          if (local_negate)
+            {
+            if (i == 0)
+              for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+taboffset];
+            else
+              for (c = 0; c < 32; c++) classbits[c] &= ~cbits[c+taboffset];
+            if (blankclass) classbits[1] |= 0x3c;
+            }
+          else
+            {
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+taboffset];
+            if (blankclass) classbits[1] &= ~0x3c;
+            }
+          }
+
+        ptr = tempptr + 1;
+        class_charcount = 10;  /* Set > 1; assumes more than 1 per class */
+        continue;    /* End of POSIX syntax handling */
+        }
+
+      /* Backslash may introduce a single character, or it may introduce one
+      of the specials, which just set a flag. Escaped items are checked for
+      validity in the pre-compiling pass. The sequence \b is a special case.
+      Inside a class (and only there) it is treated as backspace. Elsewhere
+      it marks a word boundary. Other escapes have preset maps ready to
+      or into the one we are building. We assume they have more than one
+      character in them, so set class_charcount bigger than one. */
+
+      if (c == '\\')
+        {
+        c = check_escape(&ptr, errorcodeptr, *brackets, options, TRUE);
+
+        if (-c == ESC_b) c = '\b';       /* \b is backslash in a class */
+        else if (-c == ESC_X) c = 'X';   /* \X is literal X in a class */
+        else if (-c == ESC_Q)            /* Handle start of quoted string */
+          {
+          if (ptr[1] == '\\' && ptr[2] == 'E')
+            {
+            ptr += 2; /* avoid empty string */
+            }
+          else inescq = TRUE;
+          continue;
+          }
+
+        if (c < 0)
+          {
+          register const uschar *cbits = cd->cbits;
+          class_charcount += 2;     /* Greater than 1 is what matters */
+          switch (-c)
+            {
+            case ESC_d:
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_digit];
+            continue;
+
+            case ESC_D:
+            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_digit];
+            continue;
+
+            case ESC_w:
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_word];
+            continue;
+
+            case ESC_W:
+            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_word];
+            continue;
+
+            case ESC_s:
+            for (c = 0; c < 32; c++) classbits[c] |= cbits[c+cbit_space];
+            classbits[1] &= ~0x08;   /* Perl 5.004 onwards omits VT from \s */
+            continue;
+
+            case ESC_S:
+            for (c = 0; c < 32; c++) classbits[c] |= ~cbits[c+cbit_space];
+            classbits[1] |= 0x08;    /* Perl 5.004 onwards omits VT from \s */
+            continue;
+
+#ifdef SUPPORT_UCP
+            case ESC_p:
+            case ESC_P:
+              {
+              BOOL negated;
+              int property = get_ucp(&ptr, &negated, errorcodeptr);
+              if (property < 0) goto FAILED;
+              class_utf8 = TRUE;
+              *class_utf8data++ = ((-c == ESC_p) != negated)?
+                XCL_PROP : XCL_NOTPROP;
+              *class_utf8data++ = property;
+              class_charcount -= 2;   /* Not a < 256 character */
+              }
+            continue;
+#endif
+
+            /* Unrecognized escapes are faulted if PCRE is running in its
+            strict mode. By default, for compatibility with Perl, they are
+            treated as literals. */
+
+            default:
+            if ((options & PCRE_EXTRA) != 0)
+              {
+              *errorcodeptr = ERR7;
+              goto FAILED;
+              }
+            c = *ptr;              /* The final character */
+            class_charcount -= 2;  /* Undo the default count from above */
+            }
+          }
+
+        /* Fall through if we have a single character (c >= 0). This may be
+        > 256 in UTF-8 mode. */
+
+        }   /* End of backslash handling */
+
+      /* A single character may be followed by '-' to form a range. However,
+      Perl does not permit ']' to be the end of the range. A '-' character
+      here is treated as a literal. */
+
+      if (ptr[1] == '-' && ptr[2] != ']')
+        {
+        int d;
+        ptr += 2;
+
+#ifdef SUPPORT_UTF8
+        if (utf8)
+          {                           /* Braces are required because the */
+          GETCHARLEN(d, ptr, ptr);    /* macro generates multiple statements */
+          }
+        else
+#endif
+        d = *ptr;  /* Not UTF-8 mode */
+
+        /* The second part of a range can be a single-character escape, but
+        not any of the other escapes. Perl 5.6 treats a hyphen as a literal
+        in such circumstances. */
+
+        if (d == '\\')
+          {
+          const uschar *oldptr = ptr;
+          d = check_escape(&ptr, errorcodeptr, *brackets, options, TRUE);
+
+          /* \b is backslash; \X is literal X; any other special means the '-'
+          was literal */
+
+          if (d < 0)
+            {
+            if (d == -ESC_b) d = '\b';
+            else if (d == -ESC_X) d = 'X'; else
+              {
+              ptr = oldptr - 2;
+              goto LONE_SINGLE_CHARACTER;  /* A few lines below */
+              }
+            }
+          }
+
+        /* The check that the two values are in the correct order happens in
+        the pre-pass. Optimize one-character ranges */
+
+        if (d == c) goto LONE_SINGLE_CHARACTER;  /* A few lines below */
+
+        /* In UTF-8 mode, if the upper limit is > 255, or > 127 for caseless
+        matching, we have to use an XCLASS with extra data items. Caseless
+        matching for characters > 127 is available only if UCP support is
+        available. */
+
+#ifdef SUPPORT_UTF8
+        if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
+          {
+          class_utf8 = TRUE;
+
+          /* With UCP support, we can find the other case equivalents of
+          the relevant characters. There may be several ranges. Optimize how
+          they fit with the basic range. */
+
+#ifdef SUPPORT_UCP
+          if ((options & PCRE_CASELESS) != 0)
+            {
+            int occ, ocd;
+            int cc = c;
+            int origd = d;
+            while (get_othercase_range(&cc, origd, &occ, &ocd))
+              {
+              if (occ >= c && ocd <= d) continue;  /* Skip embedded ranges */
+
+              if (occ < c  && ocd >= c - 1)        /* Extend the basic range */
+                {                                  /* if there is overlap,   */
+                c = occ;                           /* noting that if occ < c */
+                continue;                          /* we can't have ocd > d  */
+                }                                  /* because a subrange is  */
+              if (ocd > d && occ <= d + 1)         /* always shorter than    */
+                {                                  /* the basic range.       */
+                d = ocd;
+                continue;
+                }
+
+              if (occ == ocd)
+                {
+                *class_utf8data++ = XCL_SINGLE;
+                }
+              else
+                {
+                *class_utf8data++ = XCL_RANGE;
+                class_utf8data += _pcre_ord2utf8(occ, class_utf8data);
+                }
+              class_utf8data += _pcre_ord2utf8(ocd, class_utf8data);
+              }
+            }
+#endif  /* SUPPORT_UCP */
+
+          /* Now record the original range, possibly modified for UCP caseless
+          overlapping ranges. */
+
+          *class_utf8data++ = XCL_RANGE;
+          class_utf8data += _pcre_ord2utf8(c, class_utf8data);
+          class_utf8data += _pcre_ord2utf8(d, class_utf8data);
+
+          /* With UCP support, we are done. Without UCP support, there is no
+          caseless matching for UTF-8 characters > 127; we can use the bit map
+          for the smaller ones. */
+
+#ifdef SUPPORT_UCP
+          continue;    /* With next character in the class */
+#else
+          if ((options & PCRE_CASELESS) == 0 || c > 127) continue;
+
+          /* Adjust upper limit and fall through to set up the map */
+
+          d = 127;
+
+#endif  /* SUPPORT_UCP */
+          }
+#endif  /* SUPPORT_UTF8 */
+
+        /* We use the bit map for all cases when not in UTF-8 mode; else
+        ranges that lie entirely within 0-127 when there is UCP support; else
+        for partial ranges without UCP support. */
+
+        for (; c <= d; c++)
+          {
+          classbits[c/8] |= (1 << (c&7));
+          if ((options & PCRE_CASELESS) != 0)
+            {
+            int uc = cd->fcc[c];           /* flip case */
+            classbits[uc/8] |= (1 << (uc&7));
+            }
+          class_charcount++;                /* in case a one-char range */
+          class_lastchar = c;
+          }
+
+        continue;   /* Go get the next char in the class */
+        }
+
+      /* Handle a lone single character - we can get here for a normal
+      non-escape char, or after \ that introduces a single character or for an
+      apparent range that isn't. */
+
+      LONE_SINGLE_CHARACTER:
+
+      /* Handle a character that cannot go in the bit map */
+
+#ifdef SUPPORT_UTF8
+      if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
+        {
+        class_utf8 = TRUE;
+        *class_utf8data++ = XCL_SINGLE;
+        class_utf8data += _pcre_ord2utf8(c, class_utf8data);
+
+#ifdef SUPPORT_UCP
+        if ((options & PCRE_CASELESS) != 0)
+          {
+          int chartype;
+          int othercase;
+          if (_pcre_ucp_findchar(c, &chartype, &othercase) >= 0 &&
+               othercase > 0)
+            {
+            *class_utf8data++ = XCL_SINGLE;
+            class_utf8data += _pcre_ord2utf8(othercase, class_utf8data);
+            }
+          }
+#endif  /* SUPPORT_UCP */
+
+        }
+      else
+#endif  /* SUPPORT_UTF8 */
+
+      /* Handle a single-byte character */
+        {
+        classbits[c/8] |= (1 << (c&7));
+        if ((options & PCRE_CASELESS) != 0)
+          {
+          c = cd->fcc[c];   /* flip case */
+          classbits[c/8] |= (1 << (c&7));
+          }
+        class_charcount++;
+        class_lastchar = c;
+        }
+      }
+
+    /* Loop until ']' reached; the check for end of string happens inside the
+    loop. This "while" is the end of the "do" above. */
+
+    while ((c = *(++ptr)) != ']' || inescq);
+
+    /* If class_charcount is 1, we saw precisely one character whose value is
+    less than 256. In non-UTF-8 mode we can always optimize. In UTF-8 mode, we
+    can optimize the negative case only if there were no characters >= 128
+    because OP_NOT and the related opcodes like OP_NOTSTAR operate on
+    single-bytes only. This is an historical hangover. Maybe one day we can
+    tidy these opcodes to handle multi-byte characters.
+
+    The optimization throws away the bit map. We turn the item into a
+    1-character OP_CHAR[NC] if it's positive, or OP_NOT if it's negative. Note
+    that OP_NOT does not support multibyte characters. In the positive case, it
+    can cause firstbyte to be set. Otherwise, there can be no first char if
+    this item is first, whatever repeat count may follow. In the case of
+    reqbyte, save the previous value for reinstating. */
+
+#ifdef SUPPORT_UTF8
+    if (class_charcount == 1 &&
+          (!utf8 ||
+          (!class_utf8 && (!negate_class || class_lastchar < 128))))
+
+#else
+    if (class_charcount == 1)
+#endif
+      {
+      zeroreqbyte = reqbyte;
+
+      /* The OP_NOT opcode works on one-byte characters only. */
+
+      if (negate_class)
+        {
+        if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
+        zerofirstbyte = firstbyte;
+        *code++ = OP_NOT;
+        *code++ = class_lastchar;
+        break;
+        }
+
+      /* For a single, positive character, get the value into mcbuffer, and
+      then we can handle this with the normal one-character code. */
+
+#ifdef SUPPORT_UTF8
+      if (utf8 && class_lastchar > 127)
+        mclength = _pcre_ord2utf8(class_lastchar, mcbuffer);
+      else
+#endif
+        {
+        mcbuffer[0] = class_lastchar;
+        mclength = 1;
+        }
+      goto ONE_CHAR;
+      }       /* End of 1-char optimization */
+
+    /* The general case - not the one-char optimization. If this is the first
+    thing in the branch, there can be no first char setting, whatever the
+    repeat count. Any reqbyte setting must remain unchanged after any kind of
+    repeat. */
+
+    if (firstbyte == REQ_UNSET) firstbyte = REQ_NONE;
+    zerofirstbyte = firstbyte;
+    zeroreqbyte = reqbyte;
+
+    /* If there are characters with values > 255, we have to compile an
+    extended class, with its own opcode. If there are no characters < 256,
+    we can omit the bitmap. */
+
+#ifdef SUPPORT_UTF8
+    if (class_utf8)
+      {
+      *class_utf8data++ = XCL_END;    /* Marks the end of extra data */
+      *code++ = OP_XCLASS;
+      code += LINK_SIZE;
+      *code = negate_class? XCL_NOT : 0;
+
+      /* If the map is required, install it, and move on to the end of
+      the extra data */
+
+      if (class_charcount > 0)
+        {
+        *code++ |= XCL_MAP;
+        memcpy(code, classbits, 32);
+        code = class_utf8data;
+        }
+
+      /* If the map is not required, slide down the extra data. */
+
+      else
+        {
+        int len = class_utf8data - (code + 33);
+        memmove(code + 1, code + 33, len);
+        code += len + 1;
+        }
+
+      /* Now fill in the complete length of the item */
+
+      PUT(previous, 1, code - previous);
+      break;   /* End of class handling */
+      }
+#endif
+
+    /* If there are no characters > 255, negate the 32-byte map if necessary,
+    and copy it into the code vector. If this is the first thing in the branch,
+    there can be no first char setting, whatever the repeat count. Any reqbyte
+    setting must remain unchanged after any kind of repeat. */
+
+    if (negate_class)
+      {
+      *code++ = OP_NCLASS;
+      for (c = 0; c < 32; c++) code[c] = ~classbits[c];
+      }
+    else
+      {
+      *code++ = OP_CLASS;
+      memcpy(code, classbits, 32);
+      }
+    code += 32;
+    break;
+
+    /* Various kinds of repeat; '{' is not necessarily a quantifier, but this
+    has been tested above. */
+
+    case '{':
+    if (!is_quantifier) goto NORMAL_CHAR;
+    ptr = read_repeat_counts(ptr+1, &repeat_min, &repeat_max, errorcodeptr);
+    if (*errorcodeptr != 0) goto FAILED;
+    goto REPEAT;
+
+    case '*':
+    repeat_min = 0;
+    repeat_max = -1;
+    goto REPEAT;
+
+    case '+':
+    repeat_min = 1;
+    repeat_max = -1;
+    goto REPEAT;
+
+    case '?':
+    repeat_min = 0;
+    repeat_max = 1;
+
+    REPEAT:
+    if (previous == NULL)
+      {
+      *errorcodeptr = ERR9;
+      goto FAILED;
+      }
+
+    if (repeat_min == 0)
+      {
+      firstbyte = zerofirstbyte;    /* Adjust for zero repeat */
+      reqbyte = zeroreqbyte;        /* Ditto */
+      }
+
+    /* Remember whether this is a variable length repeat */
+
+    reqvary = (repeat_min == repeat_max)? 0 : REQ_VARY;
+
+    op_type = 0;                    /* Default single-char op codes */
+    possessive_quantifier = FALSE;  /* Default not possessive quantifier */
+
+    /* Save start of previous item, in case we have to move it up to make space
+    for an inserted OP_ONCE for the additional '+' extension. */
+
+    tempcode = previous;
+
+    /* If the next character is '+', we have a possessive quantifier. This
+    implies greediness, whatever the setting of the PCRE_UNGREEDY option.
+    If the next character is '?' this is a minimizing repeat, by default,
+    but if PCRE_UNGREEDY is set, it works the other way round. We change the
+    repeat type to the non-default. */
+
+    if (ptr[1] == '+')
+      {
+      repeat_type = 0;                  /* Force greedy */
+      possessive_quantifier = TRUE;
+      ptr++;
+      }
+    else if (ptr[1] == '?')
+      {
+      repeat_type = greedy_non_default;
+      ptr++;
+      }
+    else repeat_type = greedy_default;
+
+    /* If previous was a recursion, we need to wrap it inside brackets so that
+    it can be replicated if necessary. */
+
+    if (*previous == OP_RECURSE)
+      {
+      memmove(previous + 1 + LINK_SIZE, previous, 1 + LINK_SIZE);
+      code += 1 + LINK_SIZE;
+      *previous = OP_BRA;
+      PUT(previous, 1, code - previous);
+      *code = OP_KET;
+      PUT(code, 1, code - previous);
+      code += 1 + LINK_SIZE;
+      }
+
+    /* If previous was a character match, abolish the item and generate a
+    repeat item instead. If a char item has a minumum of more than one, ensure
+    that it is set in reqbyte - it might not be if a sequence such as x{3} is
+    the first thing in a branch because the x will have gone into firstbyte
+    instead.  */
+
+    if (*previous == OP_CHAR || *previous == OP_CHARNC)
+      {
+      /* Deal with UTF-8 characters that take up more than one byte. It's
+      easier to write this out separately than try to macrify it. Use c to
+      hold the length of the character in bytes, plus 0x80 to flag that it's a
+      length rather than a small character. */
+
+#ifdef SUPPORT_UTF8
+      if (utf8 && (code[-1] & 0x80) != 0)
+        {
+        uschar *lastchar = code - 1;
+        while((*lastchar & 0xc0) == 0x80) lastchar--;
+        c = code - lastchar;            /* Length of UTF-8 character */
+        memcpy(utf8_char, lastchar, c); /* Save the char */
+        c |= 0x80;                      /* Flag c as a length */
+        }
+      else
+#endif
+
+      /* Handle the case of a single byte - either with no UTF8 support, or
+      with UTF-8 disabled, or for a UTF-8 character < 128. */
+
+        {
+        c = code[-1];
+        if (repeat_min > 1) reqbyte = c | req_caseopt | cd->req_varyopt;
+        }
+
+      goto OUTPUT_SINGLE_REPEAT;   /* Code shared with single character types */
+      }
+
+    /* If previous was a single negated character ([^a] or similar), we use
+    one of the special opcodes, replacing it. The code is shared with single-
+    character repeats by setting opt_type to add a suitable offset into
+    repeat_type. OP_NOT is currently used only for single-byte chars. */
+
+    else if (*previous == OP_NOT)
+      {
+      op_type = OP_NOTSTAR - OP_STAR;  /* Use "not" opcodes */
+      c = previous[1];
+      goto OUTPUT_SINGLE_REPEAT;
+      }
+
+    /* If previous was a character type match (\d or similar), abolish it and
+    create a suitable repeat item. The code is shared with single-character
+    repeats by setting op_type to add a suitable offset into repeat_type. Note
+    the the Unicode property types will be present only when SUPPORT_UCP is
+    defined, but we don't wrap the little bits of code here because it just
+    makes it horribly messy. */
+
+    else if (*previous < OP_EODN)
+      {
+      uschar *oldcode;
+      int prop_type;
+      op_type = OP_TYPESTAR - OP_STAR;  /* Use type opcodes */
+      c = *previous;
+
+      OUTPUT_SINGLE_REPEAT:
+      prop_type = (*previous == OP_PROP || *previous == OP_NOTPROP)?
+        previous[1] : -1;
+
+      oldcode = code;
+      code = previous;                  /* Usually overwrite previous item */
+
+      /* If the maximum is zero then the minimum must also be zero; Perl allows
+      this case, so we do too - by simply omitting the item altogether. */
+
+      if (repeat_max == 0) goto END_REPEAT;
+
+      /* All real repeats make it impossible to handle partial matching (maybe
+      one day we will be able to remove this restriction). */
+
+      if (repeat_max != 1) cd->nopartial = TRUE;
+
+      /* Combine the op_type with the repeat_type */
+
+      repeat_type += op_type;
+
+      /* A minimum of zero is handled either as the special case * or ?, or as
+      an UPTO, with the maximum given. */
+
+      if (repeat_min == 0)
+        {
+        if (repeat_max == -1) *code++ = OP_STAR + repeat_type;
+          else if (repeat_max == 1) *code++ = OP_QUERY + repeat_type;
+        else
+          {
+          *code++ = OP_UPTO + repeat_type;
+          PUT2INC(code, 0, repeat_max);
+          }
+        }
+
+      /* A repeat minimum of 1 is optimized into some special cases. If the
+      maximum is unlimited, we use OP_PLUS. Otherwise, the original item it
+      left in place and, if the maximum is greater than 1, we use OP_UPTO with
+      one less than the maximum. */
+
+      else if (repeat_min == 1)
+        {
+        if (repeat_max == -1)
+          *code++ = OP_PLUS + repeat_type;
+        else
+          {
+          code = oldcode;                 /* leave previous item in place */
+          if (repeat_max == 1) goto END_REPEAT;
+          *code++ = OP_UPTO + repeat_type;
+          PUT2INC(code, 0, repeat_max - 1);
+          }
+        }
+
+      /* The case {n,n} is just an EXACT, while the general case {n,m} is
+      handled as an EXACT followed by an UPTO. */
+
+      else
+        {
+        *code++ = OP_EXACT + op_type;  /* NB EXACT doesn't have repeat_type */
+        PUT2INC(code, 0, repeat_min);
+
+        /* If the maximum is unlimited, insert an OP_STAR. Before doing so,
+        we have to insert the character for the previous code. For a repeated
+        Unicode property match, there is an extra byte that defines the
+        required property. In UTF-8 mode, long characters have their length in
+        c, with the 0x80 bit as a flag. */
+
+        if (repeat_max < 0)
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && c >= 128)
+            {
+            memcpy(code, utf8_char, c & 7);
+            code += c & 7;
+            }
+          else
+#endif
+            {
+            *code++ = c;
+            if (prop_type >= 0) *code++ = prop_type;
+            }
+          *code++ = OP_STAR + repeat_type;
+          }
+
+        /* Else insert an UPTO if the max is greater than the min, again
+        preceded by the character, for the previously inserted code. */
+
+        else if (repeat_max != repeat_min)
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && c >= 128)
+            {
+            memcpy(code, utf8_char, c & 7);
+            code += c & 7;
+            }
+          else
+#endif
+          *code++ = c;
+          if (prop_type >= 0) *code++ = prop_type;
+          repeat_max -= repeat_min;
+          *code++ = OP_UPTO + repeat_type;
+          PUT2INC(code, 0, repeat_max);
+          }
+        }
+
+      /* The character or character type itself comes last in all cases. */
+
+#ifdef SUPPORT_UTF8
+      if (utf8 && c >= 128)
+        {
+        memcpy(code, utf8_char, c & 7);
+        code += c & 7;
+        }
+      else
+#endif
+      *code++ = c;
+
+      /* For a repeated Unicode property match, there is an extra byte that
+      defines the required property. */
+
+#ifdef SUPPORT_UCP
+      if (prop_type >= 0) *code++ = prop_type;
+#endif
+      }
+
+    /* If previous was a character class or a back reference, we put the repeat
+    stuff after it, but just skip the item if the repeat was {0,0}. */
+
+    else if (*previous == OP_CLASS ||
+             *previous == OP_NCLASS ||
+#ifdef SUPPORT_UTF8
+             *previous == OP_XCLASS ||
+#endif
+             *previous == OP_REF)
+      {
+      if (repeat_max == 0)
+        {
+        code = previous;
+        goto END_REPEAT;
+        }
+
+      /* All real repeats make it impossible to handle partial matching (maybe
+      one day we will be able to remove this restriction). */
+
+      if (repeat_max != 1) cd->nopartial = TRUE;
+
+      if (repeat_min == 0 && repeat_max == -1)
+        *code++ = OP_CRSTAR + repeat_type;
+      else if (repeat_min == 1 && repeat_max == -1)
+        *code++ = OP_CRPLUS + repeat_type;
+      else if (repeat_min == 0 && repeat_max == 1)
+        *code++ = OP_CRQUERY + repeat_type;
+      else
+        {
+        *code++ = OP_CRRANGE + repeat_type;
+        PUT2INC(code, 0, repeat_min);
+        if (repeat_max == -1) repeat_max = 0;  /* 2-byte encoding for max */
+        PUT2INC(code, 0, repeat_max);
+        }
+      }
+
+    /* If previous was a bracket group, we may have to replicate it in certain
+    cases. */
+
+    else if (*previous >= OP_BRA || *previous == OP_ONCE ||
+             *previous == OP_COND)
+      {
+      register int i;
+      int ketoffset = 0;
+      int len = code - previous;
+      uschar *bralink = NULL;
+
+      /* If the maximum repeat count is unlimited, find the end of the bracket
+      by scanning through from the start, and compute the offset back to it
+      from the current code pointer. There may be an OP_OPT setting following
+      the final KET, so we can't find the end just by going back from the code
+      pointer. */
+
+      if (repeat_max == -1)
+        {
+        register uschar *ket = previous;
+        do ket += GET(ket, 1); while (*ket != OP_KET);
+        ketoffset = code - ket;
+        }
+
+      /* The case of a zero minimum is special because of the need to stick
+      OP_BRAZERO in front of it, and because the group appears once in the
+      data, whereas in other cases it appears the minimum number of times. For
+      this reason, it is simplest to treat this case separately, as otherwise
+      the code gets far too messy. There are several special subcases when the
+      minimum is zero. */
+
+      if (repeat_min == 0)
+        {
+        /* If the maximum is also zero, we just omit the group from the output
+        altogether. */
+
+        if (repeat_max == 0)
+          {
+          code = previous;
+          goto END_REPEAT;
+          }
+
+        /* If the maximum is 1 or unlimited, we just have to stick in the
+        BRAZERO and do no more at this point. However, we do need to adjust
+        any OP_RECURSE calls inside the group that refer to the group itself or
+        any internal group, because the offset is from the start of the whole
+        regex. Temporarily terminate the pattern while doing this. */
+
+        if (repeat_max <= 1)
+          {
+          *code = OP_END;
+          adjust_recurse(previous, 1, utf8, cd);
+          memmove(previous+1, previous, len);
+          code++;
+          *previous++ = OP_BRAZERO + repeat_type;
+          }
+
+        /* If the maximum is greater than 1 and limited, we have to replicate
+        in a nested fashion, sticking OP_BRAZERO before each set of brackets.
+        The first one has to be handled carefully because it's the original
+        copy, which has to be moved up. The remainder can be handled by code
+        that is common with the non-zero minimum case below. We have to
+        adjust the value or repeat_max, since one less copy is required. Once
+        again, we may have to adjust any OP_RECURSE calls inside the group. */
+
+        else
+          {
+          int offset;
+          *code = OP_END;
+          adjust_recurse(previous, 2 + LINK_SIZE, utf8, cd);
+          memmove(previous + 2 + LINK_SIZE, previous, len);
+          code += 2 + LINK_SIZE;
+          *previous++ = OP_BRAZERO + repeat_type;
+          *previous++ = OP_BRA;
+
+          /* We chain together the bracket offset fields that have to be
+          filled in later when the ends of the brackets are reached. */
+
+          offset = (bralink == NULL)? 0 : previous - bralink;
+          bralink = previous;
+          PUTINC(previous, 0, offset);
+          }
+
+        repeat_max--;
+        }
+
+      /* If the minimum is greater than zero, replicate the group as many
+      times as necessary, and adjust the maximum to the number of subsequent
+      copies that we need. If we set a first char from the group, and didn't
+      set a required char, copy the latter from the former. */
+
+      else
+        {
+        if (repeat_min > 1)
+          {
+          if (groupsetfirstbyte && reqbyte < 0) reqbyte = firstbyte;
+          for (i = 1; i < repeat_min; i++)
+            {
+            memcpy(code, previous, len);
+            code += len;
+            }
+          }
+        if (repeat_max > 0) repeat_max -= repeat_min;
+        }
+
+      /* This code is common to both the zero and non-zero minimum cases. If
+      the maximum is limited, it replicates the group in a nested fashion,
+      remembering the bracket starts on a stack. In the case of a zero minimum,
+      the first one was set up above. In all cases the repeat_max now specifies
+      the number of additional copies needed. */
+
+      if (repeat_max >= 0)
+        {
+        for (i = repeat_max - 1; i >= 0; i--)
+          {
+          *code++ = OP_BRAZERO + repeat_type;
+
+          /* All but the final copy start a new nesting, maintaining the
+          chain of brackets outstanding. */
+
+          if (i != 0)
+            {
+            int offset;
+            *code++ = OP_BRA;
+            offset = (bralink == NULL)? 0 : code - bralink;
+            bralink = code;
+            PUTINC(code, 0, offset);
+            }
+
+          memcpy(code, previous, len);
+          code += len;
+          }
+
+        /* Now chain through the pending brackets, and fill in their length
+        fields (which are holding the chain links pro tem). */
+
+        while (bralink != NULL)
+          {
+          int oldlinkoffset;
+          int offset = code - bralink + 1;
+          uschar *bra = code - offset;
+          oldlinkoffset = GET(bra, 1);
+          bralink = (oldlinkoffset == 0)? NULL : bralink - oldlinkoffset;
+          *code++ = OP_KET;
+          PUTINC(code, 0, offset);
+          PUT(bra, 1, offset);
+          }
+        }
+
+      /* If the maximum is unlimited, set a repeater in the final copy. We
+      can't just offset backwards from the current code point, because we
+      don't know if there's been an options resetting after the ket. The
+      correct offset was computed above. */
+
+      else code[-ketoffset] = OP_KETRMAX + repeat_type;
+      }
+
+    /* Else there's some kind of shambles */
+
+    else
+      {
+      *errorcodeptr = ERR11;
+      goto FAILED;
+      }
+
+    /* If the character following a repeat is '+', we wrap the entire repeated
+    item inside OP_ONCE brackets. This is just syntactic sugar, taken from
+    Sun's Java package. The repeated item starts at tempcode, not at previous,
+    which might be the first part of a string whose (former) last char we
+    repeated. However, we don't support '+' after a greediness '?'. */
+
+    if (possessive_quantifier)
+      {
+      int len = code - tempcode;
+      memmove(tempcode + 1+LINK_SIZE, tempcode, len);
+      code += 1 + LINK_SIZE;
+      len += 1 + LINK_SIZE;
+      tempcode[0] = OP_ONCE;
+      *code++ = OP_KET;
+      PUTINC(code, 0, len);
+      PUT(tempcode, 1, len);
+      }
+
+    /* In all case we no longer have a previous item. We also set the
+    "follows varying string" flag for subsequently encountered reqbytes if
+    it isn't already set and we have just passed a varying length item. */
+
+    END_REPEAT:
+    previous = NULL;
+    cd->req_varyopt |= reqvary;
+    break;
+
+
+    /* Start of nested bracket sub-expression, or comment or lookahead or
+    lookbehind or option setting or condition. First deal with special things
+    that can come after a bracket; all are introduced by ?, and the appearance
+    of any of them means that this is not a referencing group. They were
+    checked for validity in the first pass over the string, so we don't have to
+    check for syntax errors here.  */
+
+    case '(':
+    newoptions = options;
+    skipbytes = 0;
+
+    if (*(++ptr) == '?')
+      {
+      int set, unset;
+      int *optset;
+
+      switch (*(++ptr))
+        {
+        case '#':                 /* Comment; skip to ket */
+        ptr++;
+        while (*ptr != ')') ptr++;
+        continue;
+
+        case ':':                 /* Non-extracting bracket */
+        bravalue = OP_BRA;
+        ptr++;
+        break;
+
+        case '(':
+        bravalue = OP_COND;       /* Conditional group */
+
+        /* Condition to test for recursion */
+
+        if (ptr[1] == 'R')
+          {
+          code[1+LINK_SIZE] = OP_CREF;
+          PUT2(code, 2+LINK_SIZE, CREF_RECURSE);
+          skipbytes = 3;
+          ptr += 3;
+          }
+
+        /* Condition to test for a numbered subpattern match. We know that
+        if a digit follows ( then there will just be digits until ) because
+        the syntax was checked in the first pass. */
+
+        else if ((digitab[ptr[1]] && ctype_digit) != 0)
+          {
+          int condref;                 /* Don't amalgamate; some compilers */
+          condref = *(++ptr) - '0';    /* grumble at autoincrement in declaration */
+          while (*(++ptr) != ')') condref = condref*10 + *ptr - '0';
+          if (condref == 0)
+            {
+            *errorcodeptr = ERR35;
+            goto FAILED;
+            }
+          ptr++;
+          code[1+LINK_SIZE] = OP_CREF;
+          PUT2(code, 2+LINK_SIZE, condref);
+          skipbytes = 3;
+          }
+        /* For conditions that are assertions, we just fall through, having
+        set bravalue above. */
+        break;
+
+        case '=':                 /* Positive lookahead */
+        bravalue = OP_ASSERT;
+        ptr++;
+        break;
+
+        case '!':                 /* Negative lookahead */
+        bravalue = OP_ASSERT_NOT;
+        ptr++;
+        break;
+
+        case '<':                 /* Lookbehinds */
+        switch (*(++ptr))
+          {
+          case '=':               /* Positive lookbehind */
+          bravalue = OP_ASSERTBACK;
+          ptr++;
+          break;
+
+          case '!':               /* Negative lookbehind */
+          bravalue = OP_ASSERTBACK_NOT;
+          ptr++;
+          break;
+          }
+        break;
+
+        case '>':                 /* One-time brackets */
+        bravalue = OP_ONCE;
+        ptr++;
+        break;
+
+        case 'C':                 /* Callout - may be followed by digits; */
+        previous_callout = code;  /* Save for later completion */
+        after_manual_callout = 1; /* Skip one item before completing */
+        *code++ = OP_CALLOUT;     /* Already checked that the terminating */
+          {                       /* closing parenthesis is present. */
+          int n = 0;
+          while ((digitab[*(++ptr)] & ctype_digit) != 0)
+            n = n * 10 + *ptr - '0';
+          if (n > 255)
+            {
+            *errorcodeptr = ERR38;
+            goto FAILED;
+            }
+          *code++ = n;
+          PUT(code, 0, ptr - cd->start_pattern + 1);  /* Pattern offset */
+          PUT(code, LINK_SIZE, 0);                    /* Default length */
+          code += 2 * LINK_SIZE;
+          }
+        previous = NULL;
+        continue;
+
+        case 'P':                 /* Named subpattern handling */
+        if (*(++ptr) == '<')      /* Definition */
+          {
+          int i, namelen;
+          uschar *slot = cd->name_table;
+          const uschar *name;     /* Don't amalgamate; some compilers */
+          name = ++ptr;           /* grumble at autoincrement in declaration */
+
+          while (*ptr++ != '>');
+          namelen = ptr - name - 1;
+
+          for (i = 0; i < cd->names_found; i++)
+            {
+            int crc = memcmp(name, slot+2, namelen);
+            if (crc == 0)
+              {
+              if (slot[2+namelen] == 0)
+                {
+                *errorcodeptr = ERR43;
+                goto FAILED;
+                }
+              crc = -1;             /* Current name is substring */
+              }
+            if (crc < 0)
+              {
+              memmove(slot + cd->name_entry_size, slot,
+                (cd->names_found - i) * cd->name_entry_size);
+              break;
+              }
+            slot += cd->name_entry_size;
+            }
+
+          PUT2(slot, 0, *brackets + 1);
+          memcpy(slot + 2, name, namelen);
+          slot[2+namelen] = 0;
+          cd->names_found++;
+          goto NUMBERED_GROUP;
+          }
+
+        if (*ptr == '=' || *ptr == '>')  /* Reference or recursion */
+          {
+          int i, namelen;
+          int type = *ptr++;
+          const uschar *name = ptr;
+          uschar *slot = cd->name_table;
+
+          while (*ptr != ')') ptr++;
+          namelen = ptr - name;
+
+          for (i = 0; i < cd->names_found; i++)
+            {
+            if (strncmp((char *)name, (char *)slot+2, namelen) == 0) break;
+            slot += cd->name_entry_size;
+            }
+          if (i >= cd->names_found)
+            {
+            *errorcodeptr = ERR15;
+            goto FAILED;
+            }
+
+          recno = GET2(slot, 0);
+
+          if (type == '>') goto HANDLE_RECURSION;  /* A few lines below */
+
+          /* Back reference */
+
+          previous = code;
+          *code++ = OP_REF;
+          PUT2INC(code, 0, recno);
+          cd->backref_map |= (recno < 32)? (1 << recno) : 1;
+          if (recno > cd->top_backref) cd->top_backref = recno;
+          continue;
+          }
+
+        /* Should never happen */
+        break;
+
+        case 'R':                 /* Pattern recursion */
+        ptr++;                    /* Same as (?0)      */
+        /* Fall through */
+
+        /* Recursion or "subroutine" call */
+
+        case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+          {
+          const uschar *called;
+          recno = 0;
+          while((digitab[*ptr] & ctype_digit) != 0)
+            recno = recno * 10 + *ptr++ - '0';
+
+          /* Come here from code above that handles a named recursion */
+
+          HANDLE_RECURSION:
+
+          previous = code;
+
+          /* Find the bracket that is being referenced. Temporarily end the
+          regex in case it doesn't exist. */
+
+          *code = OP_END;
+          called = (recno == 0)?
+            cd->start_code : find_bracket(cd->start_code, utf8, recno);
+
+          if (called == NULL)
+            {
+            *errorcodeptr = ERR15;
+            goto FAILED;
+            }
+
+          /* If the subpattern is still open, this is a recursive call. We
+          check to see if this is a left recursion that could loop for ever,
+          and diagnose that case. */
+
+          if (GET(called, 1) == 0 && could_be_empty(called, code, bcptr, utf8))
+            {
+            *errorcodeptr = ERR40;
+            goto FAILED;
+            }
+
+          /* Insert the recursion/subroutine item */
+
+          *code = OP_RECURSE;
+          PUT(code, 1, called - cd->start_code);
+          code += 1 + LINK_SIZE;
+          }
+        continue;
+
+        /* Character after (? not specially recognized */
+
+        default:                  /* Option setting */
+        set = unset = 0;
+        optset = &set;
+
+        while (*ptr != ')' && *ptr != ':')
+          {
+          switch (*ptr++)
+            {
+            case '-': optset = &unset; break;
+
+            case 'i': *optset |= PCRE_CASELESS; break;
+            case 'm': *optset |= PCRE_MULTILINE; break;
+            case 's': *optset |= PCRE_DOTALL; break;
+            case 'x': *optset |= PCRE_EXTENDED; break;
+            case 'U': *optset |= PCRE_UNGREEDY; break;
+            case 'X': *optset |= PCRE_EXTRA; break;
+            }
+          }
+
+        /* Set up the changed option bits, but don't change anything yet. */
+
+        newoptions = (options | set) & (~unset);
+
+        /* If the options ended with ')' this is not the start of a nested
+        group with option changes, so the options change at this level. Compile
+        code to change the ims options if this setting actually changes any of
+        them. We also pass the new setting back so that it can be put at the
+        start of any following branches, and when this group ends (if we are in
+        a group), a resetting item can be compiled.
+
+        Note that if this item is right at the start of the pattern, the
+        options will have been abstracted and made global, so there will be no
+        change to compile. */
+
+        if (*ptr == ')')
+          {
+          if ((options & PCRE_IMS) != (newoptions & PCRE_IMS))
+            {
+            *code++ = OP_OPT;
+            *code++ = newoptions & PCRE_IMS;
+            }
+
+          /* Change options at this level, and pass them back for use
+          in subsequent branches. Reset the greedy defaults and the case
+          value for firstbyte and reqbyte. */
+
+          *optionsptr = options = newoptions;
+          greedy_default = ((newoptions & PCRE_UNGREEDY) != 0);
+          greedy_non_default = greedy_default ^ 1;
+          req_caseopt = ((options & PCRE_CASELESS) != 0)? REQ_CASELESS : 0;
+
+          previous = NULL;       /* This item can't be repeated */
+          continue;              /* It is complete */
+          }
+
+        /* If the options ended with ':' we are heading into a nested group
+        with possible change of options. Such groups are non-capturing and are
+        not assertions of any kind. All we need to do is skip over the ':';
+        the newoptions value is handled below. */
+
+        bravalue = OP_BRA;
+        ptr++;
+        }
+      }
+
+    /* If PCRE_NO_AUTO_CAPTURE is set, all unadorned brackets become
+    non-capturing and behave like (?:...) brackets */
+
+    else if ((options & PCRE_NO_AUTO_CAPTURE) != 0)
+      {
+      bravalue = OP_BRA;
+      }
+
+    /* Else we have a referencing group; adjust the opcode. If the bracket
+    number is greater than EXTRACT_BASIC_MAX, we set the opcode one higher, and
+    arrange for the true number to follow later, in an OP_BRANUMBER item. */
+
+    else
+      {
+      NUMBERED_GROUP:
+      if (++(*brackets) > EXTRACT_BASIC_MAX)
+        {
+        bravalue = OP_BRA + EXTRACT_BASIC_MAX + 1;
+        code[1+LINK_SIZE] = OP_BRANUMBER;
+        PUT2(code, 2+LINK_SIZE, *brackets);
+        skipbytes = 3;
+        }
+      else bravalue = OP_BRA + *brackets;
+      }
+
+    /* Process nested bracketed re. Assertions may not be repeated, but other
+    kinds can be. We copy code into a non-register variable in order to be able
+    to pass its address because some compilers complain otherwise. Pass in a
+    new setting for the ims options if they have changed. */
+
+    previous = (bravalue >= OP_ONCE)? code : NULL;
+    *code = bravalue;
+    tempcode = code;
+    tempreqvary = cd->req_varyopt;     /* Save value before bracket */
+
+    if (!compile_regex(
+         newoptions,                   /* The complete new option state */
+         options & PCRE_IMS,           /* The previous ims option state */
+         brackets,                     /* Extracting bracket count */
+         &tempcode,                    /* Where to put code (updated) */
+         &ptr,                         /* Input pointer (updated) */
+         errorcodeptr,                 /* Where to put an error message */
+         (bravalue == OP_ASSERTBACK ||
+          bravalue == OP_ASSERTBACK_NOT), /* TRUE if back assert */
+         skipbytes,                    /* Skip over OP_COND/OP_BRANUMBER */
+         &subfirstbyte,                /* For possible first char */
+         &subreqbyte,                  /* For possible last char */
+         bcptr,                        /* Current branch chain */
+         cd))                          /* Tables block */
+      goto FAILED;
+
+    /* At the end of compiling, code is still pointing to the start of the
+    group, while tempcode has been updated to point past the end of the group
+    and any option resetting that may follow it. The pattern pointer (ptr)
+    is on the bracket. */
+
+    /* If this is a conditional bracket, check that there are no more than
+    two branches in the group. */
+
+    else if (bravalue == OP_COND)
+      {
+      uschar *tc = code;
+      condcount = 0;
+
+      do {
+         condcount++;
+         tc += GET(tc,1);
+         }
+      while (*tc != OP_KET);
+
+      if (condcount > 2)
+        {
+        *errorcodeptr = ERR27;
+        goto FAILED;
+        }
+
+      /* If there is just one branch, we must not make use of its firstbyte or
+      reqbyte, because this is equivalent to an empty second branch. */
+
+      if (condcount == 1) subfirstbyte = subreqbyte = REQ_NONE;
+      }
+
+    /* Handle updating of the required and first characters. Update for normal
+    brackets of all kinds, and conditions with two branches (see code above).
+    If the bracket is followed by a quantifier with zero repeat, we have to
+    back off. Hence the definition of zeroreqbyte and zerofirstbyte outside the
+    main loop so that they can be accessed for the back off. */
+
+    zeroreqbyte = reqbyte;
+    zerofirstbyte = firstbyte;
+    groupsetfirstbyte = FALSE;
+
+    if (bravalue >= OP_BRA || bravalue == OP_ONCE || bravalue == OP_COND)
+      {
+      /* If we have not yet set a firstbyte in this branch, take it from the
+      subpattern, remembering that it was set here so that a repeat of more
+      than one can replicate it as reqbyte if necessary. If the subpattern has
+      no firstbyte, set "none" for the whole branch. In both cases, a zero
+      repeat forces firstbyte to "none". */
+
+      if (firstbyte == REQ_UNSET)
+        {
+        if (subfirstbyte >= 0)
+          {
+          firstbyte = subfirstbyte;
+          groupsetfirstbyte = TRUE;
+          }
+        else firstbyte = REQ_NONE;
+        zerofirstbyte = REQ_NONE;
+        }
+
+      /* If firstbyte was previously set, convert the subpattern's firstbyte
+      into reqbyte if there wasn't one, using the vary flag that was in
+      existence beforehand. */
+
+      else if (subfirstbyte >= 0 && subreqbyte < 0)
+        subreqbyte = subfirstbyte | tempreqvary;
+
+      /* If the subpattern set a required byte (or set a first byte that isn't
+      really the first byte - see above), set it. */
+
+      if (subreqbyte >= 0) reqbyte = subreqbyte;
+      }
+
+    /* For a forward assertion, we take the reqbyte, if set. This can be
+    helpful if the pattern that follows the assertion doesn't set a different
+    char. For example, it's useful for /(?=abcde).+/. We can't set firstbyte
+    for an assertion, however because it leads to incorrect effect for patterns
+    such as /(?=a)a.+/ when the "real" "a" would then become a reqbyte instead
+    of a firstbyte. This is overcome by a scan at the end if there's no
+    firstbyte, looking for an asserted first char. */
+
+    else if (bravalue == OP_ASSERT && subreqbyte >= 0) reqbyte = subreqbyte;
+
+    /* Now update the main code pointer to the end of the group. */
+
+    code = tempcode;
+
+    /* Error if hit end of pattern */
+
+    if (*ptr != ')')
+      {
+      *errorcodeptr = ERR14;
+      goto FAILED;
+      }
+    break;
+
+    /* Check \ for being a real metacharacter; if not, fall through and handle
+    it as a data character at the start of a string. Escape items are checked
+    for validity in the pre-compiling pass. */
+
+    case '\\':
+    tempptr = ptr;
+    c = check_escape(&ptr, errorcodeptr, *brackets, options, FALSE);
+
+    /* Handle metacharacters introduced by \. For ones like \d, the ESC_ values
+    are arranged to be the negation of the corresponding OP_values. For the
+    back references, the values are ESC_REF plus the reference number. Only
+    back references and those types that consume a character may be repeated.
+    We can test for values between ESC_b and ESC_Z for the latter; this may
+    have to change if any new ones are ever created. */
+
+    if (c < 0)
+      {
+      if (-c == ESC_Q)            /* Handle start of quoted string */
+        {
+        if (ptr[1] == '\\' && ptr[2] == 'E') ptr += 2; /* avoid empty string */
+          else inescq = TRUE;
+        continue;
+        }
+
+      /* For metasequences that actually match a character, we disable the
+      setting of a first character if it hasn't already been set. */
+
+      if (firstbyte == REQ_UNSET && -c > ESC_b && -c < ESC_Z)
+        firstbyte = REQ_NONE;
+
+      /* Set values to reset to if this is followed by a zero repeat. */
+
+      zerofirstbyte = firstbyte;
+      zeroreqbyte = reqbyte;
+
+      /* Back references are handled specially */
+
+      if (-c >= ESC_REF)
+        {
+        int number = -c - ESC_REF;
+        previous = code;
+        *code++ = OP_REF;
+        PUT2INC(code, 0, number);
+        }
+
+      /* So are Unicode property matches, if supported. We know that get_ucp
+      won't fail because it was tested in the pre-pass. */
+
+#ifdef SUPPORT_UCP
+      else if (-c == ESC_P || -c == ESC_p)
+        {
+        BOOL negated;
+        int value = get_ucp(&ptr, &negated, errorcodeptr);
+        previous = code;
+        *code++ = ((-c == ESC_p) != negated)? OP_PROP : OP_NOTPROP;
+        *code++ = value;
+        }
+#endif
+
+      /* For the rest, we can obtain the OP value by negating the escape
+      value */
+
+      else
+        {
+        previous = (-c > ESC_b && -c < ESC_Z)? code : NULL;
+        *code++ = -c;
+        }
+      continue;
+      }
+
+    /* We have a data character whose value is in c. In UTF-8 mode it may have
+    a value > 127. We set its representation in the length/buffer, and then
+    handle it as a data character. */
+
+#ifdef SUPPORT_UTF8
+    if (utf8 && c > 127)
+      mclength = _pcre_ord2utf8(c, mcbuffer);
+    else
+#endif
+
+     {
+     mcbuffer[0] = c;
+     mclength = 1;
+     }
+
+    goto ONE_CHAR;
+
+    /* Handle a literal character. It is guaranteed not to be whitespace or #
+    when the extended flag is set. If we are in UTF-8 mode, it may be a
+    multi-byte literal character. */
+
+    default:
+    NORMAL_CHAR:
+    mclength = 1;
+    mcbuffer[0] = c;
+
+#ifdef SUPPORT_UTF8
+    if (utf8 && (c & 0xc0) == 0xc0)
+      {
+      while ((ptr[1] & 0xc0) == 0x80)
+        mcbuffer[mclength++] = *(++ptr);
+      }
+#endif
+
+    /* At this point we have the character's bytes in mcbuffer, and the length
+    in mclength. When not in UTF-8 mode, the length is always 1. */
+
+    ONE_CHAR:
+    previous = code;
+    *code++ = ((options & PCRE_CASELESS) != 0)? OP_CHARNC : OP_CHAR;
+    for (c = 0; c < mclength; c++) *code++ = mcbuffer[c];
+
+    /* Set the first and required bytes appropriately. If no previous first
+    byte, set it from this character, but revert to none on a zero repeat.
+    Otherwise, leave the firstbyte value alone, and don't change it on a zero
+    repeat. */
+
+    if (firstbyte == REQ_UNSET)
+      {
+      zerofirstbyte = REQ_NONE;
+      zeroreqbyte = reqbyte;
+
+      /* If the character is more than one byte long, we can set firstbyte
+      only if it is not to be matched caselessly. */
+
+      if (mclength == 1 || req_caseopt == 0)
+        {
+        firstbyte = mcbuffer[0] | req_caseopt;
+        if (mclength != 1) reqbyte = code[-1] | cd->req_varyopt;
+        }
+      else firstbyte = reqbyte = REQ_NONE;
+      }
+
+    /* firstbyte was previously set; we can set reqbyte only the length is
+    1 or the matching is caseful. */
+
+    else
+      {
+      zerofirstbyte = firstbyte;
+      zeroreqbyte = reqbyte;
+      if (mclength == 1 || req_caseopt == 0)
+        reqbyte = code[-1] | req_caseopt | cd->req_varyopt;
+      }
+
+    break;            /* End of literal character handling */
+    }
+  }                   /* end of big loop */
+
+/* Control never reaches here by falling through, only by a goto for all the
+error states. Pass back the position in the pattern so that it can be displayed
+to the user for diagnosing the error. */
+
+FAILED:
+*ptrptr = ptr;
+return FALSE;
+}
+
+
+
+
+/*************************************************
+*     Compile sequence of alternatives           *
+*************************************************/
+
+/* On entry, ptr is pointing past the bracket character, but on return
+it points to the closing bracket, or vertical bar, or end of string.
+The code variable is pointing at the byte into which the BRA operator has been
+stored. If the ims options are changed at the start (for a (?ims: group) or
+during any branch, we need to insert an OP_OPT item at the start of every
+following branch to ensure they get set correctly at run time, and also pass
+the new options into every subsequent branch compile.
+
+Argument:
+  options        option bits, including any changes for this subpattern
+  oldims         previous settings of ims option bits
+  brackets       -> int containing the number of extracting brackets used
+  codeptr        -> the address of the current code pointer
+  ptrptr         -> the address of the current pattern pointer
+  errorcodeptr   -> pointer to error code variable
+  lookbehind     TRUE if this is a lookbehind assertion
+  skipbytes      skip this many bytes at start (for OP_COND, OP_BRANUMBER)
+  firstbyteptr   place to put the first required character, or a negative number
+  reqbyteptr     place to put the last required character, or a negative number
+  bcptr          pointer to the chain of currently open branches
+  cd             points to the data block with tables pointers etc.
+
+Returns:      TRUE on success
+*/
+
+static BOOL
+compile_regex(int options, int oldims, int *brackets, uschar **codeptr,
+  const uschar **ptrptr, int *errorcodeptr, BOOL lookbehind, int skipbytes,
+  int *firstbyteptr, int *reqbyteptr, branch_chain *bcptr, compile_data *cd)
+{
+const uschar *ptr = *ptrptr;
+uschar *code = *codeptr;
+uschar *last_branch = code;
+uschar *start_bracket = code;
+uschar *reverse_count = NULL;
+int firstbyte, reqbyte;
+int branchfirstbyte, branchreqbyte;
+branch_chain bc;
+
+bc.outer = bcptr;
+bc.current = code;
+
+firstbyte = reqbyte = REQ_UNSET;
+
+/* Offset is set zero to mark that this bracket is still open */
+
+PUT(code, 1, 0);
+code += 1 + LINK_SIZE + skipbytes;
+
+/* Loop for each alternative branch */
+
+for (;;)
+  {
+  /* Handle a change of ims options at the start of the branch */
+
+  if ((options & PCRE_IMS) != oldims)
+    {
+    *code++ = OP_OPT;
+    *code++ = options & PCRE_IMS;
+    }
+
+  /* Set up dummy OP_REVERSE if lookbehind assertion */
+
+  if (lookbehind)
+    {
+    *code++ = OP_REVERSE;
+    reverse_count = code;
+    PUTINC(code, 0, 0);
+    }
+
+  /* Now compile the branch */
+
+  if (!compile_branch(&options, brackets, &code, &ptr, errorcodeptr,
+        &branchfirstbyte, &branchreqbyte, &bc, cd))
+    {
+    *ptrptr = ptr;
+    return FALSE;
+    }
+
+  /* If this is the first branch, the firstbyte and reqbyte values for the
+  branch become the values for the regex. */
+
+  if (*last_branch != OP_ALT)
+    {
+    firstbyte = branchfirstbyte;
+    reqbyte = branchreqbyte;
+    }
+
+  /* If this is not the first branch, the first char and reqbyte have to
+  match the values from all the previous branches, except that if the previous
+  value for reqbyte didn't have REQ_VARY set, it can still match, and we set
+  REQ_VARY for the regex. */
+
+  else
+    {
+    /* If we previously had a firstbyte, but it doesn't match the new branch,
+    we have to abandon the firstbyte for the regex, but if there was previously
+    no reqbyte, it takes on the value of the old firstbyte. */
+
+    if (firstbyte >= 0 && firstbyte != branchfirstbyte)
+      {
+      if (reqbyte < 0) reqbyte = firstbyte;
+      firstbyte = REQ_NONE;
+      }
+
+    /* If we (now or from before) have no firstbyte, a firstbyte from the
+    branch becomes a reqbyte if there isn't a branch reqbyte. */
+
+    if (firstbyte < 0 && branchfirstbyte >= 0 && branchreqbyte < 0)
+        branchreqbyte = branchfirstbyte;
+
+    /* Now ensure that the reqbytes match */
+
+    if ((reqbyte & ~REQ_VARY) != (branchreqbyte & ~REQ_VARY))
+      reqbyte = REQ_NONE;
+    else reqbyte |= branchreqbyte;   /* To "or" REQ_VARY */
+    }
+
+  /* If lookbehind, check that this branch matches a fixed-length string,
+  and put the length into the OP_REVERSE item. Temporarily mark the end of
+  the branch with OP_END. */
+
+  if (lookbehind)
+    {
+    int length;
+    *code = OP_END;
+    length = find_fixedlength(last_branch, options);
+    DPRINTF(("fixed length = %d\n", length));
+    if (length < 0)
+      {
+      *errorcodeptr = (length == -2)? ERR36 : ERR25;
+      *ptrptr = ptr;
+      return FALSE;
+      }
+    PUT(reverse_count, 0, length);
+    }
+
+  /* Reached end of expression, either ')' or end of pattern. Go back through
+  the alternative branches and reverse the chain of offsets, with the field in
+  the BRA item now becoming an offset to the first alternative. If there are
+  no alternatives, it points to the end of the group. The length in the
+  terminating ket is always the length of the whole bracketed item. If any of
+  the ims options were changed inside the group, compile a resetting op-code
+  following, except at the very end of the pattern. Return leaving the pointer
+  at the terminating char. */
+
+  if (*ptr != '|')
+    {
+    int length = code - last_branch;
+    do
+      {
+      int prev_length = GET(last_branch, 1);
+      PUT(last_branch, 1, length);
+      length = prev_length;
+      last_branch -= length;
+      }
+    while (length > 0);
+
+    /* Fill in the ket */
+
+    *code = OP_KET;
+    PUT(code, 1, code - start_bracket);
+    code += 1 + LINK_SIZE;
+
+    /* Resetting option if needed */
+
+    if ((options & PCRE_IMS) != oldims && *ptr == ')')
+      {
+      *code++ = OP_OPT;
+      *code++ = oldims;
+      }
+
+    /* Set values to pass back */
+
+    *codeptr = code;
+    *ptrptr = ptr;
+    *firstbyteptr = firstbyte;
+    *reqbyteptr = reqbyte;
+    return TRUE;
+    }
+
+  /* Another branch follows; insert an "or" node. Its length field points back
+  to the previous branch while the bracket remains open. At the end the chain
+  is reversed. It's done like this so that the start of the bracket has a
+  zero offset until it is closed, making it possible to detect recursion. */
+
+  *code = OP_ALT;
+  PUT(code, 1, code - last_branch);
+  bc.current = last_branch = code;
+  code += 1 + LINK_SIZE;
+  ptr++;
+  }
+/* Control never reaches here */
+}
+
+
+
+
+/*************************************************
+*          Check for anchored expression         *
+*************************************************/
+
+/* Try to find out if this is an anchored regular expression. Consider each
+alternative branch. If they all start with OP_SOD or OP_CIRC, or with a bracket
+all of whose alternatives start with OP_SOD or OP_CIRC (recurse ad lib), then
+it's anchored. However, if this is a multiline pattern, then only OP_SOD
+counts, since OP_CIRC can match in the middle.
+
+We can also consider a regex to be anchored if OP_SOM starts all its branches.
+This is the code for \G, which means "match at start of match position, taking
+into account the match offset".
+
+A branch is also implicitly anchored if it starts with .* and DOTALL is set,
+because that will try the rest of the pattern at all possible matching points,
+so there is no point trying again.... er ....
+
+.... except when the .* appears inside capturing parentheses, and there is a
+subsequent back reference to those parentheses. We haven't enough information
+to catch that case precisely.
+
+At first, the best we could do was to detect when .* was in capturing brackets
+and the highest back reference was greater than or equal to that level.
+However, by keeping a bitmap of the first 31 back references, we can catch some
+of the more common cases more precisely.
+
+Arguments:
+  code           points to start of expression (the bracket)
+  options        points to the options setting
+  bracket_map    a bitmap of which brackets we are inside while testing; this
+                  handles up to substring 31; after that we just have to take
+                  the less precise approach
+  backref_map    the back reference bitmap
+
+Returns:     TRUE or FALSE
+*/
+
+static BOOL
+is_anchored(register const uschar *code, int *options, unsigned int bracket_map,
+  unsigned int backref_map)
+{
+do {
+   const uschar *scode =
+     first_significant_code(code + 1+LINK_SIZE, options, PCRE_MULTILINE, FALSE);
+   register int op = *scode;
+
+   /* Capturing brackets */
+
+   if (op > OP_BRA)
+     {
+     int new_map;
+     op -= OP_BRA;
+     if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
+     new_map = bracket_map | ((op < 32)? (1 << op) : 1);
+     if (!is_anchored(scode, options, new_map, backref_map)) return FALSE;
+     }
+
+   /* Other brackets */
+
+   else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
+     {
+     if (!is_anchored(scode, options, bracket_map, backref_map)) return FALSE;
+     }
+
+   /* .* is not anchored unless DOTALL is set and it isn't in brackets that
+   are or may be referenced. */
+
+   else if ((op == OP_TYPESTAR || op == OP_TYPEMINSTAR) &&
+            (*options & PCRE_DOTALL) != 0)
+     {
+     if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
+     }
+
+   /* Check for explicit anchoring */
+
+   else if (op != OP_SOD && op != OP_SOM &&
+           ((*options & PCRE_MULTILINE) != 0 || op != OP_CIRC))
+     return FALSE;
+   code += GET(code, 1);
+   }
+while (*code == OP_ALT);   /* Loop for each alternative */
+return TRUE;
+}
+
+
+
+/*************************************************
+*         Check for starting with ^ or .*        *
+*************************************************/
+
+/* This is called to find out if every branch starts with ^ or .* so that
+"first char" processing can be done to speed things up in multiline
+matching and for non-DOTALL patterns that start with .* (which must start at
+the beginning or after \n). As in the case of is_anchored() (see above), we
+have to take account of back references to capturing brackets that contain .*
+because in that case we can't make the assumption.
+
+Arguments:
+  code           points to start of expression (the bracket)
+  bracket_map    a bitmap of which brackets we are inside while testing; this
+                  handles up to substring 31; after that we just have to take
+                  the less precise approach
+  backref_map    the back reference bitmap
+
+Returns:         TRUE or FALSE
+*/
+
+static BOOL
+is_startline(const uschar *code, unsigned int bracket_map,
+  unsigned int backref_map)
+{
+do {
+   const uschar *scode = first_significant_code(code + 1+LINK_SIZE, NULL, 0,
+     FALSE);
+   register int op = *scode;
+
+   /* Capturing brackets */
+
+   if (op > OP_BRA)
+     {
+     int new_map;
+     op -= OP_BRA;
+     if (op > EXTRACT_BASIC_MAX) op = GET2(scode, 2+LINK_SIZE);
+     new_map = bracket_map | ((op < 32)? (1 << op) : 1);
+     if (!is_startline(scode, new_map, backref_map)) return FALSE;
+     }
+
+   /* Other brackets */
+
+   else if (op == OP_BRA || op == OP_ASSERT || op == OP_ONCE || op == OP_COND)
+     { if (!is_startline(scode, bracket_map, backref_map)) return FALSE; }
+
+   /* .* means "start at start or after \n" if it isn't in brackets that
+   may be referenced. */
+
+   else if (op == OP_TYPESTAR || op == OP_TYPEMINSTAR)
+     {
+     if (scode[1] != OP_ANY || (bracket_map & backref_map) != 0) return FALSE;
+     }
+
+   /* Check for explicit circumflex */
+
+   else if (op != OP_CIRC) return FALSE;
+
+   /* Move on to the next alternative */
+
+   code += GET(code, 1);
+   }
+while (*code == OP_ALT);  /* Loop for each alternative */
+return TRUE;
+}
+
+
+
+/*************************************************
+*       Check for asserted fixed first char      *
+*************************************************/
+
+/* During compilation, the "first char" settings from forward assertions are
+discarded, because they can cause conflicts with actual literals that follow.
+However, if we end up without a first char setting for an unanchored pattern,
+it is worth scanning the regex to see if there is an initial asserted first
+char. If all branches start with the same asserted char, or with a bracket all
+of whose alternatives start with the same asserted char (recurse ad lib), then
+we return that char, otherwise -1.
+
+Arguments:
+  code       points to start of expression (the bracket)
+  options    pointer to the options (used to check casing changes)
+  inassert   TRUE if in an assertion
+
+Returns:     -1 or the fixed first char
+*/
+
+static int
+find_firstassertedchar(const uschar *code, int *options, BOOL inassert)
+{
+register int c = -1;
+do {
+   int d;
+   const uschar *scode =
+     first_significant_code(code + 1+LINK_SIZE, options, PCRE_CASELESS, TRUE);
+   register int op = *scode;
+
+   if (op >= OP_BRA) op = OP_BRA;
+
+   switch(op)
+     {
+     default:
+     return -1;
+
+     case OP_BRA:
+     case OP_ASSERT:
+     case OP_ONCE:
+     case OP_COND:
+     if ((d = find_firstassertedchar(scode, options, op == OP_ASSERT)) < 0)
+       return -1;
+     if (c < 0) c = d; else if (c != d) return -1;
+     break;
+
+     case OP_EXACT:       /* Fall through */
+     scode += 2;
+
+     case OP_CHAR:
+     case OP_CHARNC:
+     case OP_PLUS:
+     case OP_MINPLUS:
+     if (!inassert) return -1;
+     if (c < 0)
+       {
+       c = scode[1];
+       if ((*options & PCRE_CASELESS) != 0) c |= REQ_CASELESS;
+       }
+     else if (c != scode[1]) return -1;
+     break;
+     }
+
+   code += GET(code, 1);
+   }
+while (*code == OP_ALT);
+return c;
+}
+
+
+
+/*************************************************
+*        Compile a Regular Expression            *
+*************************************************/
+
+/* This function takes a string and returns a pointer to a block of store
+holding a compiled version of the expression. The original API for this
+function had no error code return variable; it is retained for backwards
+compatibility. The new function is given a new name.
+
+Arguments:
+  pattern       the regular expression
+  options       various option bits
+  errorcodeptr  pointer to error code variable (pcre_compile2() only)
+                  can be NULL if you don't want a code value
+  errorptr      pointer to pointer to error text
+  erroroffset   ptr offset in pattern where error was detected
+  tables        pointer to character tables or NULL
+
+Returns:        pointer to compiled data block, or NULL on error,
+                with errorptr and erroroffset set
+*/
+
+EXPORT pcre *
+pcre_compile(const char *pattern, int options, const char **errorptr,
+  int *erroroffset, const unsigned char *tables)
+{
+return pcre_compile2(pattern, options, NULL, errorptr, erroroffset, tables);
+}
+
+
+EXPORT pcre *
+pcre_compile2(const char *pattern, int options, int *errorcodeptr,
+  const char **errorptr, int *erroroffset, const unsigned char *tables)
+{
+real_pcre *re;
+int length = 1 + LINK_SIZE;      /* For initial BRA plus length */
+int c, firstbyte, reqbyte;
+int bracount = 0;
+int branch_extra = 0;
+int branch_newextra;
+int item_count = -1;
+int name_count = 0;
+int max_name_size = 0;
+int lastitemlength = 0;
+int errorcode = 0;
+#ifdef SUPPORT_UTF8
+BOOL utf8;
+BOOL class_utf8;
+#endif
+BOOL inescq = FALSE;
+unsigned int brastackptr = 0;
+size_t size;
+uschar *code;
+const uschar *codestart;
+const uschar *ptr;
+compile_data compile_block;
+int brastack[BRASTACK_SIZE];
+uschar bralenstack[BRASTACK_SIZE];
+
+/* We can't pass back an error message if errorptr is NULL; I guess the best we
+can do is just return NULL, but we can set a code value if there is a code
+pointer. */
+
+if (errorptr == NULL)
+  {
+  if (errorcodeptr != NULL) *errorcodeptr = 99;
+  return NULL;
+  }
+
+*errorptr = NULL;
+if (errorcodeptr != NULL) *errorcodeptr = ERR0;
+
+/* However, we can give a message for this error */
+
+if (erroroffset == NULL)
+  {
+  errorcode = ERR16;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+
+*erroroffset = 0;
+
+/* Can't support UTF8 unless PCRE has been compiled to include the code. */
+
+#ifdef SUPPORT_UTF8
+utf8 = (options & PCRE_UTF8) != 0;
+if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0 &&
+     (*erroroffset = _pcre_valid_utf8((uschar *)pattern, -1)) >= 0)
+  {
+  errorcode = ERR44;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+#else
+if ((options & PCRE_UTF8) != 0)
+  {
+  errorcode = ERR32;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+#endif
+
+if ((options & ~PUBLIC_OPTIONS) != 0)
+  {
+  errorcode = ERR17;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+
+/* Set up pointers to the individual character tables */
+
+if (tables == NULL) tables = _pcre_default_tables;
+compile_block.lcc = tables + lcc_offset;
+compile_block.fcc = tables + fcc_offset;
+compile_block.cbits = tables + cbits_offset;
+compile_block.ctypes = tables + ctypes_offset;
+
+/* Maximum back reference and backref bitmap. This is updated for numeric
+references during the first pass, but for named references during the actual
+compile pass. The bitmap records up to 31 back references to help in deciding
+whether (.*) can be treated as anchored or not. */
+
+compile_block.top_backref = 0;
+compile_block.backref_map = 0;
+
+/* Reflect pattern for debugging output */
+
+DPRINTF(("------------------------------------------------------------------\n"));
+DPRINTF(("%s\n", pattern));
+
+/* The first thing to do is to make a pass over the pattern to compute the
+amount of store required to hold the compiled code. This does not have to be
+perfect as long as errors are overestimates. At the same time we can detect any
+flag settings right at the start, and extract them. Make an attempt to correct
+for any counted white space if an "extended" flag setting appears late in the
+pattern. We can't be so clever for #-comments. */
+
+ptr = (const uschar *)(pattern - 1);
+while ((c = *(++ptr)) != 0)
+  {
+  int min, max;
+  int class_optcount;
+  int bracket_length;
+  int duplength;
+
+  /* If we are inside a \Q...\E sequence, all chars are literal */
+
+  if (inescq)
+    {
+    if ((options & PCRE_AUTO_CALLOUT) != 0) length += 2 + 2*LINK_SIZE;
+    goto NORMAL_CHAR;
+    }
+
+  /* Otherwise, first check for ignored whitespace and comments */
+
+  if ((options & PCRE_EXTENDED) != 0)
+    {
+    if ((compile_block.ctypes[c] & ctype_space) != 0) continue;
+    if (c == '#')
+      {
+      /* The space before the ; is to avoid a warning on a silly compiler
+      on the Macintosh. */
+      while ((c = *(++ptr)) != 0 && c != NEWLINE) ;
+      if (c == 0) break;
+      continue;
+      }
+    }
+
+  item_count++;    /* Is zero for the first non-comment item */
+
+  /* Allow space for auto callout before every item except quantifiers. */
+
+  if ((options & PCRE_AUTO_CALLOUT) != 0 &&
+       c != '*' && c != '+' && c != '?' &&
+       (c != '{' || !is_counted_repeat(ptr + 1)))
+    length += 2 + 2*LINK_SIZE;
+
+  switch(c)
+    {
+    /* A backslashed item may be an escaped data character or it may be a
+    character type. */
+
+    case '\\':
+    c = check_escape(&ptr, &errorcode, bracount, options, FALSE);
+    if (errorcode != 0) goto PCRE_ERROR_RETURN;
+
+    lastitemlength = 1;     /* Default length of last item for repeats */
+
+    if (c >= 0)             /* Data character */
+      {
+      length += 2;          /* For a one-byte character */
+
+#ifdef SUPPORT_UTF8
+      if (utf8 && c > 127)
+        {
+        int i;
+        for (i = 0; i < _pcre_utf8_table1_size; i++)
+          if (c <= _pcre_utf8_table1[i]) break;
+        length += i;
+        lastitemlength += i;
+        }
+#endif
+
+      continue;
+      }
+
+    /* If \Q, enter "literal" mode */
+
+    if (-c == ESC_Q)
+      {
+      inescq = TRUE;
+      continue;
+      }
+
+    /* \X is supported only if Unicode property support is compiled */
+
+#ifndef SUPPORT_UCP
+    if (-c == ESC_X)
+      {
+      errorcode = ERR45;
+      goto PCRE_ERROR_RETURN;
+      }
+#endif
+
+    /* \P and \p are for Unicode properties, but only when the support has
+    been compiled. Each item needs 2 bytes. */
+
+    else if (-c == ESC_P || -c == ESC_p)
+      {
+#ifdef SUPPORT_UCP
+      BOOL negated;
+      length += 2;
+      lastitemlength = 2;
+      if (get_ucp(&ptr, &negated, &errorcode) < 0) goto PCRE_ERROR_RETURN;
+      continue;
+#else
+      errorcode = ERR45;
+      goto PCRE_ERROR_RETURN;
+#endif
+      }
+
+    /* Other escapes need one byte */
+
+    length++;
+
+    /* A back reference needs an additional 2 bytes, plus either one or 5
+    bytes for a repeat. We also need to keep the value of the highest
+    back reference. */
+
+    if (c <= -ESC_REF)
+      {
+      int refnum = -c - ESC_REF;
+      compile_block.backref_map |= (refnum < 32)? (1 << refnum) : 1;
+      if (refnum > compile_block.top_backref)
+        compile_block.top_backref = refnum;
+      length += 2;   /* For single back reference */
+      if (ptr[1] == '{' && is_counted_repeat(ptr+2))
+        {
+        ptr = read_repeat_counts(ptr+2, &min, &max, &errorcode);
+        if (errorcode != 0) goto PCRE_ERROR_RETURN;
+        if ((min == 0 && (max == 1 || max == -1)) ||
+          (min == 1 && max == -1))
+            length++;
+        else length += 5;
+        if (ptr[1] == '?') ptr++;
+        }
+      }
+    continue;
+
+    case '^':     /* Single-byte metacharacters */
+    case '.':
+    case '$':
+    length++;
+    lastitemlength = 1;
+    continue;
+
+    case '*':            /* These repeats won't be after brackets; */
+    case '+':            /* those are handled separately */
+    case '?':
+    length++;
+    goto POSESSIVE;      /* A few lines below */
+
+    /* This covers the cases of braced repeats after a single char, metachar,
+    class, or back reference. */
+
+    case '{':
+    if (!is_counted_repeat(ptr+1)) goto NORMAL_CHAR;
+    ptr = read_repeat_counts(ptr+1, &min, &max, &errorcode);
+    if (errorcode != 0) goto PCRE_ERROR_RETURN;
+
+    /* These special cases just insert one extra opcode */
+
+    if ((min == 0 && (max == 1 || max == -1)) ||
+      (min == 1 && max == -1))
+        length++;
+
+    /* These cases might insert additional copies of a preceding character. */
+
+    else
+      {
+      if (min != 1)
+        {
+        length -= lastitemlength;   /* Uncount the original char or metachar */
+        if (min > 0) length += 3 + lastitemlength;
+        }
+      length += lastitemlength + ((max > 0)? 3 : 1);
+      }
+
+    if (ptr[1] == '?') ptr++;      /* Needs no extra length */
+
+    POSESSIVE:                     /* Test for possessive quantifier */
+    if (ptr[1] == '+')
+      {
+      ptr++;
+      length += 2 + 2*LINK_SIZE;   /* Allow for atomic brackets */
+      }
+    continue;
+
+    /* An alternation contains an offset to the next branch or ket. If any ims
+    options changed in the previous branch(es), and/or if we are in a
+    lookbehind assertion, extra space will be needed at the start of the
+    branch. This is handled by branch_extra. */
+
+    case '|':
+    length += 1 + LINK_SIZE + branch_extra;
+    continue;
+
+    /* A character class uses 33 characters provided that all the character
+    values are less than 256. Otherwise, it uses a bit map for low valued
+    characters, and individual items for others. Don't worry about character
+    types that aren't allowed in classes - they'll get picked up during the
+    compile. A character class that contains only one single-byte character
+    uses 2 or 3 bytes, depending on whether it is negated or not. Notice this
+    where we can. (In UTF-8 mode we can do this only for chars < 128.) */
+
+    case '[':
+    if (*(++ptr) == '^')
+      {
+      class_optcount = 10;  /* Greater than one */
+      ptr++;
+      }
+    else class_optcount = 0;
+
+#ifdef SUPPORT_UTF8
+    class_utf8 = FALSE;
+#endif
+
+    /* Written as a "do" so that an initial ']' is taken as data */
+
+    if (*ptr != 0) do
+      {
+      /* Inside \Q...\E everything is literal except \E */
+
+      if (inescq)
+        {
+        if (*ptr != '\\' || ptr[1] != 'E') goto GET_ONE_CHARACTER;
+        inescq = FALSE;
+        ptr += 1;
+        continue;
+        }
+
+      /* Outside \Q...\E, check for escapes */
+
+      if (*ptr == '\\')
+        {
+        c = check_escape(&ptr, &errorcode, bracount, options, TRUE);
+        if (errorcode != 0) goto PCRE_ERROR_RETURN;
+
+        /* \b is backspace inside a class; \X is literal */
+
+        if (-c == ESC_b) c = '\b';
+        else if (-c == ESC_X) c = 'X';
+
+        /* \Q enters quoting mode */
+
+        else if (-c == ESC_Q)
+          {
+          inescq = TRUE;
+          continue;
+          }
+
+        /* Handle escapes that turn into characters */
+
+        if (c >= 0) goto NON_SPECIAL_CHARACTER;
+
+        /* Escapes that are meta-things. The normal ones just affect the
+        bit map, but Unicode properties require an XCLASS extended item. */
+
+        else
+          {
+          class_optcount = 10;         /* \d, \s etc; make sure > 1 */
+#ifdef SUPPORT_UTF8
+          if (-c == ESC_p || -c == ESC_P)
+            {
+            if (!class_utf8)
+              {
+              class_utf8 = TRUE;
+              length += LINK_SIZE + 2;
+              }
+            length += 2;
+            }
+#endif
+          }
+        }
+
+      /* Check the syntax for POSIX stuff. The bits we actually handle are
+      checked during the real compile phase. */
+
+      else if (*ptr == '[' && check_posix_syntax(ptr, &ptr, &compile_block))
+        {
+        ptr++;
+        class_optcount = 10;    /* Make sure > 1 */
+        }
+
+      /* Anything else increments the possible optimization count. We have to
+      detect ranges here so that we can compute the number of extra ranges for
+      caseless wide characters when UCP support is available. If there are wide
+      characters, we are going to have to use an XCLASS, even for single
+      characters. */
+
+      else
+        {
+        int d;
+
+        GET_ONE_CHARACTER:
+
+#ifdef SUPPORT_UTF8
+        if (utf8)
+          {
+          int extra = 0;
+          GETCHARLEN(c, ptr, extra);
+          ptr += extra;
+          }
+        else c = *ptr;
+#else
+        c = *ptr;
+#endif
+
+        /* Come here from handling \ above when it escapes to a char value */
+
+        NON_SPECIAL_CHARACTER:
+        class_optcount++;
+
+        d = -1;
+        if (ptr[1] == '-')
+          {
+          uschar const *hyptr = ptr++;
+          if (ptr[1] == '\\')
+            {
+            ptr++;
+            d = check_escape(&ptr, &errorcode, bracount, options, TRUE);
+            if (errorcode != 0) goto PCRE_ERROR_RETURN;
+            if (-d == ESC_b) d = '\b';        /* backspace */
+            else if (-d == ESC_X) d = 'X';    /* literal X in a class */
+            }
+          else if (ptr[1] != 0 && ptr[1] != ']')
+            {
+            ptr++;
+#ifdef SUPPORT_UTF8
+            if (utf8)
+              {
+              int extra = 0;
+              GETCHARLEN(d, ptr, extra);
+              ptr += extra;
+              }
+            else
+#endif
+            d = *ptr;
+            }
+          if (d < 0) ptr = hyptr;      /* go back to hyphen as data */
+          }
+
+        /* If d >= 0 we have a range. In UTF-8 mode, if the end is > 255, or >
+        127 for caseless matching, we will need to use an XCLASS. */
+
+        if (d >= 0)
+          {
+          class_optcount = 10;     /* Ensure > 1 */
+          if (d < c)
+            {
+            errorcode = ERR8;
+            goto PCRE_ERROR_RETURN;
+            }
+
+#ifdef SUPPORT_UTF8
+          if (utf8 && (d > 255 || ((options & PCRE_CASELESS) != 0 && d > 127)))
+            {
+            uschar buffer[6];
+            if (!class_utf8)         /* Allow for XCLASS overhead */
+              {
+              class_utf8 = TRUE;
+              length += LINK_SIZE + 2;
+              }
+
+#ifdef SUPPORT_UCP
+            /* If we have UCP support, find out how many extra ranges are
+            needed to map the other case of characters within this range. We
+            have to mimic the range optimization here, because extending the
+            range upwards might push d over a boundary that makes is use
+            another byte in the UTF-8 representation. */
+
+            if ((options & PCRE_CASELESS) != 0)
+              {
+              int occ, ocd;
+              int cc = c;
+              int origd = d;
+              while (get_othercase_range(&cc, origd, &occ, &ocd))
+                {
+                if (occ >= c && ocd <= d) continue;   /* Skip embedded */
+
+                if (occ < c  && ocd >= c - 1)  /* Extend the basic range */
+                  {                            /* if there is overlap,   */
+                  c = occ;                     /* noting that if occ < c */
+                  continue;                    /* we can't have ocd > d  */
+                  }                            /* because a subrange is  */
+                if (ocd > d && occ <= d + 1)   /* always shorter than    */
+                  {                            /* the basic range.       */
+                  d = ocd;
+                  continue;
+                  }
+
+                /* An extra item is needed */
+
+                length += 1 + _pcre_ord2utf8(occ, buffer) +
+                  ((occ == ocd)? 0 : _pcre_ord2utf8(ocd, buffer));
+                }
+              }
+#endif  /* SUPPORT_UCP */
+
+            /* The length of the (possibly extended) range */
+
+            length += 1 + _pcre_ord2utf8(c, buffer) + _pcre_ord2utf8(d, buffer);
+            }
+#endif  /* SUPPORT_UTF8 */
+
+          }
+
+        /* We have a single character. There is nothing to be done unless we
+        are in UTF-8 mode. If the char is > 255, or 127 when caseless, we must
+        allow for an XCL_SINGLE item, doubled for caselessness if there is UCP
+        support. */
+
+        else
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && (c > 255 || ((options & PCRE_CASELESS) != 0 && c > 127)))
+            {
+            uschar buffer[6];
+            class_optcount = 10;     /* Ensure > 1 */
+            if (!class_utf8)         /* Allow for XCLASS overhead */
+              {
+              class_utf8 = TRUE;
+              length += LINK_SIZE + 2;
+              }
+#ifdef SUPPORT_UCP
+            length += (((options & PCRE_CASELESS) != 0)? 2 : 1) *
+              (1 + _pcre_ord2utf8(c, buffer));
+#else   /* SUPPORT_UCP */
+            length += 1 + _pcre_ord2utf8(c, buffer);
+#endif  /* SUPPORT_UCP */
+            }
+#endif  /* SUPPORT_UTF8 */
+          }
+        }
+      }
+    while (*(++ptr) != 0 && (inescq || *ptr != ']')); /* Concludes "do" above */
+
+    if (*ptr == 0)                          /* Missing terminating ']' */
+      {
+      errorcode = ERR6;
+      goto PCRE_ERROR_RETURN;
+      }
+
+    /* We can optimize when there was only one optimizable character. Repeats
+    for positive and negated single one-byte chars are handled by the general
+    code. Here, we handle repeats for the class opcodes. */
+
+    if (class_optcount == 1) length += 3; else
+      {
+      length += 33;
+
+      /* A repeat needs either 1 or 5 bytes. If it is a possessive quantifier,
+      we also need extra for wrapping the whole thing in a sub-pattern. */
+
+      if (*ptr != 0 && ptr[1] == '{' && is_counted_repeat(ptr+2))
+        {
+        ptr = read_repeat_counts(ptr+2, &min, &max, &errorcode);
+        if (errorcode != 0) goto PCRE_ERROR_RETURN;
+        if ((min == 0 && (max == 1 || max == -1)) ||
+          (min == 1 && max == -1))
+            length++;
+        else length += 5;
+        if (ptr[1] == '+')
+          {
+          ptr++;
+          length += 2 + 2*LINK_SIZE;
+          }
+        else if (ptr[1] == '?') ptr++;
+        }
+      }
+    continue;
+
+    /* Brackets may be genuine groups or special things */
+
+    case '(':
+    branch_newextra = 0;
+    bracket_length = 1 + LINK_SIZE;
+
+    /* Handle special forms of bracket, which all start (? */
+
+    if (ptr[1] == '?')
+      {
+      int set, unset;
+      int *optset;
+
+      switch (c = ptr[2])
+        {
+        /* Skip over comments entirely */
+        case '#':
+        ptr += 3;
+        while (*ptr != 0 && *ptr != ')') ptr++;
+        if (*ptr == 0)
+          {
+          errorcode = ERR18;
+          goto PCRE_ERROR_RETURN;
+          }
+        continue;
+
+        /* Non-referencing groups and lookaheads just move the pointer on, and
+        then behave like a non-special bracket, except that they don't increment
+        the count of extracting brackets. Ditto for the "once only" bracket,
+        which is in Perl from version 5.005. */
+
+        case ':':
+        case '=':
+        case '!':
+        case '>':
+        ptr += 2;
+        break;
+
+        /* (?R) specifies a recursive call to the regex, which is an extension
+        to provide the facility which can be obtained by (?p{perl-code}) in
+        Perl 5.6. In Perl 5.8 this has become (??{perl-code}).
+
+        From PCRE 4.00, items such as (?3) specify subroutine-like "calls" to
+        the appropriate numbered brackets. This includes both recursive and
+        non-recursive calls. (?R) is now synonymous with (?0). */
+
+        case 'R':
+        ptr++;
+
+        case '0': case '1': case '2': case '3': case '4':
+        case '5': case '6': case '7': case '8': case '9':
+        ptr += 2;
+        if (c != 'R')
+          while ((digitab[*(++ptr)] & ctype_digit) != 0);
+        if (*ptr != ')')
+          {
+          errorcode = ERR29;
+          goto PCRE_ERROR_RETURN;
+          }
+        length += 1 + LINK_SIZE;
+
+        /* If this item is quantified, it will get wrapped inside brackets so
+        as to use the code for quantified brackets. We jump down and use the
+        code that handles this for real brackets. */
+
+        if (ptr[1] == '+' || ptr[1] == '*' || ptr[1] == '?' || ptr[1] == '{')
+          {
+          length += 2 + 2 * LINK_SIZE;       /* to make bracketed */
+          duplength = 5 + 3 * LINK_SIZE;
+          goto HANDLE_QUANTIFIED_BRACKETS;
+          }
+        continue;
+
+        /* (?C) is an extension which provides "callout" - to provide a bit of
+        the functionality of the Perl (?{...}) feature. An optional number may
+        follow (default is zero). */
+
+        case 'C':
+        ptr += 2;
+        while ((digitab[*(++ptr)] & ctype_digit) != 0);
+        if (*ptr != ')')
+          {
+          errorcode = ERR39;
+          goto PCRE_ERROR_RETURN;
+          }
+        length += 2 + 2*LINK_SIZE;
+        continue;
+
+        /* Named subpatterns are an extension copied from Python */
+
+        case 'P':
+        ptr += 3;
+        if (*ptr == '<')
+          {
+          const uschar *p;    /* Don't amalgamate; some compilers */
+          p = ++ptr;          /* grumble at autoincrement in declaration */
+          while ((compile_block.ctypes[*ptr] & ctype_word) != 0) ptr++;
+          if (*ptr != '>')
+            {
+            errorcode = ERR42;
+            goto PCRE_ERROR_RETURN;
+            }
+          name_count++;
+          if (ptr - p > max_name_size) max_name_size = (ptr - p);
+          break;
+          }
+
+        if (*ptr == '=' || *ptr == '>')
+          {
+          while ((compile_block.ctypes[*(++ptr)] & ctype_word) != 0);
+          if (*ptr != ')')
+            {
+            errorcode = ERR42;
+            goto PCRE_ERROR_RETURN;
+            }
+          break;
+          }
+
+        /* Unknown character after (?P */
+
+        errorcode = ERR41;
+        goto PCRE_ERROR_RETURN;
+
+        /* Lookbehinds are in Perl from version 5.005 */
+
+        case '<':
+        ptr += 3;
+        if (*ptr == '=' || *ptr == '!')
+          {
+          branch_newextra = 1 + LINK_SIZE;
+          length += 1 + LINK_SIZE;         /* For the first branch */
+          break;
+          }
+        errorcode = ERR24;
+        goto PCRE_ERROR_RETURN;
+
+        /* Conditionals are in Perl from version 5.005. The bracket must either
+        be followed by a number (for bracket reference) or by an assertion
+        group, or (a PCRE extension) by 'R' for a recursion test. */
+
+        case '(':
+        if (ptr[3] == 'R' && ptr[4] == ')')
+          {
+          ptr += 4;
+          length += 3;
+          }
+        else if ((digitab[ptr[3]] & ctype_digit) != 0)
+          {
+          ptr += 4;
+          length += 3;
+          while ((digitab[*ptr] & ctype_digit) != 0) ptr++;
+          if (*ptr != ')')
+            {
+            errorcode = ERR26;
+            goto PCRE_ERROR_RETURN;
+            }
+          }
+        else   /* An assertion must follow */
+          {
+          ptr++;   /* Can treat like ':' as far as spacing is concerned */
+          if (ptr[2] != '?' ||
+             (ptr[3] != '=' && ptr[3] != '!' && ptr[3] != '<') )
+            {
+            ptr += 2;    /* To get right offset in message */
+            errorcode = ERR28;
+            goto PCRE_ERROR_RETURN;
+            }
+          }
+        break;
+
+        /* Else loop checking valid options until ) is met. Anything else is an
+        error. If we are without any brackets, i.e. at top level, the settings
+        act as if specified in the options, so massage the options immediately.
+        This is for backward compatibility with Perl 5.004. */
+
+        default:
+        set = unset = 0;
+        optset = &set;
+        ptr += 2;
+
+        for (;; ptr++)
+          {
+          c = *ptr;
+          switch (c)
+            {
+            case 'i':
+            *optset |= PCRE_CASELESS;
+            continue;
+
+            case 'm':
+            *optset |= PCRE_MULTILINE;
+            continue;
+
+            case 's':
+            *optset |= PCRE_DOTALL;
+            continue;
+
+            case 'x':
+            *optset |= PCRE_EXTENDED;
+            continue;
+
+            case 'X':
+            *optset |= PCRE_EXTRA;
+            continue;
+
+            case 'U':
+            *optset |= PCRE_UNGREEDY;
+            continue;
+
+            case '-':
+            optset = &unset;
+            continue;
+
+            /* A termination by ')' indicates an options-setting-only item; if
+            this is at the very start of the pattern (indicated by item_count
+            being zero), we use it to set the global options. This is helpful
+            when analyzing the pattern for first characters, etc. Otherwise
+            nothing is done here and it is handled during the compiling
+            process.
+
+            We allow for more than one options setting at the start. If such
+            settings do not change the existing options, nothing is compiled.
+            However, we must leave space just in case something is compiled.
+            This can happen for pathological sequences such as (?i)(?-i)
+            because the global options will end up with -i set. The space is
+            small and not significant. (Before I did this there was a reported
+            bug with (?i)(?-i) in a machine-generated pattern.)
+
+            [Historical note: Up to Perl 5.8, options settings at top level
+            were always global settings, wherever they appeared in the pattern.
+            That is, they were equivalent to an external setting. From 5.8
+            onwards, they apply only to what follows (which is what you might
+            expect).] */
+
+            case ')':
+            if (item_count == 0)
+              {
+              options = (options | set) & (~unset);
+              set = unset = 0;     /* To save length */
+              item_count--;        /* To allow for several */
+              length += 2;
+              }
+
+            /* Fall through */
+
+            /* A termination by ':' indicates the start of a nested group with
+            the given options set. This is again handled at compile time, but
+            we must allow for compiled space if any of the ims options are
+            set. We also have to allow for resetting space at the end of
+            the group, which is why 4 is added to the length and not just 2.
+            If there are several changes of options within the same group, this
+            will lead to an over-estimate on the length, but this shouldn't
+            matter very much. We also have to allow for resetting options at
+            the start of any alternations, which we do by setting
+            branch_newextra to 2. Finally, we record whether the case-dependent
+            flag ever changes within the regex. This is used by the "required
+            character" code. */
+
+            case ':':
+            if (((set|unset) & PCRE_IMS) != 0)
+              {
+              length += 4;
+              branch_newextra = 2;
+              if (((set|unset) & PCRE_CASELESS) != 0) options |= PCRE_ICHANGED;
+              }
+            goto END_OPTIONS;
+
+            /* Unrecognized option character */
+
+            default:
+            errorcode = ERR12;
+            goto PCRE_ERROR_RETURN;
+            }
+          }
+
+        /* If we hit a closing bracket, that's it - this is a freestanding
+        option-setting. We need to ensure that branch_extra is updated if
+        necessary. The only values branch_newextra can have here are 0 or 2.
+        If the value is 2, then branch_extra must either be 2 or 5, depending
+        on whether this is a lookbehind group or not. */
+
+        END_OPTIONS:
+        if (c == ')')
+          {
+          if (branch_newextra == 2 &&
+              (branch_extra == 0 || branch_extra == 1+LINK_SIZE))
+            branch_extra += branch_newextra;
+          continue;
+          }
+
+        /* If options were terminated by ':' control comes here. Fall through
+        to handle the group below. */
+        }
+      }
+
+    /* Extracting brackets must be counted so we can process escapes in a
+    Perlish way. If the number exceeds EXTRACT_BASIC_MAX we are going to
+    need an additional 3 bytes of store per extracting bracket. However, if
+    PCRE_NO_AUTO)CAPTURE is set, unadorned brackets become non-capturing, so we
+    must leave the count alone (it will aways be zero). */
+
+    else if ((options & PCRE_NO_AUTO_CAPTURE) == 0)
+      {
+      bracount++;
+      if (bracount > EXTRACT_BASIC_MAX) bracket_length += 3;
+      }
+
+    /* Save length for computing whole length at end if there's a repeat that
+    requires duplication of the group. Also save the current value of
+    branch_extra, and start the new group with the new value. If non-zero, this
+    will either be 2 for a (?imsx: group, or 3 for a lookbehind assertion. */
+
+    if (brastackptr >= sizeof(brastack)/sizeof(int))
+      {
+      errorcode = ERR19;
+      goto PCRE_ERROR_RETURN;
+      }
+
+    bralenstack[brastackptr] = branch_extra;
+    branch_extra = branch_newextra;
+
+    brastack[brastackptr++] = length;
+    length += bracket_length;
+    continue;
+
+    /* Handle ket. Look for subsequent max/min; for certain sets of values we
+    have to replicate this bracket up to that many times. If brastackptr is
+    0 this is an unmatched bracket which will generate an error, but take care
+    not to try to access brastack[-1] when computing the length and restoring
+    the branch_extra value. */
+
+    case ')':
+    length += 1 + LINK_SIZE;
+    if (brastackptr > 0)
+      {
+      duplength = length - brastack[--brastackptr];
+      branch_extra = bralenstack[brastackptr];
+      }
+    else duplength = 0;
+
+    /* The following code is also used when a recursion such as (?3) is
+    followed by a quantifier, because in that case, it has to be wrapped inside
+    brackets so that the quantifier works. The value of duplength must be
+    set before arrival. */
+
+    HANDLE_QUANTIFIED_BRACKETS:
+
+    /* Leave ptr at the final char; for read_repeat_counts this happens
+    automatically; for the others we need an increment. */
+
+    if ((c = ptr[1]) == '{' && is_counted_repeat(ptr+2))
+      {
+      ptr = read_repeat_counts(ptr+2, &min, &max, &errorcode);
+      if (errorcode != 0) goto PCRE_ERROR_RETURN;
+      }
+    else if (c == '*') { min = 0; max = -1; ptr++; }
+    else if (c == '+') { min = 1; max = -1; ptr++; }
+    else if (c == '?') { min = 0; max = 1;  ptr++; }
+    else { min = 1; max = 1; }
+
+    /* If the minimum is zero, we have to allow for an OP_BRAZERO before the
+    group, and if the maximum is greater than zero, we have to replicate
+    maxval-1 times; each replication acquires an OP_BRAZERO plus a nesting
+    bracket set. */
+
+    if (min == 0)
+      {
+      length++;
+      if (max > 0) length += (max - 1) * (duplength + 3 + 2*LINK_SIZE);
+      }
+
+    /* When the minimum is greater than zero, we have to replicate up to
+    minval-1 times, with no additions required in the copies. Then, if there
+    is a limited maximum we have to replicate up to maxval-1 times allowing
+    for a BRAZERO item before each optional copy and nesting brackets for all
+    but one of the optional copies. */
+
+    else
+      {
+      length += (min - 1) * duplength;
+      if (max > min)   /* Need this test as max=-1 means no limit */
+        length += (max - min) * (duplength + 3 + 2*LINK_SIZE)
+          - (2 + 2*LINK_SIZE);
+      }
+
+    /* Allow space for once brackets for "possessive quantifier" */
+
+    if (ptr[1] == '+')
+      {
+      ptr++;
+      length += 2 + 2*LINK_SIZE;
+      }
+    continue;
+
+    /* Non-special character. It won't be space or # in extended mode, so it is
+    always a genuine character. If we are in a \Q...\E sequence, check for the
+    end; if not, we have a literal. */
+
+    default:
+    NORMAL_CHAR:
+
+    if (inescq && c == '\\' && ptr[1] == 'E')
+      {
+      inescq = FALSE;
+      ptr++;
+      continue;
+      }
+
+    length += 2;          /* For a one-byte character */
+    lastitemlength = 1;   /* Default length of last item for repeats */
+
+    /* In UTF-8 mode, check for additional bytes. */
+
+#ifdef SUPPORT_UTF8
+    if (utf8 && (c & 0xc0) == 0xc0)
+      {
+      while ((ptr[1] & 0xc0) == 0x80)         /* Can't flow over the end */
+        {                                     /* because the end is marked */
+        lastitemlength++;                     /* by a zero byte. */
+        length++;
+        ptr++;
+        }
+      }
+#endif
+
+    continue;
+    }
+  }
+
+length += 2 + LINK_SIZE;    /* For final KET and END */
+
+if ((options & PCRE_AUTO_CALLOUT) != 0)
+  length += 2 + 2*LINK_SIZE;  /* For final callout */
+
+if (length > MAX_PATTERN_SIZE)
+  {
+  errorcode = ERR20;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+
+/* Compute the size of data block needed and get it, either from malloc or
+externally provided function. */
+
+size = length + sizeof(real_pcre) + name_count * (max_name_size + 3);
+re = (real_pcre *)(pcre_malloc)(size);
+
+if (re == NULL)
+  {
+  errorcode = ERR21;
+  goto PCRE_EARLY_ERROR_RETURN;
+  }
+
+/* Put in the magic number, and save the sizes, options, and character table
+pointer. NULL is used for the default character tables. The nullpad field is at
+the end; it's there to help in the case when a regex compiled on a system with
+4-byte pointers is run on another with 8-byte pointers. */
+
+re->magic_number = MAGIC_NUMBER;
+re->size = size;
+re->options = options;
+re->dummy1 = 0;
+re->name_table_offset = sizeof(real_pcre);
+re->name_entry_size = max_name_size + 3;
+re->name_count = name_count;
+re->ref_count = 0;
+re->tables = (tables == _pcre_default_tables)? NULL : tables;
+re->nullpad = NULL;
+
+/* The starting points of the name/number translation table and of the code are
+passed around in the compile data block. */
+
+compile_block.names_found = 0;
+compile_block.name_entry_size = max_name_size + 3;
+compile_block.name_table = (uschar *)re + re->name_table_offset;
+codestart = compile_block.name_table + re->name_entry_size * re->name_count;
+compile_block.start_code = codestart;
+compile_block.start_pattern = (const uschar *)pattern;
+compile_block.req_varyopt = 0;
+compile_block.nopartial = FALSE;
+
+/* Set up a starting, non-extracting bracket, then compile the expression. On
+error, errorcode will be set non-zero, so we don't need to look at the result
+of the function here. */
+
+ptr = (const uschar *)pattern;
+code = (uschar *)codestart;
+*code = OP_BRA;
+bracount = 0;
+(void)compile_regex(options, options & PCRE_IMS, &bracount, &code, &ptr,
+  &errorcode, FALSE, 0, &firstbyte, &reqbyte, NULL, &compile_block);
+re->top_bracket = bracount;
+re->top_backref = compile_block.top_backref;
+
+if (compile_block.nopartial) re->options |= PCRE_NOPARTIAL;
+
+/* If not reached end of pattern on success, there's an excess bracket. */
+
+if (errorcode == 0 && *ptr != 0) errorcode = ERR22;
+
+/* Fill in the terminating state and check for disastrous overflow, but
+if debugging, leave the test till after things are printed out. */
+
+*code++ = OP_END;
+
+#ifndef DEBUG
+if (code - codestart > length) errorcode = ERR23;
+#endif
+
+/* Give an error if there's back reference to a non-existent capturing
+subpattern. */
+
+if (re->top_backref > re->top_bracket) errorcode = ERR15;
+
+/* Failed to compile, or error while post-processing */
+
+if (errorcode != 0)
+  {
+  (pcre_free)(re);
+  PCRE_ERROR_RETURN:
+  *erroroffset = ptr - (const uschar *)pattern;
+  PCRE_EARLY_ERROR_RETURN:
+  *errorptr = error_texts[errorcode];
+  if (errorcodeptr != NULL) *errorcodeptr = errorcode;
+  return NULL;
+  }
+
+/* If the anchored option was not passed, set the flag if we can determine that
+the pattern is anchored by virtue of ^ characters or \A or anything else (such
+as starting with .* when DOTALL is set).
+
+Otherwise, if we know what the first character has to be, save it, because that
+speeds up unanchored matches no end. If not, see if we can set the
+PCRE_STARTLINE flag. This is helpful for multiline matches when all branches
+start with ^. and also when all branches start with .* for non-DOTALL matches.
+*/
+
+if ((options & PCRE_ANCHORED) == 0)
+  {
+  int temp_options = options;
+  if (is_anchored(codestart, &temp_options, 0, compile_block.backref_map))
+    re->options |= PCRE_ANCHORED;
+  else
+    {
+    if (firstbyte < 0)
+      firstbyte = find_firstassertedchar(codestart, &temp_options, FALSE);
+    if (firstbyte >= 0)   /* Remove caseless flag for non-caseable chars */
+      {
+      int ch = firstbyte & 255;
+      re->first_byte = ((firstbyte & REQ_CASELESS) != 0 &&
+         compile_block.fcc[ch] == ch)? ch : firstbyte;
+      re->options |= PCRE_FIRSTSET;
+      }
+    else if (is_startline(codestart, 0, compile_block.backref_map))
+      re->options |= PCRE_STARTLINE;
+    }
+  }
+
+/* For an anchored pattern, we use the "required byte" only if it follows a
+variable length item in the regex. Remove the caseless flag for non-caseable
+bytes. */
+
+if (reqbyte >= 0 &&
+     ((re->options & PCRE_ANCHORED) == 0 || (reqbyte & REQ_VARY) != 0))
+  {
+  int ch = reqbyte & 255;
+  re->req_byte = ((reqbyte & REQ_CASELESS) != 0 &&
+    compile_block.fcc[ch] == ch)? (reqbyte & ~REQ_CASELESS) : reqbyte;
+  re->options |= PCRE_REQCHSET;
+  }
+
+/* Print out the compiled data for debugging */
+
+#ifdef DEBUG
+
+printf("Length = %d top_bracket = %d top_backref = %d\n",
+  length, re->top_bracket, re->top_backref);
+
+if (re->options != 0)
+  {
+  printf("%s%s%s%s%s%s%s%s%s%s\n",
+    ((re->options & PCRE_NOPARTIAL) != 0)? "nopartial " : "",
+    ((re->options & PCRE_ANCHORED) != 0)? "anchored " : "",
+    ((re->options & PCRE_CASELESS) != 0)? "caseless " : "",
+    ((re->options & PCRE_ICHANGED) != 0)? "case state changed " : "",
+    ((re->options & PCRE_EXTENDED) != 0)? "extended " : "",
+    ((re->options & PCRE_MULTILINE) != 0)? "multiline " : "",
+    ((re->options & PCRE_DOTALL) != 0)? "dotall " : "",
+    ((re->options & PCRE_DOLLAR_ENDONLY) != 0)? "endonly " : "",
+    ((re->options & PCRE_EXTRA) != 0)? "extra " : "",
+    ((re->options & PCRE_UNGREEDY) != 0)? "ungreedy " : "");
+  }
+
+if ((re->options & PCRE_FIRSTSET) != 0)
+  {
+  int ch = re->first_byte & 255;
+  const char *caseless = ((re->first_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
+  if (isprint(ch)) printf("First char = %c%s\n", ch, caseless);
+    else printf("First char = \\x%02x%s\n", ch, caseless);
+  }
+
+if ((re->options & PCRE_REQCHSET) != 0)
+  {
+  int ch = re->req_byte & 255;
+  const char *caseless = ((re->req_byte & REQ_CASELESS) == 0)? "" : " (caseless)";
+  if (isprint(ch)) printf("Req char = %c%s\n", ch, caseless);
+    else printf("Req char = \\x%02x%s\n", ch, caseless);
+  }
+
+_pcre_printint(re, stdout);
+
+/* This check is done here in the debugging case so that the code that
+was compiled can be seen. */
+
+if (code - codestart > length)
+  {
+  (pcre_free)(re);
+  *errorptr = error_texts[ERR23];
+  *erroroffset = ptr - (uschar *)pattern;
+  if (errorcodeptr != NULL) *errorcodeptr = ERR23;
+  return NULL;
+  }
+#endif
+
+return (pcre *)re;
+}
+
+/* End of pcre_compile.c */
diff -Nurp tin-1.7.8/pcre/pcre_config.c tin-1.7.9/pcre/pcre_config.c
--- tin-1.7.8/pcre/pcre_config.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_config.c	2005-06-28 10:31:26.222180129 +0200
@@ -0,0 +1,112 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_config(). */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+* Return info about what features are configured *
+*************************************************/
+
+/* This function has an extensible interface so that additional items can be
+added compatibly.
+
+Arguments:
+  what             what information is required
+  where            where to put the information
+
+Returns:           0 if data returned, negative on error
+*/
+
+EXPORT int
+pcre_config(int what, void *where)
+{
+switch (what)
+  {
+  case PCRE_CONFIG_UTF8:
+#ifdef SUPPORT_UTF8
+  *((int *)where) = 1;
+#else
+  *((int *)where) = 0;
+#endif
+  break;
+
+  case PCRE_CONFIG_UNICODE_PROPERTIES:
+#ifdef SUPPORT_UCP
+  *((int *)where) = 1;
+#else
+  *((int *)where) = 0;
+#endif
+  break;
+
+  case PCRE_CONFIG_NEWLINE:
+  *((int *)where) = NEWLINE;
+  break;
+
+  case PCRE_CONFIG_LINK_SIZE:
+  *((int *)where) = LINK_SIZE;
+  break;
+
+  case PCRE_CONFIG_POSIX_MALLOC_THRESHOLD:
+  *((int *)where) = POSIX_MALLOC_THRESHOLD;
+  break;
+
+  case PCRE_CONFIG_MATCH_LIMIT:
+  *((unsigned int *)where) = MATCH_LIMIT;
+  break;
+
+  case PCRE_CONFIG_STACKRECURSE:
+#ifdef NO_RECURSE
+  *((int *)where) = 0;
+#else
+  *((int *)where) = 1;
+#endif
+  break;
+
+  default: return PCRE_ERROR_BADOPTION;
+  }
+
+return 0;
+}
+
+/* End of pcre_config.c */
diff -Nurp tin-1.7.8/pcre/pcre_dfa_exec.c tin-1.7.9/pcre/pcre_dfa_exec.c
--- tin-1.7.8/pcre/pcre_dfa_exec.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_dfa_exec.c	2005-06-28 10:31:26.270171295 +0200
@@ -0,0 +1,1922 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_dfa_exec(), which is an
+alternative matching function that uses a DFA algorithm. This is NOT Perl-
+compatible, but it has advantages in certain applications. */
+
+
+#include "pcre_internal.h"
+
+
+/* For use to indent debugging output */
+
+#define SP "                   "
+
+
+
+/*************************************************
+*      Code parameters and static tables         *
+*************************************************/
+
+/* These are offsets that are used to turn the OP_TYPESTAR and friends opcodes
+into others, under special conditions. A gap of 10 between the blocks should be
+enough. */
+
+#define OP_PROP_EXTRA    (EXTRACT_BASIC_MAX+1)
+#define OP_EXTUNI_EXTRA  (EXTRACT_BASIC_MAX+11)
+
+
+/* This table identifies those opcodes that are followed immediately by a
+character that is to be tested in some way. This makes is possible to
+centralize the loading of these characters. In the case of Type * etc, the
+"character" is the opcode for \D, \d, \S, \s, \W, or \w, which will always be a
+small value. */
+
+static uschar coptable[] = {
+  0,                             /* End                                    */
+  0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  /* \A, \G, \B, \b, \D, \d, \S, \s, \W, \w */
+  0, 0,                          /* Any, Anybyte                           */
+  0, 0, 0,                       /* NOTPROP, PROP, EXTUNI                  */
+  0, 0, 0, 0, 0,                 /* \Z, \z, Opt, ^, $                      */
+  1,                             /* Char                                   */
+  1,                             /* Charnc                                 */
+  1,                             /* not                                    */
+  /* Positive single-char repeats                                          */
+  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */
+  3, 3, 3,                       /* upto, minupto, exact                   */
+  /* Negative single-char repeats - only for chars < 256                   */
+  1, 1, 1, 1, 1, 1,              /* NOT *, *?, +, +?, ?, ??                */
+  3, 3, 3,                       /* NOT upto, minupto, exact               */
+  /* Positive type repeats                                                 */
+  1, 1, 1, 1, 1, 1,              /* Type *, *?, +, +?, ?, ??               */
+  3, 3, 3,                       /* Type upto, minupto, exact              */
+  /* Character class & ref repeats                                         */
+  0, 0, 0, 0, 0, 0,              /* *, *?, +, +?, ?, ??                    */
+  0, 0,                          /* CRRANGE, CRMINRANGE                    */
+  0,                             /* CLASS                                  */
+  0,                             /* NCLASS                                 */
+  0,                             /* XCLASS - variable length               */
+  0,                             /* REF                                    */
+  0,                             /* RECURSE                                */
+  0,                             /* CALLOUT                                */
+  0,                             /* Alt                                    */
+  0,                             /* Ket                                    */
+  0,                             /* KetRmax                                */
+  0,                             /* KetRmin                                */
+  0,                             /* Assert                                 */
+  0,                             /* Assert not                             */
+  0,                             /* Assert behind                          */
+  0,                             /* Assert behind not                      */
+  0,                             /* Reverse                                */
+  0,                             /* Once                                   */
+  0,                             /* COND                                   */
+  0,                             /* CREF                                   */
+  0, 0,                          /* BRAZERO, BRAMINZERO                    */
+  0,                             /* BRANUMBER                              */
+  0                              /* BRA                                    */
+};
+
+/* These 2 tables allow for compact code for testing for \D, \d, \S, \s, \W,
+and \w */
+
+static uschar toptable1[] = {
+  0, 0, 0, 0, 0,
+  ctype_digit, ctype_digit,
+  ctype_space, ctype_space,
+  ctype_word,  ctype_word,
+  0                               /* OP_ANY */
+};
+
+static uschar toptable2[] = {
+  0, 0, 0, 0, 0,
+  ctype_digit, 0,
+  ctype_space, 0,
+  ctype_word,  0,
+  1                               /* OP_ANY */
+};
+
+
+/* Structure for holding data about a particular state, which is in effect the
+current data for an active path through the match tree. It must consist
+entirely of ints because the working vector we are passed, and which we put
+these structures in, is a vector of ints. */
+
+typedef struct stateblock {
+  int offset;                     /* Offset to opcode */
+  int count;                      /* Count for repeats */
+  int ims;                        /* ims flag bits */
+  int data;                       /* Some use extra data */
+} stateblock;
+
+#define INTS_PER_STATEBLOCK  (sizeof(stateblock)/sizeof(int))
+
+
+#ifdef DEBUG
+/*************************************************
+*             Print character string             *
+*************************************************/
+
+/* Character string printing function for debugging.
+
+Arguments:
+  p            points to string
+  length       number of bytes
+  f            where to print
+
+Returns:       nothing
+*/
+
+static void
+pchars(unsigned char *p, int length, FILE *f)
+{
+int c;
+while (length-- > 0)
+  {
+  if (isprint(c = *(p++)))
+    fprintf(f, "%c", c);
+  else
+    fprintf(f, "\\x%02x", c);
+  }
+}
+#endif
+
+
+
+/*************************************************
+*    Execute a Regular Expression - DFA engine   *
+*************************************************/
+
+/* This internal function applies a compiled pattern to a subject string,
+starting at a given point, using a DFA engine. This function is called from the
+external one, possibly multiple times if the pattern is not anchored. The
+function calls itself recursively for some kinds of subpattern.
+
+Arguments:
+  md                the match_data block with fixed information
+  this_start_code   the opening bracket of this subexpression's code
+  current_subject   where we currently are in the subject string
+  start_offset      start offset in the subject string
+  offsets           vector to contain the matching string offsets
+  offsetcount       size of same
+  workspace         vector of workspace
+  wscount           size of same
+  ims               the current ims flags
+  rlevel            function call recursion level
+  recursing         regex recursive call level
+
+Returns:            > 0 =>
+                    = 0 =>
+                     -1 => failed to match
+                   < -1 => some kind of unexpected problem
+
+The following macros are used for adding states to the two state vectors (one
+for the current character, one for the following character). */
+
+#define ADD_ACTIVE(x,y) \
+  if (active_count++ < wscount) \
+    { \
+    next_active_state->offset = (x); \
+    next_active_state->count  = (y); \
+    next_active_state->ims    = ims; \
+    next_active_state++; \
+    DPRINTF(("%.*sADD_ACTIVE(%d,%d)\n", rlevel*2-2, SP, (x), (y))); \
+    } \
+  else return PCRE_ERROR_DFA_WSSIZE
+
+#define ADD_ACTIVE_DATA(x,y,z) \
+  if (active_count++ < wscount) \
+    { \
+    next_active_state->offset = (x); \
+    next_active_state->count  = (y); \
+    next_active_state->ims    = ims; \
+    next_active_state->data   = (z); \
+    next_active_state++; \
+    DPRINTF(("%.*sADD_ACTIVE_DATA(%d,%d,%d)\n", rlevel*2-2, SP, (x), (y), (z))); \
+    } \
+  else return PCRE_ERROR_DFA_WSSIZE
+
+#define ADD_NEW(x,y) \
+  if (new_count++ < wscount) \
+    { \
+    next_new_state->offset = (x); \
+    next_new_state->count  = (y); \
+    next_new_state->ims    = ims; \
+    next_new_state++; \
+    DPRINTF(("%.*sADD_NEW(%d,%d)\n", rlevel*2-2, SP, (x), (y))); \
+    } \
+  else return PCRE_ERROR_DFA_WSSIZE
+
+#define ADD_NEW_DATA(x,y,z) \
+  if (new_count++ < wscount) \
+    { \
+    next_new_state->offset = (x); \
+    next_new_state->count  = (y); \
+    next_new_state->ims    = ims; \
+    next_new_state->data   = (z); \
+    next_new_state++; \
+    DPRINTF(("%.*sADD_NEW_DATA(%d,%d,%d)\n", rlevel*2-2, SP, (x), (y), (z))); \
+    } \
+  else return PCRE_ERROR_DFA_WSSIZE
+
+/* And now, here is the code */
+
+static int
+internal_dfa_exec(
+  dfa_match_data *md,
+  const uschar *this_start_code,
+  const uschar *current_subject,
+  int start_offset,
+  int *offsets,
+  int offsetcount,
+  int *workspace,
+  int wscount,
+  int ims,
+  int  rlevel,
+  int  recursing)
+{
+stateblock *active_states, *new_states, *temp_states;
+stateblock *next_active_state, *next_new_state;
+
+const uschar *ctypes, *lcc, *fcc;
+const uschar *ptr;
+const uschar *end_code;
+
+int active_count, new_count, match_count;
+
+/* Some fields in the md block are frequently referenced, so we load them into
+independent variables in the hope that this will perform better. */
+
+const uschar *start_subject = md->start_subject;
+const uschar *end_subject = md->end_subject;
+const uschar *start_code = md->start_code;
+
+BOOL utf8 = (md->poptions & PCRE_UTF8) != 0;
+
+rlevel++;
+offsetcount &= (-2);
+
+wscount -= 2;
+wscount = (wscount - (wscount % (INTS_PER_STATEBLOCK * 2))) /
+          (2 * INTS_PER_STATEBLOCK);
+
+DPRINTF(("\n%.*s---------------------\n"
+  "%.*sCall to internal_dfa_exec f=%d r=%d\n",
+  rlevel*2-2, SP, rlevel*2-2, SP, rlevel, recursing));
+
+ctypes = md->tables + ctypes_offset;
+lcc = md->tables + lcc_offset;
+fcc = md->tables + fcc_offset;
+
+match_count = PCRE_ERROR_NOMATCH;   /* A negative number */
+
+active_states = (stateblock *)(workspace + 2);
+next_new_state = new_states = active_states + wscount;
+new_count = 0;
+
+/* The first thing in any (sub) pattern is a bracket of some sort. Push all
+the alternative states onto the list, and find out where the end is. This
+makes is possible to use this function recursively, when we want to stop at a
+matching internal ket rather than at the end.
+
+If the first opcode in the first alternative is OP_REVERSE, we are dealing with
+a backward assertion. In that case, we have to find out the maximum amount to
+move back, and set up each alternative appropriately. */
+
+if (this_start_code[1+LINK_SIZE] == OP_REVERSE)
+  {
+  int max_back = 0;
+  int gone_back;
+
+  end_code = this_start_code;
+  do
+    {
+    int back = GET(end_code, 2+LINK_SIZE);
+    if (back > max_back) max_back = back;
+    end_code += GET(end_code, 1);
+    }
+  while (*end_code == OP_ALT);
+
+  /* If we can't go back the amount required for the longest lookbehind
+  pattern, go back as far as we can; some alternatives may still be viable. */
+
+#ifdef SUPPORT_UTF8
+  /* In character mode we have to step back character by character */
+
+  if (utf8)
+    {
+    for (gone_back = 0; gone_back < max_back; gone_back++)
+      {
+      if (current_subject <= start_subject) break;
+      current_subject--;
+      while (current_subject > start_subject &&
+             (*current_subject & 0xc0) == 0x80)
+        current_subject--;
+      }
+    }
+  else
+#endif
+
+  /* In byte-mode we can do this quickly. */
+
+    {
+    gone_back = (current_subject - max_back < start_subject)?
+      current_subject - start_subject : max_back;
+    current_subject -= gone_back;
+    }
+
+  /* Now we can process the individual branches. */
+
+  end_code = this_start_code;
+  do
+    {
+    int back = GET(end_code, 2+LINK_SIZE);
+    if (back <= gone_back)
+      {
+      int bstate = end_code - start_code + 2 + 2*LINK_SIZE;
+      ADD_NEW_DATA(-bstate, 0, gone_back - back);
+      }
+    end_code += GET(end_code, 1);
+    }
+  while (*end_code == OP_ALT);
+ }
+
+/* This is the code for a "normal" subpattern (not a backward assertion). The
+start of a whole pattern is always one of these. If we are at the top level,
+we may be asked to restart matching from the same point that we reached for a
+previous partial match. We still have to scan through the top-level branches to
+find the end state. */
+
+else
+  {
+  end_code = this_start_code;
+
+  /* Restarting */
+
+  if (rlevel == 1 && (md->moptions & PCRE_DFA_RESTART) != 0)
+    {
+    do { end_code += GET(end_code, 1); } while (*end_code == OP_ALT);
+    new_count = workspace[1];
+    if (!workspace[0])
+      memcpy(new_states, active_states, new_count * sizeof(stateblock));
+    }
+
+  /* Not restarting */
+
+  else
+    {
+    do
+      {
+      ADD_NEW(end_code - start_code + 1 + LINK_SIZE, 0);
+      end_code += GET(end_code, 1);
+      }
+    while (*end_code == OP_ALT);
+    }
+  }
+
+workspace[0] = 0;    /* Bit indicating which vector is current */
+
+DPRINTF(("%.*sEnd state = %d\n", rlevel*2-2, SP, end_code - start_code));
+
+/* Loop for scanning the subject */
+
+ptr = current_subject;
+for (;;)
+  {
+  int i, j;
+  int c, d, clen, dlen;
+
+  /* Make the new state list into the active state list and empty the
+  new state list. */
+
+  temp_states = active_states;
+  active_states = new_states;
+  new_states = temp_states;
+  active_count = new_count;
+  new_count = 0;
+
+  workspace[0] ^= 1;              /* Remember for the restarting feature */
+  workspace[1] = active_count;
+
+#ifdef DEBUG
+  printf("%.*sNext character: rest of subject = \"", rlevel*2-2, SP);
+  pchars((uschar *)ptr, strlen((char *)ptr), stdout);
+  printf("\"\n");
+
+  printf("%.*sActive states: ", rlevel*2-2, SP);
+  for (i = 0; i < active_count; i++)
+    printf("%d/%d ", active_states[i].offset, active_states[i].count);
+  printf("\n");
+#endif
+
+  /* Set the pointers for adding new states */
+
+  next_active_state = active_states + active_count;
+  next_new_state = new_states;
+
+  /* Load the current character from the subject outside the loop, as many
+  different states may want to look at it, and we assume that at least one
+  will. */
+
+  if (ptr < end_subject)
+    {
+    clen = 1;
+#ifdef SUPPORT_UTF8
+    if (utf8) { GETCHARLEN(c, ptr, clen); } else
+#endif  /* SUPPORT_UTF8 */
+    c = *ptr;
+    }
+  else
+    {
+    clen = 0;    /* At end subject */
+    c = -1;
+    }
+
+  /* Scan up the active states and act on each one. The result of an action
+  may be to add more states to the currently active list (e.g. on hitting a
+  parenthesis) or it may be to put states on the new list, for considering
+  when we move the character pointer on. */
+
+  for (i = 0; i < active_count; i++)
+    {
+    stateblock *current_state = active_states + i;
+    const uschar *code;
+    int state_offset = current_state->offset;
+    int count, codevalue;
+    int chartype, othercase;
+
+#ifdef DEBUG
+    printf ("%.*sProcessing state %d c=", rlevel*2-2, SP, state_offset);
+    if (c < 0) printf("-1\n");
+      else if (c > 32 && c < 127) printf("'%c'\n", c);
+        else printf("0x%02x\n", c);
+#endif
+
+    /* This variable is referred to implicity in the ADD_xxx macros. */
+
+    ims = current_state->ims;
+
+    /* A negative offset is a special case meaning "hold off going to this
+    (negated) state until the number of characters in the data field have
+    been skipped". */
+
+    if (state_offset < 0)
+      {
+      if (current_state->data > 0)
+        {
+        DPRINTF(("%.*sSkipping this character\n", rlevel*2-2, SP));
+        ADD_NEW_DATA(state_offset, current_state->count,
+          current_state->data - 1);
+        continue;
+        }
+      else
+        {
+        current_state->offset = state_offset = -state_offset;
+        }
+      }
+
+    /* Check for a duplicate state with the same count, and skip if found. */
+
+    for (j = 0; j < i; j++)
+      {
+      if (active_states[j].offset == state_offset &&
+          active_states[j].count == current_state->count)
+        {
+        DPRINTF(("%.*sDuplicate state: skipped\n", rlevel*2-2, SP));
+        goto NEXT_ACTIVE_STATE;
+        }
+      }
+
+    /* The state offset is the offset to the opcode */
+
+    code = start_code + state_offset;
+    codevalue = *code;
+    if (codevalue >= OP_BRA) codevalue = OP_BRA; /* All brackets are equal */
+
+    /* If this opcode is followed by an inline character, load it. It is
+    tempting to test for the presence of a subject character here, but that
+    is wrong, because sometimes zero repetitions of the subject are
+    permitted.
+
+    We also use this mechanism for opcodes such as OP_TYPEPLUS that take an
+    argument that is not a data character - but is always one byte long.
+    Unfortunately, we have to take special action to deal with  \P, \p, and
+    \X in this case. To keep the other cases fast, convert these ones to new
+    opcodes. */
+
+    if (coptable[codevalue] > 0)
+      {
+      dlen = 1;
+#ifdef SUPPORT_UTF8
+      if (utf8) { GETCHARLEN(d, (code + coptable[codevalue]), dlen); } else
+#endif  /* SUPPORT_UTF8 */
+      d = code[coptable[codevalue]];
+      if (codevalue >= OP_TYPESTAR)
+        {
+        if (d == OP_ANYBYTE) return PCRE_ERROR_DFA_UITEM;
+        if (d >= OP_NOTPROP)
+          codevalue += (d == OP_EXTUNI)? OP_EXTUNI_EXTRA : OP_PROP_EXTRA;
+        }
+      }
+    else
+      {
+      dlen = 0;         /* Not strictly necessary, but compilers moan */
+      d = -1;           /* if these variables are not set. */
+      }
+
+
+    /* Now process the individual opcodes */
+
+    switch (codevalue)
+      {
+
+/* ========================================================================== */
+      /* Reached a closing bracket. If not at the end of the pattern, carry
+      on with the next opcode. Otherwise, unless we have an empty string and
+      PCRE_NOTEMPTY is set, save the match data, shifting up all previous
+      matches so we always have the longest first. */
+
+      case OP_KET:
+      case OP_KETRMIN:
+      case OP_KETRMAX:
+      if (code != end_code)
+        {
+        ADD_ACTIVE(state_offset + 1 + LINK_SIZE, 0);
+        if (codevalue != OP_KET)
+          {
+          ADD_ACTIVE(state_offset - GET(code, 1), 0);
+          }
+        }
+      else if (ptr > current_subject || (md->moptions & PCRE_NOTEMPTY) == 0)
+        {
+        if (match_count < 0) match_count = (offsetcount >= 2)? 1 : 0;
+          else if (match_count > 0 && ++match_count * 2 >= offsetcount)
+            match_count = 0;
+        count = ((match_count == 0)? offsetcount : match_count * 2) - 2;
+        if (count > 0) memmove(offsets + 2, offsets, count * sizeof(int));
+        if (offsetcount >= 2)
+          {
+          offsets[0] = current_subject - start_subject;
+          offsets[1] = ptr - start_subject;
+          DPRINTF(("%.*sSet matched string = \"%.*s\"\n", rlevel*2-2, SP,
+            offsets[1] - offsets[0], current_subject));
+          }
+        if ((md->moptions & PCRE_DFA_SHORTEST) != 0)
+          {
+          DPRINTF(("%.*sEnd of internal_dfa_exec %d: returning %d\n"
+            "%.*s---------------------\n\n", rlevel*2-2, SP, rlevel,
+            match_count, rlevel*2-2, SP));
+          return match_count;
+          }
+        }
+      break;
+
+/* ========================================================================== */
+      /* These opcodes add to the current list of states without looking
+      at the current character. */
+
+      /*-----------------------------------------------------------------*/
+      case OP_ALT:
+      do { code += GET(code, 1); } while (*code == OP_ALT);
+      ADD_ACTIVE(code - start_code, 0);
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_BRA:
+      do
+        {
+        ADD_ACTIVE(code - start_code + 1 + LINK_SIZE, 0);
+        code += GET(code, 1);
+        }
+      while (*code == OP_ALT);
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_BRAZERO:
+      case OP_BRAMINZERO:
+      ADD_ACTIVE(state_offset + 1, 0);
+      code += 1 + GET(code, 2);
+      while (*code == OP_ALT) code += GET(code, 1);
+      ADD_ACTIVE(code - start_code + 1 + LINK_SIZE, 0);
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_BRANUMBER:
+      ADD_ACTIVE(state_offset + 1 + LINK_SIZE, 0);
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_CIRC:
+      if ((ptr == start_subject && (md->moptions & PCRE_NOTBOL) == 0) ||
+          ((ims & PCRE_MULTILINE) != 0 && ptr[-1] == NEWLINE))
+        { ADD_ACTIVE(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_EOD:
+      if (ptr >= end_subject) { ADD_ACTIVE(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_OPT:
+      ims = code[1];
+      ADD_ACTIVE(state_offset + 2, 0);
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_SOD:
+      if (ptr == start_subject) { ADD_ACTIVE(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_SOM:
+      if (ptr == start_subject + start_offset) { ADD_ACTIVE(state_offset + 1, 0); }
+      break;
+
+
+/* ========================================================================== */
+      /* These opcodes inspect the next subject character, and sometimes
+      the previous one as well, but do not have an argument. The variable
+      clen contains the length of the current character and is zero if we are
+      at the end of the subject. */
+
+      /*-----------------------------------------------------------------*/
+      case OP_ANY:
+      if (clen > 0 && (c != NEWLINE || (ims & PCRE_DOTALL) != 0))
+        { ADD_NEW(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_EODN:
+      if (clen == 0 || (c == NEWLINE && ptr + 1 == end_subject))
+        { ADD_ACTIVE(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_DOLL:
+      if ((md->moptions & PCRE_NOTEOL) == 0)
+        {
+        if (clen == 0 || (c == NEWLINE && (ptr + 1 == end_subject ||
+                                (ims & PCRE_MULTILINE) != 0)))
+          { ADD_ACTIVE(state_offset + 1, 0); }
+        }
+      else if (c == NEWLINE && (ims & PCRE_MULTILINE) != 0)
+        { ADD_ACTIVE(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+
+      case OP_DIGIT:
+      case OP_WHITESPACE:
+      case OP_WORDCHAR:
+      if (clen > 0 && c < 256 &&
+            ((ctypes[c] & toptable1[codevalue]) ^ toptable2[codevalue]) != 0)
+        { ADD_NEW(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_NOT_DIGIT:
+      case OP_NOT_WHITESPACE:
+      case OP_NOT_WORDCHAR:
+      if (clen > 0 && (c >= 256 ||
+            ((ctypes[c] & toptable1[codevalue]) ^ toptable2[codevalue]) != 0))
+        { ADD_NEW(state_offset + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_WORD_BOUNDARY:
+      case OP_NOT_WORD_BOUNDARY:
+        {
+        int left_word, right_word;
+
+        if (ptr > start_subject)
+          {
+          const uschar *temp = ptr - 1;
+#ifdef SUPPORT_UTF8
+          if (utf8) BACKCHAR(temp);
+#endif
+          GETCHARTEST(d, temp);
+          left_word = d < 256 && (ctypes[d] & ctype_word) != 0;
+          }
+        else left_word = 0;
+
+        if (clen > 0) right_word = c < 256 && (ctypes[c] & ctype_word) != 0;
+          else right_word = 0;
+
+        if ((left_word == right_word) == (codevalue == OP_NOT_WORD_BOUNDARY))
+          { ADD_ACTIVE(state_offset + 1, 0); }
+        }
+      break;
+
+
+#ifdef SUPPORT_UCP
+
+      /*-----------------------------------------------------------------*/
+      /* Check the next character by Unicode property. We will get here only
+      if the support is in the binary; otherwise a compile-time error occurs.
+      */
+
+      case OP_PROP:
+      case OP_NOTPROP:
+      if (clen > 0)
+        {
+        int rqdtype, category;
+        category = ucp_findchar(c, &chartype, &othercase);
+        rqdtype = code[1];
+        if (rqdtype >= 128)
+          {
+          if ((rqdtype - 128 == category) == (codevalue == OP_PROP))
+            { ADD_NEW(state_offset + 2, 0); }
+          }
+        else
+          {
+          if ((rqdtype == chartype) == (codevalue == OP_PROP))
+            { ADD_NEW(state_offset + 2, 0); }
+          }
+        }
+      break;
+#endif
+
+
+
+/* ========================================================================== */
+      /* These opcodes likewise inspect the subject character, but have an
+      argument that is not a data character. It is one of these opcodes:
+      OP_ANY, OP_DIGIT, OP_NOT_DIGIT, OP_WHITESPACE, OP_NOT_SPACE, OP_WORDCHAR,
+      OP_NOT_WORDCHAR. The value is loaded into d. */
+
+      case OP_TYPEPLUS:
+      case OP_TYPEMINPLUS:
+      count = current_state->count;  /* Already matched */
+      if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }
+      if (clen > 0)
+        {
+        if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||
+            (c < 256 &&
+              (d != OP_ANY || c != '\n' || (ims & PCRE_DOTALL) != 0) &&
+              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))
+          {
+          count++;
+          ADD_NEW(state_offset, count);
+          }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_TYPEQUERY:
+      case OP_TYPEMINQUERY:
+      ADD_ACTIVE(state_offset + 2, 0);
+      if (clen > 0)
+        {
+        if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||
+            (c < 256 &&
+              (d != OP_ANY || c != '\n' || (ims & PCRE_DOTALL) != 0) &&
+              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))
+          {
+          ADD_NEW(state_offset + 2, 0);
+          }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_TYPESTAR:
+      case OP_TYPEMINSTAR:
+      ADD_ACTIVE(state_offset + 2, 0);
+      if (clen > 0)
+        {
+        if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||
+            (c < 256 &&
+              (d != OP_ANY || c != '\n' || (ims & PCRE_DOTALL) != 0) &&
+              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))
+          {
+          ADD_NEW(state_offset, 0);
+          }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_TYPEEXACT:
+      case OP_TYPEUPTO:
+      case OP_TYPEMINUPTO:
+      if (codevalue != OP_TYPEEXACT)
+        { ADD_ACTIVE(state_offset + 4, 0); }
+      count = current_state->count;  /* Number already matched */
+      if (clen > 0)
+        {
+        if ((c >= 256 && d != OP_DIGIT && d != OP_WHITESPACE && d != OP_WORDCHAR) ||
+            (c < 256 &&
+              (d != OP_ANY || c != '\n' || (ims & PCRE_DOTALL) != 0) &&
+              ((ctypes[c] & toptable1[d]) ^ toptable2[d]) != 0))
+          {
+          if (++count >= GET2(code, 1))
+            { ADD_NEW(state_offset + 4, 0); }
+          else
+            { ADD_NEW(state_offset, count); }
+          }
+        }
+      break;
+
+/* ========================================================================== */
+      /* These are virtual opcodes that are used when something like
+      OP_TYPEPLUS has OP_PROP, OP_NOTPROP, or OP_EXTUNI as its argument. It
+      keeps the code above fast for the other cases. The argument is in the
+      d variable. */
+
+      case OP_PROP_EXTRA + OP_TYPEPLUS:
+      case OP_PROP_EXTRA + OP_TYPEMINPLUS:
+      count = current_state->count;           /* Already matched */
+      if (count > 0) { ADD_ACTIVE(state_offset + 3, 0); }
+      if (clen > 0)
+        {
+        int category = ucp_findchar(c, &chartype, &othercase);
+        int rqdtype = code[2];
+        if ((d == OP_PROP) ==
+            (rqdtype == ((rqdtype >= 128)? (category + 128) : chartype)))
+          { count++; ADD_NEW(state_offset, count); }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_EXTUNI_EXTRA + OP_TYPEPLUS:
+      case OP_EXTUNI_EXTRA + OP_TYPEMINPLUS:
+      count = current_state->count;  /* Already matched */
+      if (count > 0) { ADD_ACTIVE(state_offset + 2, 0); }
+      if (clen > 0 && ucp_findchar(c, &chartype, &othercase) != ucp_M)
+        {
+        const uschar *nptr = ptr + clen;
+        int ncount = 0;
+        while (nptr < end_subject)
+          {
+          int nd;
+          int ndlen = 1;
+          GETCHARLEN(nd, nptr, ndlen);
+          if (ucp_findchar(nd, &chartype, &othercase) != ucp_M) break;
+          ncount++;
+          nptr += ndlen;
+          }
+        count++;
+        ADD_NEW_DATA(-state_offset, count, ncount);
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_PROP_EXTRA + OP_TYPEQUERY:
+      case OP_PROP_EXTRA + OP_TYPEMINQUERY:
+      count = 3;
+      goto QS1;
+
+      case OP_PROP_EXTRA + OP_TYPESTAR:
+      case OP_PROP_EXTRA + OP_TYPEMINSTAR:
+      count = 0;
+
+      QS1:
+
+      ADD_ACTIVE(state_offset + 3, 0);
+      if (clen > 0)
+        {
+        int category = ucp_findchar(c, &chartype, &othercase);
+        int rqdtype = code[2];
+        if ((d == OP_PROP) ==
+            (rqdtype == ((rqdtype >= 128)? (category + 128) : chartype)))
+          { ADD_NEW(state_offset + count, 0); }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_EXTUNI_EXTRA + OP_TYPEQUERY:
+      case OP_EXTUNI_EXTRA + OP_TYPEMINQUERY:
+      count = 2;
+      goto QS2;
+
+      case OP_EXTUNI_EXTRA + OP_TYPESTAR:
+      case OP_EXTUNI_EXTRA + OP_TYPEMINSTAR:
+      count = 0;
+
+      QS2:
+
+      ADD_ACTIVE(state_offset + 2, 0);
+      if (clen > 0 && ucp_findchar(c, &chartype, &othercase) != ucp_M)
+        {
+        const uschar *nptr = ptr + clen;
+        int ncount = 0;
+        while (nptr < end_subject)
+          {
+          int nd;
+          int ndlen = 1;
+          GETCHARLEN(nd, nptr, ndlen);
+          if (ucp_findchar(nd, &chartype, &othercase) != ucp_M) break;
+          ncount++;
+          nptr += ndlen;
+          }
+        ADD_NEW_DATA(-(state_offset + count), 0, ncount);
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_PROP_EXTRA + OP_TYPEEXACT:
+      case OP_PROP_EXTRA + OP_TYPEUPTO:
+      case OP_PROP_EXTRA + OP_TYPEMINUPTO:
+      if (codevalue != OP_PROP_EXTRA + OP_TYPEEXACT)
+        { ADD_ACTIVE(state_offset + 5, 0); }
+      count = current_state->count;  /* Number already matched */
+      if (clen > 0)
+        {
+        int category = ucp_findchar(c, &chartype, &othercase);
+        int rqdtype = code[4];
+        if ((d == OP_PROP) ==
+            (rqdtype == ((rqdtype >= 128)? (category + 128) : chartype)))
+          {
+          if (++count >= GET2(code, 1))
+            { ADD_NEW(state_offset + 5, 0); }
+          else
+            { ADD_NEW(state_offset, count); }
+          }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_EXTUNI_EXTRA + OP_TYPEEXACT:
+      case OP_EXTUNI_EXTRA + OP_TYPEUPTO:
+      case OP_EXTUNI_EXTRA + OP_TYPEMINUPTO:
+      if (codevalue != OP_EXTUNI_EXTRA + OP_TYPEEXACT)
+        { ADD_ACTIVE(state_offset + 4, 0); }
+      count = current_state->count;  /* Number already matched */
+      if (clen > 0 && ucp_findchar(c, &chartype, &othercase) != ucp_M)
+        {
+        const uschar *nptr = ptr + clen;
+        int ncount = 0;
+        while (nptr < end_subject)
+          {
+          int nd;
+          int ndlen = 1;
+          GETCHARLEN(nd, nptr, ndlen);
+          if (ucp_findchar(nd, &chartype, &othercase) != ucp_M) break;
+          ncount++;
+          nptr += ndlen;
+          }
+        if (++count >= GET2(code, 1))
+          { ADD_NEW_DATA(-(state_offset + 4), 0, ncount); }
+        else
+          { ADD_NEW_DATA(-state_offset, count, ncount); }
+        }
+      break;
+
+/* ========================================================================== */
+      /* These opcodes are followed by a character that is usually compared
+      to the current subject character; it is loaded into d. We still get
+      here even if there is no subject character, because in some cases zero
+      repetitions are permitted. */
+
+      /*-----------------------------------------------------------------*/
+      case OP_CHAR:
+      if (clen > 0 && c == d) { ADD_NEW(state_offset + dlen + 1, 0); }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_CHARNC:
+      if (clen == 0) break;
+
+#ifdef SUPPORT_UTF8
+      if (utf8)
+        {
+        if (c == d) { ADD_NEW(state_offset + dlen + 1, 0); } else
+          {
+          if (c < 128) othercase = fcc[c]; else
+
+          /* If we have Unicode property support, we can use it to test the
+          other case of the character, if there is one. The result of
+          ucp_findchar() is < 0 if the char isn't found, and othercase is
+          returned as zero if there isn't another case. */
+
+#ifdef SUPPORT_UCP
+          if (ucp_findchar(c, &chartype, &othercase) < 0)
+#endif
+            othercase = -1;
+
+          if (d == othercase) { ADD_NEW(state_offset + dlen + 1, 0); }
+          }
+        }
+      else
+#endif  /* SUPPORT_UTF8 */
+
+      /* Non-UTF-8 mode */
+        {
+        if (lcc[c] == lcc[d]) { ADD_NEW(state_offset + 2, 0); }
+        }
+      break;
+
+
+#ifdef SUPPORT_UCP
+      /*-----------------------------------------------------------------*/
+      /* This is a tricky one because it can match more than one character.
+      Find out how many characters to skip, and then set up a negative state
+      to wait for them to pass before continuing. */
+
+      case OP_EXTUNI:
+      if (clen > 0 && ucp_findchar(c, &chartype, &othercase) != ucp_M)
+        {
+        const uschar *nptr = ptr + clen;
+        int ncount = 0;
+        while (nptr < end_subject)
+          {
+          int nclen = 1;
+          GETCHARLEN(c, nptr, nclen);
+          if (ucp_findchar(c, &chartype, &othercase) != ucp_M) break;
+          ncount++;
+          nptr += nclen;
+          }
+        ADD_NEW_DATA(-(state_offset + 1), 0, ncount);
+        }
+      break;
+#endif
+
+      /*-----------------------------------------------------------------*/
+      /* Match a negated single character. This is only used for one-byte
+      characters, that is, we know that d < 256. The character we are
+      checking (c) can be multibyte. */
+
+      case OP_NOT:
+      if (clen > 0)
+        {
+        int otherd = ((ims & PCRE_CASELESS) != 0)? fcc[d] : d;
+        if (c != d && c != otherd) { ADD_NEW(state_offset + dlen + 1, 0); }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_PLUS:
+      case OP_MINPLUS:
+      case OP_NOTPLUS:
+      case OP_NOTMINPLUS:
+      count = current_state->count;  /* Already matched */
+      if (count > 0) { ADD_ACTIVE(state_offset + dlen + 1, 0); }
+      if (clen > 0)
+        {
+        int otherd = -1;
+        if ((ims & PCRE_CASELESS) != 0)
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && c >= 128)
+            {
+#ifdef SUPPORT_UCP
+            if (ucp_findchar(d, &chartype, &otherd) < 0) otherd = -1;
+#endif  /* SUPPORT_UCP */
+            }
+          else
+#endif  /* SUPPORT_UTF8 */
+          otherd = fcc[d];
+          }
+        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))
+          { count++; ADD_NEW(state_offset, count); }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_QUERY:
+      case OP_MINQUERY:
+      case OP_NOTQUERY:
+      case OP_NOTMINQUERY:
+      ADD_ACTIVE(state_offset + dlen + 1, 0);
+      if (clen > 0)
+        {
+        int otherd = -1;
+        if ((ims && PCRE_CASELESS) != 0)
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && c >= 128)
+            {
+#ifdef SUPPORT_UCP
+            if (ucp_findchar(c, &chartype, &otherd) < 0) otherd = -1;
+#endif  /* SUPPORT_UCP */
+            }
+          else
+#endif  /* SUPPORT_UTF8 */
+          otherd = fcc[d];
+          }
+        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))
+          { ADD_NEW(state_offset + dlen + 1, 0); }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_STAR:
+      case OP_MINSTAR:
+      case OP_NOTSTAR:
+      case OP_NOTMINSTAR:
+      ADD_ACTIVE(state_offset + dlen + 1, 0);
+      if (clen > 0)
+        {
+        int otherd = -1;
+        if ((ims && PCRE_CASELESS) != 0)
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && c >= 128)
+            {
+#ifdef SUPPORT_UCP
+            if (ucp_findchar(c, &chartype, &otherd) < 0) otherd = -1;
+#endif  /* SUPPORT_UCP */
+            }
+          else
+#endif  /* SUPPORT_UTF8 */
+          otherd = fcc[d];
+          }
+        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))
+          { ADD_NEW(state_offset, 0); }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_EXACT:
+      case OP_UPTO:
+      case OP_MINUPTO:
+      case OP_NOTEXACT:
+      case OP_NOTUPTO:
+      case OP_NOTMINUPTO:
+      if (codevalue != OP_EXACT && codevalue != OP_NOTEXACT)
+        { ADD_ACTIVE(state_offset + dlen + 3, 0); }
+      count = current_state->count;  /* Number already matched */
+      if (clen > 0)
+        {
+        int otherd = -1;
+        if ((ims & PCRE_CASELESS) != 0)
+          {
+#ifdef SUPPORT_UTF8
+          if (utf8 && c >= 128)
+            {
+#ifdef SUPPORT_UCP
+            if (ucp_findchar(d, &chartype, &otherd) < 0) otherd = -1;
+#endif  /* SUPPORT_UCP */
+            }
+          else
+#endif  /* SUPPORT_UTF8 */
+          otherd = fcc[d];
+          }
+        if ((c == d || c == otherd) == (codevalue < OP_NOTSTAR))
+          {
+          if (++count >= GET2(code, 1))
+            { ADD_NEW(state_offset + dlen + 3, 0); }
+          else
+            { ADD_NEW(state_offset, count); }
+          }
+        }
+      break;
+
+
+/* ========================================================================== */
+      /* These are the class-handling opcodes */
+
+      case OP_CLASS:
+      case OP_NCLASS:
+      case OP_XCLASS:
+        {
+        BOOL isinclass = FALSE;
+        int next_state_offset;
+        const uschar *ecode;
+
+        /* For a simple class, there is always just a 32-byte table, and we
+        can set isinclass from it. */
+
+        if (codevalue != OP_XCLASS)
+          {
+          ecode = code + 33;
+          if (clen > 0)
+            {
+            isinclass = (c > 255)? (codevalue == OP_NCLASS) :
+              ((code[1 + c/8] & (1 << (c&7))) != 0);
+            }
+          }
+
+        /* An extended class may have a table or a list of single characters,
+        ranges, or both, and it may be positive or negative. There's a
+        function that sorts all this out. */
+
+        else
+         {
+         ecode = code + GET(code, 1);
+         if (clen > 0) isinclass = _pcre_xclass(c, code + 1 + LINK_SIZE);
+         }
+
+        /* At this point, isinclass is set for all kinds of class, and ecode
+        points to the byte after the end of the class. If there is a
+        quantifier, this is where it will be. */
+
+        next_state_offset = ecode - start_code;
+
+        switch (*ecode)
+          {
+          case OP_CRSTAR:
+          case OP_CRMINSTAR:
+          ADD_ACTIVE(next_state_offset + 1, 0);
+          if (isinclass) { ADD_NEW(state_offset, 0); }
+          break;
+
+          case OP_CRPLUS:
+          case OP_CRMINPLUS:
+          count = current_state->count;  /* Already matched */
+          if (count > 0) { ADD_ACTIVE(next_state_offset + 1, 0); }
+          if (isinclass) { count++; ADD_NEW(state_offset, count); }
+          break;
+
+          case OP_CRQUERY:
+          case OP_CRMINQUERY:
+          ADD_ACTIVE(next_state_offset + 1, 0);
+          if (isinclass) { ADD_NEW(next_state_offset + 1, 0); }
+          break;
+
+          case OP_CRRANGE:
+          case OP_CRMINRANGE:
+          count = current_state->count;  /* Already matched */
+          if (count >= GET2(ecode, 1))
+            { ADD_ACTIVE(next_state_offset + 5, 0); }
+          if (isinclass)
+            {
+            if (++count >= GET2(ecode, 3))
+              { ADD_NEW(next_state_offset + 5, 0); }
+            else
+              { ADD_NEW(state_offset, count); }
+            }
+          break;
+
+          default:
+          if (isinclass) { ADD_NEW(next_state_offset, 0); }
+          break;
+          }
+        }
+      break;
+
+/* ========================================================================== */
+      /* These are the opcodes for fancy brackets of various kinds. We have
+      to use recursion in order to handle them. */
+
+      case OP_ASSERT:
+      case OP_ASSERT_NOT:
+      case OP_ASSERTBACK:
+      case OP_ASSERTBACK_NOT:
+        {
+        int rc;
+        int local_offsets[2];
+        int local_workspace[1000];
+        const uschar *endasscode = code + GET(code, 1);
+
+        while (*endasscode == OP_ALT) endasscode += GET(endasscode, 1);
+
+        rc = internal_dfa_exec(
+          md,                                   /* static match data */
+          code,                                 /* this subexpression's code */
+          ptr,                                  /* where we currently are */
+          ptr - start_subject,                  /* start offset */
+          local_offsets,                        /* offset vector */
+          sizeof(local_offsets)/sizeof(int),    /* size of same */
+          local_workspace,                      /* workspace vector */
+          sizeof(local_workspace)/sizeof(int),  /* size of same */
+          ims,                                  /* the current ims flags */
+          rlevel,                               /* function recursion level */
+          recursing);                           /* pass on regex recursion */
+
+        if ((rc >= 0) == (codevalue == OP_ASSERT || codevalue == OP_ASSERTBACK))
+            { ADD_ACTIVE(endasscode + LINK_SIZE + 1 - start_code, 0); }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_COND:
+        {
+        int local_offsets[1000];
+        int local_workspace[1000];
+        int condcode = code[LINK_SIZE+1];
+
+        /* The only supported version of OP_CREF is for the value 0xffff, which
+        means "test if in a recursion". */
+
+        if (condcode == OP_CREF)
+          {
+          int value = GET2(code, LINK_SIZE+2);
+          if (value != 0xffff) return PCRE_ERROR_DFA_UCOND;
+          if (recursing > 0) { ADD_ACTIVE(state_offset + LINK_SIZE + 4, 0); }
+            else { ADD_ACTIVE(state_offset + GET(code, 1) + LINK_SIZE + 1, 0); }
+          }
+
+        /* Otherwise, the condition is an assertion */
+
+        else
+          {
+          int rc;
+          const uschar *asscode = code + LINK_SIZE + 1;
+          const uschar *endasscode = asscode + GET(asscode, 1);
+
+          while (*endasscode == OP_ALT) endasscode += GET(endasscode, 1);
+
+          rc = internal_dfa_exec(
+            md,                                   /* fixed match data */
+            asscode,                              /* this subexpression's code */
+            ptr,                                  /* where we currently are */
+            ptr - start_subject,                  /* start offset */
+            local_offsets,                        /* offset vector */
+            sizeof(local_offsets)/sizeof(int),    /* size of same */
+            local_workspace,                      /* workspace vector */
+            sizeof(local_workspace)/sizeof(int),  /* size of same */
+            ims,                                  /* the current ims flags */
+            rlevel,                               /* function recursion level */
+            recursing);                           /* pass on regex recursion */
+
+          if ((rc >= 0) ==
+                (condcode == OP_ASSERT || condcode == OP_ASSERTBACK))
+            { ADD_ACTIVE(endasscode + LINK_SIZE + 1 - start_code, 0); }
+          else
+            { ADD_ACTIVE(state_offset + GET(code, 1) + LINK_SIZE + 1, 0); }
+          }
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_RECURSE:
+        {
+        int local_offsets[1000];
+        int local_workspace[1000];
+        int rc;
+
+        DPRINTF(("%.*sStarting regex recursion %d\n", rlevel*2-2, SP,
+          recursing + 1));
+
+        rc = internal_dfa_exec(
+          md,                                   /* fixed match data */
+          start_code + GET(code, 1),            /* this subexpression's code */
+          ptr,                                  /* where we currently are */
+          ptr - start_subject,                  /* start offset */
+          local_offsets,                        /* offset vector */
+          sizeof(local_offsets)/sizeof(int),    /* size of same */
+          local_workspace,                      /* workspace vector */
+          sizeof(local_workspace)/sizeof(int),  /* size of same */
+          ims,                                  /* the current ims flags */
+          rlevel,                               /* function recursion level */
+          recursing + 1);                       /* regex recurse level */
+
+        DPRINTF(("%.*sReturn from regex recursion %d: rc=%d\n", rlevel*2-2, SP,
+          recursing + 1, rc));
+
+        /* Ran out of internal offsets */
+
+        if (rc == 0) return PCRE_ERROR_DFA_RECURSE;
+
+        /* For each successful matched substring, set up the next state with a
+        count of characters to skip before trying it. Note that the count is in
+        characters, not bytes. */
+
+        if (rc > 0)
+          {
+          for (rc = rc*2 - 2; rc >= 0; rc -= 2)
+            {
+            const uschar *p = start_subject + local_offsets[rc];
+            const uschar *pp = start_subject + local_offsets[rc+1];
+            int charcount = local_offsets[rc+1] - local_offsets[rc];
+            while (p < pp) if ((*p++ & 0xc0) == 0x80) charcount--;
+            if (charcount > 0)
+              {
+              ADD_NEW_DATA(-(state_offset + LINK_SIZE + 1), 0, (charcount - 1));
+              }
+            else
+              {
+              ADD_ACTIVE(state_offset + LINK_SIZE + 1, 0);
+              }
+            }
+          }
+        else if (rc != PCRE_ERROR_NOMATCH) return rc;
+        }
+      break;
+
+      /*-----------------------------------------------------------------*/
+      case OP_ONCE:
+        {
+        const uschar *endcode;
+        int local_offsets[2];
+        int local_workspace[1000];
+
+        int rc = internal_dfa_exec(
+          md,                                   /* fixed match data */
+          code,                                 /* this subexpression's code */
+          ptr,                                  /* where we currently are */
+          ptr - start_subject,                  /* start offset */
+          local_offsets,                        /* offset vector */
+          sizeof(local_offsets)/sizeof(int),    /* size of same */
+          local_workspace,                      /* workspace vector */
+          sizeof(local_workspace)/sizeof(int),  /* size of same */
+          ims,                                  /* the current ims flags */
+          rlevel,                               /* function recursion level */
+          recursing);                           /* pass on regex recursion */
+
+        if (rc >= 0)
+          {
+          const uschar *end_subpattern = code;
+          int charcount = local_offsets[1] - local_offsets[0];
+          int next_state_offset, repeat_state_offset;
+          BOOL is_repeated;
+
+          do { end_subpattern += GET(end_subpattern, 1); }
+            while (*end_subpattern == OP_ALT);
+          next_state_offset = end_subpattern - start_code + LINK_SIZE + 1;
+
+          /* If the end of this subpattern is KETRMAX or KETRMIN, we must
+          arrange for the repeat state also to be added to the relevant list.
+          Calculate the offset, or set -1 for no repeat. */
+
+          repeat_state_offset = (*end_subpattern == OP_KETRMAX ||
+                                 *end_subpattern == OP_KETRMIN)?
+            end_subpattern - start_code - GET(end_subpattern, 1) : -1;
+
+          /* If we have matched an empty string, add the next state at the
+          current character pointer. This is important so that the duplicate
+          checking kicks in, which is what breaks infinite loops that match an
+          empty string. */
+
+          if (charcount == 0)
+            {
+            ADD_ACTIVE(next_state_offset, 0);
+            }
+
+          /* Optimization: if there are no more active states, and there
+          are no new states yet set up, then skip over the subject string
+          right here, to save looping. Otherwise, set up the new state to swing
+          into action when the end of the substring is reached. */
+
+          else if (i + 1 >= active_count && new_count == 0)
+            {
+            ptr += charcount;
+            clen = 0;
+            ADD_NEW(next_state_offset, 0);
+
+            /* If we are adding a repeat state at the new character position,
+            we must fudge things so that it is the only current state.
+            Otherwise, it might be a duplicate of one we processed before, and
+            that would cause it to be skipped. */
+
+            if (repeat_state_offset >= 0)
+              {
+              next_active_state = active_states;
+              active_count = 0;
+              i = -1;
+              ADD_ACTIVE(repeat_state_offset, 0);
+              }
+            }
+          else
+            {
+            const uschar *p = start_subject + local_offsets[0];
+            const uschar *pp = start_subject + local_offsets[1];
+            while (p < pp) if ((*p++ & 0xc0) == 0x80) charcount--;
+            ADD_NEW_DATA(-next_state_offset, 0, (charcount - 1));
+            if (repeat_state_offset >= 0)
+              { ADD_NEW_DATA(-repeat_state_offset, 0, (charcount - 1)); }
+            }
+
+          }
+        else if (rc != PCRE_ERROR_NOMATCH) return rc;
+        }
+      break;
+
+
+/* ========================================================================== */
+      /* Handle callouts */
+
+      case OP_CALLOUT:
+      if (pcre_callout != NULL)
+        {
+        int rrc;
+        pcre_callout_block cb;
+        cb.version          = 1;   /* Version 1 of the callout block */
+        cb.callout_number   = code[1];
+        cb.offset_vector    = offsets;
+        cb.subject          = (char *)start_subject;
+        cb.subject_length   = end_subject - start_subject;
+        cb.start_match      = current_subject - start_subject;
+        cb.current_position = ptr - start_subject;
+        cb.pattern_position = GET(code, 2);
+        cb.next_item_length = GET(code, 2 + LINK_SIZE);
+        cb.capture_top      = 1;
+        cb.capture_last     = -1;
+        cb.callout_data     = md->callout_data;
+        if ((rrc = (*pcre_callout)(&cb)) < 0) return rrc;   /* Abandon */
+        if (rrc == 0) { ADD_ACTIVE(state_offset + 2 + 2*LINK_SIZE, 0); }
+        }
+      break;
+
+
+/* ========================================================================== */
+      default:        /* Unsupported opcode */
+      return PCRE_ERROR_DFA_UITEM;
+      }
+
+    NEXT_ACTIVE_STATE: continue;
+
+    }      /* End of loop scanning active states */
+
+  /* We have finished the processing at the current subject character. If no
+  new states have been set for the next character, we have found all the
+  matches that we are going to find. If we are at the top level and partial
+  matching has been requested, check for appropriate conditions. */
+
+  if (new_count <= 0)
+    {
+    if (match_count < 0 &&                     /* No matches found */
+        rlevel == 1 &&                         /* Top level match function */
+        (md->moptions & PCRE_PARTIAL) != 0 &&  /* Want partial matching */
+        ptr >= end_subject &&                  /* Reached end of subject */
+        ptr > current_subject)                 /* Matched non-empty string */
+      {
+      if (offsetcount >= 2)
+        {
+        offsets[0] = current_subject - start_subject;
+        offsets[1] = end_subject - start_subject;
+        }
+      match_count = PCRE_ERROR_PARTIAL;
+      }
+
+    DPRINTF(("%.*sEnd of internal_dfa_exec %d: returning %d\n"
+      "%.*s---------------------\n\n", rlevel*2-2, SP, rlevel, match_count,
+      rlevel*2-2, SP));
+    return match_count;
+    }
+
+  /* One or more states are active for the next character. */
+
+  ptr += clen;    /* Advance to next subject character */
+  }               /* Loop to move along the subject string */
+
+/* Control never gets here, but we must keep the compiler happy. */
+
+DPRINTF(("%.*s+++ Unexpected end of internal_dfa_exec %d +++\n"
+  "%.*s---------------------\n\n", rlevel*2-2, SP, rlevel, rlevel*2-2, SP));
+return PCRE_ERROR_NOMATCH;
+}
+
+
+
+
+/*************************************************
+*    Execute a Regular Expression - DFA engine   *
+*************************************************/
+
+/* This external function applies a compiled re to a subject string using a DFA
+engine. This function calls the internal function multiple times if the pattern
+is not anchored.
+
+Arguments:
+  argument_re     points to the compiled expression
+  extra_data      points to extra data or is NULL (not currently used)
+  subject         points to the subject string
+  length          length of subject string (may contain binary zeros)
+  start_offset    where to start in the subject string
+  options         option bits
+  offsets         vector of match offsets
+  offsetcount     size of same
+  workspace       workspace vector
+  wscount         size of same
+
+Returns:          > 0 => number of match offset pairs placed in offsets
+                  = 0 => offsets overflowed; longest matches are present
+                   -1 => failed to match
+                 < -1 => some kind of unexpected problem
+*/
+
+EXPORT int
+pcre_dfa_exec(const pcre *argument_re, const pcre_extra *extra_data,
+  const char *subject, int length, int start_offset, int options, int *offsets,
+  int offsetcount, int *workspace, int wscount)
+{
+real_pcre *re = (real_pcre *)argument_re;
+dfa_match_data match_block;
+BOOL utf8, anchored, startline, firstline;
+const uschar *current_subject, *end_subject, *lcc;
+
+pcre_study_data internal_study;
+const pcre_study_data *study = NULL;
+real_pcre internal_re;
+
+const uschar *req_byte_ptr;
+const uschar *start_bits = NULL;
+BOOL first_byte_caseless = FALSE;
+BOOL req_byte_caseless = FALSE;
+int first_byte = -1;
+int req_byte = -1;
+int req_byte2 = -1;
+
+/* Plausibility checks */
+
+if ((options & ~PUBLIC_DFA_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
+if (re == NULL || subject == NULL || workspace == NULL ||
+   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
+if (offsetcount < 0) return PCRE_ERROR_BADCOUNT;
+if (wscount < 20) return PCRE_ERROR_DFA_WSSIZE;
+
+/* We need to find the pointer to any study data before we test for byte
+flipping, so we scan the extra_data block first. This may set two fields in the
+match block, so we must initialize them beforehand. However, the other fields
+in the match block must not be set until after the byte flipping. */
+
+match_block.tables = re->tables;
+match_block.callout_data = NULL;
+
+if (extra_data != NULL)
+  {
+  unsigned int flags = extra_data->flags;
+  if ((flags & PCRE_EXTRA_STUDY_DATA) != 0)
+    study = (const pcre_study_data *)extra_data->study_data;
+  if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0) return PCRE_ERROR_DFA_UMLIMIT;
+  if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)
+    match_block.callout_data = extra_data->callout_data;
+  if ((flags & PCRE_EXTRA_TABLES) != 0)
+    match_block.tables = extra_data->tables;
+  }
+
+/* Check that the first field in the block is the magic number. If it is not,
+test for a regex that was compiled on a host of opposite endianness. If this is
+the case, flipped values are put in internal_re and internal_study if there was
+study data too. */
+
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  re = _pcre_try_flipped(re, &internal_re, study, &internal_study);
+  if (re == NULL) return PCRE_ERROR_BADMAGIC;
+  if (study != NULL) study = &internal_study;
+  }
+
+/* Set some local values */
+
+current_subject = (const unsigned char *)subject + start_offset;
+end_subject = (const unsigned char *)subject + length;
+req_byte_ptr = current_subject - 1;
+
+utf8 = (re->options & PCRE_UTF8) != 0;
+anchored = (options & PCRE_ANCHORED) != 0 || (re->options & PCRE_ANCHORED) != 0;
+
+/* The remaining fixed data for passing around. */
+
+match_block.start_code = (const uschar *)argument_re +
+    re->name_table_offset + re->name_count * re->name_entry_size;
+match_block.start_subject = (const unsigned char *)subject;
+match_block.end_subject = end_subject;
+match_block.moptions = options;
+match_block.poptions = re->options;
+
+/* Check a UTF-8 string if required. Unfortunately there's no way of passing
+back the character offset. */
+
+#ifdef SUPPORT_UTF8
+if (utf8 && (options & PCRE_NO_UTF8_CHECK) == 0)
+  {
+  if (_pcre_valid_utf8((uschar *)subject, length) >= 0)
+    return PCRE_ERROR_BADUTF8;
+  if (start_offset > 0 && start_offset < length)
+    {
+    int tb = ((uschar *)subject)[start_offset];
+    if (tb > 127)
+      {
+      tb &= 0xc0;
+      if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET;
+      }
+    }
+  }
+#endif
+
+/* If the exec call supplied NULL for tables, use the inbuilt ones. This
+is a feature that makes it possible to save compiled regex and re-use them
+in other programs later. */
+
+if (match_block.tables == NULL) match_block.tables = _pcre_default_tables;
+
+/* The lower casing table and the "must be at the start of a line" flag are
+used in a loop when finding where to start. */
+
+lcc = match_block.tables + lcc_offset;
+startline = (re->options & PCRE_STARTLINE) != 0;
+firstline = (re->options & PCRE_FIRSTLINE) != 0;
+
+/* Set up the first character to match, if available. The first_byte value is
+never set for an anchored regular expression, but the anchoring may be forced
+at run time, so we have to test for anchoring. The first char may be unset for
+an unanchored pattern, of course. If there's no first char and the pattern was
+studied, there may be a bitmap of possible first characters. */
+
+if (!anchored)
+  {
+  if ((re->options & PCRE_FIRSTSET) != 0)
+    {
+    first_byte = re->first_byte & 255;
+    if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE)
+      first_byte = lcc[first_byte];
+    }
+  else
+    {
+    if (startline && study != NULL &&
+         (study->options & PCRE_STUDY_MAPPED) != 0)
+      start_bits = study->start_bits;
+    }
+  }
+
+/* For anchored or unanchored matches, there may be a "last known required
+character" set. */
+
+if ((re->options & PCRE_REQCHSET) != 0)
+  {
+  req_byte = re->req_byte & 255;
+  req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0;
+  req_byte2 = (match_block.tables + fcc_offset)[req_byte];  /* case flipped */
+  }
+
+/* Call the main matching function, looping for a non-anchored regex after a
+failed match. Unless restarting, optimize by moving to the first match
+character if possible, when not anchored. Then unless wanting a partial match,
+check for a required later character. */
+
+for (;;)
+  {
+  int rc;
+
+  if ((options & PCRE_DFA_RESTART) == 0)
+    {
+    const uschar *save_end_subject = end_subject;
+
+    /* Advance to a unique first char if possible. If firstline is TRUE, the
+    start of the match is constrained to the first line of a multiline string.
+    Implement this by temporarily adjusting end_subject so that we stop scanning
+    at a newline. If the match fails at the newline, later code breaks this loop.
+    */
+
+    if (firstline)
+      {
+      const uschar *t = current_subject;
+      while (t < save_end_subject && *t != '\n') t++;
+      end_subject = t;
+      }
+
+    if (first_byte >= 0)
+      {
+      if (first_byte_caseless)
+        while (current_subject < end_subject &&
+               lcc[*current_subject] != first_byte)
+          current_subject++;
+      else
+        while (current_subject < end_subject && *current_subject != first_byte)
+          current_subject++;
+      }
+
+    /* Or to just after \n for a multiline match if possible */
+
+    else if (startline)
+      {
+      if (current_subject > match_block.start_subject + start_offset)
+        {
+        while (current_subject < end_subject && current_subject[-1] != NEWLINE)
+          current_subject++;
+        }
+      }
+
+    /* Or to a non-unique first char after study */
+
+    else if (start_bits != NULL)
+      {
+      while (current_subject < end_subject)
+        {
+        register unsigned int c = *current_subject;
+        if ((start_bits[c/8] & (1 << (c&7))) == 0) current_subject++;
+          else break;
+        }
+      }
+
+    /* Restore fudged end_subject */
+
+    end_subject = save_end_subject;
+    }
+
+  /* If req_byte is set, we know that that character must appear in the subject
+  for the match to succeed. If the first character is set, req_byte must be
+  later in the subject; otherwise the test starts at the match point. This
+  optimization can save a huge amount of work in patterns with nested unlimited
+  repeats that aren't going to match. Writing separate code for cased/caseless
+  versions makes it go faster, as does using an autoincrement and backing off
+  on a match.
+
+  HOWEVER: when the subject string is very, very long, searching to its end can
+  take a long time, and give bad performance on quite ordinary patterns. This
+  showed up when somebody was matching /^C/ on a 32-megabyte string... so we
+  don't do this when the string is sufficiently long.
+
+  ALSO: this processing is disabled when partial matching is requested.
+  */
+
+  if (req_byte >= 0 &&
+      end_subject - current_subject < REQ_BYTE_MAX &&
+      (options & PCRE_PARTIAL) == 0)
+    {
+    register const uschar *p = current_subject + ((first_byte >= 0)? 1 : 0);
+
+    /* We don't need to repeat the search if we haven't yet reached the
+    place we found it at last time. */
+
+    if (p > req_byte_ptr)
+      {
+      if (req_byte_caseless)
+        {
+        while (p < end_subject)
+          {
+          register int pp = *p++;
+          if (pp == req_byte || pp == req_byte2) { p--; break; }
+          }
+        }
+      else
+        {
+        while (p < end_subject)
+          {
+          if (*p++ == req_byte) { p--; break; }
+          }
+        }
+
+      /* If we can't find the required character, break the matching loop,
+      which will cause a return or PCRE_ERROR_NOMATCH. */
+
+      if (p >= end_subject) break;
+
+      /* If we have found the required character, save the point where we
+      found it, so that we don't search again next time round the loop if
+      the start hasn't passed this character yet. */
+
+      req_byte_ptr = p;
+      }
+    }
+
+  /* OK, now we can do the business */
+
+  rc = internal_dfa_exec(
+    &match_block,                              /* fixed match data */
+    match_block.start_code,                    /* this subexpression's code */
+    current_subject,                           /* where we currently are */
+    start_offset,                              /* start offset in subject */
+    offsets,                                   /* offset vector */
+    offsetcount,                               /* size of same */
+    workspace,                                 /* workspace vector */
+    wscount,                                   /* size of same */
+    re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL), /* ims flags */
+    0,                                         /* function recurse level */
+    0);                                        /* regex recurse level */
+
+  /* Anything other than "no match" means we are done, always; otherwise, carry
+  on only if not anchored. */
+
+  if (rc != PCRE_ERROR_NOMATCH || anchored) return rc;
+
+  /* Advance to the next subject character unless we are at the end of a line
+  and firstline is set. */
+
+  if (firstline && *current_subject == NEWLINE) break;
+  current_subject++;
+
+#ifdef SUPPORT_UTF8
+  if (utf8)
+    {
+    while (current_subject < end_subject && (*current_subject & 0xc0) == 0x80)
+      current_subject++;
+    }
+#endif
+
+  if (current_subject > end_subject) break;
+  }
+
+return PCRE_ERROR_NOMATCH;
+}
+
+/* End of pcre_dfa_exec.c */
diff -Nurp tin-1.7.8/pcre/pcre_exec.c tin-1.7.9/pcre/pcre_exec.c
--- tin-1.7.8/pcre/pcre_exec.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_exec.c	2005-06-28 10:31:26.311163749 +0200
@@ -0,0 +1,3632 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains pcre_exec(), the externally visible function that does
+pattern matching using an NFA algorithm, trying to mimic Perl as closely as
+possible. There are also some static supporting functions. */
+
+
+#include "pcre_internal.h"
+
+
+/* Structure for building a chain of data that actually lives on the
+stack, for holding the values of the subject pointer at the start of each
+subpattern, so as to detect when an empty string has been matched by a
+subpattern - to break infinite loops. When NO_RECURSE is set, these blocks
+are on the heap, not on the stack. */
+
+typedef struct eptrblock {
+  struct eptrblock *epb_prev;
+  const uschar *epb_saved_eptr;
+} eptrblock;
+
+/* Flag bits for the match() function */
+
+#define match_condassert   0x01    /* Called to check a condition assertion */
+#define match_isgroup      0x02    /* Set if start of bracketed group */
+
+/* Non-error returns from the match() function. Error returns are externally
+defined PCRE_ERROR_xxx codes, which are all negative. */
+
+#define MATCH_MATCH        1
+#define MATCH_NOMATCH      0
+
+/* Maximum number of ints of offset to save on the stack for recursive calls.
+If the offset vector is bigger, malloc is used. This should be a multiple of 3,
+because the offset vector is always a multiple of 3 long. */
+
+#define REC_STACK_SAVE_MAX 30
+
+/* Min and max values for the common repeats; for the maxima, 0 => infinity */
+
+static const char rep_min[] = { 0, 0, 1, 1, 0, 0 };
+static const char rep_max[] = { 0, 0, 0, 0, 1, 1 };
+
+
+
+#ifdef DEBUG
+/*************************************************
+*        Debugging function to print chars       *
+*************************************************/
+
+/* Print a sequence of chars in printable format, stopping at the end of the
+subject if the requested.
+
+Arguments:
+  p           points to characters
+  length      number to print
+  is_subject  TRUE if printing from within md->start_subject
+  md          pointer to matching data block, if is_subject is TRUE
+
+Returns:     nothing
+*/
+
+static void
+pchars(const uschar *p, int length, BOOL is_subject, match_data *md)
+{
+int c;
+if (is_subject && length > md->end_subject - p) length = md->end_subject - p;
+while (length-- > 0)
+  if (isprint(c = *(p++))) printf("%c", c); else printf("\\x%02x", c);
+}
+#endif
+
+
+
+/*************************************************
+*          Match a back-reference                *
+*************************************************/
+
+/* If a back reference hasn't been set, the length that is passed is greater
+than the number of characters left in the string, so the match fails.
+
+Arguments:
+  offset      index into the offset vector
+  eptr        points into the subject
+  length      length to be matched
+  md          points to match data block
+  ims         the ims flags
+
+Returns:      TRUE if matched
+*/
+
+static BOOL
+match_ref(int offset, register const uschar *eptr, int length, match_data *md,
+  unsigned long int ims)
+{
+const uschar *p = md->start_subject + md->offset_vector[offset];
+
+#ifdef DEBUG
+if (eptr >= md->end_subject)
+  printf("matching subject <null>");
+else
+  {
+  printf("matching subject ");
+  pchars(eptr, length, TRUE, md);
+  }
+printf(" against backref ");
+pchars(p, length, FALSE, md);
+printf("\n");
+#endif
+
+/* Always fail if not enough characters left */
+
+if (length > md->end_subject - eptr) return FALSE;
+
+/* Separate the caselesss case for speed */
+
+if ((ims & PCRE_CASELESS) != 0)
+  {
+  while (length-- > 0)
+    if (md->lcc[*p++] != md->lcc[*eptr++]) return FALSE;
+  }
+else
+  { while (length-- > 0) if (*p++ != *eptr++) return FALSE; }
+
+return TRUE;
+}
+
+
+
+/***************************************************************************
+****************************************************************************
+                   RECURSION IN THE match() FUNCTION
+
+The match() function is highly recursive. Some regular expressions can cause
+it to recurse thousands of times. I was writing for Unix, so I just let it
+call itself recursively. This uses the stack for saving everything that has
+to be saved for a recursive call. On Unix, the stack can be large, and this
+works fine.
+
+It turns out that on non-Unix systems there are problems with programs that
+use a lot of stack. (This despite the fact that every last chip has oodles
+of memory these days, and techniques for extending the stack have been known
+for decades.) So....
+
+There is a fudge, triggered by defining NO_RECURSE, which avoids recursive
+calls by keeping local variables that need to be preserved in blocks of memory
+obtained from malloc instead instead of on the stack. Macros are used to
+achieve this so that the actual code doesn't look very different to what it
+always used to.
+****************************************************************************
+***************************************************************************/
+
+
+/* These versions of the macros use the stack, as normal */
+
+#ifndef NO_RECURSE
+#define REGISTER register
+#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg) rx = match(ra,rb,rc,rd,re,rf,rg)
+#define RRETURN(ra) return ra
+#else
+
+
+/* These versions of the macros manage a private stack on the heap. Note
+that the rd argument of RMATCH isn't actually used. It's the md argument of
+match(), which never changes. */
+
+#define REGISTER
+
+#define RMATCH(rx,ra,rb,rc,rd,re,rf,rg)\
+  {\
+  heapframe *newframe = (pcre_stack_malloc)(sizeof(heapframe));\
+  if (setjmp(frame->Xwhere) == 0)\
+    {\
+    newframe->Xeptr = ra;\
+    newframe->Xecode = rb;\
+    newframe->Xoffset_top = rc;\
+    newframe->Xims = re;\
+    newframe->Xeptrb = rf;\
+    newframe->Xflags = rg;\
+    newframe->Xprevframe = frame;\
+    frame = newframe;\
+    DPRINTF(("restarting from line %d\n", __LINE__));\
+    goto HEAP_RECURSE;\
+    }\
+  else\
+    {\
+    DPRINTF(("longjumped back to line %d\n", __LINE__));\
+    frame = md->thisframe;\
+    rx = frame->Xresult;\
+    }\
+  }
+
+#define RRETURN(ra)\
+  {\
+  heapframe *newframe = frame;\
+  frame = newframe->Xprevframe;\
+  (pcre_stack_free)(newframe);\
+  if (frame != NULL)\
+    {\
+    frame->Xresult = ra;\
+    md->thisframe = frame;\
+    longjmp(frame->Xwhere, 1);\
+    }\
+  return ra;\
+  }
+
+
+/* Structure for remembering the local variables in a private frame */
+
+typedef struct heapframe {
+  struct heapframe *Xprevframe;
+
+  /* Function arguments that may change */
+
+  const uschar *Xeptr;
+  const uschar *Xecode;
+  int Xoffset_top;
+  long int Xims;
+  eptrblock *Xeptrb;
+  int Xflags;
+
+  /* Function local variables */
+
+  const uschar *Xcallpat;
+  const uschar *Xcharptr;
+  const uschar *Xdata;
+  const uschar *Xnext;
+  const uschar *Xpp;
+  const uschar *Xprev;
+  const uschar *Xsaved_eptr;
+
+  recursion_info Xnew_recursive;
+
+  BOOL Xcur_is_word;
+  BOOL Xcondition;
+  BOOL Xminimize;
+  BOOL Xprev_is_word;
+
+  unsigned long int Xoriginal_ims;
+
+#ifdef SUPPORT_UCP
+  int Xprop_type;
+  int Xprop_fail_result;
+  int Xprop_category;
+  int Xprop_chartype;
+  int Xprop_othercase;
+  int Xprop_test_against;
+  int *Xprop_test_variable;
+#endif
+
+  int Xctype;
+  int Xfc;
+  int Xfi;
+  int Xlength;
+  int Xmax;
+  int Xmin;
+  int Xnumber;
+  int Xoffset;
+  int Xop;
+  int Xsave_capture_last;
+  int Xsave_offset1, Xsave_offset2, Xsave_offset3;
+  int Xstacksave[REC_STACK_SAVE_MAX];
+
+  eptrblock Xnewptrb;
+
+  /* Place to pass back result, and where to jump back to */
+
+  int  Xresult;
+  jmp_buf Xwhere;
+
+} heapframe;
+
+#endif
+
+
+/***************************************************************************
+***************************************************************************/
+
+
+
+/*************************************************
+*         Match from current position            *
+*************************************************/
+
+/* On entry ecode points to the first opcode, and eptr to the first character
+in the subject string, while eptrb holds the value of eptr at the start of the
+last bracketed group - used for breaking infinite loops matching zero-length
+strings. This function is called recursively in many circumstances. Whenever it
+returns a negative (error) response, the outer incarnation must also return the
+same response.
+
+Performance note: It might be tempting to extract commonly used fields from the
+md structure (e.g. utf8, end_subject) into individual variables to improve
+performance. Tests using gcc on a SPARC disproved this; in the first case, it
+made performance worse.
+
+Arguments:
+   eptr        pointer in subject
+   ecode       position in code
+   offset_top  current top pointer
+   md          pointer to "static" info for the match
+   ims         current /i, /m, and /s options
+   eptrb       pointer to chain of blocks containing eptr at start of
+                 brackets - for testing for empty matches
+   flags       can contain
+                 match_condassert - this is an assertion condition
+                 match_isgroup - this is the start of a bracketed group
+
+Returns:       MATCH_MATCH if matched            )  these values are >= 0
+               MATCH_NOMATCH if failed to match  )
+               a negative PCRE_ERROR_xxx value if aborted by an error condition
+                 (e.g. stopped by recursion limit)
+*/
+
+static int
+match(REGISTER const uschar *eptr, REGISTER const uschar *ecode,
+  int offset_top, match_data *md, unsigned long int ims, eptrblock *eptrb,
+  int flags)
+{
+/* These variables do not need to be preserved over recursion in this function,
+so they can be ordinary variables in all cases. Mark them with "register"
+because they are used a lot in loops. */
+
+register int  rrc;    /* Returns from recursive calls */
+register int  i;      /* Used for loops not involving calls to RMATCH() */
+register int  c;      /* Character values not kept over RMATCH() calls */
+register BOOL utf8;   /* Local copy of UTF-8 flag for speed */
+
+/* When recursion is not being used, all "local" variables that have to be
+preserved over calls to RMATCH() are part of a "frame" which is obtained from
+heap storage. Set up the top-level frame here; others are obtained from the
+heap whenever RMATCH() does a "recursion". See the macro definitions above. */
+
+#ifdef NO_RECURSE
+heapframe *frame = (pcre_stack_malloc)(sizeof(heapframe));
+frame->Xprevframe = NULL;            /* Marks the top level */
+
+/* Copy in the original argument variables */
+
+frame->Xeptr = eptr;
+frame->Xecode = ecode;
+frame->Xoffset_top = offset_top;
+frame->Xims = ims;
+frame->Xeptrb = eptrb;
+frame->Xflags = flags;
+
+/* This is where control jumps back to to effect "recursion" */
+
+HEAP_RECURSE:
+
+/* Macros make the argument variables come from the current frame */
+
+#define eptr               frame->Xeptr
+#define ecode              frame->Xecode
+#define offset_top         frame->Xoffset_top
+#define ims                frame->Xims
+#define eptrb              frame->Xeptrb
+#define flags              frame->Xflags
+
+/* Ditto for the local variables */
+
+#ifdef SUPPORT_UTF8
+#define charptr            frame->Xcharptr
+#endif
+#define callpat            frame->Xcallpat
+#define data               frame->Xdata
+#define next               frame->Xnext
+#define pp                 frame->Xpp
+#define prev               frame->Xprev
+#define saved_eptr         frame->Xsaved_eptr
+
+#define new_recursive      frame->Xnew_recursive
+
+#define cur_is_word        frame->Xcur_is_word
+#define condition          frame->Xcondition
+#define minimize           frame->Xminimize
+#define prev_is_word       frame->Xprev_is_word
+
+#define original_ims       frame->Xoriginal_ims
+
+#ifdef SUPPORT_UCP
+#define prop_type          frame->Xprop_type
+#define prop_fail_result   frame->Xprop_fail_result
+#define prop_category      frame->Xprop_category
+#define prop_chartype      frame->Xprop_chartype
+#define prop_othercase     frame->Xprop_othercase
+#define prop_test_against  frame->Xprop_test_against
+#define prop_test_variable frame->Xprop_test_variable
+#endif
+
+#define ctype              frame->Xctype
+#define fc                 frame->Xfc
+#define fi                 frame->Xfi
+#define length             frame->Xlength
+#define max                frame->Xmax
+#define min                frame->Xmin
+#define number             frame->Xnumber
+#define offset             frame->Xoffset
+#define op                 frame->Xop
+#define save_capture_last  frame->Xsave_capture_last
+#define save_offset1       frame->Xsave_offset1
+#define save_offset2       frame->Xsave_offset2
+#define save_offset3       frame->Xsave_offset3
+#define stacksave          frame->Xstacksave
+
+#define newptrb            frame->Xnewptrb
+
+/* When recursion is being used, local variables are allocated on the stack and
+get preserved during recursion in the normal way. In this environment, fi and
+i, and fc and c, can be the same variables. */
+
+#else
+#define fi i
+#define fc c
+
+
+#ifdef SUPPORT_UTF8                /* Many of these variables are used ony */
+const uschar *charptr;             /* small blocks of the code. My normal  */
+#endif                             /* style of coding would have declared  */
+const uschar *callpat;             /* them within each of those blocks.    */
+const uschar *data;                /* However, in order to accommodate the */
+const uschar *next;                /* version of this code that uses an    */
+const uschar *pp;                  /* external "stack" implemented on the  */
+const uschar *prev;                /* heap, it is easier to declare them   */
+const uschar *saved_eptr;          /* all here, so the declarations can    */
+                                   /* be cut out in a block. The only      */
+recursion_info new_recursive;      /* declarations within blocks below are */
+                                   /* for variables that do not have to    */
+BOOL cur_is_word;                  /* be preserved over a recursive call   */
+BOOL condition;                    /* to RMATCH().                         */
+BOOL minimize;
+BOOL prev_is_word;
+
+unsigned long int original_ims;
+
+#ifdef SUPPORT_UCP
+int prop_type;
+int prop_fail_result;
+int prop_category;
+int prop_chartype;
+int prop_othercase;
+int prop_test_against;
+int *prop_test_variable;
+#endif
+
+int ctype;
+int length;
+int max;
+int min;
+int number;
+int offset;
+int op;
+int save_capture_last;
+int save_offset1, save_offset2, save_offset3;
+int stacksave[REC_STACK_SAVE_MAX];
+
+eptrblock newptrb;
+#endif
+
+/* These statements are here to stop the compiler complaining about unitialized
+variables. */
+
+#ifdef SUPPORT_UCP
+prop_fail_result = 0;
+prop_test_against = 0;
+prop_test_variable = NULL;
+#endif
+
+/* OK, now we can get on with the real code of the function. Recursion is
+specified by the macros RMATCH and RRETURN. When NO_RECURSE is *not* defined,
+these just turn into a recursive call to match() and a "return", respectively.
+However, RMATCH isn't like a function call because it's quite a complicated
+macro. It has to be used in one particular way. This shouldn't, however, impact
+performance when true recursion is being used. */
+
+if (md->match_call_count++ >= md->match_limit) RRETURN(PCRE_ERROR_MATCHLIMIT);
+
+original_ims = ims;    /* Save for resetting on ')' */
+utf8 = md->utf8;       /* Local copy of the flag */
+
+/* At the start of a bracketed group, add the current subject pointer to the
+stack of such pointers, to be re-instated at the end of the group when we hit
+the closing ket. When match() is called in other circumstances, we don't add to
+this stack. */
+
+if ((flags & match_isgroup) != 0)
+  {
+  newptrb.epb_prev = eptrb;
+  newptrb.epb_saved_eptr = eptr;
+  eptrb = &newptrb;
+  }
+
+/* Now start processing the operations. */
+
+for (;;)
+  {
+  op = *ecode;
+  minimize = FALSE;
+
+  /* For partial matching, remember if we ever hit the end of the subject after
+  matching at least one subject character. */
+
+  if (md->partial &&
+      eptr >= md->end_subject &&
+      eptr > md->start_match)
+    md->hitend = TRUE;
+
+  /* Opening capturing bracket. If there is space in the offset vector, save
+  the current subject position in the working slot at the top of the vector. We
+  mustn't change the current values of the data slot, because they may be set
+  from a previous iteration of this group, and be referred to by a reference
+  inside the group.
+
+  If the bracket fails to match, we need to restore this value and also the
+  values of the final offsets, in case they were set by a previous iteration of
+  the same bracket.
+
+  If there isn't enough space in the offset vector, treat this as if it were a
+  non-capturing bracket. Don't worry about setting the flag for the error case
+  here; that is handled in the code for KET. */
+
+  if (op > OP_BRA)
+    {
+    number = op - OP_BRA;
+
+    /* For extended extraction brackets (large number), we have to fish out the
+    number from a dummy opcode at the start. */
+
+    if (number > EXTRACT_BASIC_MAX)
+      number = GET2(ecode, 2+LINK_SIZE);
+    offset = number << 1;
+
+#ifdef DEBUG
+    printf("start bracket %d subject=", number);
+    pchars(eptr, 16, TRUE, md);
+    printf("\n");
+#endif
+
+    if (offset < md->offset_max)
+      {
+      save_offset1 = md->offset_vector[offset];
+      save_offset2 = md->offset_vector[offset+1];
+      save_offset3 = md->offset_vector[md->offset_end - number];
+      save_capture_last = md->capture_last;
+
+      DPRINTF(("saving %d %d %d\n", save_offset1, save_offset2, save_offset3));
+      md->offset_vector[md->offset_end - number] = eptr - md->start_subject;
+
+      do
+        {
+        RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
+          match_isgroup);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        md->capture_last = save_capture_last;
+        ecode += GET(ecode, 1);
+        }
+      while (*ecode == OP_ALT);
+
+      DPRINTF(("bracket %d failed\n", number));
+
+      md->offset_vector[offset] = save_offset1;
+      md->offset_vector[offset+1] = save_offset2;
+      md->offset_vector[md->offset_end - number] = save_offset3;
+
+      RRETURN(MATCH_NOMATCH);
+      }
+
+    /* Insufficient room for saving captured contents */
+
+    else op = OP_BRA;
+    }
+
+  /* Other types of node can be handled by a switch */
+
+  switch(op)
+    {
+    case OP_BRA:     /* Non-capturing bracket: optimized */
+    DPRINTF(("start bracket 0\n"));
+    do
+      {
+      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
+        match_isgroup);
+      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+      ecode += GET(ecode, 1);
+      }
+    while (*ecode == OP_ALT);
+    DPRINTF(("bracket 0 failed\n"));
+    RRETURN(MATCH_NOMATCH);
+
+    /* Conditional group: compilation checked that there are no more than
+    two branches. If the condition is false, skipping the first branch takes us
+    past the end if there is only one branch, but that's OK because that is
+    exactly what going to the ket would do. */
+
+    case OP_COND:
+    if (ecode[LINK_SIZE+1] == OP_CREF) /* Condition extract or recurse test */
+      {
+      offset = GET2(ecode, LINK_SIZE+2) << 1;  /* Doubled ref number */
+      condition = (offset == CREF_RECURSE * 2)?
+        (md->recursive != NULL) :
+        (offset < offset_top && md->offset_vector[offset] >= 0);
+      RMATCH(rrc, eptr, ecode + (condition?
+        (LINK_SIZE + 4) : (LINK_SIZE + 1 + GET(ecode, 1))),
+        offset_top, md, ims, eptrb, match_isgroup);
+      RRETURN(rrc);
+      }
+
+    /* The condition is an assertion. Call match() to evaluate it - setting
+    the final argument TRUE causes it to stop at the end of an assertion. */
+
+    else
+      {
+      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
+          match_condassert | match_isgroup);
+      if (rrc == MATCH_MATCH)
+        {
+        ecode += 1 + LINK_SIZE + GET(ecode, LINK_SIZE+2);
+        while (*ecode == OP_ALT) ecode += GET(ecode, 1);
+        }
+      else if (rrc != MATCH_NOMATCH)
+        {
+        RRETURN(rrc);         /* Need braces because of following else */
+        }
+      else ecode += GET(ecode, 1);
+      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb,
+        match_isgroup);
+      RRETURN(rrc);
+      }
+    /* Control never reaches here */
+
+    /* Skip over conditional reference or large extraction number data if
+    encountered. */
+
+    case OP_CREF:
+    case OP_BRANUMBER:
+    ecode += 3;
+    break;
+
+    /* End of the pattern. If we are in a recursion, we should restore the
+    offsets appropriately and continue from after the call. */
+
+    case OP_END:
+    if (md->recursive != NULL && md->recursive->group_num == 0)
+      {
+      recursion_info *rec = md->recursive;
+      DPRINTF(("Hit the end in a (?0) recursion\n"));
+      md->recursive = rec->prevrec;
+      memmove(md->offset_vector, rec->offset_save,
+        rec->saved_max * sizeof(int));
+      md->start_match = rec->save_start;
+      ims = original_ims;
+      ecode = rec->after_call;
+      break;
+      }
+
+    /* Otherwise, if PCRE_NOTEMPTY is set, fail if we have matched an empty
+    string - backtracking will then try other alternatives, if any. */
+
+    if (md->notempty && eptr == md->start_match) RRETURN(MATCH_NOMATCH);
+    md->end_match_ptr = eptr;          /* Record where we ended */
+    md->end_offset_top = offset_top;   /* and how many extracts were taken */
+    RRETURN(MATCH_MATCH);
+
+    /* Change option settings */
+
+    case OP_OPT:
+    ims = ecode[1];
+    ecode += 2;
+    DPRINTF(("ims set to %02lx\n", ims));
+    break;
+
+    /* Assertion brackets. Check the alternative branches in turn - the
+    matching won't pass the KET for an assertion. If any one branch matches,
+    the assertion is true. Lookbehind assertions have an OP_REVERSE item at the
+    start of each branch to move the current point backwards, so the code at
+    this level is identical to the lookahead case. */
+
+    case OP_ASSERT:
+    case OP_ASSERTBACK:
+    do
+      {
+      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
+        match_isgroup);
+      if (rrc == MATCH_MATCH) break;
+      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+      ecode += GET(ecode, 1);
+      }
+    while (*ecode == OP_ALT);
+    if (*ecode == OP_KET) RRETURN(MATCH_NOMATCH);
+
+    /* If checking an assertion for a condition, return MATCH_MATCH. */
+
+    if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
+
+    /* Continue from after the assertion, updating the offsets high water
+    mark, since extracts may have been taken during the assertion. */
+
+    do ecode += GET(ecode,1); while (*ecode == OP_ALT);
+    ecode += 1 + LINK_SIZE;
+    offset_top = md->end_offset_top;
+    continue;
+
+    /* Negative assertion: all branches must fail to match */
+
+    case OP_ASSERT_NOT:
+    case OP_ASSERTBACK_NOT:
+    do
+      {
+      RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, NULL,
+        match_isgroup);
+      if (rrc == MATCH_MATCH) RRETURN(MATCH_NOMATCH);
+      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+      ecode += GET(ecode,1);
+      }
+    while (*ecode == OP_ALT);
+
+    if ((flags & match_condassert) != 0) RRETURN(MATCH_MATCH);
+
+    ecode += 1 + LINK_SIZE;
+    continue;
+
+    /* Move the subject pointer back. This occurs only at the start of
+    each branch of a lookbehind assertion. If we are too close to the start to
+    move back, this match function fails. When working with UTF-8 we move
+    back a number of characters, not bytes. */
+
+    case OP_REVERSE:
+#ifdef SUPPORT_UTF8
+    if (utf8)
+      {
+      c = GET(ecode,1);
+      for (i = 0; i < c; i++)
+        {
+        eptr--;
+        if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
+        BACKCHAR(eptr)
+        }
+      }
+    else
+#endif
+
+    /* No UTF-8 support, or not in UTF-8 mode: count is byte count */
+
+      {
+      eptr -= GET(ecode,1);
+      if (eptr < md->start_subject) RRETURN(MATCH_NOMATCH);
+      }
+
+    /* Skip to next op code */
+
+    ecode += 1 + LINK_SIZE;
+    break;
+
+    /* The callout item calls an external function, if one is provided, passing
+    details of the match so far. This is mainly for debugging, though the
+    function is able to force a failure. */
+
+    case OP_CALLOUT:
+    if (pcre_callout != NULL)
+      {
+      pcre_callout_block cb;
+      cb.version          = 1;   /* Version 1 of the callout block */
+      cb.callout_number   = ecode[1];
+      cb.offset_vector    = md->offset_vector;
+      cb.subject          = (const char *)md->start_subject;
+      cb.subject_length   = md->end_subject - md->start_subject;
+      cb.start_match      = md->start_match - md->start_subject;
+      cb.current_position = eptr - md->start_subject;
+      cb.pattern_position = GET(ecode, 2);
+      cb.next_item_length = GET(ecode, 2 + LINK_SIZE);
+      cb.capture_top      = offset_top/2;
+      cb.capture_last     = md->capture_last;
+      cb.callout_data     = md->callout_data;
+      if ((rrc = (*pcre_callout)(&cb)) > 0) RRETURN(MATCH_NOMATCH);
+      if (rrc < 0) RRETURN(rrc);
+      }
+    ecode += 2 + 2*LINK_SIZE;
+    break;
+
+    /* Recursion either matches the current regex, or some subexpression. The
+    offset data is the offset to the starting bracket from the start of the
+    whole pattern. (This is so that it works from duplicated subpatterns.)
+
+    If there are any capturing brackets started but not finished, we have to
+    save their starting points and reinstate them after the recursion. However,
+    we don't know how many such there are (offset_top records the completed
+    total) so we just have to save all the potential data. There may be up to
+    65535 such values, which is too large to put on the stack, but using malloc
+    for small numbers seems expensive. As a compromise, the stack is used when
+    there are no more than REC_STACK_SAVE_MAX values to store; otherwise malloc
+    is used. A problem is what to do if the malloc fails ... there is no way of
+    returning to the top level with an error. Save the top REC_STACK_SAVE_MAX
+    values on the stack, and accept that the rest may be wrong.
+
+    There are also other values that have to be saved. We use a chained
+    sequence of blocks that actually live on the stack. Thanks to Robin Houston
+    for the original version of this logic. */
+
+    case OP_RECURSE:
+      {
+      callpat = md->start_code + GET(ecode, 1);
+      new_recursive.group_num = *callpat - OP_BRA;
+
+      /* For extended extraction brackets (large number), we have to fish out
+      the number from a dummy opcode at the start. */
+
+      if (new_recursive.group_num > EXTRACT_BASIC_MAX)
+        new_recursive.group_num = GET2(callpat, 2+LINK_SIZE);
+
+      /* Add to "recursing stack" */
+
+      new_recursive.prevrec = md->recursive;
+      md->recursive = &new_recursive;
+
+      /* Find where to continue from afterwards */
+
+      ecode += 1 + LINK_SIZE;
+      new_recursive.after_call = ecode;
+
+      /* Now save the offset data. */
+
+      new_recursive.saved_max = md->offset_end;
+      if (new_recursive.saved_max <= REC_STACK_SAVE_MAX)
+        new_recursive.offset_save = stacksave;
+      else
+        {
+        new_recursive.offset_save =
+          (int *)(pcre_malloc)(new_recursive.saved_max * sizeof(int));
+        if (new_recursive.offset_save == NULL) RRETURN(PCRE_ERROR_NOMEMORY);
+        }
+
+      memcpy(new_recursive.offset_save, md->offset_vector,
+            new_recursive.saved_max * sizeof(int));
+      new_recursive.save_start = md->start_match;
+      md->start_match = eptr;
+
+      /* OK, now we can do the recursion. For each top-level alternative we
+      restore the offset and recursion data. */
+
+      DPRINTF(("Recursing into group %d\n", new_recursive.group_num));
+      do
+        {
+        RMATCH(rrc, eptr, callpat + 1 + LINK_SIZE, offset_top, md, ims,
+            eptrb, match_isgroup);
+        if (rrc == MATCH_MATCH)
+          {
+          md->recursive = new_recursive.prevrec;
+          if (new_recursive.offset_save != stacksave)
+            (pcre_free)(new_recursive.offset_save);
+          RRETURN(MATCH_MATCH);
+          }
+        else if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+
+        md->recursive = &new_recursive;
+        memcpy(md->offset_vector, new_recursive.offset_save,
+            new_recursive.saved_max * sizeof(int));
+        callpat += GET(callpat, 1);
+        }
+      while (*callpat == OP_ALT);
+
+      DPRINTF(("Recursion didn't match\n"));
+      md->recursive = new_recursive.prevrec;
+      if (new_recursive.offset_save != stacksave)
+        (pcre_free)(new_recursive.offset_save);
+      RRETURN(MATCH_NOMATCH);
+      }
+    /* Control never reaches here */
+
+    /* "Once" brackets are like assertion brackets except that after a match,
+    the point in the subject string is not moved back. Thus there can never be
+    a move back into the brackets. Friedl calls these "atomic" subpatterns.
+    Check the alternative branches in turn - the matching won't pass the KET
+    for this kind of subpattern. If any one branch matches, we carry on as at
+    the end of a normal bracket, leaving the subject pointer. */
+
+    case OP_ONCE:
+      {
+      prev = ecode;
+      saved_eptr = eptr;
+
+      do
+        {
+        RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims,
+          eptrb, match_isgroup);
+        if (rrc == MATCH_MATCH) break;
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        ecode += GET(ecode,1);
+        }
+      while (*ecode == OP_ALT);
+
+      /* If hit the end of the group (which could be repeated), fail */
+
+      if (*ecode != OP_ONCE && *ecode != OP_ALT) RRETURN(MATCH_NOMATCH);
+
+      /* Continue as from after the assertion, updating the offsets high water
+      mark, since extracts may have been taken. */
+
+      do ecode += GET(ecode,1); while (*ecode == OP_ALT);
+
+      offset_top = md->end_offset_top;
+      eptr = md->end_match_ptr;
+
+      /* For a non-repeating ket, just continue at this level. This also
+      happens for a repeating ket if no characters were matched in the group.
+      This is the forcible breaking of infinite loops as implemented in Perl
+      5.005. If there is an options reset, it will get obeyed in the normal
+      course of events. */
+
+      if (*ecode == OP_KET || eptr == saved_eptr)
+        {
+        ecode += 1+LINK_SIZE;
+        break;
+        }
+
+      /* The repeating kets try the rest of the pattern or restart from the
+      preceding bracket, in the appropriate order. We need to reset any options
+      that changed within the bracket before re-running it, so check the next
+      opcode. */
+
+      if (ecode[1+LINK_SIZE] == OP_OPT)
+        {
+        ims = (ims & ~PCRE_IMS) | ecode[4];
+        DPRINTF(("ims set to %02lx at group repeat\n", ims));
+        }
+
+      if (*ecode == OP_KETRMIN)
+        {
+        RMATCH(rrc, eptr, ecode + 1 + LINK_SIZE, offset_top, md, ims, eptrb, 0);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        }
+      else  /* OP_KETRMAX */
+        {
+        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        }
+      }
+    RRETURN(MATCH_NOMATCH);
+
+    /* An alternation is the end of a branch; scan along to find the end of the
+    bracketed group and go to there. */
+
+    case OP_ALT:
+    do ecode += GET(ecode,1); while (*ecode == OP_ALT);
+    break;
+
+    /* BRAZERO and BRAMINZERO occur just before a bracket group, indicating
+    that it may occur zero times. It may repeat infinitely, or not at all -
+    i.e. it could be ()* or ()? in the pattern. Brackets with fixed upper
+    repeat limits are compiled as a number of copies, with the optional ones
+    preceded by BRAZERO or BRAMINZERO. */
+
+    case OP_BRAZERO:
+      {
+      next = ecode+1;
+      RMATCH(rrc, eptr, next, offset_top, md, ims, eptrb, match_isgroup);
+      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+      do next += GET(next,1); while (*next == OP_ALT);
+      ecode = next + 1+LINK_SIZE;
+      }
+    break;
+
+    case OP_BRAMINZERO:
+      {
+      next = ecode+1;
+      do next += GET(next,1); while (*next == OP_ALT);
+      RMATCH(rrc, eptr, next + 1+LINK_SIZE, offset_top, md, ims, eptrb,
+        match_isgroup);
+      if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+      ecode++;
+      }
+    break;
+
+    /* End of a group, repeated or non-repeating. If we are at the end of
+    an assertion "group", stop matching and return MATCH_MATCH, but record the
+    current high water mark for use by positive assertions. Do this also
+    for the "once" (not-backup up) groups. */
+
+    case OP_KET:
+    case OP_KETRMIN:
+    case OP_KETRMAX:
+      {
+      prev = ecode - GET(ecode, 1);
+      saved_eptr = eptrb->epb_saved_eptr;
+
+      /* Back up the stack of bracket start pointers. */
+
+      eptrb = eptrb->epb_prev;
+
+      if (*prev == OP_ASSERT || *prev == OP_ASSERT_NOT ||
+          *prev == OP_ASSERTBACK || *prev == OP_ASSERTBACK_NOT ||
+          *prev == OP_ONCE)
+        {
+        md->end_match_ptr = eptr;      /* For ONCE */
+        md->end_offset_top = offset_top;
+        RRETURN(MATCH_MATCH);
+        }
+
+      /* In all other cases except a conditional group we have to check the
+      group number back at the start and if necessary complete handling an
+      extraction by setting the offsets and bumping the high water mark. */
+
+      if (*prev != OP_COND)
+        {
+        number = *prev - OP_BRA;
+
+        /* For extended extraction brackets (large number), we have to fish out
+        the number from a dummy opcode at the start. */
+
+        if (number > EXTRACT_BASIC_MAX) number = GET2(prev, 2+LINK_SIZE);
+        offset = number << 1;
+
+#ifdef DEBUG
+        printf("end bracket %d", number);
+        printf("\n");
+#endif
+
+        /* Test for a numbered group. This includes groups called as a result
+        of recursion. Note that whole-pattern recursion is coded as a recurse
+        into group 0, so it won't be picked up here. Instead, we catch it when
+        the OP_END is reached. */
+
+        if (number > 0)
+          {
+          md->capture_last = number;
+          if (offset >= md->offset_max) md->offset_overflow = TRUE; else
+            {
+            md->offset_vector[offset] =
+              md->offset_vector[md->offset_end - number];
+            md->offset_vector[offset+1] = eptr - md->start_subject;
+            if (offset_top <= offset) offset_top = offset + 2;
+            }
+
+          /* Handle a recursively called group. Restore the offsets
+          appropriately and continue from after the call. */
+
+          if (md->recursive != NULL && md->recursive->group_num == number)
+            {
+            recursion_info *rec = md->recursive;
+            DPRINTF(("Recursion (%d) succeeded - continuing\n", number));
+            md->recursive = rec->prevrec;
+            md->start_match = rec->save_start;
+            memcpy(md->offset_vector, rec->offset_save,
+              rec->saved_max * sizeof(int));
+            ecode = rec->after_call;
+            ims = original_ims;
+            break;
+            }
+          }
+        }
+
+      /* Reset the value of the ims flags, in case they got changed during
+      the group. */
+
+      ims = original_ims;
+      DPRINTF(("ims reset to %02lx\n", ims));
+
+      /* For a non-repeating ket, just continue at this level. This also
+      happens for a repeating ket if no characters were matched in the group.
+      This is the forcible breaking of infinite loops as implemented in Perl
+      5.005. If there is an options reset, it will get obeyed in the normal
+      course of events. */
+
+      if (*ecode == OP_KET || eptr == saved_eptr)
+        {
+        ecode += 1 + LINK_SIZE;
+        break;
+        }
+
+      /* The repeating kets try the rest of the pattern or restart from the
+      preceding bracket, in the appropriate order. */
+
+      if (*ecode == OP_KETRMIN)
+        {
+        RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        }
+      else  /* OP_KETRMAX */
+        {
+        RMATCH(rrc, eptr, prev, offset_top, md, ims, eptrb, match_isgroup);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        RMATCH(rrc, eptr, ecode + 1+LINK_SIZE, offset_top, md, ims, eptrb, 0);
+        if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+        }
+      }
+
+    RRETURN(MATCH_NOMATCH);
+
+    /* Start of subject unless notbol, or after internal newline if multiline */
+
+    case OP_CIRC:
+    if (md->notbol && eptr == md->start_subject) RRETURN(MATCH_NOMATCH);
+    if ((ims & PCRE_MULTILINE) != 0)
+      {
+      if (eptr != md->start_subject && eptr[-1] != NEWLINE)
+        RRETURN(MATCH_NOMATCH);
+      ecode++;
+      break;
+      }
+    /* ... else fall through */
+
+    /* Start of subject assertion */
+
+    case OP_SOD:
+    if (eptr != md->start_subject) RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    /* Start of match assertion */
+
+    case OP_SOM:
+    if (eptr != md->start_subject + md->start_offset) RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    /* Assert before internal newline if multiline, or before a terminating
+    newline unless endonly is set, else end of subject unless noteol is set. */
+
+    case OP_DOLL:
+    if ((ims & PCRE_MULTILINE) != 0)
+      {
+      if (eptr < md->end_subject)
+        { if (*eptr != NEWLINE) RRETURN(MATCH_NOMATCH); }
+      else
+        { if (md->noteol) RRETURN(MATCH_NOMATCH); }
+      ecode++;
+      break;
+      }
+    else
+      {
+      if (md->noteol) RRETURN(MATCH_NOMATCH);
+      if (!md->endonly)
+        {
+        if (eptr < md->end_subject - 1 ||
+           (eptr == md->end_subject - 1 && *eptr != NEWLINE))
+          RRETURN(MATCH_NOMATCH);
+        ecode++;
+        break;
+        }
+      }
+    /* ... else fall through */
+
+    /* End of subject assertion (\z) */
+
+    case OP_EOD:
+    if (eptr < md->end_subject) RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    /* End of subject or ending \n assertion (\Z) */
+
+    case OP_EODN:
+    if (eptr < md->end_subject - 1 ||
+       (eptr == md->end_subject - 1 && *eptr != NEWLINE)) RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    /* Word boundary assertions */
+
+    case OP_NOT_WORD_BOUNDARY:
+    case OP_WORD_BOUNDARY:
+      {
+
+      /* Find out if the previous and current characters are "word" characters.
+      It takes a bit more work in UTF-8 mode. Characters > 255 are assumed to
+      be "non-word" characters. */
+
+#ifdef SUPPORT_UTF8
+      if (utf8)
+        {
+        if (eptr == md->start_subject) prev_is_word = FALSE; else
+          {
+          const uschar *lastptr = eptr - 1;
+          while((*lastptr & 0xc0) == 0x80) lastptr--;
+          GETCHAR(c, lastptr);
+          prev_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
+          }
+        if (eptr >= md->end_subject) cur_is_word = FALSE; else
+          {
+          GETCHAR(c, eptr);
+          cur_is_word = c < 256 && (md->ctypes[c] & ctype_word) != 0;
+          }
+        }
+      else
+#endif
+
+      /* More streamlined when not in UTF-8 mode */
+
+        {
+        prev_is_word = (eptr != md->start_subject) &&
+          ((md->ctypes[eptr[-1]] & ctype_word) != 0);
+        cur_is_word = (eptr < md->end_subject) &&
+          ((md->ctypes[*eptr] & ctype_word) != 0);
+        }
+
+      /* Now see if the situation is what we want */
+
+      if ((*ecode++ == OP_WORD_BOUNDARY)?
+           cur_is_word == prev_is_word : cur_is_word != prev_is_word)
+        RRETURN(MATCH_NOMATCH);
+      }
+    break;
+
+    /* Match a single character type; inline for speed */
+
+    case OP_ANY:
+    if ((ims & PCRE_DOTALL) == 0 && eptr < md->end_subject && *eptr == NEWLINE)
+      RRETURN(MATCH_NOMATCH);
+    if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
+#ifdef SUPPORT_UTF8
+    if (utf8)
+      while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+#endif
+    ecode++;
+    break;
+
+    /* Match a single byte, even in UTF-8 mode. This opcode really does match
+    any byte, even newline, independent of the setting of PCRE_DOTALL. */
+
+    case OP_ANYBYTE:
+    if (eptr++ >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    case OP_NOT_DIGIT:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+    if (
+#ifdef SUPPORT_UTF8
+       c < 256 &&
+#endif
+       (md->ctypes[c] & ctype_digit) != 0
+       )
+      RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    case OP_DIGIT:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+    if (
+#ifdef SUPPORT_UTF8
+       c >= 256 ||
+#endif
+       (md->ctypes[c] & ctype_digit) == 0
+       )
+      RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    case OP_NOT_WHITESPACE:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+    if (
+#ifdef SUPPORT_UTF8
+       c < 256 &&
+#endif
+       (md->ctypes[c] & ctype_space) != 0
+       )
+      RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    case OP_WHITESPACE:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+    if (
+#ifdef SUPPORT_UTF8
+       c >= 256 ||
+#endif
+       (md->ctypes[c] & ctype_space) == 0
+       )
+      RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    case OP_NOT_WORDCHAR:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+    if (
+#ifdef SUPPORT_UTF8
+       c < 256 &&
+#endif
+       (md->ctypes[c] & ctype_word) != 0
+       )
+      RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+    case OP_WORDCHAR:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+    if (
+#ifdef SUPPORT_UTF8
+       c >= 256 ||
+#endif
+       (md->ctypes[c] & ctype_word) == 0
+       )
+      RRETURN(MATCH_NOMATCH);
+    ecode++;
+    break;
+
+#ifdef SUPPORT_UCP
+    /* Check the next character by Unicode property. We will get here only
+    if the support is in the binary; otherwise a compile-time error occurs. */
+
+    case OP_PROP:
+    case OP_NOTPROP:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+      {
+      int chartype, rqdtype;
+      int othercase;
+      int category = ucp_findchar(c, &chartype, &othercase);
+
+      rqdtype = *(++ecode);
+      ecode++;
+
+      if (rqdtype >= 128)
+        {
+        if ((rqdtype - 128 != category) == (op == OP_PROP))
+          RRETURN(MATCH_NOMATCH);
+        }
+      else
+        {
+        if ((rqdtype != chartype) == (op == OP_PROP))
+          RRETURN(MATCH_NOMATCH);
+        }
+      }
+    break;
+
+    /* Match an extended Unicode sequence. We will get here only if the support
+    is in the binary; otherwise a compile-time error occurs. */
+
+    case OP_EXTUNI:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    GETCHARINCTEST(c, eptr);
+      {
+      int chartype;
+      int othercase;
+      int category = ucp_findchar(c, &chartype, &othercase);
+      if (category == ucp_M) RRETURN(MATCH_NOMATCH);
+      while (eptr < md->end_subject)
+        {
+        int len = 1;
+        if (!utf8) c = *eptr; else
+          {
+          GETCHARLEN(c, eptr, len);
+          }
+        category = ucp_findchar(c, &chartype, &othercase);
+        if (category != ucp_M) break;
+        eptr += len;
+        }
+      }
+    ecode++;
+    break;
+#endif
+
+
+    /* Match a back reference, possibly repeatedly. Look past the end of the
+    item to see if there is repeat information following. The code is similar
+    to that for character classes, but repeated for efficiency. Then obey
+    similar code to character type repeats - written out again for speed.
+    However, if the referenced string is the empty string, always treat
+    it as matched, any number of times (otherwise there could be infinite
+    loops). */
+
+    case OP_REF:
+      {
+      offset = GET2(ecode, 1) << 1;               /* Doubled ref number */
+      ecode += 3;                                 /* Advance past item */
+
+      /* If the reference is unset, set the length to be longer than the amount
+      of subject left; this ensures that every attempt at a match fails. We
+      can't just fail here, because of the possibility of quantifiers with zero
+      minima. */
+
+      length = (offset >= offset_top || md->offset_vector[offset] < 0)?
+        md->end_subject - eptr + 1 :
+        md->offset_vector[offset+1] - md->offset_vector[offset];
+
+      /* Set up for repetition, or handle the non-repeated case */
+
+      switch (*ecode)
+        {
+        case OP_CRSTAR:
+        case OP_CRMINSTAR:
+        case OP_CRPLUS:
+        case OP_CRMINPLUS:
+        case OP_CRQUERY:
+        case OP_CRMINQUERY:
+        c = *ecode++ - OP_CRSTAR;
+        minimize = (c & 1) != 0;
+        min = rep_min[c];                 /* Pick up values from tables; */
+        max = rep_max[c];                 /* zero for max => infinity */
+        if (max == 0) max = INT_MAX;
+        break;
+
+        case OP_CRRANGE:
+        case OP_CRMINRANGE:
+        minimize = (*ecode == OP_CRMINRANGE);
+        min = GET2(ecode, 1);
+        max = GET2(ecode, 3);
+        if (max == 0) max = INT_MAX;
+        ecode += 5;
+        break;
+
+        default:               /* No repeat follows */
+        if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
+        eptr += length;
+        continue;              /* With the main loop */
+        }
+
+      /* If the length of the reference is zero, just continue with the
+      main loop. */
+
+      if (length == 0) continue;
+
+      /* First, ensure the minimum number of matches are present. We get back
+      the length of the reference string explicitly rather than passing the
+      address of eptr, so that eptr can be a register variable. */
+
+      for (i = 1; i <= min; i++)
+        {
+        if (!match_ref(offset, eptr, length, md, ims)) RRETURN(MATCH_NOMATCH);
+        eptr += length;
+        }
+
+      /* If min = max, continue at the same level without recursion.
+      They are not both allowed to be zero. */
+
+      if (min == max) continue;
+
+      /* If minimizing, keep trying and advancing the pointer */
+
+      if (minimize)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || !match_ref(offset, eptr, length, md, ims))
+            RRETURN(MATCH_NOMATCH);
+          eptr += length;
+          }
+        /* Control never gets here */
+        }
+
+      /* If maximizing, find the longest string and work backwards */
+
+      else
+        {
+        pp = eptr;
+        for (i = min; i < max; i++)
+          {
+          if (!match_ref(offset, eptr, length, md, ims)) break;
+          eptr += length;
+          }
+        while (eptr >= pp)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          eptr -= length;
+          }
+        RRETURN(MATCH_NOMATCH);
+        }
+      }
+    /* Control never gets here */
+
+
+
+    /* Match a bit-mapped character class, possibly repeatedly. This op code is
+    used when all the characters in the class have values in the range 0-255,
+    and either the matching is caseful, or the characters are in the range
+    0-127 when UTF-8 processing is enabled. The only difference between
+    OP_CLASS and OP_NCLASS occurs when a data character outside the range is
+    encountered.
+
+    First, look past the end of the item to see if there is repeat information
+    following. Then obey similar code to character type repeats - written out
+    again for speed. */
+
+    case OP_NCLASS:
+    case OP_CLASS:
+      {
+      data = ecode + 1;                /* Save for matching */
+      ecode += 33;                     /* Advance past the item */
+
+      switch (*ecode)
+        {
+        case OP_CRSTAR:
+        case OP_CRMINSTAR:
+        case OP_CRPLUS:
+        case OP_CRMINPLUS:
+        case OP_CRQUERY:
+        case OP_CRMINQUERY:
+        c = *ecode++ - OP_CRSTAR;
+        minimize = (c & 1) != 0;
+        min = rep_min[c];                 /* Pick up values from tables; */
+        max = rep_max[c];                 /* zero for max => infinity */
+        if (max == 0) max = INT_MAX;
+        break;
+
+        case OP_CRRANGE:
+        case OP_CRMINRANGE:
+        minimize = (*ecode == OP_CRMINRANGE);
+        min = GET2(ecode, 1);
+        max = GET2(ecode, 3);
+        if (max == 0) max = INT_MAX;
+        ecode += 5;
+        break;
+
+        default:               /* No repeat follows */
+        min = max = 1;
+        break;
+        }
+
+      /* First, ensure the minimum number of matches are present. */
+
+#ifdef SUPPORT_UTF8
+      /* UTF-8 mode */
+      if (utf8)
+        {
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          GETCHARINC(c, eptr);
+          if (c > 255)
+            {
+            if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
+            }
+          else
+            {
+            if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
+            }
+          }
+        }
+      else
+#endif
+      /* Not UTF-8 mode */
+        {
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          c = *eptr++;
+          if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
+          }
+        }
+
+      /* If max == min we can continue with the main loop without the
+      need to recurse. */
+
+      if (min == max) continue;
+
+      /* If minimizing, keep testing the rest of the expression and advancing
+      the pointer while it matches the class. */
+
+      if (minimize)
+        {
+#ifdef SUPPORT_UTF8
+        /* UTF-8 mode */
+        if (utf8)
+          {
+          for (fi = min;; fi++)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+            GETCHARINC(c, eptr);
+            if (c > 255)
+              {
+              if (op == OP_CLASS) RRETURN(MATCH_NOMATCH);
+              }
+            else
+              {
+              if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
+              }
+            }
+          }
+        else
+#endif
+        /* Not UTF-8 mode */
+          {
+          for (fi = min;; fi++)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+            c = *eptr++;
+            if ((data[c/8] & (1 << (c&7))) == 0) RRETURN(MATCH_NOMATCH);
+            }
+          }
+        /* Control never gets here */
+        }
+
+      /* If maximizing, find the longest possible run, then work backwards. */
+
+      else
+        {
+        pp = eptr;
+
+#ifdef SUPPORT_UTF8
+        /* UTF-8 mode */
+        if (utf8)
+          {
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(c, eptr, len);
+            if (c > 255)
+              {
+              if (op == OP_CLASS) break;
+              }
+            else
+              {
+              if ((data[c/8] & (1 << (c&7))) == 0) break;
+              }
+            eptr += len;
+            }
+          for (;;)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (eptr-- == pp) break;        /* Stop if tried at original pos */
+            BACKCHAR(eptr);
+            }
+          }
+        else
+#endif
+          /* Not UTF-8 mode */
+          {
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject) break;
+            c = *eptr;
+            if ((data[c/8] & (1 << (c&7))) == 0) break;
+            eptr++;
+            }
+          while (eptr >= pp)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            eptr--;
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            }
+          }
+
+        RRETURN(MATCH_NOMATCH);
+        }
+      }
+    /* Control never gets here */
+
+
+    /* Match an extended character class. This opcode is encountered only
+    in UTF-8 mode, because that's the only time it is compiled. */
+
+#ifdef SUPPORT_UTF8
+    case OP_XCLASS:
+      {
+      data = ecode + 1 + LINK_SIZE;                /* Save for matching */
+      ecode += GET(ecode, 1);                      /* Advance past the item */
+
+      switch (*ecode)
+        {
+        case OP_CRSTAR:
+        case OP_CRMINSTAR:
+        case OP_CRPLUS:
+        case OP_CRMINPLUS:
+        case OP_CRQUERY:
+        case OP_CRMINQUERY:
+        c = *ecode++ - OP_CRSTAR;
+        minimize = (c & 1) != 0;
+        min = rep_min[c];                 /* Pick up values from tables; */
+        max = rep_max[c];                 /* zero for max => infinity */
+        if (max == 0) max = INT_MAX;
+        break;
+
+        case OP_CRRANGE:
+        case OP_CRMINRANGE:
+        minimize = (*ecode == OP_CRMINRANGE);
+        min = GET2(ecode, 1);
+        max = GET2(ecode, 3);
+        if (max == 0) max = INT_MAX;
+        ecode += 5;
+        break;
+
+        default:               /* No repeat follows */
+        min = max = 1;
+        break;
+        }
+
+      /* First, ensure the minimum number of matches are present. */
+
+      for (i = 1; i <= min; i++)
+        {
+        if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+        GETCHARINC(c, eptr);
+        if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH);
+        }
+
+      /* If max == min we can continue with the main loop without the
+      need to recurse. */
+
+      if (min == max) continue;
+
+      /* If minimizing, keep testing the rest of the expression and advancing
+      the pointer while it matches the class. */
+
+      if (minimize)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          GETCHARINC(c, eptr);
+          if (!_pcre_xclass(c, data)) RRETURN(MATCH_NOMATCH);
+          }
+        /* Control never gets here */
+        }
+
+      /* If maximizing, find the longest possible run, then work backwards. */
+
+      else
+        {
+        pp = eptr;
+        for (i = min; i < max; i++)
+          {
+          int len = 1;
+          if (eptr >= md->end_subject) break;
+          GETCHARLEN(c, eptr, len);
+          if (!_pcre_xclass(c, data)) break;
+          eptr += len;
+          }
+        for(;;)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (eptr-- == pp) break;        /* Stop if tried at original pos */
+          BACKCHAR(eptr)
+          }
+        RRETURN(MATCH_NOMATCH);
+        }
+
+      /* Control never gets here */
+      }
+#endif    /* End of XCLASS */
+
+    /* Match a single character, casefully */
+
+    case OP_CHAR:
+#ifdef SUPPORT_UTF8
+    if (utf8)
+      {
+      length = 1;
+      ecode++;
+      GETCHARLEN(fc, ecode, length);
+      if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
+      while (length-- > 0) if (*ecode++ != *eptr++) RRETURN(MATCH_NOMATCH);
+      }
+    else
+#endif
+
+    /* Non-UTF-8 mode */
+      {
+      if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
+      if (ecode[1] != *eptr++) RRETURN(MATCH_NOMATCH);
+      ecode += 2;
+      }
+    break;
+
+    /* Match a single character, caselessly */
+
+    case OP_CHARNC:
+#ifdef SUPPORT_UTF8
+    if (utf8)
+      {
+      length = 1;
+      ecode++;
+      GETCHARLEN(fc, ecode, length);
+
+      if (length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
+
+      /* If the pattern character's value is < 128, we have only one byte, and
+      can use the fast lookup table. */
+
+      if (fc < 128)
+        {
+        if (md->lcc[*ecode++] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
+        }
+
+      /* Otherwise we must pick up the subject character */
+
+      else
+        {
+        int dc;
+        GETCHARINC(dc, eptr);
+        ecode += length;
+
+        /* If we have Unicode property support, we can use it to test the other
+        case of the character, if there is one. The result of ucp_findchar() is
+        < 0 if the char isn't found, and othercase is returned as zero if there
+        isn't one. */
+
+        if (fc != dc)
+          {
+#ifdef SUPPORT_UCP
+          int chartype;
+          int othercase;
+          if (ucp_findchar(fc, &chartype, &othercase) < 0 || dc != othercase)
+#endif
+            RRETURN(MATCH_NOMATCH);
+          }
+        }
+      }
+    else
+#endif   /* SUPPORT_UTF8 */
+
+    /* Non-UTF-8 mode */
+      {
+      if (md->end_subject - eptr < 1) RRETURN(MATCH_NOMATCH);
+      if (md->lcc[ecode[1]] != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
+      ecode += 2;
+      }
+    break;
+
+    /* Match a single character repeatedly; different opcodes share code. */
+
+    case OP_EXACT:
+    min = max = GET2(ecode, 1);
+    ecode += 3;
+    goto REPEATCHAR;
+
+    case OP_UPTO:
+    case OP_MINUPTO:
+    min = 0;
+    max = GET2(ecode, 1);
+    minimize = *ecode == OP_MINUPTO;
+    ecode += 3;
+    goto REPEATCHAR;
+
+    case OP_STAR:
+    case OP_MINSTAR:
+    case OP_PLUS:
+    case OP_MINPLUS:
+    case OP_QUERY:
+    case OP_MINQUERY:
+    c = *ecode++ - OP_STAR;
+    minimize = (c & 1) != 0;
+    min = rep_min[c];                 /* Pick up values from tables; */
+    max = rep_max[c];                 /* zero for max => infinity */
+    if (max == 0) max = INT_MAX;
+
+    /* Common code for all repeated single-character matches. We can give
+    up quickly if there are fewer than the minimum number of characters left in
+    the subject. */
+
+    REPEATCHAR:
+#ifdef SUPPORT_UTF8
+    if (utf8)
+      {
+      length = 1;
+      charptr = ecode;
+      GETCHARLEN(fc, ecode, length);
+      if (min * length > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
+      ecode += length;
+
+      /* Handle multibyte character matching specially here. There is
+      support for caseless matching if UCP support is present. */
+
+      if (length > 1)
+        {
+        int oclength = 0;
+        uschar occhars[8];
+
+#ifdef SUPPORT_UCP
+        int othercase;
+        int chartype;
+        if ((ims & PCRE_CASELESS) != 0 &&
+             ucp_findchar(fc, &chartype, &othercase) >= 0 &&
+             othercase > 0)
+          oclength = _pcre_ord2utf8(othercase, occhars);
+#endif  /* SUPPORT_UCP */
+
+        for (i = 1; i <= min; i++)
+          {
+          if (memcmp(eptr, charptr, length) == 0) eptr += length;
+          /* Need braces because of following else */
+          else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
+          else
+            {
+            if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
+            eptr += oclength;
+            }
+          }
+
+        if (min == max) continue;
+
+        if (minimize)
+          {
+          for (fi = min;; fi++)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+            if (memcmp(eptr, charptr, length) == 0) eptr += length;
+            /* Need braces because of following else */
+            else if (oclength == 0) { RRETURN(MATCH_NOMATCH); }
+            else
+              {
+              if (memcmp(eptr, occhars, oclength) != 0) RRETURN(MATCH_NOMATCH);
+              eptr += oclength;
+              }
+            }
+          /* Control never gets here */
+          }
+        else
+          {
+          pp = eptr;
+          for (i = min; i < max; i++)
+            {
+            if (eptr > md->end_subject - length) break;
+            if (memcmp(eptr, charptr, length) == 0) eptr += length;
+            else if (oclength == 0) break;
+            else
+              {
+              if (memcmp(eptr, occhars, oclength) != 0) break;
+              eptr += oclength;
+              }
+            }
+          while (eptr >= pp)
+           {
+           RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+           if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+           eptr -= length;
+           }
+          RRETURN(MATCH_NOMATCH);
+          }
+        /* Control never gets here */
+        }
+
+      /* If the length of a UTF-8 character is 1, we fall through here, and
+      obey the code as for non-UTF-8 characters below, though in this case the
+      value of fc will always be < 128. */
+      }
+    else
+#endif  /* SUPPORT_UTF8 */
+
+    /* When not in UTF-8 mode, load a single-byte character. */
+      {
+      if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
+      fc = *ecode++;
+      }
+
+    /* The value of fc at this point is always less than 256, though we may or
+    may not be in UTF-8 mode. The code is duplicated for the caseless and
+    caseful cases, for speed, since matching characters is likely to be quite
+    common. First, ensure the minimum number of matches are present. If min =
+    max, continue at the same level without recursing. Otherwise, if
+    minimizing, keep trying the rest of the expression and advancing one
+    matching character if failing, up to the maximum. Alternatively, if
+    maximizing, find the maximum number of characters and work backwards. */
+
+    DPRINTF(("matching %c{%d,%d} against subject %.*s\n", fc, min, max,
+      max, eptr));
+
+    if ((ims & PCRE_CASELESS) != 0)
+      {
+      fc = md->lcc[fc];
+      for (i = 1; i <= min; i++)
+        if (fc != md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
+      if (min == max) continue;
+      if (minimize)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject ||
+              fc != md->lcc[*eptr++])
+            RRETURN(MATCH_NOMATCH);
+          }
+        /* Control never gets here */
+        }
+      else
+        {
+        pp = eptr;
+        for (i = min; i < max; i++)
+          {
+          if (eptr >= md->end_subject || fc != md->lcc[*eptr]) break;
+          eptr++;
+          }
+        while (eptr >= pp)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          eptr--;
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          }
+        RRETURN(MATCH_NOMATCH);
+        }
+      /* Control never gets here */
+      }
+
+    /* Caseful comparisons (includes all multi-byte characters) */
+
+    else
+      {
+      for (i = 1; i <= min; i++) if (fc != *eptr++) RRETURN(MATCH_NOMATCH);
+      if (min == max) continue;
+      if (minimize)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject || fc != *eptr++)
+            RRETURN(MATCH_NOMATCH);
+          }
+        /* Control never gets here */
+        }
+      else
+        {
+        pp = eptr;
+        for (i = min; i < max; i++)
+          {
+          if (eptr >= md->end_subject || fc != *eptr) break;
+          eptr++;
+          }
+        while (eptr >= pp)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          eptr--;
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          }
+        RRETURN(MATCH_NOMATCH);
+        }
+      }
+    /* Control never gets here */
+
+    /* Match a negated single one-byte character. The character we are
+    checking can be multibyte. */
+
+    case OP_NOT:
+    if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+    ecode++;
+    GETCHARINCTEST(c, eptr);
+    if ((ims & PCRE_CASELESS) != 0)
+      {
+#ifdef SUPPORT_UTF8
+      if (c < 256)
+#endif
+      c = md->lcc[c];
+      if (md->lcc[*ecode++] == c) RRETURN(MATCH_NOMATCH);
+      }
+    else
+      {
+      if (*ecode++ == c) RRETURN(MATCH_NOMATCH);
+      }
+    break;
+
+    /* Match a negated single one-byte character repeatedly. This is almost a
+    repeat of the code for a repeated single character, but I haven't found a
+    nice way of commoning these up that doesn't require a test of the
+    positive/negative option for each character match. Maybe that wouldn't add
+    very much to the time taken, but character matching *is* what this is all
+    about... */
+
+    case OP_NOTEXACT:
+    min = max = GET2(ecode, 1);
+    ecode += 3;
+    goto REPEATNOTCHAR;
+
+    case OP_NOTUPTO:
+    case OP_NOTMINUPTO:
+    min = 0;
+    max = GET2(ecode, 1);
+    minimize = *ecode == OP_NOTMINUPTO;
+    ecode += 3;
+    goto REPEATNOTCHAR;
+
+    case OP_NOTSTAR:
+    case OP_NOTMINSTAR:
+    case OP_NOTPLUS:
+    case OP_NOTMINPLUS:
+    case OP_NOTQUERY:
+    case OP_NOTMINQUERY:
+    c = *ecode++ - OP_NOTSTAR;
+    minimize = (c & 1) != 0;
+    min = rep_min[c];                 /* Pick up values from tables; */
+    max = rep_max[c];                 /* zero for max => infinity */
+    if (max == 0) max = INT_MAX;
+
+    /* Common code for all repeated single-byte matches. We can give up quickly
+    if there are fewer than the minimum number of bytes left in the
+    subject. */
+
+    REPEATNOTCHAR:
+    if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
+    fc = *ecode++;
+
+    /* The code is duplicated for the caseless and caseful cases, for speed,
+    since matching characters is likely to be quite common. First, ensure the
+    minimum number of matches are present. If min = max, continue at the same
+    level without recursing. Otherwise, if minimizing, keep trying the rest of
+    the expression and advancing one matching character if failing, up to the
+    maximum. Alternatively, if maximizing, find the maximum number of
+    characters and work backwards. */
+
+    DPRINTF(("negative matching %c{%d,%d} against subject %.*s\n", fc, min, max,
+      max, eptr));
+
+    if ((ims & PCRE_CASELESS) != 0)
+      {
+      fc = md->lcc[fc];
+
+#ifdef SUPPORT_UTF8
+      /* UTF-8 mode */
+      if (utf8)
+        {
+        register int d;
+        for (i = 1; i <= min; i++)
+          {
+          GETCHARINC(d, eptr);
+          if (d < 256) d = md->lcc[d];
+          if (fc == d) RRETURN(MATCH_NOMATCH);
+          }
+        }
+      else
+#endif
+
+      /* Not UTF-8 mode */
+        {
+        for (i = 1; i <= min; i++)
+          if (fc == md->lcc[*eptr++]) RRETURN(MATCH_NOMATCH);
+        }
+
+      if (min == max) continue;
+
+      if (minimize)
+        {
+#ifdef SUPPORT_UTF8
+        /* UTF-8 mode */
+        if (utf8)
+          {
+          register int d;
+          for (fi = min;; fi++)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            GETCHARINC(d, eptr);
+            if (d < 256) d = md->lcc[d];
+            if (fi >= max || eptr >= md->end_subject || fc == d)
+              RRETURN(MATCH_NOMATCH);
+            }
+          }
+        else
+#endif
+        /* Not UTF-8 mode */
+          {
+          for (fi = min;; fi++)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (fi >= max || eptr >= md->end_subject || fc == md->lcc[*eptr++])
+              RRETURN(MATCH_NOMATCH);
+            }
+          }
+        /* Control never gets here */
+        }
+
+      /* Maximize case */
+
+      else
+        {
+        pp = eptr;
+
+#ifdef SUPPORT_UTF8
+        /* UTF-8 mode */
+        if (utf8)
+          {
+          register int d;
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(d, eptr, len);
+            if (d < 256) d = md->lcc[d];
+            if (fc == d) break;
+            eptr += len;
+            }
+          for(;;)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (eptr-- == pp) break;        /* Stop if tried at original pos */
+            BACKCHAR(eptr);
+            }
+          }
+        else
+#endif
+        /* Not UTF-8 mode */
+          {
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || fc == md->lcc[*eptr]) break;
+            eptr++;
+            }
+          while (eptr >= pp)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            eptr--;
+            }
+          }
+
+        RRETURN(MATCH_NOMATCH);
+        }
+      /* Control never gets here */
+      }
+
+    /* Caseful comparisons */
+
+    else
+      {
+#ifdef SUPPORT_UTF8
+      /* UTF-8 mode */
+      if (utf8)
+        {
+        register int d;
+        for (i = 1; i <= min; i++)
+          {
+          GETCHARINC(d, eptr);
+          if (fc == d) RRETURN(MATCH_NOMATCH);
+          }
+        }
+      else
+#endif
+      /* Not UTF-8 mode */
+        {
+        for (i = 1; i <= min; i++)
+          if (fc == *eptr++) RRETURN(MATCH_NOMATCH);
+        }
+
+      if (min == max) continue;
+
+      if (minimize)
+        {
+#ifdef SUPPORT_UTF8
+        /* UTF-8 mode */
+        if (utf8)
+          {
+          register int d;
+          for (fi = min;; fi++)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            GETCHARINC(d, eptr);
+            if (fi >= max || eptr >= md->end_subject || fc == d)
+              RRETURN(MATCH_NOMATCH);
+            }
+          }
+        else
+#endif
+        /* Not UTF-8 mode */
+          {
+          for (fi = min;; fi++)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (fi >= max || eptr >= md->end_subject || fc == *eptr++)
+              RRETURN(MATCH_NOMATCH);
+            }
+          }
+        /* Control never gets here */
+        }
+
+      /* Maximize case */
+
+      else
+        {
+        pp = eptr;
+
+#ifdef SUPPORT_UTF8
+        /* UTF-8 mode */
+        if (utf8)
+          {
+          register int d;
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(d, eptr, len);
+            if (fc == d) break;
+            eptr += len;
+            }
+          for(;;)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            if (eptr-- == pp) break;        /* Stop if tried at original pos */
+            BACKCHAR(eptr);
+            }
+          }
+        else
+#endif
+        /* Not UTF-8 mode */
+          {
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || fc == *eptr) break;
+            eptr++;
+            }
+          while (eptr >= pp)
+            {
+            RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+            if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+            eptr--;
+            }
+          }
+
+        RRETURN(MATCH_NOMATCH);
+        }
+      }
+    /* Control never gets here */
+
+    /* Match a single character type repeatedly; several different opcodes
+    share code. This is very similar to the code for single characters, but we
+    repeat it in the interests of efficiency. */
+
+    case OP_TYPEEXACT:
+    min = max = GET2(ecode, 1);
+    minimize = TRUE;
+    ecode += 3;
+    goto REPEATTYPE;
+
+    case OP_TYPEUPTO:
+    case OP_TYPEMINUPTO:
+    min = 0;
+    max = GET2(ecode, 1);
+    minimize = *ecode == OP_TYPEMINUPTO;
+    ecode += 3;
+    goto REPEATTYPE;
+
+    case OP_TYPESTAR:
+    case OP_TYPEMINSTAR:
+    case OP_TYPEPLUS:
+    case OP_TYPEMINPLUS:
+    case OP_TYPEQUERY:
+    case OP_TYPEMINQUERY:
+    c = *ecode++ - OP_TYPESTAR;
+    minimize = (c & 1) != 0;
+    min = rep_min[c];                 /* Pick up values from tables; */
+    max = rep_max[c];                 /* zero for max => infinity */
+    if (max == 0) max = INT_MAX;
+
+    /* Common code for all repeated single character type matches. Note that
+    in UTF-8 mode, '.' matches a character of any length, but for the other
+    character types, the valid characters are all one-byte long. */
+
+    REPEATTYPE:
+    ctype = *ecode++;      /* Code for the character type */
+
+#ifdef SUPPORT_UCP
+    if (ctype == OP_PROP || ctype == OP_NOTPROP)
+      {
+      prop_fail_result = ctype == OP_NOTPROP;
+      prop_type = *ecode++;
+      if (prop_type >= 128)
+        {
+        prop_test_against = prop_type - 128;
+        prop_test_variable = &prop_category;
+        }
+      else
+        {
+        prop_test_against = prop_type;
+        prop_test_variable = &prop_chartype;
+        }
+      }
+    else prop_type = -1;
+#endif
+
+    /* First, ensure the minimum number of matches are present. Use inline
+    code for maximizing the speed, and do the type test once at the start
+    (i.e. keep it out of the loop). Also we can test that there are at least
+    the minimum number of bytes before we start. This isn't as effective in
+    UTF-8 mode, but it does no harm. Separate the UTF-8 code completely as that
+    is tidier. Also separate the UCP code, which can be the same for both UTF-8
+    and single-bytes. */
+
+    if (min > md->end_subject - eptr) RRETURN(MATCH_NOMATCH);
+    if (min > 0)
+      {
+#ifdef SUPPORT_UCP
+      if (prop_type > 0)
+        {
+        for (i = 1; i <= min; i++)
+          {
+          GETCHARINC(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
+            RRETURN(MATCH_NOMATCH);
+          }
+        }
+
+      /* Match extended Unicode sequences. We will get here only if the
+      support is in the binary; otherwise a compile-time error occurs. */
+
+      else if (ctype == OP_EXTUNI)
+        {
+        for (i = 1; i <= min; i++)
+          {
+          GETCHARINCTEST(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
+          while (eptr < md->end_subject)
+            {
+            int len = 1;
+            if (!utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr += len;
+            }
+          }
+        }
+
+      else
+#endif     /* SUPPORT_UCP */
+
+/* Handle all other cases when the coding is UTF-8 */
+
+#ifdef SUPPORT_UTF8
+      if (utf8) switch(ctype)
+        {
+        case OP_ANY:
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject ||
+             (*eptr++ == NEWLINE && (ims & PCRE_DOTALL) == 0))
+            RRETURN(MATCH_NOMATCH);
+          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+          }
+        break;
+
+        case OP_ANYBYTE:
+        eptr += min;
+        break;
+
+        case OP_NOT_DIGIT:
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          GETCHARINC(c, eptr);
+          if (c < 128 && (md->ctypes[c] & ctype_digit) != 0)
+            RRETURN(MATCH_NOMATCH);
+          }
+        break;
+
+        case OP_DIGIT:
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject ||
+             *eptr >= 128 || (md->ctypes[*eptr++] & ctype_digit) == 0)
+            RRETURN(MATCH_NOMATCH);
+          /* No need to skip more bytes - we know it's a 1-byte character */
+          }
+        break;
+
+        case OP_NOT_WHITESPACE:
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject ||
+             (*eptr < 128 && (md->ctypes[*eptr++] & ctype_space) != 0))
+            RRETURN(MATCH_NOMATCH);
+          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+          }
+        break;
+
+        case OP_WHITESPACE:
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject ||
+             *eptr >= 128 || (md->ctypes[*eptr++] & ctype_space) == 0)
+            RRETURN(MATCH_NOMATCH);
+          /* No need to skip more bytes - we know it's a 1-byte character */
+          }
+        break;
+
+        case OP_NOT_WORDCHAR:
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject ||
+             (*eptr < 128 && (md->ctypes[*eptr++] & ctype_word) != 0))
+            RRETURN(MATCH_NOMATCH);
+          while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+          }
+        break;
+
+        case OP_WORDCHAR:
+        for (i = 1; i <= min; i++)
+          {
+          if (eptr >= md->end_subject ||
+             *eptr >= 128 || (md->ctypes[*eptr++] & ctype_word) == 0)
+            RRETURN(MATCH_NOMATCH);
+          /* No need to skip more bytes - we know it's a 1-byte character */
+          }
+        break;
+
+        default:
+        RRETURN(PCRE_ERROR_INTERNAL);
+        }  /* End switch(ctype) */
+
+      else
+#endif     /* SUPPORT_UTF8 */
+
+      /* Code for the non-UTF-8 case for minimum matching of operators other
+      than OP_PROP and OP_NOTPROP. */
+
+      switch(ctype)
+        {
+        case OP_ANY:
+        if ((ims & PCRE_DOTALL) == 0)
+          {
+          for (i = 1; i <= min; i++)
+            if (*eptr++ == NEWLINE) RRETURN(MATCH_NOMATCH);
+          }
+        else eptr += min;
+        break;
+
+        case OP_ANYBYTE:
+        eptr += min;
+        break;
+
+        case OP_NOT_DIGIT:
+        for (i = 1; i <= min; i++)
+          if ((md->ctypes[*eptr++] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
+        break;
+
+        case OP_DIGIT:
+        for (i = 1; i <= min; i++)
+          if ((md->ctypes[*eptr++] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
+        break;
+
+        case OP_NOT_WHITESPACE:
+        for (i = 1; i <= min; i++)
+          if ((md->ctypes[*eptr++] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
+        break;
+
+        case OP_WHITESPACE:
+        for (i = 1; i <= min; i++)
+          if ((md->ctypes[*eptr++] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
+        break;
+
+        case OP_NOT_WORDCHAR:
+        for (i = 1; i <= min; i++)
+          if ((md->ctypes[*eptr++] & ctype_word) != 0)
+            RRETURN(MATCH_NOMATCH);
+        break;
+
+        case OP_WORDCHAR:
+        for (i = 1; i <= min; i++)
+          if ((md->ctypes[*eptr++] & ctype_word) == 0)
+            RRETURN(MATCH_NOMATCH);
+        break;
+
+        default:
+        RRETURN(PCRE_ERROR_INTERNAL);
+        }
+      }
+
+    /* If min = max, continue at the same level without recursing */
+
+    if (min == max) continue;
+
+    /* If minimizing, we have to test the rest of the pattern before each
+    subsequent match. Again, separate the UTF-8 case for speed, and also
+    separate the UCP cases. */
+
+    if (minimize)
+      {
+#ifdef SUPPORT_UCP
+      if (prop_type > 0)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          GETCHARINC(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
+            RRETURN(MATCH_NOMATCH);
+          }
+        }
+
+      /* Match extended Unicode sequences. We will get here only if the
+      support is in the binary; otherwise a compile-time error occurs. */
+
+      else if (ctype == OP_EXTUNI)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          GETCHARINCTEST(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if (prop_category == ucp_M) RRETURN(MATCH_NOMATCH);
+          while (eptr < md->end_subject)
+            {
+            int len = 1;
+            if (!utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr += len;
+            }
+          }
+        }
+
+      else
+#endif     /* SUPPORT_UCP */
+
+#ifdef SUPPORT_UTF8
+      /* UTF-8 mode */
+      if (utf8)
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+
+          GETCHARINC(c, eptr);
+          switch(ctype)
+            {
+            case OP_ANY:
+            if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_ANYBYTE:
+            break;
+
+            case OP_NOT_DIGIT:
+            if (c < 256 && (md->ctypes[c] & ctype_digit) != 0)
+              RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_DIGIT:
+            if (c >= 256 || (md->ctypes[c] & ctype_digit) == 0)
+              RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_NOT_WHITESPACE:
+            if (c < 256 && (md->ctypes[c] & ctype_space) != 0)
+              RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_WHITESPACE:
+            if  (c >= 256 || (md->ctypes[c] & ctype_space) == 0)
+              RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_NOT_WORDCHAR:
+            if (c < 256 && (md->ctypes[c] & ctype_word) != 0)
+              RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_WORDCHAR:
+            if (c >= 256 || (md->ctypes[c] & ctype_word) == 0)
+              RRETURN(MATCH_NOMATCH);
+            break;
+
+            default:
+            RRETURN(PCRE_ERROR_INTERNAL);
+            }
+          }
+        }
+      else
+#endif
+      /* Not UTF-8 mode */
+        {
+        for (fi = min;; fi++)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (fi >= max || eptr >= md->end_subject) RRETURN(MATCH_NOMATCH);
+          c = *eptr++;
+          switch(ctype)
+            {
+            case OP_ANY:
+            if ((ims & PCRE_DOTALL) == 0 && c == NEWLINE) RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_ANYBYTE:
+            break;
+
+            case OP_NOT_DIGIT:
+            if ((md->ctypes[c] & ctype_digit) != 0) RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_DIGIT:
+            if ((md->ctypes[c] & ctype_digit) == 0) RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_NOT_WHITESPACE:
+            if ((md->ctypes[c] & ctype_space) != 0) RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_WHITESPACE:
+            if  ((md->ctypes[c] & ctype_space) == 0) RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_NOT_WORDCHAR:
+            if ((md->ctypes[c] & ctype_word) != 0) RRETURN(MATCH_NOMATCH);
+            break;
+
+            case OP_WORDCHAR:
+            if ((md->ctypes[c] & ctype_word) == 0) RRETURN(MATCH_NOMATCH);
+            break;
+
+            default:
+            RRETURN(PCRE_ERROR_INTERNAL);
+            }
+          }
+        }
+      /* Control never gets here */
+      }
+
+    /* If maximizing it is worth using inline code for speed, doing the type
+    test once at the start (i.e. keep it out of the loop). Again, keep the
+    UTF-8 and UCP stuff separate. */
+
+    else
+      {
+      pp = eptr;  /* Remember where we started */
+
+#ifdef SUPPORT_UCP
+      if (prop_type > 0)
+        {
+        for (i = min; i < max; i++)
+          {
+          int len = 1;
+          if (eptr >= md->end_subject) break;
+          GETCHARLEN(c, eptr, len);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if ((*prop_test_variable == prop_test_against) == prop_fail_result)
+            break;
+          eptr+= len;
+          }
+
+        /* eptr is now past the end of the maximum run */
+
+        for(;;)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (eptr-- == pp) break;        /* Stop if tried at original pos */
+          BACKCHAR(eptr);
+          }
+        }
+
+      /* Match extended Unicode sequences. We will get here only if the
+      support is in the binary; otherwise a compile-time error occurs. */
+
+      else if (ctype == OP_EXTUNI)
+        {
+        for (i = min; i < max; i++)
+          {
+          if (eptr >= md->end_subject) break;
+          GETCHARINCTEST(c, eptr);
+          prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+          if (prop_category == ucp_M) break;
+          while (eptr < md->end_subject)
+            {
+            int len = 1;
+            if (!utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr += len;
+            }
+          }
+
+        /* eptr is now past the end of the maximum run */
+
+        for(;;)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (eptr-- == pp) break;        /* Stop if tried at original pos */
+          for (;;)                        /* Move back over one extended */
+            {
+            int len = 1;
+            BACKCHAR(eptr);
+            if (!utf8) c = *eptr; else
+              {
+              GETCHARLEN(c, eptr, len);
+              }
+            prop_category = ucp_findchar(c, &prop_chartype, &prop_othercase);
+            if (prop_category != ucp_M) break;
+            eptr--;
+            }
+          }
+        }
+
+      else
+#endif   /* SUPPORT_UCP */
+
+#ifdef SUPPORT_UTF8
+      /* UTF-8 mode */
+
+      if (utf8)
+        {
+        switch(ctype)
+          {
+          case OP_ANY:
+
+          /* Special code is required for UTF8, but when the maximum is unlimited
+          we don't need it, so we repeat the non-UTF8 code. This is probably
+          worth it, because .* is quite a common idiom. */
+
+          if (max < INT_MAX)
+            {
+            if ((ims & PCRE_DOTALL) == 0)
+              {
+              for (i = min; i < max; i++)
+                {
+                if (eptr >= md->end_subject || *eptr == NEWLINE) break;
+                eptr++;
+                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+                }
+              }
+            else
+              {
+              for (i = min; i < max; i++)
+                {
+                eptr++;
+                while (eptr < md->end_subject && (*eptr & 0xc0) == 0x80) eptr++;
+                }
+              }
+            }
+
+          /* Handle unlimited UTF-8 repeat */
+
+          else
+            {
+            if ((ims & PCRE_DOTALL) == 0)
+              {
+              for (i = min; i < max; i++)
+                {
+                if (eptr >= md->end_subject || *eptr == NEWLINE) break;
+                eptr++;
+                }
+              break;
+              }
+            else
+              {
+              c = max - min;
+              if (c > md->end_subject - eptr) c = md->end_subject - eptr;
+              eptr += c;
+              }
+            }
+          break;
+
+          /* The byte case is the same as non-UTF8 */
+
+          case OP_ANYBYTE:
+          c = max - min;
+          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
+          eptr += c;
+          break;
+
+          case OP_NOT_DIGIT:
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(c, eptr, len);
+            if (c < 256 && (md->ctypes[c] & ctype_digit) != 0) break;
+            eptr+= len;
+            }
+          break;
+
+          case OP_DIGIT:
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(c, eptr, len);
+            if (c >= 256 ||(md->ctypes[c] & ctype_digit) == 0) break;
+            eptr+= len;
+            }
+          break;
+
+          case OP_NOT_WHITESPACE:
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(c, eptr, len);
+            if (c < 256 && (md->ctypes[c] & ctype_space) != 0) break;
+            eptr+= len;
+            }
+          break;
+
+          case OP_WHITESPACE:
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(c, eptr, len);
+            if (c >= 256 ||(md->ctypes[c] & ctype_space) == 0) break;
+            eptr+= len;
+            }
+          break;
+
+          case OP_NOT_WORDCHAR:
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(c, eptr, len);
+            if (c < 256 && (md->ctypes[c] & ctype_word) != 0) break;
+            eptr+= len;
+            }
+          break;
+
+          case OP_WORDCHAR:
+          for (i = min; i < max; i++)
+            {
+            int len = 1;
+            if (eptr >= md->end_subject) break;
+            GETCHARLEN(c, eptr, len);
+            if (c >= 256 || (md->ctypes[c] & ctype_word) == 0) break;
+            eptr+= len;
+            }
+          break;
+
+          default:
+          RRETURN(PCRE_ERROR_INTERNAL);
+          }
+
+        /* eptr is now past the end of the maximum run */
+
+        for(;;)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          if (eptr-- == pp) break;        /* Stop if tried at original pos */
+          BACKCHAR(eptr);
+          }
+        }
+      else
+#endif
+
+      /* Not UTF-8 mode */
+        {
+        switch(ctype)
+          {
+          case OP_ANY:
+          if ((ims & PCRE_DOTALL) == 0)
+            {
+            for (i = min; i < max; i++)
+              {
+              if (eptr >= md->end_subject || *eptr == NEWLINE) break;
+              eptr++;
+              }
+            break;
+            }
+          /* For DOTALL case, fall through and treat as \C */
+
+          case OP_ANYBYTE:
+          c = max - min;
+          if (c > md->end_subject - eptr) c = md->end_subject - eptr;
+          eptr += c;
+          break;
+
+          case OP_NOT_DIGIT:
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) != 0)
+              break;
+            eptr++;
+            }
+          break;
+
+          case OP_DIGIT:
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_digit) == 0)
+              break;
+            eptr++;
+            }
+          break;
+
+          case OP_NOT_WHITESPACE:
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) != 0)
+              break;
+            eptr++;
+            }
+          break;
+
+          case OP_WHITESPACE:
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_space) == 0)
+              break;
+            eptr++;
+            }
+          break;
+
+          case OP_NOT_WORDCHAR:
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) != 0)
+              break;
+            eptr++;
+            }
+          break;
+
+          case OP_WORDCHAR:
+          for (i = min; i < max; i++)
+            {
+            if (eptr >= md->end_subject || (md->ctypes[*eptr] & ctype_word) == 0)
+              break;
+            eptr++;
+            }
+          break;
+
+          default:
+          RRETURN(PCRE_ERROR_INTERNAL);
+          }
+
+        /* eptr is now past the end of the maximum run */
+
+        while (eptr >= pp)
+          {
+          RMATCH(rrc, eptr, ecode, offset_top, md, ims, eptrb, 0);
+          eptr--;
+          if (rrc != MATCH_NOMATCH) RRETURN(rrc);
+          }
+        }
+
+      /* Get here if we can't make it match with any permitted repetitions */
+
+      RRETURN(MATCH_NOMATCH);
+      }
+    /* Control never gets here */
+
+    /* There's been some horrible disaster. Since all codes > OP_BRA are
+    for capturing brackets, and there shouldn't be any gaps between 0 and
+    OP_BRA, arrival here can only mean there is something seriously wrong
+    in the code above or the OP_xxx definitions. */
+
+    default:
+    DPRINTF(("Unknown opcode %d\n", *ecode));
+    RRETURN(PCRE_ERROR_UNKNOWN_NODE);
+    }
+
+  /* Do not stick any code in here without much thought; it is assumed
+  that "continue" in the code above comes out to here to repeat the main
+  loop. */
+
+  }             /* End of main loop */
+/* Control never reaches here */
+}
+
+
+/***************************************************************************
+****************************************************************************
+                   RECURSION IN THE match() FUNCTION
+
+Undefine all the macros that were defined above to handle this. */
+
+#ifdef NO_RECURSE
+#undef eptr
+#undef ecode
+#undef offset_top
+#undef ims
+#undef eptrb
+#undef flags
+
+#undef callpat
+#undef charptr
+#undef data
+#undef next
+#undef pp
+#undef prev
+#undef saved_eptr
+
+#undef new_recursive
+
+#undef cur_is_word
+#undef condition
+#undef minimize
+#undef prev_is_word
+
+#undef original_ims
+
+#undef ctype
+#undef length
+#undef max
+#undef min
+#undef number
+#undef offset
+#undef op
+#undef save_capture_last
+#undef save_offset1
+#undef save_offset2
+#undef save_offset3
+#undef stacksave
+
+#undef newptrb
+
+#endif
+
+/* These two are defined as macros in both cases */
+
+#undef fc
+#undef fi
+
+/***************************************************************************
+***************************************************************************/
+
+
+
+/*************************************************
+*         Execute a Regular Expression           *
+*************************************************/
+
+/* This function applies a compiled re to a subject string and picks out
+portions of the string if it matches. Two elements in the vector are set for
+each substring: the offsets to the start and end of the substring.
+
+Arguments:
+  argument_re     points to the compiled expression
+  extra_data      points to extra data or is NULL
+  subject         points to the subject string
+  length          length of subject string (may contain binary zeros)
+  start_offset    where to start in the subject string
+  options         option bits
+  offsets         points to a vector of ints to be filled in with offsets
+  offsetcount     the number of elements in the vector
+
+Returns:          > 0 => success; value is the number of elements filled in
+                  = 0 => success, but offsets is not big enough
+                   -1 => failed to match
+                 < -1 => some kind of unexpected problem
+*/
+
+EXPORT int
+pcre_exec(const pcre *argument_re, const pcre_extra *extra_data,
+  const char *subject, int length, int start_offset, int options, int *offsets,
+  int offsetcount)
+{
+int rc, resetcount, ocount;
+int first_byte = -1;
+int req_byte = -1;
+int req_byte2 = -1;
+unsigned long int ims = 0;
+BOOL using_temporary_offsets = FALSE;
+BOOL anchored;
+BOOL startline;
+BOOL firstline;
+BOOL first_byte_caseless = FALSE;
+BOOL req_byte_caseless = FALSE;
+match_data match_block;
+const uschar *tables;
+const uschar *start_bits = NULL;
+const uschar *start_match = (const uschar *)subject + start_offset;
+const uschar *end_subject;
+const uschar *req_byte_ptr = start_match - 1;
+
+pcre_study_data internal_study;
+const pcre_study_data *study;
+
+real_pcre internal_re;
+const real_pcre *external_re = (const real_pcre *)argument_re;
+const real_pcre *re = external_re;
+
+/* Plausibility checks */
+
+if ((options & ~PUBLIC_EXEC_OPTIONS) != 0) return PCRE_ERROR_BADOPTION;
+if (re == NULL || subject == NULL ||
+   (offsets == NULL && offsetcount > 0)) return PCRE_ERROR_NULL;
+if (offsetcount < 0) return PCRE_ERROR_BADCOUNT;
+
+/* Fish out the optional data from the extra_data structure, first setting
+the default values. */
+
+study = NULL;
+match_block.match_limit = MATCH_LIMIT;
+match_block.callout_data = NULL;
+
+/* The table pointer is always in native byte order. */
+
+tables = external_re->tables;
+
+if (extra_data != NULL)
+  {
+  register unsigned int flags = extra_data->flags;
+  if ((flags & PCRE_EXTRA_STUDY_DATA) != 0)
+    study = (const pcre_study_data *)extra_data->study_data;
+  if ((flags & PCRE_EXTRA_MATCH_LIMIT) != 0)
+    match_block.match_limit = extra_data->match_limit;
+  if ((flags & PCRE_EXTRA_CALLOUT_DATA) != 0)
+    match_block.callout_data = extra_data->callout_data;
+  if ((flags & PCRE_EXTRA_TABLES) != 0) tables = extra_data->tables;
+  }
+
+/* If the exec call supplied NULL for tables, use the inbuilt ones. This
+is a feature that makes it possible to save compiled regex and re-use them
+in other programs later. */
+
+if (tables == NULL) tables = _pcre_default_tables;
+
+/* Check that the first field in the block is the magic number. If it is not,
+test for a regex that was compiled on a host of opposite endianness. If this is
+the case, flipped values are put in internal_re and internal_study if there was
+study data too. */
+
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  re = _pcre_try_flipped(re, &internal_re, study, &internal_study);
+  if (re == NULL) return PCRE_ERROR_BADMAGIC;
+  if (study != NULL) study = &internal_study;
+  }
+
+/* Set up other data */
+
+anchored = ((re->options | options) & PCRE_ANCHORED) != 0;
+startline = (re->options & PCRE_STARTLINE) != 0;
+firstline = (re->options & PCRE_FIRSTLINE) != 0;
+
+/* The code starts after the real_pcre block and the capture name table. */
+
+match_block.start_code = (const uschar *)external_re + re->name_table_offset +
+  re->name_count * re->name_entry_size;
+
+match_block.start_subject = (const uschar *)subject;
+match_block.start_offset = start_offset;
+match_block.end_subject = match_block.start_subject + length;
+end_subject = match_block.end_subject;
+
+match_block.endonly = (re->options & PCRE_DOLLAR_ENDONLY) != 0;
+match_block.utf8 = (re->options & PCRE_UTF8) != 0;
+
+match_block.notbol = (options & PCRE_NOTBOL) != 0;
+match_block.noteol = (options & PCRE_NOTEOL) != 0;
+match_block.notempty = (options & PCRE_NOTEMPTY) != 0;
+match_block.partial = (options & PCRE_PARTIAL) != 0;
+match_block.hitend = FALSE;
+
+match_block.recursive = NULL;                   /* No recursion at top level */
+
+match_block.lcc = tables + lcc_offset;
+match_block.ctypes = tables + ctypes_offset;
+
+/* Partial matching is supported only for a restricted set of regexes at the
+moment. */
+
+if (match_block.partial && (re->options & PCRE_NOPARTIAL) != 0)
+  return PCRE_ERROR_BADPARTIAL;
+
+/* Check a UTF-8 string if required. Unfortunately there's no way of passing
+back the character offset. */
+
+#ifdef SUPPORT_UTF8
+if (match_block.utf8 && (options & PCRE_NO_UTF8_CHECK) == 0)
+  {
+  if (_pcre_valid_utf8((uschar *)subject, length) >= 0)
+    return PCRE_ERROR_BADUTF8;
+  if (start_offset > 0 && start_offset < length)
+    {
+    int tb = ((uschar *)subject)[start_offset];
+    if (tb > 127)
+      {
+      tb &= 0xc0;
+      if (tb != 0 && tb != 0xc0) return PCRE_ERROR_BADUTF8_OFFSET;
+      }
+    }
+  }
+#endif
+
+/* The ims options can vary during the matching as a result of the presence
+of (?ims) items in the pattern. They are kept in a local variable so that
+restoring at the exit of a group is easy. */
+
+ims = re->options & (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL);
+
+/* If the expression has got more back references than the offsets supplied can
+hold, we get a temporary chunk of working store to use during the matching.
+Otherwise, we can use the vector supplied, rounding down its size to a multiple
+of 3. */
+
+ocount = offsetcount - (offsetcount % 3);
+
+if (re->top_backref > 0 && re->top_backref >= ocount/3)
+  {
+  ocount = re->top_backref * 3 + 3;
+  match_block.offset_vector = (int *)(pcre_malloc)(ocount * sizeof(int));
+  if (match_block.offset_vector == NULL) return PCRE_ERROR_NOMEMORY;
+  using_temporary_offsets = TRUE;
+  DPRINTF(("Got memory to hold back references\n"));
+  }
+else match_block.offset_vector = offsets;
+
+match_block.offset_end = ocount;
+match_block.offset_max = (2*ocount)/3;
+match_block.offset_overflow = FALSE;
+match_block.capture_last = -1;
+
+/* Compute the minimum number of offsets that we need to reset each time. Doing
+this makes a huge difference to execution time when there aren't many brackets
+in the pattern. */
+
+resetcount = 2 + re->top_bracket * 2;
+if (resetcount > offsetcount) resetcount = ocount;
+
+/* Reset the working variable associated with each extraction. These should
+never be used unless previously set, but they get saved and restored, and so we
+initialize them to avoid reading uninitialized locations. */
+
+if (match_block.offset_vector != NULL)
+  {
+  register int *iptr = match_block.offset_vector + ocount;
+  register int *iend = iptr - resetcount/2 + 1;
+  while (--iptr >= iend) *iptr = -1;
+  }
+
+/* Set up the first character to match, if available. The first_byte value is
+never set for an anchored regular expression, but the anchoring may be forced
+at run time, so we have to test for anchoring. The first char may be unset for
+an unanchored pattern, of course. If there's no first char and the pattern was
+studied, there may be a bitmap of possible first characters. */
+
+if (!anchored)
+  {
+  if ((re->options & PCRE_FIRSTSET) != 0)
+    {
+    first_byte = re->first_byte & 255;
+    if ((first_byte_caseless = ((re->first_byte & REQ_CASELESS) != 0)) == TRUE)
+      first_byte = match_block.lcc[first_byte];
+    }
+  else
+    if (!startline && study != NULL &&
+      (study->options & PCRE_STUDY_MAPPED) != 0)
+        start_bits = study->start_bits;
+  }
+
+/* For anchored or unanchored matches, there may be a "last known required
+character" set. */
+
+if ((re->options & PCRE_REQCHSET) != 0)
+  {
+  req_byte = re->req_byte & 255;
+  req_byte_caseless = (re->req_byte & REQ_CASELESS) != 0;
+  req_byte2 = (tables + fcc_offset)[req_byte];  /* case flipped */
+  }
+
+/* Loop for handling unanchored repeated matching attempts; for anchored regexs
+the loop runs just once. */
+
+do
+  {
+  const uschar *save_end_subject = end_subject;
+
+  /* Reset the maximum number of extractions we might see. */
+
+  if (match_block.offset_vector != NULL)
+    {
+    register int *iptr = match_block.offset_vector;
+    register int *iend = iptr + resetcount;
+    while (iptr < iend) *iptr++ = -1;
+    }
+
+  /* Advance to a unique first char if possible. If firstline is TRUE, the
+  start of the match is constrained to the first line of a multiline string.
+  Implement this by temporarily adjusting end_subject so that we stop scanning
+  at a newline. If the match fails at the newline, later code breaks this loop.
+  */
+
+  if (firstline)
+    {
+    const uschar *t = start_match;
+    while (t < save_end_subject && *t != '\n') t++;
+    end_subject = t;
+    }
+
+  /* Now test for a unique first byte */
+
+  if (first_byte >= 0)
+    {
+    if (first_byte_caseless)
+      while (start_match < end_subject &&
+             match_block.lcc[*start_match] != first_byte)
+        start_match++;
+    else
+      while (start_match < end_subject && *start_match != first_byte)
+        start_match++;
+    }
+
+  /* Or to just after \n for a multiline match if possible */
+
+  else if (startline)
+    {
+    if (start_match > match_block.start_subject + start_offset)
+      {
+      while (start_match < end_subject && start_match[-1] != NEWLINE)
+        start_match++;
+      }
+    }
+
+  /* Or to a non-unique first char after study */
+
+  else if (start_bits != NULL)
+    {
+    while (start_match < end_subject)
+      {
+      register unsigned int c = *start_match;
+      if ((start_bits[c/8] & (1 << (c&7))) == 0) start_match++; else break;
+      }
+    }
+
+  /* Restore fudged end_subject */
+
+  end_subject = save_end_subject;
+
+#ifdef DEBUG  /* Sigh. Some compilers never learn. */
+  printf(">>>> Match against: ");
+  pchars(start_match, end_subject - start_match, TRUE, &match_block);
+  printf("\n");
+#endif
+
+  /* If req_byte is set, we know that that character must appear in the subject
+  for the match to succeed. If the first character is set, req_byte must be
+  later in the subject; otherwise the test starts at the match point. This
+  optimization can save a huge amount of backtracking in patterns with nested
+  unlimited repeats that aren't going to match. Writing separate code for
+  cased/caseless versions makes it go faster, as does using an autoincrement
+  and backing off on a match.
+
+  HOWEVER: when the subject string is very, very long, searching to its end can
+  take a long time, and give bad performance on quite ordinary patterns. This
+  showed up when somebody was matching /^C/ on a 32-megabyte string... so we
+  don't do this when the string is sufficiently long.
+
+  ALSO: this processing is disabled when partial matching is requested.
+  */
+
+  if (req_byte >= 0 &&
+      end_subject - start_match < REQ_BYTE_MAX &&
+      !match_block.partial)
+    {
+    register const uschar *p = start_match + ((first_byte >= 0)? 1 : 0);
+
+    /* We don't need to repeat the search if we haven't yet reached the
+    place we found it at last time. */
+
+    if (p > req_byte_ptr)
+      {
+      if (req_byte_caseless)
+        {
+        while (p < end_subject)
+          {
+          register int pp = *p++;
+          if (pp == req_byte || pp == req_byte2) { p--; break; }
+          }
+        }
+      else
+        {
+        while (p < end_subject)
+          {
+          if (*p++ == req_byte) { p--; break; }
+          }
+        }
+
+      /* If we can't find the required character, break the matching loop */
+
+      if (p >= end_subject) break;
+
+      /* If we have found the required character, save the point where we
+      found it, so that we don't search again next time round the loop if
+      the start hasn't passed this character yet. */
+
+      req_byte_ptr = p;
+      }
+    }
+
+  /* When a match occurs, substrings will be set for all internal extractions;
+  we just need to set up the whole thing as substring 0 before returning. If
+  there were too many extractions, set the return code to zero. In the case
+  where we had to get some local store to hold offsets for backreferences, copy
+  those back references that we can. In this case there need not be overflow
+  if certain parts of the pattern were not used. */
+
+  match_block.start_match = start_match;
+  match_block.match_call_count = 0;
+
+  rc = match(start_match, match_block.start_code, 2, &match_block, ims, NULL,
+    match_isgroup);
+
+  /* When the result is no match, if the subject's first character was a
+  newline and the PCRE_FIRSTLINE option is set, break (which will return
+  PCRE_ERROR_NOMATCH). The option requests that a match occur before the first
+  newline in the subject. Otherwise, advance the pointer to the next character
+  and continue - but the continuation will actually happen only when the
+  pattern is not anchored. */
+
+  if (rc == MATCH_NOMATCH)
+    {
+    if (firstline && *start_match == NEWLINE) break;
+    start_match++;
+#ifdef SUPPORT_UTF8
+    if (match_block.utf8)
+      while(start_match < end_subject && (*start_match & 0xc0) == 0x80)
+        start_match++;
+#endif
+    continue;
+    }
+
+  if (rc != MATCH_MATCH)
+    {
+    DPRINTF((">>>> error: returning %d\n", rc));
+    return rc;
+    }
+
+  /* We have a match! Copy the offset information from temporary store if
+  necessary */
+
+  if (using_temporary_offsets)
+    {
+    if (offsetcount >= 4)
+      {
+      memcpy(offsets + 2, match_block.offset_vector + 2,
+        (offsetcount - 2) * sizeof(int));
+      DPRINTF(("Copied offsets from temporary memory\n"));
+      }
+    if (match_block.end_offset_top > offsetcount)
+      match_block.offset_overflow = TRUE;
+
+    DPRINTF(("Freeing temporary memory\n"));
+    (pcre_free)(match_block.offset_vector);
+    }
+
+  rc = match_block.offset_overflow? 0 : match_block.end_offset_top/2;
+
+  if (offsetcount < 2) rc = 0; else
+    {
+    offsets[0] = start_match - match_block.start_subject;
+    offsets[1] = match_block.end_match_ptr - match_block.start_subject;
+    }
+
+  DPRINTF((">>>> returning %d\n", rc));
+  return rc;
+  }
+
+/* This "while" is the end of the "do" above */
+
+while (!anchored && start_match <= end_subject);
+
+if (using_temporary_offsets)
+  {
+  DPRINTF(("Freeing temporary memory\n"));
+  (pcre_free)(match_block.offset_vector);
+  }
+
+if (match_block.partial && match_block.hitend)
+  {
+  DPRINTF((">>>> returning PCRE_ERROR_PARTIAL\n"));
+  return PCRE_ERROR_PARTIAL;
+  }
+else
+  {
+  DPRINTF((">>>> returning PCRE_ERROR_NOMATCH\n"));
+  return PCRE_ERROR_NOMATCH;
+  }
+}
+
+/* End of pcre_exec.c */
diff -Nurp tin-1.7.8/pcre/pcre_fullinfo.c tin-1.7.9/pcre/pcre_fullinfo.c
--- tin-1.7.8/pcre/pcre_fullinfo.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_fullinfo.c	2005-06-28 10:31:26.328160620 +0200
@@ -0,0 +1,149 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/*PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_fullinfo(), which returns
+information about a compiled pattern. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*        Return info about compiled pattern      *
+*************************************************/
+
+/* This is a newer "info" function which has an extensible interface so
+that additional items can be added compatibly.
+
+Arguments:
+  argument_re      points to compiled code
+  extra_data       points extra data, or NULL
+  what             what information is required
+  where            where to put the information
+
+Returns:           0 if data returned, negative on error
+*/
+
+EXPORT int
+pcre_fullinfo(const pcre *argument_re, const pcre_extra *extra_data, int what,
+  void *where)
+{
+real_pcre internal_re;
+pcre_study_data internal_study;
+const real_pcre *re = (const real_pcre *)argument_re;
+const pcre_study_data *study = NULL;
+
+if (re == NULL || where == NULL) return PCRE_ERROR_NULL;
+
+if (extra_data != NULL && (extra_data->flags & PCRE_EXTRA_STUDY_DATA) != 0)
+  study = (const pcre_study_data *)extra_data->study_data;
+
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  re = _pcre_try_flipped(re, &internal_re, study, &internal_study);
+  if (re == NULL) return PCRE_ERROR_BADMAGIC;
+  if (study != NULL) study = &internal_study;
+  }
+
+switch (what)
+  {
+  case PCRE_INFO_OPTIONS:
+  *((unsigned long int *)where) = re->options & PUBLIC_OPTIONS;
+  break;
+
+  case PCRE_INFO_SIZE:
+  *((size_t *)where) = re->size;
+  break;
+
+  case PCRE_INFO_STUDYSIZE:
+  *((size_t *)where) = (study == NULL)? 0 : study->size;
+  break;
+
+  case PCRE_INFO_CAPTURECOUNT:
+  *((int *)where) = re->top_bracket;
+  break;
+
+  case PCRE_INFO_BACKREFMAX:
+  *((int *)where) = re->top_backref;
+  break;
+
+  case PCRE_INFO_FIRSTBYTE:
+  *((int *)where) =
+    ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
+    ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
+  break;
+
+  /* Make sure we pass back the pointer to the bit vector in the external
+  block, not the internal copy (with flipped integer fields). */
+
+  case PCRE_INFO_FIRSTTABLE:
+  *((const uschar **)where) =
+    (study != NULL && (study->options & PCRE_STUDY_MAPPED) != 0)?
+      ((const pcre_study_data *)extra_data->study_data)->start_bits : NULL;
+  break;
+
+  case PCRE_INFO_LASTLITERAL:
+  *((int *)where) =
+    ((re->options & PCRE_REQCHSET) != 0)? re->req_byte : -1;
+  break;
+
+  case PCRE_INFO_NAMEENTRYSIZE:
+  *((int *)where) = re->name_entry_size;
+  break;
+
+  case PCRE_INFO_NAMECOUNT:
+  *((int *)where) = re->name_count;
+  break;
+
+  case PCRE_INFO_NAMETABLE:
+  *((const uschar **)where) = (const uschar *)re + re->name_table_offset;
+  break;
+
+  case PCRE_INFO_DEFAULT_TABLES:
+  *((const uschar **)where) = (const uschar *)(_pcre_default_tables);
+  break;
+
+  default: return PCRE_ERROR_BADOPTION;
+  }
+
+return 0;
+}
+
+/* End of pcre_fullinfo.c */
diff -Nurp tin-1.7.8/pcre/pcre_get.c tin-1.7.9/pcre/pcre_get.c
--- tin-1.7.8/pcre/pcre_get.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_get.c	2005-06-28 10:31:26.348156939 +0200
@@ -0,0 +1,352 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains some convenience functions for extracting substrings
+from the subject string after a regex match has succeeded. The original idea
+for these functions came from Scott Wimer. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*           Find number for named string         *
+*************************************************/
+
+/* This function is used by the two extraction functions below, as well
+as being generally available.
+
+Arguments:
+  code        the compiled regex
+  stringname  the name whose number is required
+
+Returns:      the number of the named parentheses, or a negative number
+                (PCRE_ERROR_NOSUBSTRING) if not found
+*/
+
+int
+pcre_get_stringnumber(const pcre *code, const char *stringname)
+{
+int rc;
+int entrysize;
+int top, bot;
+uschar *nametable;
+
+if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMECOUNT, &top)) != 0)
+  return rc;
+if (top <= 0) return PCRE_ERROR_NOSUBSTRING;
+
+if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMEENTRYSIZE, &entrysize)) != 0)
+  return rc;
+if ((rc = pcre_fullinfo(code, NULL, PCRE_INFO_NAMETABLE, &nametable)) != 0)
+  return rc;
+
+bot = 0;
+while (top > bot)
+  {
+  int mid = (top + bot) / 2;
+  uschar *entry = nametable + entrysize*mid;
+  int c = strcmp(stringname, (char *)(entry + 2));
+  if (c == 0) return (entry[0] << 8) + entry[1];
+  if (c > 0) bot = mid + 1; else top = mid;
+  }
+
+return PCRE_ERROR_NOSUBSTRING;
+}
+
+
+
+/*************************************************
+*      Copy captured string to given buffer      *
+*************************************************/
+
+/* This function copies a single captured substring into a given buffer.
+Note that we use memcpy() rather than strncpy() in case there are binary zeros
+in the string.
+
+Arguments:
+  subject        the subject string that was matched
+  ovector        pointer to the offsets table
+  stringcount    the number of substrings that were captured
+                   (i.e. the yield of the pcre_exec call, unless
+                   that was zero, in which case it should be 1/3
+                   of the offset table size)
+  stringnumber   the number of the required substring
+  buffer         where to put the substring
+  size           the size of the buffer
+
+Returns:         if successful:
+                   the length of the copied string, not including the zero
+                   that is put on the end; can be zero
+                 if not successful:
+                   PCRE_ERROR_NOMEMORY (-6) buffer too small
+                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
+*/
+
+int
+pcre_copy_substring(const char *subject, int *ovector, int stringcount,
+  int stringnumber, char *buffer, int size)
+{
+int yield;
+if (stringnumber < 0 || stringnumber >= stringcount)
+  return PCRE_ERROR_NOSUBSTRING;
+stringnumber *= 2;
+yield = ovector[stringnumber+1] - ovector[stringnumber];
+if (size < yield + 1) return PCRE_ERROR_NOMEMORY;
+memcpy(buffer, subject + ovector[stringnumber], yield);
+buffer[yield] = 0;
+return yield;
+}
+
+
+
+/*************************************************
+*   Copy named captured string to given buffer   *
+*************************************************/
+
+/* This function copies a single captured substring into a given buffer,
+identifying it by name.
+
+Arguments:
+  code           the compiled regex
+  subject        the subject string that was matched
+  ovector        pointer to the offsets table
+  stringcount    the number of substrings that were captured
+                   (i.e. the yield of the pcre_exec call, unless
+                   that was zero, in which case it should be 1/3
+                   of the offset table size)
+  stringname     the name of the required substring
+  buffer         where to put the substring
+  size           the size of the buffer
+
+Returns:         if successful:
+                   the length of the copied string, not including the zero
+                   that is put on the end; can be zero
+                 if not successful:
+                   PCRE_ERROR_NOMEMORY (-6) buffer too small
+                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
+*/
+
+int
+pcre_copy_named_substring(const pcre *code, const char *subject, int *ovector,
+  int stringcount, const char *stringname, char *buffer, int size)
+{
+int n = pcre_get_stringnumber(code, stringname);
+if (n <= 0) return n;
+return pcre_copy_substring(subject, ovector, stringcount, n, buffer, size);
+}
+
+
+
+/*************************************************
+*      Copy all captured strings to new store    *
+*************************************************/
+
+/* This function gets one chunk of store and builds a list of pointers and all
+of the captured substrings in it. A NULL pointer is put on the end of the list.
+
+Arguments:
+  subject        the subject string that was matched
+  ovector        pointer to the offsets table
+  stringcount    the number of substrings that were captured
+                   (i.e. the yield of the pcre_exec call, unless
+                   that was zero, in which case it should be 1/3
+                   of the offset table size)
+  listptr        set to point to the list of pointers
+
+Returns:         if successful: 0
+                 if not successful:
+                   PCRE_ERROR_NOMEMORY (-6) failed to get store
+*/
+
+int
+pcre_get_substring_list(const char *subject, int *ovector, int stringcount,
+  const char ***listptr)
+{
+int i;
+int size = sizeof(char *);
+int double_count = stringcount * 2;
+char **stringlist;
+char *p;
+
+for (i = 0; i < double_count; i += 2)
+  size += sizeof(char *) + ovector[i+1] - ovector[i] + 1;
+
+stringlist = (char **)(pcre_malloc)(size);
+if (stringlist == NULL) return PCRE_ERROR_NOMEMORY;
+
+*listptr = (const char **)stringlist;
+p = (char *)(stringlist + stringcount + 1);
+
+for (i = 0; i < double_count; i += 2)
+  {
+  int len = ovector[i+1] - ovector[i];
+  memcpy(p, subject + ovector[i], len);
+  *stringlist++ = p;
+  p += len;
+  *p++ = 0;
+  }
+
+*stringlist = NULL;
+return 0;
+}
+
+
+
+/*************************************************
+*   Free store obtained by get_substring_list    *
+*************************************************/
+
+/* This function exists for the benefit of people calling PCRE from non-C
+programs that can call its functions, but not free() or (pcre_free)() directly.
+
+Argument:   the result of a previous pcre_get_substring_list()
+Returns:    nothing
+*/
+
+void
+pcre_free_substring_list(const char **pointer)
+{
+(pcre_free)((void *)pointer);
+}
+
+
+
+/*************************************************
+*      Copy captured string to new store         *
+*************************************************/
+
+/* This function copies a single captured substring into a piece of new
+store
+
+Arguments:
+  subject        the subject string that was matched
+  ovector        pointer to the offsets table
+  stringcount    the number of substrings that were captured
+                   (i.e. the yield of the pcre_exec call, unless
+                   that was zero, in which case it should be 1/3
+                   of the offset table size)
+  stringnumber   the number of the required substring
+  stringptr      where to put a pointer to the substring
+
+Returns:         if successful:
+                   the length of the string, not including the zero that
+                   is put on the end; can be zero
+                 if not successful:
+                   PCRE_ERROR_NOMEMORY (-6) failed to get store
+                   PCRE_ERROR_NOSUBSTRING (-7) substring not present
+*/
+
+int
+pcre_get_substring(const char *subject, int *ovector, int stringcount,
+  int stringnumber, const char **stringptr)
+{
+int yield;
+char *substring;
+if (stringnumber < 0 || stringnumber >= stringcount)
+  return PCRE_ERROR_NOSUBSTRING;
+stringnumber *= 2;
+yield = ovector[stringnumber+1] - ovector[stringnumber];
+substring = (char *)(pcre_malloc)(yield + 1);
+if (substring == NULL) return PCRE_ERROR_NOMEMORY;
+memcpy(substring, subject + ovector[stringnumber], yield);
+substring[yield] = 0;
+*stringptr = substring;
+return yield;
+}
+
+
+
+/*************************************************
+*   Copy named captured string to new store      *
+*************************************************/
+
+/* This function copies a single captured substring, identified by name, into
+new store.
+
+Arguments:
+  code           the compiled regex
+  subject        the subject string that was matched
+  ovector        pointer to the offsets table
+  stringcount    the number of substrings that were captured
+                   (i.e. the yield of the pcre_exec call, unless
+                   that was zero, in which case it should be 1/3
+                   of the offset table size)
+  stringname     the name of the required substring
+  stringptr      where to put the pointer
+
+Returns:         if successful:
+                   the length of the copied string, not including the zero
+                   that is put on the end; can be zero
+                 if not successful:
+                   PCRE_ERROR_NOMEMORY (-6) couldn't get memory
+                   PCRE_ERROR_NOSUBSTRING (-7) no such captured substring
+*/
+
+int
+pcre_get_named_substring(const pcre *code, const char *subject, int *ovector,
+  int stringcount, const char *stringname, const char **stringptr)
+{
+int n = pcre_get_stringnumber(code, stringname);
+if (n <= 0) return n;
+return pcre_get_substring(subject, ovector, stringcount, n, stringptr);
+}
+
+
+
+
+/*************************************************
+*       Free store obtained by get_substring     *
+*************************************************/
+
+/* This function exists for the benefit of people calling PCRE from non-C
+programs that can call its functions, but not free() or (pcre_free)() directly.
+
+Argument:   the result of a previous pcre_get_substring()
+Returns:    nothing
+*/
+
+void
+pcre_free_substring(const char *pointer)
+{
+(pcre_free)((void *)pointer);
+}
+
+/* End of pcre_get.c */
diff -Nurp tin-1.7.8/pcre/pcre_globals.c tin-1.7.9/pcre/pcre_globals.c
--- tin-1.7.8/pcre/pcre_globals.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_globals.c	2005-06-28 10:31:26.371152706 +0200
@@ -0,0 +1,69 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains global variables that are exported by the PCRE library.
+PCRE is thread-clean and doesn't use any global variables in the normal sense.
+However, it calls memory allocation and freeing functions via the four
+indirections below, and it can optionally do callouts, using the fifth
+indirection. These values can be changed by the caller, but are shared between
+all threads. However, when compiling for Virtual Pascal, things are done
+differently, and global variables are not used (see pcre.in). */
+
+
+#include "pcre_internal.h"
+
+
+#ifndef VPCOMPAT
+#ifdef __cplusplus
+extern "C" void *(*pcre_malloc)(size_t) = malloc;
+extern "C" void  (*pcre_free)(void *) = free;
+extern "C" void *(*pcre_stack_malloc)(size_t) = malloc;
+extern "C" void  (*pcre_stack_free)(void *) = free;
+extern "C" int   (*pcre_callout)(pcre_callout_block *) = NULL;
+#else
+void *(*pcre_malloc)(size_t) = malloc;
+void  (*pcre_free)(void *) = free;
+void *(*pcre_stack_malloc)(size_t) = malloc;
+void  (*pcre_stack_free)(void *) = free;
+int   (*pcre_callout)(pcre_callout_block *) = NULL;
+#endif
+#endif
+
+/* End of pcre_globals.c */
diff -Nurp tin-1.7.8/pcre/pcre_info.c tin-1.7.9/pcre/pcre_info.c
--- tin-1.7.8/pcre/pcre_info.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_info.c	2005-06-28 10:31:26.392148840 +0200
@@ -0,0 +1,89 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_info(), which gives some
+information about a compiled pattern. However, use of this function is now
+deprecated, as it has been superseded by pcre_fullinfo(). */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+* (Obsolete) Return info about compiled pattern  *
+*************************************************/
+
+/* This is the original "info" function. It picks potentially useful data out
+of the private structure, but its interface was too rigid. It remains for
+backwards compatibility. The public options are passed back in an int - though
+the re->options field has been expanded to a long int, all the public options
+at the low end of it, and so even on 16-bit systems this will still be OK.
+Therefore, I haven't changed the API for pcre_info().
+
+Arguments:
+  argument_re   points to compiled code
+  optptr        where to pass back the options
+  first_byte    where to pass back the first character,
+                or -1 if multiline and all branches start ^,
+                or -2 otherwise
+
+Returns:        number of capturing subpatterns
+                or negative values on error
+*/
+
+EXPORT int
+pcre_info(const pcre *argument_re, int *optptr, int *first_byte)
+{
+real_pcre internal_re;
+const real_pcre *re = (const real_pcre *)argument_re;
+if (re == NULL) return PCRE_ERROR_NULL;
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  re = _pcre_try_flipped(re, &internal_re, NULL, NULL);
+  if (re == NULL) return PCRE_ERROR_BADMAGIC;
+  }
+if (optptr != NULL) *optptr = (int)(re->options & PUBLIC_OPTIONS);
+if (first_byte != NULL)
+  *first_byte = ((re->options & PCRE_FIRSTSET) != 0)? re->first_byte :
+     ((re->options & PCRE_STARTLINE) != 0)? -1 : -2;
+return re->top_bracket;
+}
+
+/* End of pcre_info.c */
diff -Nurp tin-1.7.8/pcre/pcre_internal.h tin-1.7.9/pcre/pcre_internal.h
--- tin-1.7.8/pcre/pcre_internal.h	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_internal.h	2005-06-28 10:31:26.410145528 +0200
@@ -0,0 +1,905 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+/* This header contains definitions that are shared between the different
+modules, but which are not relevant to the exported API. This includes some
+functions whose names all begin with "_pcre_". */
+
+
+/* Define DEBUG to get debugging output on stdout. */
+
+/****
+#define DEBUG
+****/
+
+/* Use a macro for debugging printing, 'cause that eliminates the use of #ifdef
+inline, and there are *still* stupid compilers about that don't like indented
+pre-processor statements, or at least there were when I first wrote this. After
+all, it had only been about 10 years then... */
+
+#ifdef DEBUG
+#define DPRINTF(p) printf p
+#else
+#define DPRINTF(p) /*nothing*/
+#endif
+
+
+/* Get the definitions provided by running "configure" */
+
+#include "config.h"
+
+/* Standard C headers plus the external interface definition. The only time
+setjmp and stdarg are used is when NO_RECURSE is set. */
+
+#include <ctype.h>
+#include <limits.h>
+#include <setjmp.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifndef PCRE_SPY
+#define PCRE_DEFINITION       /* Win32 __declspec(export) trigger for .dll */
+#endif
+
+/* We need to have types that specify unsigned 16-bit and 32-bit integers. We
+cannot determine these outside the compilation (e.g. by running a program as
+part of "configure") because PCRE is often cross-compiled for use on other
+systems. Instead we make use of the maximum sizes that are available at
+preprocessor time in standard C environments. */
+
+#if USHRT_MAX == 65535
+  typedef unsigned short pcre_uint16;
+#elif UINT_MAX == 65535
+  typedef unsigned int pcre_uint16;
+#else
+  #error Cannot determine a type for 16-bit unsigned integers
+#endif
+
+#if UINT_MAX == 4294967295
+  typedef unsigned int pcre_uint32;
+#elif ULONG_MAX == 4294967295
+  typedef unsigned long int pcre_uint32;
+#else
+  #error Cannot determine a type for 32-bit unsigned integers
+#endif
+
+/* All character handling must be done as unsigned characters. Otherwise there
+are problems with top-bit-set characters and functions such as isspace().
+However, we leave the interface to the outside world as char *, because that
+should make things easier for callers. We define a short type for unsigned char
+to save lots of typing. I tried "uchar", but it causes problems on Digital
+Unix, where it is defined in sys/types, so use "uschar" instead. */
+
+typedef unsigned char uschar;
+
+/* Include the public PCRE header */
+
+#include "pcre.h"
+
+/* Include the (copy of) the public ucp header, changing the external name into
+a private one. This does no harm, even if we aren't compiling UCP support. */
+
+#define ucp_findchar _pcre_ucp_findchar
+#include "ucp.h"
+
+/* When compiling for use with the Virtual Pascal compiler, these functions
+need to have their names changed. PCRE must be compiled with the -DVPCOMPAT
+option on the command line. */
+
+#ifdef VPCOMPAT
+#define strncmp(s1,s2,m) _strncmp(s1,s2,m)
+#define memcpy(d,s,n)    _memcpy(d,s,n)
+#define memmove(d,s,n)   _memmove(d,s,n)
+#define memset(s,c,n)    _memset(s,c,n)
+#else  /* VPCOMPAT */
+
+/* To cope with SunOS4 and other systems that lack memmove() but have bcopy(),
+define a macro for memmove() if HAVE_MEMMOVE is false, provided that HAVE_BCOPY
+is set. Otherwise, include an emulating function for those systems that have
+neither (there some non-Unix environments where this is the case). This assumes
+that all calls to memmove are moving strings upwards in store, which is the
+case in PCRE. */
+
+#if ! HAVE_MEMMOVE
+#undef  memmove        /* some systems may have a macro */
+#if HAVE_BCOPY
+#define memmove(a, b, c) bcopy(b, a, c)
+#else  /* HAVE_BCOPY */
+void *
+pcre_memmove(unsigned char *dest, const unsigned char *src, size_t n)
+{
+int i;
+dest += n;
+src += n;
+for (i = 0; i < n; ++i) *(--dest) =  *(--src);
+}
+#define memmove(a, b, c) pcre_memmove(a, b, c)
+#endif   /* not HAVE_BCOPY */
+#endif   /* not HAVE_MEMMOVE */
+#endif   /* not VPCOMPAT */
+
+
+/* PCRE keeps offsets in its compiled code as 2-byte quantities (always stored
+in big-endian order) by default. These are used, for example, to link from the
+start of a subpattern to its alternatives and its end. The use of 2 bytes per
+offset limits the size of the compiled regex to around 64K, which is big enough
+for almost everybody. However, I received a request for an even bigger limit.
+For this reason, and also to make the code easier to maintain, the storing and
+loading of offsets from the byte string is now handled by the macros that are
+defined here.
+
+The macros are controlled by the value of LINK_SIZE. This defaults to 2 in
+the config.h file, but can be overridden by using -D on the command line. This
+is automated on Unix systems via the "configure" command. */
+
+#if LINK_SIZE == 2
+
+#define PUT(a,n,d)   \
+  (a[n] = (d) >> 8), \
+  (a[(n)+1] = (d) & 255)
+
+#define GET(a,n) \
+  (((a)[n] << 8) | (a)[(n)+1])
+
+#define MAX_PATTERN_SIZE (1 << 16)
+
+
+#elif LINK_SIZE == 3
+
+#define PUT(a,n,d)       \
+  (a[n] = (d) >> 16),    \
+  (a[(n)+1] = (d) >> 8), \
+  (a[(n)+2] = (d) & 255)
+
+#define GET(a,n) \
+  (((a)[n] << 16) | ((a)[(n)+1] << 8) | (a)[(n)+2])
+
+#define MAX_PATTERN_SIZE (1 << 24)
+
+
+#elif LINK_SIZE == 4
+
+#define PUT(a,n,d)        \
+  (a[n] = (d) >> 24),     \
+  (a[(n)+1] = (d) >> 16), \
+  (a[(n)+2] = (d) >> 8),  \
+  (a[(n)+3] = (d) & 255)
+
+#define GET(a,n) \
+  (((a)[n] << 24) | ((a)[(n)+1] << 16) | ((a)[(n)+2] << 8) | (a)[(n)+3])
+
+#define MAX_PATTERN_SIZE (1 << 30)   /* Keep it positive */
+
+
+#else
+#error LINK_SIZE must be either 2, 3, or 4
+#endif
+
+
+/* Convenience macro defined in terms of the others */
+
+#define PUTINC(a,n,d)   PUT(a,n,d), a += LINK_SIZE
+
+
+/* PCRE uses some other 2-byte quantities that do not change when the size of
+offsets changes. There are used for repeat counts and for other things such as
+capturing parenthesis numbers in back references. */
+
+#define PUT2(a,n,d)   \
+  a[n] = (d) >> 8; \
+  a[(n)+1] = (d) & 255
+
+#define GET2(a,n) \
+  (((a)[n] << 8) | (a)[(n)+1])
+
+#define PUT2INC(a,n,d)  PUT2(a,n,d), a += 2
+
+
+/* When UTF-8 encoding is being used, a character is no longer just a single
+byte. The macros for character handling generate simple sequences when used in
+byte-mode, and more complicated ones for UTF-8 characters. */
+
+#ifndef SUPPORT_UTF8
+#define GETCHAR(c, eptr) c = *eptr;
+#define GETCHARTEST(c, eptr) c = *eptr;
+#define GETCHARINC(c, eptr) c = *eptr++;
+#define GETCHARINCTEST(c, eptr) c = *eptr++;
+#define GETCHARLEN(c, eptr, len) c = *eptr;
+#define BACKCHAR(eptr)
+
+#else   /* SUPPORT_UTF8 */
+
+/* Get the next UTF-8 character, not advancing the pointer. This is called when
+we know we are in UTF-8 mode. */
+
+#define GETCHAR(c, eptr) \
+  c = *eptr; \
+  if ((c & 0xc0) == 0xc0) \
+    { \
+    int gcii; \
+    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
+    int gcss = 6*gcaa; \
+    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
+    for (gcii = 1; gcii <= gcaa; gcii++) \
+      { \
+      gcss -= 6; \
+      c |= (eptr[gcii] & 0x3f) << gcss; \
+      } \
+    }
+
+/* Get the next UTF-8 character, testing for UTF-8 mode, and not advancing the
+pointer. */
+
+#define GETCHARTEST(c, eptr) \
+  c = *eptr; \
+  if (utf8 && (c & 0xc0) == 0xc0) \
+    { \
+    int gcii; \
+    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
+    int gcss = 6*gcaa; \
+    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
+    for (gcii = 1; gcii <= gcaa; gcii++) \
+      { \
+      gcss -= 6; \
+      c |= (eptr[gcii] & 0x3f) << gcss; \
+      } \
+    }
+
+/* Get the next UTF-8 character, advancing the pointer. This is called when we
+know we are in UTF-8 mode. */
+
+#define GETCHARINC(c, eptr) \
+  c = *eptr++; \
+  if ((c & 0xc0) == 0xc0) \
+    { \
+    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
+    int gcss = 6*gcaa; \
+    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
+    while (gcaa-- > 0) \
+      { \
+      gcss -= 6; \
+      c |= (*eptr++ & 0x3f) << gcss; \
+      } \
+    }
+
+/* Get the next character, testing for UTF-8 mode, and advancing the pointer */
+
+#define GETCHARINCTEST(c, eptr) \
+  c = *eptr++; \
+  if (utf8 && (c & 0xc0) == 0xc0) \
+    { \
+    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
+    int gcss = 6*gcaa; \
+    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
+    while (gcaa-- > 0) \
+      { \
+      gcss -= 6; \
+      c |= (*eptr++ & 0x3f) << gcss; \
+      } \
+    }
+
+/* Get the next UTF-8 character, not advancing the pointer, incrementing length
+if there are extra bytes. This is called when we know we are in UTF-8 mode. */
+
+#define GETCHARLEN(c, eptr, len) \
+  c = *eptr; \
+  if ((c & 0xc0) == 0xc0) \
+    { \
+    int gcii; \
+    int gcaa = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */ \
+    int gcss = 6*gcaa; \
+    c = (c & _pcre_utf8_table3[gcaa]) << gcss; \
+    for (gcii = 1; gcii <= gcaa; gcii++) \
+      { \
+      gcss -= 6; \
+      c |= (eptr[gcii] & 0x3f) << gcss; \
+      } \
+    len += gcaa; \
+    }
+
+/* If the pointer is not at the start of a character, move it back until
+it is. Called only in UTF-8 mode. */
+
+#define BACKCHAR(eptr) while((*eptr & 0xc0) == 0x80) eptr--;
+
+#endif
+
+
+/* In case there is no definition of offsetof() provided - though any proper
+Standard C system should have one. */
+
+#ifndef offsetof
+#define offsetof(p_type,field) ((size_t)&(((p_type *)0)->field))
+#endif
+
+
+/* These are the public options that can change during matching. */
+
+#define PCRE_IMS (PCRE_CASELESS|PCRE_MULTILINE|PCRE_DOTALL)
+
+/* Private options flags start at the most significant end of the four bytes,
+but skip the top bit so we can use ints for convenience without getting tangled
+with negative values. The public options defined in pcre.h start at the least
+significant end. Make sure they don't overlap! */
+
+#define PCRE_FIRSTSET      0x40000000  /* first_byte is set */
+#define PCRE_REQCHSET      0x20000000  /* req_byte is set */
+#define PCRE_STARTLINE     0x10000000  /* start after \n for multiline */
+#define PCRE_ICHANGED      0x08000000  /* i option changes within regex */
+#define PCRE_NOPARTIAL     0x04000000  /* can't use partial with this regex */
+
+/* Options for the "extra" block produced by pcre_study(). */
+
+#define PCRE_STUDY_MAPPED   0x01     /* a map of starting chars exists */
+
+/* Masks for identifying the public options that are permitted at compile
+time, run time, or study time, respectively. */
+
+#define PUBLIC_OPTIONS \
+  (PCRE_CASELESS|PCRE_EXTENDED|PCRE_ANCHORED|PCRE_MULTILINE| \
+   PCRE_DOTALL|PCRE_DOLLAR_ENDONLY|PCRE_EXTRA|PCRE_UNGREEDY|PCRE_UTF8| \
+   PCRE_NO_AUTO_CAPTURE|PCRE_NO_UTF8_CHECK|PCRE_AUTO_CALLOUT|PCRE_FIRSTLINE)
+
+#define PUBLIC_EXEC_OPTIONS \
+  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
+   PCRE_PARTIAL)
+
+#define PUBLIC_DFA_EXEC_OPTIONS \
+  (PCRE_ANCHORED|PCRE_NOTBOL|PCRE_NOTEOL|PCRE_NOTEMPTY|PCRE_NO_UTF8_CHECK| \
+   PCRE_PARTIAL|PCRE_DFA_SHORTEST|PCRE_DFA_RESTART)
+
+#define PUBLIC_STUDY_OPTIONS 0   /* None defined */
+
+/* Magic number to provide a small check against being handed junk. Also used
+to detect whether a pattern was compiled on a host of different endianness. */
+
+#define MAGIC_NUMBER  0x50435245UL   /* 'PCRE' */
+
+/* Negative values for the firstchar and reqchar variables */
+
+#define REQ_UNSET (-2)
+#define REQ_NONE  (-1)
+
+/* The maximum remaining length of subject we are prepared to search for a
+req_byte match. */
+
+#define REQ_BYTE_MAX 1000
+
+/* Flags added to firstbyte or reqbyte; a "non-literal" item is either a
+variable-length repeat, or a anything other than literal characters. */
+
+#define REQ_CASELESS 0x0100    /* indicates caselessness */
+#define REQ_VARY     0x0200    /* reqbyte followed non-literal item */
+
+/* Miscellaneous definitions */
+
+typedef int BOOL;
+
+#define FALSE   0
+#define TRUE    1
+
+/* Escape items that are just an encoding of a particular data value. Note that
+ESC_n is defined as yet another macro, which is set in config.h to either \n
+(the default) or \r (which some people want). */
+
+#ifndef ESC_e
+#define ESC_e 27
+#endif
+
+#ifndef ESC_f
+#define ESC_f '\f'
+#endif
+
+#ifndef ESC_n
+#define ESC_n NEWLINE
+#endif
+
+#ifndef ESC_r
+#define ESC_r '\r'
+#endif
+
+/* We can't officially use ESC_t because it is a POSIX reserved identifier
+(presumably because of all the others like size_t). */
+
+#ifndef ESC_tee
+#define ESC_tee '\t'
+#endif
+
+/* These are escaped items that aren't just an encoding of a particular data
+value such as \n. They must have non-zero values, as check_escape() returns
+their negation. Also, they must appear in the same order as in the opcode
+definitions below, up to ESC_z. There's a dummy for OP_ANY because it
+corresponds to "." rather than an escape sequence. The final one must be
+ESC_REF as subsequent values are used for \1, \2, \3, etc. There is are two
+tests in the code for an escape greater than ESC_b and less than ESC_Z to
+detect the types that may be repeated. These are the types that consume
+characters. If any new escapes are put in between that don't consume a
+character, that code will have to change. */
+
+enum { ESC_A = 1, ESC_G, ESC_B, ESC_b, ESC_D, ESC_d, ESC_S, ESC_s, ESC_W,
+       ESC_w, ESC_dum1, ESC_C, ESC_P, ESC_p, ESC_X, ESC_Z, ESC_z, ESC_E,
+       ESC_Q, ESC_REF };
+
+/* Flag bits and data types for the extended class (OP_XCLASS) for classes that
+contain UTF-8 characters with values greater than 255. */
+
+#define XCL_NOT    0x01    /* Flag: this is a negative class */
+#define XCL_MAP    0x02    /* Flag: a 32-byte map is present */
+
+#define XCL_END       0    /* Marks end of individual items */
+#define XCL_SINGLE    1    /* Single item (one multibyte char) follows */
+#define XCL_RANGE     2    /* A range (two multibyte chars) follows */
+#define XCL_PROP      3    /* Unicode property (one property code) follows */
+#define XCL_NOTPROP   4    /* Unicode inverted property (ditto) */
+
+
+/* Opcode table: OP_BRA must be last, as all values >= it are used for brackets
+that extract substrings. Starting from 1 (i.e. after OP_END), the values up to
+OP_EOD must correspond in order to the list of escapes immediately above.
+Note that whenever this list is updated, the two macro definitions that follow
+must also be updated to match. */
+
+enum {
+  OP_END,            /* 0 End of pattern */
+
+  /* Values corresponding to backslashed metacharacters */
+
+  OP_SOD,            /* 1 Start of data: \A */
+  OP_SOM,            /* 2 Start of match (subject + offset): \G */
+  OP_NOT_WORD_BOUNDARY,  /*  3 \B */
+  OP_WORD_BOUNDARY,      /*  4 \b */
+  OP_NOT_DIGIT,          /*  5 \D */
+  OP_DIGIT,              /*  6 \d */
+  OP_NOT_WHITESPACE,     /*  7 \S */
+  OP_WHITESPACE,         /*  8 \s */
+  OP_NOT_WORDCHAR,       /*  9 \W */
+  OP_WORDCHAR,           /* 10 \w */
+  OP_ANY,            /* 11 Match any character */
+  OP_ANYBYTE,        /* 12 Match any byte (\C); different to OP_ANY for UTF-8 */
+  OP_NOTPROP,        /* 13 \P (not Unicode property) */
+  OP_PROP,           /* 14 \p (Unicode property) */
+  OP_EXTUNI,         /* 15 \X (extended Unicode sequence */
+  OP_EODN,           /* 16 End of data or \n at end of data: \Z. */
+  OP_EOD,            /* 17 End of data: \z */
+
+  OP_OPT,            /* 18 Set runtime options */
+  OP_CIRC,           /* 19 Start of line - varies with multiline switch */
+  OP_DOLL,           /* 20 End of line - varies with multiline switch */
+  OP_CHAR,           /* 21 Match one character, casefully */
+  OP_CHARNC,         /* 22 Match one character, caselessly */
+  OP_NOT,            /* 23 Match anything but the following char */
+
+  OP_STAR,           /* 24 The maximizing and minimizing versions of */
+  OP_MINSTAR,        /* 25 all these opcodes must come in pairs, with */
+  OP_PLUS,           /* 26 the minimizing one second. */
+  OP_MINPLUS,        /* 27 This first set applies to single characters */
+  OP_QUERY,          /* 28 */
+  OP_MINQUERY,       /* 29 */
+  OP_UPTO,           /* 30 From 0 to n matches */
+  OP_MINUPTO,        /* 31 */
+  OP_EXACT,          /* 32 Exactly n matches */
+
+  OP_NOTSTAR,        /* 33 The maximizing and minimizing versions of */
+  OP_NOTMINSTAR,     /* 34 all these opcodes must come in pairs, with */
+  OP_NOTPLUS,        /* 35 the minimizing one second. */
+  OP_NOTMINPLUS,     /* 36 This set applies to "not" single characters */
+  OP_NOTQUERY,       /* 37 */
+  OP_NOTMINQUERY,    /* 38 */
+  OP_NOTUPTO,        /* 39 From 0 to n matches */
+  OP_NOTMINUPTO,     /* 40 */
+  OP_NOTEXACT,       /* 41 Exactly n matches */
+
+  OP_TYPESTAR,       /* 42 The maximizing and minimizing versions of */
+  OP_TYPEMINSTAR,    /* 43 all these opcodes must come in pairs, with */
+  OP_TYPEPLUS,       /* 44 the minimizing one second. These codes must */
+  OP_TYPEMINPLUS,    /* 45 be in exactly the same order as those above. */
+  OP_TYPEQUERY,      /* 46 This set applies to character types such as \d */
+  OP_TYPEMINQUERY,   /* 47 */
+  OP_TYPEUPTO,       /* 48 From 0 to n matches */
+  OP_TYPEMINUPTO,    /* 49 */
+  OP_TYPEEXACT,      /* 50 Exactly n matches */
+
+  OP_CRSTAR,         /* 51 The maximizing and minimizing versions of */
+  OP_CRMINSTAR,      /* 52 all these opcodes must come in pairs, with */
+  OP_CRPLUS,         /* 53 the minimizing one second. These codes must */
+  OP_CRMINPLUS,      /* 54 be in exactly the same order as those above. */
+  OP_CRQUERY,        /* 55 These are for character classes and back refs */
+  OP_CRMINQUERY,     /* 56 */
+  OP_CRRANGE,        /* 57 These are different to the three sets above. */
+  OP_CRMINRANGE,     /* 58 */
+
+  OP_CLASS,          /* 59 Match a character class, chars < 256 only */
+  OP_NCLASS,         /* 60 Same, but the bitmap was created from a negative
+                           class - the difference is relevant only when a UTF-8
+                           character > 255 is encountered. */
+
+  OP_XCLASS,         /* 61 Extended class for handling UTF-8 chars within the
+                           class. This does both positive and negative. */
+
+  OP_REF,            /* 62 Match a back reference */
+  OP_RECURSE,        /* 63 Match a numbered subpattern (possibly recursive) */
+  OP_CALLOUT,        /* 64 Call out to external function if provided */
+
+  OP_ALT,            /* 65 Start of alternation */
+  OP_KET,            /* 66 End of group that doesn't have an unbounded repeat */
+  OP_KETRMAX,        /* 67 These two must remain together and in this */
+  OP_KETRMIN,        /* 68 order. They are for groups the repeat for ever. */
+
+  /* The assertions must come before ONCE and COND */
+
+  OP_ASSERT,         /* 69 Positive lookahead */
+  OP_ASSERT_NOT,     /* 70 Negative lookahead */
+  OP_ASSERTBACK,     /* 71 Positive lookbehind */
+  OP_ASSERTBACK_NOT, /* 72 Negative lookbehind */
+  OP_REVERSE,        /* 73 Move pointer back - used in lookbehind assertions */
+
+  /* ONCE and COND must come after the assertions, with ONCE first, as there's
+  a test for >= ONCE for a subpattern that isn't an assertion. */
+
+  OP_ONCE,           /* 74 Once matched, don't back up into the subpattern */
+  OP_COND,           /* 75 Conditional group */
+  OP_CREF,           /* 76 Used to hold an extraction string number (cond ref) */
+
+  OP_BRAZERO,        /* 77 These two must remain together and in this */
+  OP_BRAMINZERO,     /* 78 order. */
+
+  OP_BRANUMBER,      /* 79 Used for extracting brackets whose number is greater
+                           than can fit into an opcode. */
+
+  OP_BRA             /* 80 This and greater values are used for brackets that
+                           extract substrings up to EXTRACT_BASIC_MAX. After
+                           that, use is made of OP_BRANUMBER. */
+};
+
+/* WARNING WARNING WARNING: There is an implicit assumption in pcre.c and
+study.c that all opcodes are less than 128 in value. This makes handling UTF-8
+character sequences easier. */
+
+/* The highest extraction number before we have to start using additional
+bytes. (Originally PCRE didn't have support for extraction counts highter than
+this number.) The value is limited by the number of opcodes left after OP_BRA,
+i.e. 255 - OP_BRA. We actually set it a bit lower to leave room for additional
+opcodes. */
+
+#define EXTRACT_BASIC_MAX  100
+
+
+/* This macro defines textual names for all the opcodes. These are used only
+for debugging. The macro is referenced only in pcre_printint.c. */
+
+#define OP_NAME_LIST \
+  "End", "\\A", "\\G", "\\B", "\\b", "\\D", "\\d",                \
+  "\\S", "\\s", "\\W", "\\w", "Any", "Anybyte",                   \
+  "notprop", "prop", "extuni",                                    \
+  "\\Z", "\\z",                                                   \
+  "Opt", "^", "$", "char", "charnc", "not",                       \
+  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
+  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
+  "*", "*?", "+", "+?", "?", "??", "{", "{", "{",                 \
+  "*", "*?", "+", "+?", "?", "??", "{", "{",                      \
+  "class", "nclass", "xclass", "Ref", "Recurse", "Callout",       \
+  "Alt", "Ket", "KetRmax", "KetRmin", "Assert", "Assert not",     \
+  "AssertB", "AssertB not", "Reverse", "Once", "Cond", "Cond ref",\
+  "Brazero", "Braminzero", "Branumber", "Bra"
+
+
+/* This macro defines the length of fixed length operations in the compiled
+regex. The lengths are used when searching for specific things, and also in the
+debugging printing of a compiled regex. We use a macro so that it can be
+defined close to the definitions of the opcodes themselves.
+
+As things have been extended, some of these are no longer fixed lenths, but are
+minima instead. For example, the length of a single-character repeat may vary
+in UTF-8 mode. The code that uses this table must know about such things. */
+
+#define OP_LENGTHS \
+  1,                             /* End                                    */ \
+  1, 1, 1, 1, 1, 1, 1, 1, 1, 1,  /* \A, \G, \B, \B, \D, \d, \S, \s, \W, \w */ \
+  1, 1,                          /* Any, Anybyte                           */ \
+  2, 2, 1,                       /* NOTPROP, PROP, EXTUNI                  */ \
+  1, 1, 2, 1, 1,                 /* \Z, \z, Opt, ^, $                      */ \
+  2,                             /* Char  - the minimum length             */ \
+  2,                             /* Charnc  - the minimum length           */ \
+  2,                             /* not                                    */ \
+  /* Positive single-char repeats                            ** These are  */ \
+  2, 2, 2, 2, 2, 2,              /* *, *?, +, +?, ?, ??      ** minima in  */ \
+  4, 4, 4,                       /* upto, minupto, exact     ** UTF-8 mode */ \
+  /* Negative single-char repeats - only for chars < 256                   */ \
+  2, 2, 2, 2, 2, 2,              /* NOT *, *?, +, +?, ?, ??                */ \
+  4, 4, 4,                       /* NOT upto, minupto, exact               */ \
+  /* Positive type repeats                                                 */ \
+  2, 2, 2, 2, 2, 2,              /* Type *, *?, +, +?, ?, ??               */ \
+  4, 4, 4,                       /* Type upto, minupto, exact              */ \
+  /* Character class & ref repeats                                         */ \
+  1, 1, 1, 1, 1, 1,              /* *, *?, +, +?, ?, ??                    */ \
+  5, 5,                          /* CRRANGE, CRMINRANGE                    */ \
+ 33,                             /* CLASS                                  */ \
+ 33,                             /* NCLASS                                 */ \
+  0,                             /* XCLASS - variable length               */ \
+  3,                             /* REF                                    */ \
+  1+LINK_SIZE,                   /* RECURSE                                */ \
+  2+2*LINK_SIZE,                 /* CALLOUT                                */ \
+  1+LINK_SIZE,                   /* Alt                                    */ \
+  1+LINK_SIZE,                   /* Ket                                    */ \
+  1+LINK_SIZE,                   /* KetRmax                                */ \
+  1+LINK_SIZE,                   /* KetRmin                                */ \
+  1+LINK_SIZE,                   /* Assert                                 */ \
+  1+LINK_SIZE,                   /* Assert not                             */ \
+  1+LINK_SIZE,                   /* Assert behind                          */ \
+  1+LINK_SIZE,                   /* Assert behind not                      */ \
+  1+LINK_SIZE,                   /* Reverse                                */ \
+  1+LINK_SIZE,                   /* Once                                   */ \
+  1+LINK_SIZE,                   /* COND                                   */ \
+  3,                             /* CREF                                   */ \
+  1, 1,                          /* BRAZERO, BRAMINZERO                    */ \
+  3,                             /* BRANUMBER                              */ \
+  1+LINK_SIZE                    /* BRA                                    */ \
+
+
+/* A magic value for OP_CREF to indicate the "in recursion" condition. */
+
+#define CREF_RECURSE  0xffff
+
+/* Error code numbers. They are given names so that they can more easily be
+tracked. */
+
+enum { ERR0,  ERR1,  ERR2,  ERR3,  ERR4,  ERR5,  ERR6,  ERR7,  ERR8,  ERR9,
+       ERR10, ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19,
+       ERR20, ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR28, ERR29,
+       ERR30, ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39,
+       ERR40, ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47 };
+
+/* The real format of the start of the pcre block; the index of names and the
+code vector run on as long as necessary after the end. We store an explicit
+offset to the name table so that if a regex is compiled on one host, saved, and
+then run on another where the size of pointers is different, all might still
+be well. For the case of compiled-on-4 and run-on-8, we include an extra
+pointer that is always NULL. For future-proofing, a few dummy fields were
+originally included - even though you can never get this planning right - but
+there is only one left now.
+
+NOTE NOTE NOTE:
+Because people can now save and re-use compiled patterns, any additions to this
+structure should be made at the end, and something earlier (e.g. a new
+flag in the options or one of the dummy fields) should indicate that the new
+fields are present. Currently PCRE always sets the dummy fields to zero.
+NOTE NOTE NOTE:
+*/
+
+typedef struct real_pcre {
+  pcre_uint32 magic_number;
+  pcre_uint32 size;               /* Total that was malloced */
+  pcre_uint32 options;
+  pcre_uint32 dummy1;             /* For future use, maybe */
+
+  pcre_uint16 top_bracket;
+  pcre_uint16 top_backref;
+  pcre_uint16 first_byte;
+  pcre_uint16 req_byte;
+  pcre_uint16 name_table_offset;  /* Offset to name table that follows */
+  pcre_uint16 name_entry_size;    /* Size of any name items */
+  pcre_uint16 name_count;         /* Number of name items */
+  pcre_uint16 ref_count;          /* Reference count */
+
+  const unsigned char *tables;    /* Pointer to tables or NULL for std */
+  const unsigned char *nullpad;   /* NULL padding */
+} real_pcre;
+
+/* The format of the block used to store data from pcre_study(). The same
+remark (see NOTE above) about extending this structure applies. */
+
+typedef struct pcre_study_data {
+  pcre_uint32 size;               /* Total that was malloced */
+  pcre_uint32 options;
+  uschar start_bits[32];
+} pcre_study_data;
+
+/* Structure for passing "static" information around between the functions
+doing the compiling, so that they are thread-safe. */
+
+typedef struct compile_data {
+  const uschar *lcc;            /* Points to lower casing table */
+  const uschar *fcc;            /* Points to case-flipping table */
+  const uschar *cbits;          /* Points to character type table */
+  const uschar *ctypes;         /* Points to table of type maps */
+  const uschar *start_code;     /* The start of the compiled code */
+  const uschar *start_pattern;  /* The start of the pattern */
+  uschar *name_table;           /* The name/number table */
+  int  names_found;             /* Number of entries so far */
+  int  name_entry_size;         /* Size of each entry */
+  int  top_backref;             /* Maximum back reference */
+  unsigned int backref_map;     /* Bitmap of low back refs */
+  int  req_varyopt;             /* "After variable item" flag for reqbyte */
+  BOOL nopartial;               /* Set TRUE if partial won't work */
+} compile_data;
+
+/* Structure for maintaining a chain of pointers to the currently incomplete
+branches, for testing for left recursion. */
+
+typedef struct branch_chain {
+  struct branch_chain *outer;
+  uschar *current;
+} branch_chain;
+
+/* Structure for items in a linked list that represents an explicit recursive
+call within the pattern. */
+
+typedef struct recursion_info {
+  struct recursion_info *prevrec; /* Previous recursion record (or NULL) */
+  int group_num;                /* Number of group that was called */
+  const uschar *after_call;     /* "Return value": points after the call in the expr */
+  const uschar *save_start;     /* Old value of md->start_match */
+  int *offset_save;             /* Pointer to start of saved offsets */
+  int saved_max;                /* Number of saved offsets */
+} recursion_info;
+
+/* When compiling in a mode that doesn't use recursive calls to match(),
+a structure is used to remember local variables on the heap. It is defined in
+pcre.c, close to the match() function, so that it is easy to keep it in step
+with any changes of local variable. However, the pointer to the current frame
+must be saved in some "static" place over a longjmp(). We declare the
+structure here so that we can put a pointer in the match_data structure.
+NOTE: This isn't used for a "normal" compilation of pcre. */
+
+struct heapframe;
+
+/* Structure for passing "static" information around between the functions
+doing traditional NFA matching, so that they are thread-safe. */
+
+typedef struct match_data {
+  unsigned long int match_call_count; /* As it says */
+  unsigned long int match_limit;/* As it says */
+  int   *offset_vector;         /* Offset vector */
+  int    offset_end;            /* One past the end */
+  int    offset_max;            /* The maximum usable for return data */
+  const uschar *lcc;            /* Points to lower casing table */
+  const uschar *ctypes;         /* Points to table of type maps */
+  BOOL   offset_overflow;       /* Set if too many extractions */
+  BOOL   notbol;                /* NOTBOL flag */
+  BOOL   noteol;                /* NOTEOL flag */
+  BOOL   utf8;                  /* UTF8 flag */
+  BOOL   endonly;               /* Dollar not before final \n */
+  BOOL   notempty;              /* Empty string match not wanted */
+  BOOL   partial;               /* PARTIAL flag */
+  BOOL   hitend;                /* Hit the end of the subject at some point */
+  const uschar *start_code;     /* For use when recursing */
+  const uschar *start_subject;  /* Start of the subject string */
+  const uschar *end_subject;    /* End of the subject string */
+  const uschar *start_match;    /* Start of this match attempt */
+  const uschar *end_match_ptr;  /* Subject position at end match */
+  int    end_offset_top;        /* Highwater mark at end of match */
+  int    capture_last;          /* Most recent capture number */
+  int    start_offset;          /* The start offset value */
+  recursion_info *recursive;    /* Linked list of recursion data */
+  void  *callout_data;          /* To pass back to callouts */
+  struct heapframe *thisframe;  /* Used only when compiling for no recursion */
+} match_data;
+
+/* A similar structure is used for the same purpose by the DFA matching
+functions. */
+
+typedef struct dfa_match_data {
+  const uschar *start_code;     /* Start of the compiled pattern */
+  const uschar *start_subject;  /* Start of the subject string */
+  const uschar *end_subject;    /* End of subject string */
+  const uschar *tables;         /* Character tables */
+  int   moptions;               /* Match options */
+  int   poptions;               /* Pattern options */
+  void  *callout_data;          /* To pass back to callouts */
+} dfa_match_data;
+
+/* Bit definitions for entries in the pcre_ctypes table. */
+
+#define ctype_space   0x01
+#define ctype_letter  0x02
+#define ctype_digit   0x04
+#define ctype_xdigit  0x08
+#define ctype_word    0x10   /* alphameric or '_' */
+#define ctype_meta    0x80   /* regexp meta char or zero (end pattern) */
+
+/* Offsets for the bitmap tables in pcre_cbits. Each table contains a set
+of bits for a class map. Some classes are built by combining these tables. */
+
+#define cbit_space     0      /* [:space:] or \s */
+#define cbit_xdigit   32      /* [:xdigit:] */
+#define cbit_digit    64      /* [:digit:] or \d */
+#define cbit_upper    96      /* [:upper:] */
+#define cbit_lower   128      /* [:lower:] */
+#define cbit_word    160      /* [:word:] or \w */
+#define cbit_graph   192      /* [:graph:] */
+#define cbit_print   224      /* [:print:] */
+#define cbit_punct   256      /* [:punct:] */
+#define cbit_cntrl   288      /* [:cntrl:] */
+#define cbit_length  320      /* Length of the cbits table */
+
+/* Offsets of the various tables from the base tables pointer, and
+total length. */
+
+#define lcc_offset      0
+#define fcc_offset    256
+#define cbits_offset  512
+#define ctypes_offset (cbits_offset + cbit_length)
+#define tables_length (ctypes_offset + 256)
+
+/* Layout of the UCP type table that translates property names into codes for
+ucp_findchar(). */
+
+typedef struct {
+  const char *name;
+  int value;
+} ucp_type_table;
+
+
+/* Internal shared data tables. These are tables that are used by more than one
+of the exported public functions. They have to be "external" in the C sense,
+but are not part of the PCRE public API. The data for these tables is in the
+pcre_tables.c module. */
+
+extern const int    _pcre_utf8_table1[];
+extern const int    _pcre_utf8_table2[];
+extern const int    _pcre_utf8_table3[];
+extern const uschar _pcre_utf8_table4[];
+
+extern const int    _pcre_utf8_table1_size;
+
+extern const ucp_type_table _pcre_utt[];
+extern const int _pcre_utt_size;
+
+extern const uschar _pcre_default_tables[];
+
+extern const uschar _pcre_OP_lengths[];
+
+
+/* Internal shared functions. These are functions that are used by more than
+one of the exported public functions. They have to be "external" in the C
+sense, but are not part of the PCRE public API. */
+
+extern int         _pcre_ord2utf8(int, uschar *);
+extern void        _pcre_printint(pcre *, FILE *);
+extern real_pcre * _pcre_try_flipped(const real_pcre *, real_pcre *,
+                     const pcre_study_data *, pcre_study_data *);
+extern int         _pcre_ucp_findchar(const int, int *, int *);
+extern int         _pcre_valid_utf8(const uschar *, int);
+extern BOOL        _pcre_xclass(int, const uschar *);
+
+/* End of pcre_internal.h */
diff -Nurp tin-1.7.8/pcre/pcre_maketables.c tin-1.7.9/pcre/pcre_maketables.c
--- tin-1.7.8/pcre/pcre_maketables.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_maketables.c	2005-06-28 10:31:26.421143503 +0200
@@ -0,0 +1,145 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_maketables(), which builds
+character tables for PCRE in the current locale. The file is compiled on its
+own as part of the PCRE library. However, it is also included in the
+compilation of dftables.c, in which case the macro DFTABLES is defined. */
+
+
+#ifndef DFTABLES
+#include "pcre_internal.h"
+#endif
+
+
+/*************************************************
+*           Create PCRE character tables         *
+*************************************************/
+
+/* This function builds a set of character tables for use by PCRE and returns
+a pointer to them. They are build using the ctype functions, and consequently
+their contents will depend upon the current locale setting. When compiled as
+part of the library, the store is obtained via pcre_malloc(), but when compiled
+inside dftables, use malloc().
+
+Arguments:   none
+Returns:     pointer to the contiguous block of data
+*/
+
+const unsigned char *
+pcre_maketables(void)
+{
+unsigned char *yield, *p;
+int i;
+
+#ifndef DFTABLES
+yield = (unsigned char*)(pcre_malloc)(tables_length);
+#else
+yield = (unsigned char*)malloc(tables_length);
+#endif
+
+if (yield == NULL) return NULL;
+p = yield;
+
+/* First comes the lower casing table */
+
+for (i = 0; i < 256; i++) *p++ = tolower(i);
+
+/* Next the case-flipping table */
+
+for (i = 0; i < 256; i++) *p++ = islower(i)? toupper(i) : tolower(i);
+
+/* Then the character class tables. Don't try to be clever and save effort
+on exclusive ones - in some locales things may be different. Note that the
+table for "space" includes everything "isspace" gives, including VT in the
+default locale. This makes it work for the POSIX class [:space:]. */
+
+memset(p, 0, cbit_length);
+for (i = 0; i < 256; i++)
+  {
+  if (isdigit(i))
+    {
+    p[cbit_digit  + i/8] |= 1 << (i&7);
+    p[cbit_word   + i/8] |= 1 << (i&7);
+    }
+  if (isupper(i))
+    {
+    p[cbit_upper  + i/8] |= 1 << (i&7);
+    p[cbit_word   + i/8] |= 1 << (i&7);
+    }
+  if (islower(i))
+    {
+    p[cbit_lower  + i/8] |= 1 << (i&7);
+    p[cbit_word   + i/8] |= 1 << (i&7);
+    }
+  if (i == '_')   p[cbit_word   + i/8] |= 1 << (i&7);
+  if (isspace(i)) p[cbit_space  + i/8] |= 1 << (i&7);
+  if (isxdigit(i))p[cbit_xdigit + i/8] |= 1 << (i&7);
+  if (isgraph(i)) p[cbit_graph  + i/8] |= 1 << (i&7);
+  if (isprint(i)) p[cbit_print  + i/8] |= 1 << (i&7);
+  if (ispunct(i)) p[cbit_punct  + i/8] |= 1 << (i&7);
+  if (iscntrl(i)) p[cbit_cntrl  + i/8] |= 1 << (i&7);
+  }
+p += cbit_length;
+
+/* Finally, the character type table. In this, we exclude VT from the white
+space chars, because Perl doesn't recognize it as such for \s and for comments
+within regexes. */
+
+for (i = 0; i < 256; i++)
+  {
+  int x = 0;
+  if (i != 0x0b && isspace(i)) x += ctype_space;
+  if (isalpha(i)) x += ctype_letter;
+  if (isdigit(i)) x += ctype_digit;
+  if (isxdigit(i)) x += ctype_xdigit;
+  if (isalnum(i) || i == '_') x += ctype_word;
+
+  /* Note: strchr includes the terminating zero in the characters it considers.
+  In this instance, that is ok because we want binary zero to be flagged as a
+  meta-character, which in this sense is any character that terminates a run
+  of data characters. */
+
+  if (strchr("*+?{^.$|()[", i) != 0) x += ctype_meta; *p++ = x; }
+
+return yield;
+}
+
+/* End of pcre_maketables.c */
diff -Nurp tin-1.7.8/pcre/pcre_ord2utf8.c tin-1.7.9/pcre/pcre_ord2utf8.c
--- tin-1.7.8/pcre/pcre_ord2utf8.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_ord2utf8.c	2005-06-28 10:31:26.433141294 +0200
@@ -0,0 +1,78 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This file contains a private PCRE function that converts an ordinal
+character value into a UTF8 string. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*       Convert character value to UTF-8         *
+*************************************************/
+
+/* This function takes an integer value in the range 0 - 0x7fffffff
+and encodes it as a UTF-8 character in 0 to 6 bytes.
+
+Arguments:
+  cvalue     the character value
+  buffer     pointer to buffer for result - at least 6 bytes long
+
+Returns:     number of characters placed in the buffer
+*/
+
+EXPORT int
+_pcre_ord2utf8(int cvalue, uschar *buffer)
+{
+register int i, j;
+for (i = 0; i < _pcre_utf8_table1_size; i++)
+  if (cvalue <= _pcre_utf8_table1[i]) break;
+buffer += i;
+for (j = i; j > 0; j--)
+ {
+ *buffer-- = 0x80 | (cvalue & 0x3f);
+ cvalue >>= 6;
+ }
+*buffer = _pcre_utf8_table2[i] | cvalue;
+return i + 1;
+}
+
+/* End of pcre_ord2utf8.c */
diff -Nurp tin-1.7.8/pcre/pcre_printint.c tin-1.7.9/pcre/pcre_printint.c
--- tin-1.7.8/pcre/pcre_printint.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_printint.c	2005-06-28 10:31:26.445139086 +0200
@@ -0,0 +1,451 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains an PCRE private debugging function for printing out the
+internal form of a compiled regular expression, along with some supporting
+local functions. */
+
+
+#include "pcre_internal.h"
+
+
+static const char *OP_names[] = { OP_NAME_LIST };
+
+
+/*************************************************
+*       Print single- or multi-byte character    *
+*************************************************/
+
+static int
+print_char(FILE *f, uschar *ptr, BOOL utf8)
+{
+int c = *ptr;
+
+if (!utf8 || (c & 0xc0) != 0xc0)
+  {
+  if (isprint(c)) fprintf(f, "%c", c); else fprintf(f, "\\x%02x", c);
+  return 0;
+  }
+else
+  {
+  int i;
+  int a = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */
+  int s = 6*a;
+  c = (c & _pcre_utf8_table3[a]) << s;
+  for (i = 1; i <= a; i++)
+    {
+    /* This is a check for malformed UTF-8; it should only occur if the sanity
+    check has been turned off. Rather than swallow random bytes, just stop if
+    we hit a bad one. Print it with \X instead of \x as an indication. */
+
+    if ((ptr[i] & 0xc0) != 0x80)
+      {
+      fprintf(f, "\\X{%x}", c);
+      return i - 1;
+      }
+
+    /* The byte is OK */
+
+    s -= 6;
+    c |= (ptr[i] & 0x3f) << s;
+    }
+  if (c < 128) fprintf(f, "\\x%02x", c); else fprintf(f, "\\x{%x}", c);
+  return a;
+  }
+}
+
+
+
+/*************************************************
+*          Find Unicode property name            *
+*************************************************/
+
+static const char *
+get_ucpname(int property)
+{
+#ifdef SUPPORT_UCP
+int i;
+for (i = _pcre_utt_size; i >= 0; i--)
+  {
+  if (property == _pcre_utt[i].value) break;
+  }
+return (i >= 0)? _pcre_utt[i].name : "??";
+#else
+return "??";
+#endif
+}
+
+
+
+/*************************************************
+*         Print compiled regex                   *
+*************************************************/
+
+/* Make this function work for a regex with integers either byte order.
+However, we assume that what we are passed is a compiled regex. */
+
+EXPORT void
+_pcre_printint(pcre *external_re, FILE *f)
+{
+real_pcre *re = (real_pcre *)external_re;
+uschar *codestart, *code;
+BOOL utf8;
+
+unsigned int options = re->options;
+int offset = re->name_table_offset;
+int count = re->name_count;
+int size = re->name_entry_size;
+
+if (re->magic_number != MAGIC_NUMBER)
+  {
+  offset = ((offset << 8) & 0xff00) | ((offset >> 8) & 0xff);
+  count = ((count << 8) & 0xff00) | ((count >> 8) & 0xff);
+  size = ((size << 8) & 0xff00) | ((size >> 8) & 0xff);
+  options = ((options << 24) & 0xff000000) |
+            ((options <<  8) & 0x00ff0000) |
+            ((options >>  8) & 0x0000ff00) |
+            ((options >> 24) & 0x000000ff);
+  }
+
+code = codestart = (uschar *)re + offset + count * size;
+utf8 = (options & PCRE_UTF8) != 0;
+
+for(;;)
+  {
+  uschar *ccode;
+  int c;
+  int extra = 0;
+
+  fprintf(f, "%3d ", (int)(code - codestart));
+
+  if (*code >= OP_BRA)
+    {
+    if (*code - OP_BRA > EXTRACT_BASIC_MAX)
+      fprintf(f, "%3d Bra extra\n", GET(code, 1));
+    else
+      fprintf(f, "%3d Bra %d\n", GET(code, 1), *code - OP_BRA);
+    code += _pcre_OP_lengths[OP_BRA];
+    continue;
+    }
+
+  switch(*code)
+    {
+    case OP_END:
+    fprintf(f, "    %s\n", OP_names[*code]);
+    fprintf(f, "------------------------------------------------------------------\n");
+    return;
+
+    case OP_OPT:
+    fprintf(f, " %.2x %s", code[1], OP_names[*code]);
+    break;
+
+    case OP_CHAR:
+      {
+      fprintf(f, "    ");
+      do
+        {
+        code++;
+        code += 1 + print_char(f, code, utf8);
+        }
+      while (*code == OP_CHAR);
+      fprintf(f, "\n");
+      continue;
+      }
+    break;
+
+    case OP_CHARNC:
+      {
+      fprintf(f, " NC ");
+      do
+        {
+        code++;
+        code += 1 + print_char(f, code, utf8);
+        }
+      while (*code == OP_CHARNC);
+      fprintf(f, "\n");
+      continue;
+      }
+    break;
+
+    case OP_KETRMAX:
+    case OP_KETRMIN:
+    case OP_ALT:
+    case OP_KET:
+    case OP_ASSERT:
+    case OP_ASSERT_NOT:
+    case OP_ASSERTBACK:
+    case OP_ASSERTBACK_NOT:
+    case OP_ONCE:
+    case OP_COND:
+    case OP_REVERSE:
+    fprintf(f, "%3d %s", GET(code, 1), OP_names[*code]);
+    break;
+
+    case OP_BRANUMBER:
+    printf("%3d %s", GET2(code, 1), OP_names[*code]);
+    break;
+
+    case OP_CREF:
+    if (GET2(code, 1) == CREF_RECURSE)
+      fprintf(f, "    Cond recurse");
+    else
+      fprintf(f, "%3d %s", GET2(code,1), OP_names[*code]);
+    break;
+
+    case OP_STAR:
+    case OP_MINSTAR:
+    case OP_PLUS:
+    case OP_MINPLUS:
+    case OP_QUERY:
+    case OP_MINQUERY:
+    case OP_TYPESTAR:
+    case OP_TYPEMINSTAR:
+    case OP_TYPEPLUS:
+    case OP_TYPEMINPLUS:
+    case OP_TYPEQUERY:
+    case OP_TYPEMINQUERY:
+    fprintf(f, "    ");
+    if (*code >= OP_TYPESTAR)
+      {
+      fprintf(f, "%s", OP_names[code[1]]);
+      if (code[1] == OP_PROP || code[1] == OP_NOTPROP)
+        {
+        fprintf(f, " %s ", get_ucpname(code[2]));
+        extra = 1;
+        }
+      }
+    else extra = print_char(f, code+1, utf8);
+    fprintf(f, "%s", OP_names[*code]);
+    break;
+
+    case OP_EXACT:
+    case OP_UPTO:
+    case OP_MINUPTO:
+    fprintf(f, "    ");
+    extra = print_char(f, code+3, utf8);
+    fprintf(f, "{");
+    if (*code != OP_EXACT) fprintf(f, ",");
+    fprintf(f, "%d}", GET2(code,1));
+    if (*code == OP_MINUPTO) fprintf(f, "?");
+    break;
+
+    case OP_TYPEEXACT:
+    case OP_TYPEUPTO:
+    case OP_TYPEMINUPTO:
+    fprintf(f, "    %s", OP_names[code[3]]);
+    if (code[3] == OP_PROP || code[3] == OP_NOTPROP)
+      {
+      fprintf(f, " %s ", get_ucpname(code[4]));
+      extra = 1;
+      }
+    fprintf(f, "{");
+    if (*code != OP_TYPEEXACT) fprintf(f, "0,");
+    fprintf(f, "%d}", GET2(code,1));
+    if (*code == OP_TYPEMINUPTO) fprintf(f, "?");
+    break;
+
+    case OP_NOT:
+    if (isprint(c = code[1])) fprintf(f, "    [^%c]", c);
+      else fprintf(f, "    [^\\x%02x]", c);
+    break;
+
+    case OP_NOTSTAR:
+    case OP_NOTMINSTAR:
+    case OP_NOTPLUS:
+    case OP_NOTMINPLUS:
+    case OP_NOTQUERY:
+    case OP_NOTMINQUERY:
+    if (isprint(c = code[1])) fprintf(f, "    [^%c]", c);
+      else fprintf(f, "    [^\\x%02x]", c);
+    fprintf(f, "%s", OP_names[*code]);
+    break;
+
+    case OP_NOTEXACT:
+    case OP_NOTUPTO:
+    case OP_NOTMINUPTO:
+    if (isprint(c = code[3])) fprintf(f, "    [^%c]{", c);
+      else fprintf(f, "    [^\\x%02x]{", c);
+    if (*code != OP_NOTEXACT) fprintf(f, "0,");
+    fprintf(f, "%d}", GET2(code,1));
+    if (*code == OP_NOTMINUPTO) fprintf(f, "?");
+    break;
+
+    case OP_RECURSE:
+    fprintf(f, "%3d %s", GET(code, 1), OP_names[*code]);
+    break;
+
+    case OP_REF:
+    fprintf(f, "    \\%d", GET2(code,1));
+    ccode = code + _pcre_OP_lengths[*code];
+    goto CLASS_REF_REPEAT;
+
+    case OP_CALLOUT:
+    fprintf(f, "    %s %d %d %d", OP_names[*code], code[1], GET(code,2),
+      GET(code, 2 + LINK_SIZE));
+    break;
+
+    case OP_PROP:
+    case OP_NOTPROP:
+    fprintf(f, "    %s %s", OP_names[*code], get_ucpname(code[1]));
+    break;
+
+    /* OP_XCLASS can only occur in UTF-8 mode. However, there's no harm in
+    having this code always here, and it makes it less messy without all those
+    #ifdefs. */
+
+    case OP_CLASS:
+    case OP_NCLASS:
+    case OP_XCLASS:
+      {
+      int i, min, max;
+      BOOL printmap;
+
+      fprintf(f, "    [");
+
+      if (*code == OP_XCLASS)
+        {
+        extra = GET(code, 1);
+        ccode = code + LINK_SIZE + 1;
+        printmap = (*ccode & XCL_MAP) != 0;
+        if ((*ccode++ & XCL_NOT) != 0) fprintf(f, "^");
+        }
+      else
+        {
+        printmap = TRUE;
+        ccode = code + 1;
+        }
+
+      /* Print a bit map */
+
+      if (printmap)
+        {
+        for (i = 0; i < 256; i++)
+          {
+          if ((ccode[i/8] & (1 << (i&7))) != 0)
+            {
+            int j;
+            for (j = i+1; j < 256; j++)
+              if ((ccode[j/8] & (1 << (j&7))) == 0) break;
+            if (i == '-' || i == ']') fprintf(f, "\\");
+            if (isprint(i)) fprintf(f, "%c", i); else fprintf(f, "\\x%02x", i);
+            if (--j > i)
+              {
+              if (j != i + 1) fprintf(f, "-");
+              if (j == '-' || j == ']') fprintf(f, "\\");
+              if (isprint(j)) fprintf(f, "%c", j); else fprintf(f, "\\x%02x", j);
+              }
+            i = j;
+            }
+          }
+        ccode += 32;
+        }
+
+      /* For an XCLASS there is always some additional data */
+
+      if (*code == OP_XCLASS)
+        {
+        int ch;
+        while ((ch = *ccode++) != XCL_END)
+          {
+          if (ch == XCL_PROP)
+            {
+            fprintf(f, "\\p{%s}", get_ucpname(*ccode++));
+            }
+          else if (ch == XCL_NOTPROP)
+            {
+            fprintf(f, "\\P{%s}", get_ucpname(*ccode++));
+            }
+          else
+            {
+            ccode += 1 + print_char(f, ccode, TRUE);
+            if (ch == XCL_RANGE)
+              {
+              fprintf(f, "-");
+              ccode += 1 + print_char(f, ccode, TRUE);
+              }
+            }
+          }
+        }
+
+      /* Indicate a non-UTF8 class which was created by negation */
+
+      fprintf(f, "]%s", (*code == OP_NCLASS)? " (neg)" : "");
+
+      /* Handle repeats after a class or a back reference */
+
+      CLASS_REF_REPEAT:
+      switch(*ccode)
+        {
+        case OP_CRSTAR:
+        case OP_CRMINSTAR:
+        case OP_CRPLUS:
+        case OP_CRMINPLUS:
+        case OP_CRQUERY:
+        case OP_CRMINQUERY:
+        fprintf(f, "%s", OP_names[*ccode]);
+        extra += _pcre_OP_lengths[*ccode];
+        break;
+
+        case OP_CRRANGE:
+        case OP_CRMINRANGE:
+        min = GET2(ccode,1);
+        max = GET2(ccode,3);
+        if (max == 0) fprintf(f, "{%d,}", min);
+        else fprintf(f, "{%d,%d}", min, max);
+        if (*ccode == OP_CRMINRANGE) fprintf(f, "?");
+        extra += _pcre_OP_lengths[*ccode];
+        break;
+        }
+      }
+    break;
+
+    /* Anything else is just an item with no data*/
+
+    default:
+    fprintf(f, "    %s", OP_names[*code]);
+    break;
+    }
+
+  code += _pcre_OP_lengths[*code] + extra;
+  fprintf(f, "\n");
+  }
+}
+
+/* End of pcre_printint.c */
diff -Nurp tin-1.7.8/pcre/pcre_refcount.c tin-1.7.9/pcre/pcre_refcount.c
--- tin-1.7.8/pcre/pcre_refcount.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_refcount.c	2005-06-28 10:31:26.456137061 +0200
@@ -0,0 +1,77 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_refcount(), which is an
+auxiliary function that can be used to maintain a reference count in a compiled
+pattern data block. This might be helpful in applications where the block is
+shared by different users. */
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*           Maintain reference count             *
+*************************************************/
+
+/* The reference count is a 16-bit field, initialized to zero. It is not
+possible to transfer a non-zero count from one host to a different host that
+has a different byte order - though I can't see why anyone in their right mind
+would ever want to do that!
+
+Arguments:
+  argument_re   points to compiled code
+  adjust        value to add to the count
+
+Returns:        the (possibly updated) count value (a non-negative number), or
+                a negative error number
+*/
+
+EXPORT int
+pcre_refcount(pcre *argument_re, int adjust)
+{
+real_pcre *re = (real_pcre *)argument_re;
+if (re == NULL) return PCRE_ERROR_NULL;
+re->ref_count = (-adjust > re->ref_count)? 0 :
+                (adjust + re->ref_count > 65535)? 65535 :
+                re->ref_count + adjust;
+return re->ref_count;
+}
+
+/* End of pcre_refcount.c */
diff -Nurp tin-1.7.8/pcre/pcre_study.c tin-1.7.9/pcre/pcre_study.c
--- tin-1.7.8/pcre/pcre_study.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_study.c	2005-06-28 10:31:26.468134853 +0200
@@ -0,0 +1,482 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_study(), along with local
+supporting functions. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*      Set a bit and maybe its alternate case    *
+*************************************************/
+
+/* Given a character, set its bit in the table, and also the bit for the other
+version of a letter if we are caseless.
+
+Arguments:
+  start_bits    points to the bit map
+  c             is the character
+  caseless      the caseless flag
+  cd            the block with char table pointers
+
+Returns:        nothing
+*/
+
+static void
+set_bit(uschar *start_bits, unsigned int c, BOOL caseless, compile_data *cd)
+{
+start_bits[c/8] |= (1 << (c&7));
+if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
+  start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
+}
+
+
+
+/*************************************************
+*          Create bitmap of starting chars       *
+*************************************************/
+
+/* This function scans a compiled unanchored expression and attempts to build a
+bitmap of the set of initial characters. If it can't, it returns FALSE. As time
+goes by, we may be able to get more clever at doing this.
+
+Arguments:
+  code         points to an expression
+  start_bits   points to a 32-byte table, initialized to 0
+  caseless     the current state of the caseless flag
+  utf8         TRUE if in UTF-8 mode
+  cd           the block with char table pointers
+
+Returns:       TRUE if table built, FALSE otherwise
+*/
+
+static BOOL
+set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
+  BOOL utf8, compile_data *cd)
+{
+register int c;
+
+/* This next statement and the later reference to dummy are here in order to
+trick the optimizer of the IBM C compiler for OS/2 into generating correct
+code. Apparently IBM isn't going to fix the problem, and we would rather not
+disable optimization (in this module it actually makes a big difference, and
+the pcre module can use all the optimization it can get). */
+
+volatile int dummy;
+
+do
+  {
+  const uschar *tcode = code + 1 + LINK_SIZE;
+  BOOL try_next = TRUE;
+
+  while (try_next)
+    {
+    /* If a branch starts with a bracket or a positive lookahead assertion,
+    recurse to set bits from within them. That's all for this branch. */
+
+    if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
+      {
+      if (!set_start_bits(tcode, start_bits, caseless, utf8, cd))
+        return FALSE;
+      try_next = FALSE;
+      }
+
+    else switch(*tcode)
+      {
+      default:
+      return FALSE;
+
+      /* Skip over callout */
+
+      case OP_CALLOUT:
+      tcode += 2 + 2*LINK_SIZE;
+      break;
+
+      /* Skip over extended extraction bracket number */
+
+      case OP_BRANUMBER:
+      tcode += 3;
+      break;
+
+      /* Skip over lookbehind and negative lookahead assertions */
+
+      case OP_ASSERT_NOT:
+      case OP_ASSERTBACK:
+      case OP_ASSERTBACK_NOT:
+      do tcode += GET(tcode, 1); while (*tcode == OP_ALT);
+      tcode += 1+LINK_SIZE;
+      break;
+
+      /* Skip over an option setting, changing the caseless flag */
+
+      case OP_OPT:
+      caseless = (tcode[1] & PCRE_CASELESS) != 0;
+      tcode += 2;
+      break;
+
+      /* BRAZERO does the bracket, but carries on. */
+
+      case OP_BRAZERO:
+      case OP_BRAMINZERO:
+      if (!set_start_bits(++tcode, start_bits, caseless, utf8, cd))
+        return FALSE;
+      dummy = 1;
+      do tcode += GET(tcode,1); while (*tcode == OP_ALT);
+      tcode += 1+LINK_SIZE;
+      break;
+
+      /* Single-char * or ? sets the bit and tries the next item */
+
+      case OP_STAR:
+      case OP_MINSTAR:
+      case OP_QUERY:
+      case OP_MINQUERY:
+      set_bit(start_bits, tcode[1], caseless, cd);
+      tcode += 2;
+#ifdef SUPPORT_UTF8
+      if (utf8) while ((*tcode & 0xc0) == 0x80) tcode++;
+#endif
+      break;
+
+      /* Single-char upto sets the bit and tries the next */
+
+      case OP_UPTO:
+      case OP_MINUPTO:
+      set_bit(start_bits, tcode[3], caseless, cd);
+      tcode += 4;
+#ifdef SUPPORT_UTF8
+      if (utf8) while ((*tcode & 0xc0) == 0x80) tcode++;
+#endif
+      break;
+
+      /* At least one single char sets the bit and stops */
+
+      case OP_EXACT:       /* Fall through */
+      tcode += 2;
+
+      case OP_CHAR:
+      case OP_CHARNC:
+      case OP_PLUS:
+      case OP_MINPLUS:
+      set_bit(start_bits, tcode[1], caseless, cd);
+      try_next = FALSE;
+      break;
+
+      /* Single character type sets the bits and stops */
+
+      case OP_NOT_DIGIT:
+      for (c = 0; c < 32; c++)
+        start_bits[c] |= ~cd->cbits[c+cbit_digit];
+      try_next = FALSE;
+      break;
+
+      case OP_DIGIT:
+      for (c = 0; c < 32; c++)
+        start_bits[c] |= cd->cbits[c+cbit_digit];
+      try_next = FALSE;
+      break;
+
+      case OP_NOT_WHITESPACE:
+      for (c = 0; c < 32; c++)
+        start_bits[c] |= ~cd->cbits[c+cbit_space];
+      try_next = FALSE;
+      break;
+
+      case OP_WHITESPACE:
+      for (c = 0; c < 32; c++)
+        start_bits[c] |= cd->cbits[c+cbit_space];
+      try_next = FALSE;
+      break;
+
+      case OP_NOT_WORDCHAR:
+      for (c = 0; c < 32; c++)
+        start_bits[c] |= ~cd->cbits[c+cbit_word];
+      try_next = FALSE;
+      break;
+
+      case OP_WORDCHAR:
+      for (c = 0; c < 32; c++)
+        start_bits[c] |= cd->cbits[c+cbit_word];
+      try_next = FALSE;
+      break;
+
+      /* One or more character type fudges the pointer and restarts, knowing
+      it will hit a single character type and stop there. */
+
+      case OP_TYPEPLUS:
+      case OP_TYPEMINPLUS:
+      tcode++;
+      break;
+
+      case OP_TYPEEXACT:
+      tcode += 3;
+      break;
+
+      /* Zero or more repeats of character types set the bits and then
+      try again. */
+
+      case OP_TYPEUPTO:
+      case OP_TYPEMINUPTO:
+      tcode += 2;               /* Fall through */
+
+      case OP_TYPESTAR:
+      case OP_TYPEMINSTAR:
+      case OP_TYPEQUERY:
+      case OP_TYPEMINQUERY:
+      switch(tcode[1])
+        {
+        case OP_ANY:
+        return FALSE;
+
+        case OP_NOT_DIGIT:
+        for (c = 0; c < 32; c++)
+          start_bits[c] |= ~cd->cbits[c+cbit_digit];
+        break;
+
+        case OP_DIGIT:
+        for (c = 0; c < 32; c++)
+          start_bits[c] |= cd->cbits[c+cbit_digit];
+        break;
+
+        case OP_NOT_WHITESPACE:
+        for (c = 0; c < 32; c++)
+          start_bits[c] |= ~cd->cbits[c+cbit_space];
+        break;
+
+        case OP_WHITESPACE:
+        for (c = 0; c < 32; c++)
+          start_bits[c] |= cd->cbits[c+cbit_space];
+        break;
+
+        case OP_NOT_WORDCHAR:
+        for (c = 0; c < 32; c++)
+          start_bits[c] |= ~cd->cbits[c+cbit_word];
+        break;
+
+        case OP_WORDCHAR:
+        for (c = 0; c < 32; c++)
+          start_bits[c] |= cd->cbits[c+cbit_word];
+        break;
+        }
+
+      tcode += 2;
+      break;
+
+      /* Character class where all the information is in a bit map: set the
+      bits and either carry on or not, according to the repeat count. If it was
+      a negative class, and we are operating with UTF-8 characters, any byte
+      with a value >= 0xc4 is a potentially valid starter because it starts a
+      character with a value > 255. */
+
+      case OP_NCLASS:
+      if (utf8)
+        {
+        start_bits[24] |= 0xf0;              /* Bits for 0xc4 - 0xc8 */
+        memset(start_bits+25, 0xff, 7);      /* Bits for 0xc9 - 0xff */
+        }
+      /* Fall through */
+
+      case OP_CLASS:
+        {
+        tcode++;
+
+        /* In UTF-8 mode, the bits in a bit map correspond to character
+        values, not to byte values. However, the bit map we are constructing is
+        for byte values. So we have to do a conversion for characters whose
+        value is > 127. In fact, there are only two possible starting bytes for
+        characters in the range 128 - 255. */
+
+        if (utf8)
+          {
+          for (c = 0; c < 16; c++) start_bits[c] |= tcode[c];
+          for (c = 128; c < 256; c++)
+            {
+            if ((tcode[c/8] && (1 << (c&7))) != 0)
+              {
+              int d = (c >> 6) | 0xc0;            /* Set bit for this starter */
+              start_bits[d/8] |= (1 << (d&7));    /* and then skip on to the */
+              c = (c & 0xc0) + 0x40 - 1;          /* next relevant character. */
+              }
+            }
+          }
+
+        /* In non-UTF-8 mode, the two bit maps are completely compatible. */
+
+        else
+          {
+          for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
+          }
+
+        /* Advance past the bit map, and act on what follows */
+
+        tcode += 32;
+        switch (*tcode)
+          {
+          case OP_CRSTAR:
+          case OP_CRMINSTAR:
+          case OP_CRQUERY:
+          case OP_CRMINQUERY:
+          tcode++;
+          break;
+
+          case OP_CRRANGE:
+          case OP_CRMINRANGE:
+          if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
+            else try_next = FALSE;
+          break;
+
+          default:
+          try_next = FALSE;
+          break;
+          }
+        }
+      break; /* End of bitmap class handling */
+
+      }      /* End of switch */
+    }        /* End of try_next loop */
+
+  code += GET(code, 1);   /* Advance to next branch */
+  }
+while (*code == OP_ALT);
+return TRUE;
+}
+
+
+
+/*************************************************
+*          Study a compiled expression           *
+*************************************************/
+
+/* This function is handed a compiled expression that it must study to produce
+information that will speed up the matching. It returns a pcre_extra block
+which then gets handed back to pcre_exec().
+
+Arguments:
+  re        points to the compiled expression
+  options   contains option bits
+  errorptr  points to where to place error messages;
+            set NULL unless error
+
+Returns:    pointer to a pcre_extra block, with study_data filled in and the
+              appropriate flag set;
+            NULL on error or if no optimization possible
+*/
+
+EXPORT pcre_extra *
+pcre_study(const pcre *external_re, int options, const char **errorptr)
+{
+uschar start_bits[32];
+pcre_extra *extra;
+pcre_study_data *study;
+const uschar *tables;
+const real_pcre *re = (const real_pcre *)external_re;
+uschar *code = (uschar *)re + re->name_table_offset +
+  (re->name_count * re->name_entry_size);
+compile_data compile_block;
+
+*errorptr = NULL;
+
+if (re == NULL || re->magic_number != MAGIC_NUMBER)
+  {
+  *errorptr = "argument is not a compiled regular expression";
+  return NULL;
+  }
+
+if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
+  {
+  *errorptr = "unknown or incorrect option bit(s) set";
+  return NULL;
+  }
+
+/* For an anchored pattern, or an unanchored pattern that has a first char, or
+a multiline pattern that matches only at "line starts", no further processing
+at present. */
+
+if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
+  return NULL;
+
+/* Set the character tables in the block that is passed around */
+
+tables = re->tables;
+if (tables == NULL)
+  (void)pcre_fullinfo(external_re, NULL, PCRE_INFO_DEFAULT_TABLES,
+  (void *)(&tables));
+
+compile_block.lcc = tables + lcc_offset;
+compile_block.fcc = tables + fcc_offset;
+compile_block.cbits = tables + cbits_offset;
+compile_block.ctypes = tables + ctypes_offset;
+
+/* See if we can find a fixed set of initial characters for the pattern. */
+
+memset(start_bits, 0, 32 * sizeof(uschar));
+if (!set_start_bits(code, start_bits, (re->options & PCRE_CASELESS) != 0,
+  (re->options & PCRE_UTF8) != 0, &compile_block)) return NULL;
+
+/* Get a pcre_extra block and a pcre_study_data block. The study data is put in
+the latter, which is pointed to by the former, which may also get additional
+data set later by the calling program. At the moment, the size of
+pcre_study_data is fixed. We nevertheless save it in a field for returning via
+the pcre_fullinfo() function so that if it becomes variable in the future, we
+don't have to change that code. */
+
+extra = (pcre_extra *)(pcre_malloc)
+  (sizeof(pcre_extra) + sizeof(pcre_study_data));
+
+if (extra == NULL)
+  {
+  *errorptr = "failed to get memory";
+  return NULL;
+  }
+
+study = (pcre_study_data *)((char *)extra + sizeof(pcre_extra));
+extra->flags = PCRE_EXTRA_STUDY_DATA;
+extra->study_data = study;
+
+study->size = sizeof(pcre_study_data);
+study->options = PCRE_STUDY_MAPPED;
+memcpy(study->start_bits, start_bits, sizeof(start_bits));
+
+return extra;
+}
+
+/* End of pcre_study.c */
diff -Nurp tin-1.7.8/pcre/pcre_tables.c tin-1.7.9/pcre/pcre_tables.c
--- tin-1.7.8/pcre/pcre_tables.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_tables.c	2005-06-28 10:31:26.479132828 +0200
@@ -0,0 +1,129 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains some fixed tables that are used by more than one of the
+PCRE code modules. */
+
+
+#include "pcre_internal.h"
+
+
+/* Table of sizes for the fixed-length opcodes. It's defined in a macro so that
+the definition is next to the definition of the opcodes in internal.h. */
+
+const uschar _pcre_OP_lengths[] = { OP_LENGTHS };
+
+
+
+/*************************************************
+*           Tables for UTF-8 support             *
+*************************************************/
+
+/* These are the breakpoints for different numbers of bytes in a UTF-8
+character. */
+
+const int _pcre_utf8_table1[] =
+  { 0x7f, 0x7ff, 0xffff, 0x1fffff, 0x3ffffff, 0x7fffffff};
+
+const int _pcre_utf8_table1_size = sizeof(_pcre_utf8_table1)/sizeof(int);
+
+/* These are the indicator bits and the mask for the data bits to set in the
+first byte of a character, indexed by the number of additional bytes. */
+
+const int _pcre_utf8_table2[] = { 0,    0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
+const int _pcre_utf8_table3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
+
+/* Table of the number of extra characters, indexed by the first character
+masked with 0x3f. The highest number for a valid UTF-8 character is in fact
+0x3d. */
+
+const uschar _pcre_utf8_table4[] = {
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
+  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
+  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
+
+/* This table translates Unicode property names into code values for the
+ucp_findchar() function. It is used by pcretest as well as by the library
+functions. */
+
+const ucp_type_table _pcre_utt[] = {
+  { "C",  128 + ucp_C },
+  { "Cc", ucp_Cc },
+  { "Cf", ucp_Cf },
+  { "Cn", ucp_Cn },
+  { "Co", ucp_Co },
+  { "Cs", ucp_Cs },
+  { "L",  128 + ucp_L },
+  { "Ll", ucp_Ll },
+  { "Lm", ucp_Lm },
+  { "Lo", ucp_Lo },
+  { "Lt", ucp_Lt },
+  { "Lu", ucp_Lu },
+  { "M",  128 + ucp_M },
+  { "Mc", ucp_Mc },
+  { "Me", ucp_Me },
+  { "Mn", ucp_Mn },
+  { "N",  128 + ucp_N },
+  { "Nd", ucp_Nd },
+  { "Nl", ucp_Nl },
+  { "No", ucp_No },
+  { "P",  128 + ucp_P },
+  { "Pc", ucp_Pc },
+  { "Pd", ucp_Pd },
+  { "Pe", ucp_Pe },
+  { "Pf", ucp_Pf },
+  { "Pi", ucp_Pi },
+  { "Po", ucp_Po },
+  { "Ps", ucp_Ps },
+  { "S",  128 + ucp_S },
+  { "Sc", ucp_Sc },
+  { "Sk", ucp_Sk },
+  { "Sm", ucp_Sm },
+  { "So", ucp_So },
+  { "Z",  128 + ucp_Z },
+  { "Zl", ucp_Zl },
+  { "Zp", ucp_Zp },
+  { "Zs", ucp_Zs }
+};
+
+const int _pcre_utt_size = sizeof(_pcre_utt)/sizeof(ucp_type_table);
+
+/* End of pcre_tables.c */
diff -Nurp tin-1.7.8/pcre/pcre_try_flipped.c tin-1.7.9/pcre/pcre_try_flipped.c
--- tin-1.7.8/pcre/pcre_try_flipped.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_try_flipped.c	2005-06-28 10:31:26.492130435 +0200
@@ -0,0 +1,132 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains an internal function that tests a compiled pattern to
+see if it was compiled with the opposite endianness. If so, it uses an
+auxiliary local function to flip the appropriate bytes. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*         Flip bytes in an integer               *
+*************************************************/
+
+/* This function is called when the magic number in a regex doesn't match, in
+order to flip its bytes to see if we are dealing with a pattern that was
+compiled on a host of different endianness. If so, this function is used to
+flip other byte values.
+
+Arguments:
+  value        the number to flip
+  n            the number of bytes to flip (assumed to be 2 or 4)
+
+Returns:       the flipped value
+*/
+
+static long int
+byteflip(long int value, int n)
+{
+if (n == 2) return ((value & 0x00ff) << 8) | ((value & 0xff00) >> 8);
+return ((value & 0x000000ff) << 24) |
+       ((value & 0x0000ff00) <<  8) |
+       ((value & 0x00ff0000) >>  8) |
+       ((value & 0xff000000) >> 24);
+}
+
+
+
+/*************************************************
+*       Test for a byte-flipped compiled regex   *
+*************************************************/
+
+/* This function is called from pcre_exec(), pcre_dfa_exec(), and also from
+pcre_fullinfo(). Its job is to test whether the regex is byte-flipped - that
+is, it was compiled on a system of opposite endianness. The function is called
+only when the native MAGIC_NUMBER test fails. If the regex is indeed flipped,
+we flip all the relevant values into a different data block, and return it.
+
+Arguments:
+  re               points to the regex
+  study            points to study data, or NULL
+  internal_re      points to a new regex block
+  internal_study   points to a new study block
+
+Returns:           the new block if is is indeed a byte-flipped regex
+                   NULL if it is not
+*/
+
+EXPORT real_pcre *
+_pcre_try_flipped(const real_pcre *re, real_pcre *internal_re,
+  const pcre_study_data *study, pcre_study_data *internal_study)
+{
+if (byteflip(re->magic_number, sizeof(re->magic_number)) != MAGIC_NUMBER)
+  return NULL;
+
+*internal_re = *re;           /* To copy other fields */
+internal_re->size = byteflip(re->size, sizeof(re->size));
+internal_re->options = byteflip(re->options, sizeof(re->options));
+internal_re->top_bracket =
+  (pcre_uint16)byteflip(re->top_bracket, sizeof(re->top_bracket));
+internal_re->top_backref =
+  (pcre_uint16)byteflip(re->top_backref, sizeof(re->top_backref));
+internal_re->first_byte =
+  (pcre_uint16)byteflip(re->first_byte, sizeof(re->first_byte));
+internal_re->req_byte =
+  (pcre_uint16)byteflip(re->req_byte, sizeof(re->req_byte));
+internal_re->name_table_offset =
+  (pcre_uint16)byteflip(re->name_table_offset, sizeof(re->name_table_offset));
+internal_re->name_entry_size =
+  (pcre_uint16)byteflip(re->name_entry_size, sizeof(re->name_entry_size));
+internal_re->name_count =
+  (pcre_uint16)byteflip(re->name_count, sizeof(re->name_count));
+
+if (study != NULL)
+  {
+  *internal_study = *study;   /* To copy other fields */
+  internal_study->size = byteflip(study->size, sizeof(study->size));
+  internal_study->options = byteflip(study->options, sizeof(study->options));
+  }
+
+return internal_re;
+}
+
+/* End of pcre_tryflipped.c */
diff -Nurp tin-1.7.8/pcre/pcre_ucp_findchar.c tin-1.7.9/pcre/pcre_ucp_findchar.c
--- tin-1.7.8/pcre/pcre_ucp_findchar.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_ucp_findchar.c	2005-06-28 10:31:26.504128227 +0200
@@ -0,0 +1,53 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module compiles code for supporting the use of Unicode character
+properties. We use the (embryonic at the time of writing) UCP library, by
+including some of its files, copies of which have been put in the PCRE
+distribution. There is a macro in pcre_internal.h that changes the name
+ucp_findchar into _pcre_ucp_findchar. */
+
+
+#include "pcre_internal.h"
+
+#include "ucp_findchar.c"
+
+
+/* End of pcre_ucp_findchar.c */
diff -Nurp tin-1.7.8/pcre/pcre_valid_utf8.c tin-1.7.9/pcre/pcre_valid_utf8.c
--- tin-1.7.8/pcre/pcre_valid_utf8.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_valid_utf8.c	2005-06-28 10:31:26.514126386 +0200
@@ -0,0 +1,130 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains an internal function for validating UTF-8 character
+strings. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*         Validate a UTF-8 string                *
+*************************************************/
+
+/* This function is called (optionally) at the start of compile or match, to
+validate that a supposed UTF-8 string is actually valid. The early check means
+that subsequent code can assume it is dealing with a valid string. The check
+can be turned off for maximum performance, but the consequences of supplying
+an invalid string are then undefined.
+
+Arguments:
+  string       points to the string
+  length       length of string, or -1 if the string is zero-terminated
+
+Returns:       < 0    if the string is a valid UTF-8 string
+               >= 0   otherwise; the value is the offset of the bad byte
+*/
+
+EXPORT int
+_pcre_valid_utf8(const uschar *string, int length)
+{
+register const uschar *p;
+
+if (length < 0)
+  {
+  for (p = string; *p != 0; p++);
+  length = p - string;
+  }
+
+for (p = string; length-- > 0; p++)
+  {
+  register int ab;
+  register int c = *p;
+  if (c < 128) continue;
+  if ((c & 0xc0) != 0xc0) return p - string;
+  ab = _pcre_utf8_table4[c & 0x3f];  /* Number of additional bytes */
+  if (length < ab) return p - string;
+  length -= ab;
+
+  /* Check top bits in the second byte */
+  if ((*(++p) & 0xc0) != 0x80) return p - string;
+
+  /* Check for overlong sequences for each different length */
+  switch (ab)
+    {
+    /* Check for xx00 000x */
+    case 1:
+    if ((c & 0x3e) == 0) return p - string;
+    continue;   /* We know there aren't any more bytes to check */
+
+    /* Check for 1110 0000, xx0x xxxx */
+    case 2:
+    if (c == 0xe0 && (*p & 0x20) == 0) return p - string;
+    break;
+
+    /* Check for 1111 0000, xx00 xxxx */
+    case 3:
+    if (c == 0xf0 && (*p & 0x30) == 0) return p - string;
+    break;
+
+    /* Check for 1111 1000, xx00 0xxx */
+    case 4:
+    if (c == 0xf8 && (*p & 0x38) == 0) return p - string;
+    break;
+
+    /* Check for leading 0xfe or 0xff, and then for 1111 1100, xx00 00xx */
+    case 5:
+    if (c == 0xfe || c == 0xff ||
+       (c == 0xfc && (*p & 0x3c) == 0)) return p - string;
+    break;
+    }
+
+  /* Check for valid bytes after the 2nd, if any; all must start 10 */
+  while (--ab > 0)
+    {
+    if ((*(++p) & 0xc0) != 0x80) return p - string;
+    }
+  }
+
+return -1;
+}
+
+/* End of pcre_valid_utf8.c */
diff -Nurp tin-1.7.8/pcre/pcre_version.c tin-1.7.9/pcre/pcre_version.c
--- tin-1.7.8/pcre/pcre_version.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_version.c	2005-06-28 10:31:26.525124362 +0200
@@ -0,0 +1,61 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains the external function pcre_version(), which returns a
+string that identifies the PCRE version that is in use. */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*          Return version string                 *
+*************************************************/
+
+#define STRING(a)  # a
+#define XSTRING(s) STRING(s)
+
+EXPORT const char *
+pcre_version(void)
+{
+return XSTRING(PCRE_MAJOR) "." XSTRING(PCRE_MINOR) " " XSTRING(PCRE_DATE);
+}
+
+/* End of pcre_version.c */
diff -Nurp tin-1.7.8/pcre/pcre_xclass.c tin-1.7.9/pcre/pcre_xclass.c
--- tin-1.7.8/pcre/pcre_xclass.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/pcre_xclass.c	2005-06-28 10:31:26.536122337 +0200
@@ -0,0 +1,121 @@
+/*************************************************
+*      Perl-Compatible Regular Expressions       *
+*************************************************/
+
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
+
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+/* This module contains an internal function that is used to match an extended
+class (one that contains characters whose values are > 255). It is used by both
+pcre_exec() and pcre_def_exec(). */
+
+
+#include "pcre_internal.h"
+
+
+/*************************************************
+*       Match character against an XCLASS        *
+*************************************************/
+
+/* This function is called to match a character against an extended class that
+might contain values > 255.
+
+Arguments:
+  c           the character
+  data        points to the flag byte of the XCLASS data
+
+Returns:      TRUE if character matches, else FALSE
+*/
+
+EXPORT BOOL
+_pcre_xclass(int c, const uschar *data)
+{
+int t;
+BOOL negated = (*data & XCL_NOT) != 0;
+
+/* Character values < 256 are matched against a bitmap, if one is present. If
+not, we still carry on, because there may be ranges that start below 256 in the
+additional data. */
+
+if (c < 256)
+  {
+  if ((*data & XCL_MAP) != 0 && (data[1 + c/8] & (1 << (c&7))) != 0)
+    return !negated;   /* char found */
+  }
+
+/* First skip the bit map if present. Then match against the list of Unicode
+properties or large chars or ranges that end with a large char. We won't ever
+encounter XCL_PROP or XCL_NOTPROP when UCP support is not compiled. */
+
+if ((*data++ & XCL_MAP) != 0) data += 32;
+
+while ((t = *data++) != XCL_END)
+  {
+  int x, y;
+  if (t == XCL_SINGLE)
+    {
+    GETCHARINC(x, data);
+    if (c == x) return !negated;
+    }
+  else if (t == XCL_RANGE)
+    {
+    GETCHARINC(x, data);
+    GETCHARINC(y, data);
+    if (c >= x && c <= y) return !negated;
+    }
+
+#ifdef SUPPORT_UCP
+  else  /* XCL_PROP & XCL_NOTPROP */
+    {
+    int chartype, othercase;
+    int rqdtype = *data++;
+    int category = ucp_findchar(c, &chartype, &othercase);
+    if (rqdtype >= 128)
+      {
+      if ((rqdtype - 128 == category) == (t == XCL_PROP)) return !negated;
+      }
+    else
+      {
+      if ((rqdtype == chartype) == (t == XCL_PROP)) return !negated;
+      }
+    }
+#endif  /* SUPPORT_UCP */
+  }
+
+return negated;   /* char did not match */
+}
+
+/* End of pcre_xclass.c */
diff -Nurp tin-1.7.8/pcre/pcregrep.c tin-1.7.9/pcre/pcregrep.c
--- tin-1.7.8/pcre/pcregrep.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/pcregrep.c	2005-06-28 10:31:26.580114239 +0200
@@ -6,7 +6,7 @@
 its pattern matching. On a Unix or Win32 system it can recurse into
 directories.
 
-           Copyright (c) 1997-2004 University of Cambridge
+           Copyright (c) 1997-2005 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
@@ -42,6 +42,11 @@ POSSIBILITY OF SUCH DAMAGE.
 #include <string.h>
 #include <stdlib.h>
 #include <errno.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+
 #include "config.h"
 #include "pcre.h"
 
@@ -50,51 +55,89 @@ POSSIBILITY OF SUCH DAMAGE.
 
 typedef int BOOL;
 
-#define VERSION "3.0 14-Jan-2003"
+#define VERSION "4.0 07-Jun-2005"
 #define MAX_PATTERN_COUNT 100
 
+#if BUFSIZ > 8192
+#define MBUFTHIRD BUFSIZ
+#else
+#define MBUFTHIRD 8192
+#endif
+
+
 
 /*************************************************
 *               Global variables                 *
 *************************************************/
 
 static char *pattern_filename = NULL;
+static char *stdin_name = (char *)"(standard input)";
 static int  pattern_count = 0;
 static pcre **pattern_list;
 static pcre_extra **hints_list;
 
+static char *include_pattern = NULL;
+static char *exclude_pattern = NULL;
+
+static pcre *include_compiled = NULL;
+static pcre *exclude_compiled = NULL;
+
+static int after_context = 0;
+static int before_context = 0;
+static int both_context = 0;
+
 static BOOL count_only = FALSE;
 static BOOL filenames = TRUE;
 static BOOL filenames_only = FALSE;
+static BOOL filenames_nomatch_only = FALSE;
+static BOOL hyphenpending = FALSE;
 static BOOL invert = FALSE;
+static BOOL multiline = FALSE;
 static BOOL number = FALSE;
+static BOOL quiet = FALSE;
 static BOOL recurse = FALSE;
 static BOOL silent = FALSE;
 static BOOL whole_lines = FALSE;
+static BOOL word_match = FALSE;
 
 /* Structure for options and list of them */
 
+enum { OP_NODATA, OP_STRING, OP_NUMBER };
+
 typedef struct option_item {
+  int type;
   int one_char;
+  void *dataptr;
   const char *long_name;
   const char *help_text;
 } option_item;
 
 static option_item optionlist[] = {
-  { -1,  "help",         "display this help and exit" },
-  { 'c', "count",        "print only a count of matching lines per FILE" },
-  { 'h', "no-filename",  "suppress the prefixing filename on output" },
-  { 'i', "ignore-case",  "ignore case distinctions" },
-  { 'l', "files-with-matches", "print only FILE names containing matches" },
-  { 'n', "line-number",  "print line number with output lines" },
-  { 'r', "recursive",    "recursively scan sub-directories" },
-  { 's', "no-messages",  "suppress error messages" },
-  { 'u', "utf-8",        "use UTF-8 mode" },
-  { 'V', "version",      "print version information and exit" },
-  { 'v', "invert-match", "select non-matching lines" },
-  { 'x', "line-regex",   "force PATTERN to match only whole lines" },
-  { 'x', "line-regexp",  "force PATTERN to match only whole lines" },
-  { 0,    NULL,           NULL }
+  { OP_NODATA, -1,  NULL,              "",              "  terminate options" },
+  { OP_NODATA, -1,  NULL,              "help",          "display this help and exit" },
+  { OP_NUMBER, 'A', &after_context,    "after-context=number", "set number of following context lines" },
+  { OP_NUMBER, 'B', &before_context,   "before-context=number", "set number of prior context lines" },
+  { OP_NUMBER, 'C', &both_context,     "context=number", "set number of context lines, before & after" },
+  { OP_NODATA, 'c', NULL,              "count",         "print only a count of matching lines per FILE" },
+  { OP_STRING, 'f', &pattern_filename, "file=path",     "read patterns from file" },
+  { OP_NODATA, 'h', NULL,              "no-filename",   "suppress the prefixing filename on output" },
+  { OP_NODATA, 'i', NULL,              "ignore-case",   "ignore case distinctions" },
+  { OP_NODATA, 'l', NULL,              "files-with-matches", "print only FILE names containing matches" },
+  { OP_NODATA, 'L', NULL,              "files-without-match","print only FILE names not containing matches" },
+  { OP_STRING, -1,  &stdin_name,       "label=name",    "set name for standard input" },
+  { OP_NODATA, 'M', NULL,              "multiline",     "run in multiline mode" },
+  { OP_NODATA, 'n', NULL,              "line-number",   "print line number with output lines" },
+  { OP_NODATA, 'q', NULL,              "quiet",         "suppress output, just set return code" },
+  { OP_NODATA, 'r', NULL,              "recursive",     "recursively scan sub-directories" },
+  { OP_STRING, -1,  &exclude_pattern,  "exclude=pattern","exclude matching files when recursing" },
+  { OP_STRING, -1,  &include_pattern,  "include=pattern","include matching files when recursing" },
+  { OP_NODATA, 's', NULL,              "no-messages",   "suppress error messages" },
+  { OP_NODATA, 'u', NULL,              "utf-8",         "use UTF-8 mode" },
+  { OP_NODATA, 'V', NULL,              "version",       "print version information and exit" },
+  { OP_NODATA, 'v', NULL,              "invert-match",  "select non-matching lines" },
+  { OP_NODATA, 'w', NULL,              "word-regex(p)", "force PATTERN to match only as a word"  },
+  { OP_NODATA, 'x', NULL,              "line-regex(p)", "force PATTERN to match only whole lines" },
+  { OP_NODATA, 0,   NULL,               NULL,            NULL }
 };
 
 
@@ -154,7 +197,8 @@ closedir(dir);
 /************* Directory scanning in Win32 ***********/
 
 /* I (Philip Hazel) have no means of testing this code. It was contributed by
-Lionel Fourquaux. */
+Lionel Fourquaux. David Burgess added a patch to define INVALID_FILE_ATTRIBUTES
+when it did not exist. */
 
 
 #elif HAVE_WIN32API
@@ -165,6 +209,10 @@ Lionel Fourquaux. */
 #ifndef WIN32_LEAN_AND_MEAN
 # define WIN32_LEAN_AND_MEAN
 #endif
+#ifndef INVALID_FILE_ATTRIBUTES
+#define INVALID_FILE_ATTRIBUTES 0xFFFFFFFF
+#endif
+
 #include <windows.h>
 
 typedef struct directory_type
@@ -284,59 +332,290 @@ return sys_errlist[n];
 
 
 /*************************************************
-*              Grep an individual file           *
+*       Print the previous "after" lines         *
+*************************************************/
+
+/* This is called if we are about to lose said lines because of buffer filling,
+and at the end of the file.
+
+Arguments:
+  lastmatchnumber   the number of the last matching line, plus one
+  lastmatchrestart  where we restarted after the last match
+  endptr            end of available data
+  printname         filename for printing
+
+Returns:            nothing
+*/
+
+static void do_after_lines(int lastmatchnumber, char *lastmatchrestart,
+  char *endptr, char *printname)
+{
+if (after_context > 0 && lastmatchnumber > 0)
+  {
+  int count = 0;
+  while (lastmatchrestart < endptr && count++ < after_context)
+    {
+    char *pp = lastmatchrestart;
+    if (printname != NULL) fprintf(stdout, "%s-", printname);
+    if (number) fprintf(stdout, "%d-", lastmatchnumber++);
+    while (*pp != '\n') pp++;
+    fprintf(stdout, "%.*s", pp - lastmatchrestart + 1, lastmatchrestart);
+    lastmatchrestart = pp + 1;
+    }
+  hyphenpending = TRUE;
+  }
+}
+
+
+
+/*************************************************
+*            Grep an individual file             *
 *************************************************/
 
+/* This is called from grep_or_recurse() below. It uses a buffer that is three
+times the value of MBUFTHIRD. The matching point is never allowed to stray into
+the top third of the buffer, thus keeping more of the file available for
+context printing or for multiline scanning. For large files, the pointer will
+be in the middle third most of the time, so the bottom third is available for
+"before" context printing.
+
+Arguments:
+  in           the fopened FILE stream
+  printname    the file name if it is to be printed for each match
+               or NULL if the file name is not to be printed
+               it cannot be NULL if filenames[_nomatch]_only is set
+
+Returns:       0 if there was at least one match
+               1 otherwise (no matches)
+*/
+
 static int
-pcregrep(FILE *in, char *name)
+pcregrep(FILE *in, char *printname)
 {
 int rc = 1;
-int linenumber = 0;
+int linenumber = 1;
+int lastmatchnumber = 0;
 int count = 0;
 int offsets[99];
-char buffer[BUFSIZ];
+char *lastmatchrestart = NULL;
+char buffer[3*MBUFTHIRD];
+char *ptr = buffer;
+char *endptr;
+size_t bufflength;
+BOOL endhyphenpending = FALSE;
+
+/* Do the first read into the start of the buffer and set up the pointer to
+end of what we have. */
+
+bufflength = fread(buffer, 1, 3*MBUFTHIRD, in);
+endptr = buffer + bufflength;
+
+/* Loop while the current pointer is not at the end of the file. For large
+files, endptr will be at the end of the buffer when we are in the middle of the
+file, but ptr will never get there, because as soon as it gets over 2/3 of the
+way, the buffer is shifted left and re-filled. */
 
-while (fgets(buffer, sizeof(buffer), in) != NULL)
+while (ptr < endptr)
   {
-  BOOL match = FALSE;
   int i;
-  int length = (int)strlen(buffer);
-  if (length > 0 && buffer[length-1] == '\n') buffer[--length] = 0;
-  linenumber++;
+  BOOL match = FALSE;
+  char *t = ptr;
+  size_t length, linelength;
+
+  /* At this point, ptr is at the start of a line. We need to find the length
+  of the subject string to pass to pcre_exec(). In multiline mode, it is the
+  length remainder of the data in the buffer. Otherwise, it is the length of
+  the next line. After matching, we always advance by the length of the next
+  line. In multiline mode the PCRE_FIRSTLINE option is used for compiling, so
+  that any match is constrained to be in the first line. */
+
+  linelength = 0;
+  while (t < endptr && *t++ != '\n') linelength++;
+  length = multiline? endptr - ptr : linelength;
+
+  /* Run through all the patterns until one matches. Note that we don't include
+  the final newline in the subject string. */
 
   for (i = 0; !match && i < pattern_count; i++)
     {
-    match = pcre_exec(pattern_list[i], hints_list[i], buffer, length, 0, 0,
+    match = pcre_exec(pattern_list[i], hints_list[i], ptr, length, 0, 0,
       offsets, 99) >= 0;
-    if (match && whole_lines && offsets[1] != length) match = FALSE;
     }
 
+  /* If it's a match or a not-match (as required), print what's wanted. */
+
   if (match != invert)
     {
+    BOOL hyphenprinted = FALSE;
+
+    if (filenames_nomatch_only) return 1;
+
     if (count_only) count++;
 
     else if (filenames_only)
       {
-      fprintf(stdout, "%s\n", (name == NULL)? "<stdin>" : name);
+      fprintf(stdout, "%s\n", printname);
       return 0;
       }
 
-    else if (silent) return 0;
+    else if (quiet) return 0;
 
     else
       {
-      if (name != NULL) fprintf(stdout, "%s:", name);
+      /* See if there is a requirement to print some "after" lines from a
+      previous match. We never print any overlaps. */
+
+      if (after_context > 0 && lastmatchnumber > 0)
+        {
+        int linecount = 0;
+        char *p = lastmatchrestart;
+
+        while (p < ptr && linecount < after_context)
+          {
+          while (*p != '\n') p++;
+          p++;
+          linecount++;
+          }
+
+        /* It is important to advance lastmatchrestart during this printing so
+        that it interacts correctly with any "before" printing below. */
+
+        while (lastmatchrestart < p)
+          {
+          char *pp = lastmatchrestart;
+          if (printname != NULL) fprintf(stdout, "%s-", printname);
+          if (number) fprintf(stdout, "%d-", lastmatchnumber++);
+          while (*pp != '\n') pp++;
+          fprintf(stdout, "%.*s", pp - lastmatchrestart + 1, lastmatchrestart);
+          lastmatchrestart = pp + 1;
+          }
+        if (lastmatchrestart != ptr) hyphenpending = TRUE;
+        }
+
+      /* If there were non-contiguous lines printed above, insert hyphens. */
+
+      if (hyphenpending)
+        {
+        fprintf(stdout, "--\n");
+        hyphenpending = FALSE;
+        hyphenprinted = TRUE;
+        }
+
+      /* See if there is a requirement to print some "before" lines for this
+      match. Again, don't print overlaps. */
+
+      if (before_context > 0)
+        {
+        int linecount = 0;
+        char *p = ptr;
+
+        while (p > buffer && (lastmatchnumber == 0 || p > lastmatchrestart) &&
+               linecount++ < before_context)
+          {
+          p--;
+          while (p > buffer && p[-1] != '\n') p--;
+          }
+
+        if (lastmatchnumber > 0 && p > lastmatchrestart && !hyphenprinted)
+          fprintf(stdout, "--\n");
+
+        while (p < ptr)
+          {
+          char *pp = p;
+          if (printname != NULL) fprintf(stdout, "%s-", printname);
+          if (number) fprintf(stdout, "%d-", linenumber - linecount--);
+          while (*pp != '\n') pp++;
+          fprintf(stdout, "%.*s", pp - p + 1, p);
+          p = pp + 1;
+          }
+        }
+
+      /* Now print the matching line(s); ensure we set hyphenpending at the end
+      of the file. */
+
+      endhyphenpending = TRUE;
+      if (printname != NULL) fprintf(stdout, "%s:", printname);
       if (number) fprintf(stdout, "%d:", linenumber);
-      fprintf(stdout, "%s\n", buffer);
+
+      /* In multiline mode, we want to print to the end of the line in which
+      the end of the matched string is found, so we adjust linelength and the
+      line number appropriately. Because the PCRE_FIRSTLINE option is set, the
+      start of the match will always be before the first \n character. */
+
+      if (multiline)
+        {
+        char *endmatch = ptr + offsets[1];
+        t = ptr;
+        while (t < endmatch) { if (*t++ == '\n') linenumber++; }
+        while (endmatch < endptr && *endmatch != '\n') endmatch++;
+        linelength = endmatch - ptr;
+        }
+
+      fprintf(stdout, "%.*s\n", linelength, ptr);
       }
 
-    rc = 0;
+    rc = 0;    /* Had some success */
+
+    /* Remember where the last match happened for after_context. We remember
+    where we are about to restart, and that line's number. */
+
+    lastmatchrestart = ptr + linelength + 1;
+    lastmatchnumber = linenumber + 1;
     }
+
+  /* Advance to after the newline and increment the line number. */
+
+  ptr += linelength + 1;
+  linenumber++;
+
+  /* If we haven't yet reached the end of the file (the buffer is full), and
+  the current point is in the top 1/3 of the buffer, slide the buffer down by
+  1/3 and refill it. Before we do this, if some unprinted "after" lines are
+  about to be lost, print them. */
+
+  if (bufflength >= sizeof(buffer) && ptr > buffer + 2*MBUFTHIRD)
+    {
+    if (after_context > 0 &&
+        lastmatchnumber > 0 &&
+        lastmatchrestart < buffer + MBUFTHIRD)
+      {
+      do_after_lines(lastmatchnumber, lastmatchrestart, endptr, printname);
+      lastmatchnumber = 0;
+      }
+
+    /* Now do the shuffle */
+
+    memmove(buffer, buffer + MBUFTHIRD, 2*MBUFTHIRD);
+    ptr -= MBUFTHIRD;
+    bufflength = 2*MBUFTHIRD + fread(buffer + 2*MBUFTHIRD, 1, MBUFTHIRD, in);
+    endptr = buffer + bufflength;
+
+    /* Adjust any last match point */
+
+    if (lastmatchnumber > 0) lastmatchrestart -= MBUFTHIRD;
+    }
+  }     /* Loop through the whole file */
+
+/* End of file; print final "after" lines if wanted; do_after_lines sets
+hyphenpending if it prints something. */
+
+do_after_lines(lastmatchnumber, lastmatchrestart, endptr, printname);
+hyphenpending |= endhyphenpending;
+
+/* Print the file name if we are looking for those without matches and there
+were none. If we found a match, we won't have got this far. */
+
+if (filenames_nomatch_only)
+  {
+  fprintf(stdout, "%s\n", printname);
+  return 0;
   }
 
+/* Print the match count if wanted */
+
 if (count_only)
   {
-  if (name != NULL) fprintf(stdout, "%s:", name);
+  if (printname != NULL) fprintf(stdout, "%s:", printname);
   fprintf(stdout, "%d\n", count);
   }
 
@@ -345,41 +624,81 @@ return rc;
 
 
 
-
 /*************************************************
 *     Grep a file or recurse into a directory    *
 *************************************************/
 
+/* Given a path name, if it's a directory, scan all the files if we are
+recursing; if it's a file, grep it.
+
+Arguments:
+  pathname          the path to investigate
+  dir_recurse       TRUE if recursing is wanted (-r)
+  show_filenames    TRUE if file names are wanted for multiple files, except
+                      for the only file at top level when not filenames_only
+  only_one_at_top   TRUE if the path is the only one at toplevel
+
+Returns:   0 if there was at least one match
+           1 if there were no matches
+           2 there was some kind of error
+
+However, file opening failures are suppressed if "silent" is set.
+*/
+
 static int
-grep_or_recurse(char *filename, BOOL dir_recurse, BOOL show_filenames,
+grep_or_recurse(char *pathname, BOOL dir_recurse, BOOL show_filenames,
   BOOL only_one_at_top)
 {
 int rc = 1;
 int sep;
 FILE *in;
+char *printname;
+
+/* If the file name is "-" we scan stdin */
+
+if (strcmp(pathname, "-") == 0)
+  {
+  return pcregrep(stdin,
+    (filenames_only || filenames_nomatch_only ||
+    (show_filenames && !only_one_at_top))?
+      stdin_name : NULL);
+  }
 
-/* If the file is a directory and we are recursing, scan each file within it.
-The scanning code is localized so it can be made system-specific. */
+/* If the file is a directory and we are recursing, scan each file within it,
+subject to any include or exclude patterns that were set. The scanning code is
+localized so it can be made system-specific. */
 
-if ((sep = isdirectory(filename)) != 0 && dir_recurse)
+if ((sep = isdirectory(pathname)) != 0 && dir_recurse)
   {
   char buffer[1024];
   char *nextfile;
-  directory_type *dir = opendirectory(filename);
+  directory_type *dir = opendirectory(pathname);
 
   if (dir == NULL)
     {
-    fprintf(stderr, "pcregrep: Failed to open directory %s: %s\n", filename,
-      strerror(errno));
+    if (!silent)
+      fprintf(stderr, "pcregrep: Failed to open directory %s: %s\n", pathname,
+        strerror(errno));
     return 2;
     }
 
   while ((nextfile = readdirectory(dir)) != NULL)
     {
-    int frc;
-    sprintf(buffer, "%.512s%c%.128s", filename, sep, nextfile);
+    int frc, blen;
+    sprintf(buffer, "%.512s%c%.128s", pathname, sep, nextfile);
+    blen = strlen(buffer);
+
+    if (exclude_compiled != NULL &&
+        pcre_exec(exclude_compiled, NULL, buffer, blen, 0, 0, NULL, 0) >= 0)
+      continue;
+
+    if (include_compiled != NULL &&
+        pcre_exec(include_compiled, NULL, buffer, blen, 0, 0, NULL, 0) < 0)
+      continue;
+
     frc = grep_or_recurse(buffer, dir_recurse, TRUE, FALSE);
-    if (frc == 0 && rc == 1) rc = 0;
+    if (frc > 1) rc = frc;
+     else if (frc == 0 && rc == 1) rc = 0;
     }
 
   closedirectory(dir);
@@ -391,15 +710,20 @@ the first and only argument at top level
 we are only showing the file name). Otherwise, control is via the
 show_filenames variable. */
 
-in = fopen(filename, "r");
+in = fopen(pathname, "r");
 if (in == NULL)
   {
-  fprintf(stderr, "pcregrep: Failed to open %s: %s\n", filename, strerror(errno));
+  if (!silent)
+    fprintf(stderr, "pcregrep: Failed to open %s: %s\n", pathname,
+      strerror(errno));
   return 2;
   }
 
-rc = pcregrep(in, (filenames_only || (show_filenames && !only_one_at_top))?
-  filename : NULL);
+printname =  (filenames_only || filenames_nomatch_only ||
+  (show_filenames && !only_one_at_top))? pathname : NULL;
+
+rc = pcregrep(in, printname);
+
 fclose(in);
 return rc;
 }
@@ -414,7 +738,7 @@ return rc;
 static int
 usage(int rc)
 {
-fprintf(stderr, "Usage: pcregrep [-Vcfhilnrsvx] [long-options] [pattern] [file1 file2 ...]\n");
+fprintf(stderr, "Usage: pcregrep [-LMVcfhilnqrsvwx] [long-options] [pattern] [file1 file2 ...]\n");
 fprintf(stderr, "Type `pcregrep --help' for more information.\n");
 return rc;
 }
@@ -434,6 +758,7 @@ option_item *op;
 printf("Usage: pcregrep [OPTION]... [PATTERN] [FILE1 FILE2 ...]\n");
 printf("Search for PATTERN in each FILE or standard input.\n");
 printf("PATTERN must be present if -f is not used.\n");
+printf("\"-\" can be used as a file name to mean STDIN.\n");
 printf("Example: pcregrep -i 'hello.*world' menu.h main.c\n\n");
 
 printf("Options:\n");
@@ -449,12 +774,11 @@ for (op = optionlist; op->one_char != 0;
   printf("%.*s%s\n", n, "                    ", op->help_text);
   }
 
-printf("\n  -f<filename>  or  --file=<filename>\n");
-printf("    Read patterns from <filename> instead of using a command line option.\n");
-printf("    Trailing white space is removed; blanks lines are ignored.\n");
-printf("    There is a maximum of %d patterns.\n", MAX_PATTERN_COUNT);
+printf("\nWhen reading patterns from a file instead of using a command line option,\n");
+printf("trailing white space is removed and blank lines are ignored.\n");
+printf("There is a maximum of %d patterns.\n", MAX_PATTERN_COUNT);
 
-printf("\nWith no FILE, read standard input. If fewer than two FILEs given, assume -h.\n");
+printf("\nWith no FILEs, read standard input. If fewer than two FILEs given, assume -h.\n");
 printf("Exit status is 0 if any matches, 1 if no matches, and 2 if trouble.\n");
 }
 
@@ -462,7 +786,7 @@ printf("Exit status is 0 if any matches,
 
 
 /*************************************************
-*                Handle an option                *
+*    Handle a single-letter, no data option      *
 *************************************************/
 
 static int
@@ -474,13 +798,17 @@ switch(letter)
   case 'c': count_only = TRUE; break;
   case 'h': filenames = FALSE; break;
   case 'i': options |= PCRE_CASELESS; break;
-  case 'l': filenames_only = TRUE;
+  case 'l': filenames_only = TRUE; break;
+  case 'L': filenames_nomatch_only = TRUE; break;
+  case 'M': multiline = TRUE; options |= PCRE_MULTILINE|PCRE_FIRSTLINE; break;
   case 'n': number = TRUE; break;
+  case 'q': quiet = TRUE; break;
   case 'r': recurse = TRUE; break;
   case 's': silent = TRUE; break;
   case 'u': options |= PCRE_UTF8; break;
   case 'v': invert = TRUE; break;
-  case 'x': whole_lines = TRUE; options |= PCRE_ANCHORED; break;
+  case 'w': word_match = TRUE; break;
+  case 'x': whole_lines = TRUE; break;
 
   case 'V':
   fprintf(stderr, "pcregrep version %s using ", VERSION);
@@ -503,6 +831,8 @@ return options;
 *                Main program                    *
 *************************************************/
 
+/* Returns 0 if something matched, 1 if nothing matched, 2 after an error. */
+
 int
 main(int argc, char **argv)
 {
@@ -517,32 +847,83 @@ BOOL only_one_at_top;
 
 for (i = 1; i < argc; i++)
   {
+  option_item *op = NULL;
+  char *option_data = (char *)"";    /* default to keep compiler happy */
+  BOOL longop;
+  BOOL longopwasequals = FALSE;
+
   if (argv[i][0] != '-') break;
 
-  /* Missing options */
+  /* If we hit an argument that is just "-", it may be a reference to STDIN,
+  but only if we have previously had -f to define the patterns. */
 
-  if (argv[i][1] == 0) exit(usage(2));
+  if (argv[i][1] == 0)
+    {
+    if (pattern_filename != NULL) break;
+      else exit(usage(2));
+    }
 
-  /* Long name options */
+  /* Handle a long name option, or -- to terminate the options */
 
   if (argv[i][1] == '-')
     {
-    option_item *op;
+    char *arg = argv[i] + 2;
+    char *argequals = strchr(arg, '=');
 
-    if (strncmp(argv[i]+2, "file=", 5) == 0)
+    if (*arg == 0)    /* -- terminates options */
       {
-      pattern_filename = argv[i] + 7;
-      continue;
+      i++;
+      break;                /* out of the options-handling loop */
       }
 
+    longop = TRUE;
+
+    /* Some long options have data that follows after =, for example file=name.
+    Some options have variations in the long name spelling: specifically, we
+    allow "regexp" because GNU grep allows it, though I personally go along
+    with Jeff Friedl in preferring "regex" without the "p". These options are
+    entered in the table as "regex(p)". No option is in both these categories,
+    fortunately. */
+
     for (op = optionlist; op->one_char != 0; op++)
       {
-      if (strcmp(argv[i]+2, op->long_name) == 0)
+      char *opbra = strchr(op->long_name, '(');
+      char *equals = strchr(op->long_name, '=');
+      if (opbra == NULL)     /* Not a (p) case */
         {
-        options = handle_option(op->one_char, options);
-        break;
+        if (equals == NULL)  /* Not thing=data case */
+          {
+          if (strcmp(arg, op->long_name) == 0) break;
+          }
+        else                 /* Special case xxx=data */
+          {
+          int oplen = equals - op->long_name;
+          int arglen = (argequals == NULL)? strlen(arg) : argequals - arg;
+          if (oplen == arglen && strncmp(arg, op->long_name, oplen) == 0)
+            {
+            option_data = arg + arglen;
+            if (*option_data == '=')
+              {
+              option_data++;
+              longopwasequals = TRUE;
+              }
+            break;
+            }
+          }
+        }
+      else                   /* Special case xxxx(p) */
+        {
+        char buff1[24];
+        char buff2[24];
+        int baselen = opbra - op->long_name;
+        sprintf(buff1, "%.*s", baselen, op->long_name);
+        sprintf(buff2, "%s%.*s", buff1, strlen(op->long_name) - baselen - 2,
+          opbra + 1);
+        if (strcmp(arg, buff1) == 0 || strcmp(arg, buff2) == 0)
+          break;
         }
       }
+
     if (op->one_char == 0)
       {
       fprintf(stderr, "pcregrep: Unknown option %s\n", argv[i]);
@@ -550,32 +931,76 @@ for (i = 1; i < argc; i++)
       }
     }
 
-  /* One-char options */
+  /* One-char options; many that have no data may be in a single argument; we
+  continue till we hit the last one or one that needs data. */
 
   else
     {
     char *s = argv[i] + 1;
+    longop = FALSE;
     while (*s != 0)
       {
-      if (*s == 'f')
+      for (op = optionlist; op->one_char != 0; op++)
+        { if (*s == op->one_char) break; }
+      if (op->one_char == 0)
         {
-        pattern_filename = s + 1;
-        if (pattern_filename[0] == 0)
-          {
-          if (i >= argc - 1)
-            {
-            fprintf(stderr, "pcregrep: File name missing after -f\n");
-            exit(usage(2));
-            }
-          pattern_filename = argv[++i];
-          }
+        fprintf(stderr, "pcregrep: Unknown option letter '%c' in \"%s\"\n",
+          *s, argv[i]);
+        exit(usage(2));
+        }
+      if (op->type != OP_NODATA || s[1] == 0)
+        {
+        option_data = s+1;
         break;
         }
-      else options = handle_option(*s++, options);
+      options = handle_option(*s++, options);
+      }
+    }
+
+  /* At this point we should have op pointing to a matched option */
+
+  if (op->type == OP_NODATA)
+    options = handle_option(op->one_char, options);
+  else
+    {
+    if (*option_data == 0)
+      {
+      if (i >= argc - 1 || longopwasequals)
+        {
+        fprintf(stderr, "pcregrep: Data missing after %s\n", argv[i]);
+        exit(usage(2));
+        }
+      option_data = argv[++i];
+      }
+
+    if (op->type == OP_STRING) *((char **)op->dataptr) = option_data; else
+      {
+      char *endptr;
+      int n = strtoul(option_data, &endptr, 10);
+      if (*endptr != 0)
+        {
+        if (longop)
+          fprintf(stderr, "pcregrep: Malformed number \"%s\" after --%s\n",
+            option_data, op->long_name);
+        else
+          fprintf(stderr, "pcregrep: Malformed number \"%s\" after -%c\n",
+            option_data, op->one_char);
+        exit(usage(2));
+        }
+      *((int *)op->dataptr) = n;
       }
     }
   }
 
+/* Options have been decoded. If -C was used, its value is used as a default
+for -A and -B. */
+
+if (both_context > 0)
+  {
+  if (after_context == 0) after_context = both_context;
+  if (before_context == 0) before_context = both_context;
+  }
+
 pattern_list = (pcre **)malloc(MAX_PATTERN_COUNT * sizeof(pcre *));
 hints_list = (pcre_extra **)malloc(MAX_PATTERN_COUNT * sizeof(pcre_extra *));
 
@@ -590,53 +1015,91 @@ if (pattern_list == NULL || hints_list =
 if (pattern_filename != NULL)
   {
   FILE *f = fopen(pattern_filename, "r");
-  char buffer[BUFSIZ];
+  char buffer[MBUFTHIRD + 16];
+  char *rdstart;
+  int adjust = 0;
+
   if (f == NULL)
     {
     fprintf(stderr, "pcregrep: Failed to open %s: %s\n", pattern_filename,
       strerror(errno));
     return 2;
     }
-  while (fgets(buffer, sizeof(buffer), f) != NULL)
+
+  if (whole_lines)
+    {
+    strcpy(buffer, "^(?:");
+    adjust = 4;
+    }
+  else if (word_match)
+    {
+    strcpy(buffer, "\\b");
+    adjust = 2;
+    }
+
+  rdstart = buffer + adjust;
+  while (fgets(rdstart, MBUFTHIRD, f) != NULL)
     {
-    char *s = buffer + (int)strlen(buffer);
+    char *s = rdstart + (int)strlen(rdstart);
     if (pattern_count >= MAX_PATTERN_COUNT)
       {
       fprintf(stderr, "pcregrep: Too many patterns in file (max %d)\n",
         MAX_PATTERN_COUNT);
       return 2;
       }
-    while (s > buffer && isspace((unsigned char)(s[-1]))) s--;
-    if (s == buffer) continue;
-    *s = 0;
+    while (s > rdstart && isspace((unsigned char)(s[-1]))) s--;
+    if (s == rdstart) continue;
+    if (whole_lines) strcpy(s, ")$");
+      else if (word_match)strcpy(s, "\\b");
+        else *s = 0;
     pattern_list[pattern_count] = pcre_compile(buffer, options, &error,
       &errptr, NULL);
     if (pattern_list[pattern_count++] == NULL)
       {
       fprintf(stderr, "pcregrep: Error in regex number %d at offset %d: %s\n",
-        pattern_count, errptr, error);
+        pattern_count, errptr - adjust, error);
       return 2;
       }
     }
   fclose(f);
   }
 
-/* If no file name, a single regex must be given inline */
+/* If no file name, a single regex must be given inline. */
 
 else
   {
+  char buffer[MBUFTHIRD + 16];
+  char *pat;
+  int adjust = 0;
+
   if (i >= argc) return usage(2);
-  pattern_list[0] = pcre_compile(argv[i++], options, &error, &errptr, NULL);
+
+  if (whole_lines)
+    {
+    sprintf(buffer, "^(?:%.*s)$", MBUFTHIRD, argv[i++]);
+    pat = buffer;
+    adjust = 4;
+    }
+  else if (word_match)
+    {
+    sprintf(buffer, "\\b%.*s\\b", MBUFTHIRD, argv[i++]);
+    pat = buffer;
+    adjust = 2;
+    }
+  else pat = argv[i++];
+
+  pattern_list[0] = pcre_compile(pat, options, &error, &errptr, NULL);
+
   if (pattern_list[0] == NULL)
     {
-    fprintf(stderr, "pcregrep: Error in regex at offset %d: %s\n", errptr,
-      error);
+    fprintf(stderr, "pcregrep: Error in regex at offset %d: %s\n",
+      errptr - adjust, error);
     return 2;
     }
   pattern_count++;
   }
 
-/* Study the regular expressions, as we will be running them may times */
+/* Study the regular expressions, as we will be running them many times */
 
 for (j = 0; j < pattern_count; j++)
   {
@@ -650,24 +1113,50 @@ for (j = 0; j < pattern_count; j++)
     }
   }
 
+/* If there are include or exclude patterns, compile them. */
+
+if (exclude_pattern != NULL)
+  {
+  exclude_compiled = pcre_compile(exclude_pattern, 0, &error, &errptr, NULL);
+  if (exclude_compiled == NULL)
+    {
+    fprintf(stderr, "pcregrep: Error in 'exclude' regex at offset %d: %s\n",
+      errptr, error);
+    return 2;
+    }
+  }
+
+if (include_pattern != NULL)
+  {
+  include_compiled = pcre_compile(include_pattern, 0, &error, &errptr, NULL);
+  if (include_compiled == NULL)
+    {
+    fprintf(stderr, "pcregrep: Error in 'include' regex at offset %d: %s\n",
+      errptr, error);
+    return 2;
+    }
+  }
+
 /* If there are no further arguments, do the business on stdin and exit */
 
-if (i >= argc) return pcregrep(stdin, NULL);
+if (i >= argc) return pcregrep(stdin,
+  (filenames_only || filenames_nomatch_only)? stdin_name : NULL);
 
 /* Otherwise, work through the remaining arguments as files or directories.
 Pass in the fact that there is only one argument at top level - this suppresses
-the file name if the argument is not a directory. */
+the file name if the argument is not a directory and filenames_only is not set.
+*/
 
 only_one_at_top = (i == argc - 1);
-if (filenames_only) filenames = TRUE;
 
 for (; i < argc; i++)
   {
   int frc = grep_or_recurse(argv[i], recurse, filenames, only_one_at_top);
-  if (frc == 0 && rc == 1) rc = 0;
+  if (frc > 1) rc = frc;
+    else if (frc == 0 && rc == 1) rc = 0;
   }
 
 return rc;
 }
 
-/* End */
+/* End of pcregrep */
diff -Nurp tin-1.7.8/pcre/pcreposix.c tin-1.7.9/pcre/pcreposix.c
--- tin-1.7.8/pcre/pcreposix.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/pcreposix.c	2005-06-28 10:31:26.592112030 +0200
@@ -2,17 +2,11 @@
 *      Perl-Compatible Regular Expressions       *
 *************************************************/
 
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-This module is a wrapper that provides a POSIX API to the underlying PCRE
-functions.
+/* PCRE is a library of functions to support regular expressions whose syntax
+and semantics are as close as possible to those of the Perl 5 language.
 
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2004 University of Cambridge
+                       Written by Philip Hazel
+           Copyright (c) 1997-2005 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
@@ -43,69 +37,68 @@ POSSIBILITY OF SUCH DAMAGE.
 -----------------------------------------------------------------------------
 */
 
-#include "internal.h"
+
+/* This module is a wrapper that provides a POSIX API to the underlying PCRE
+functions. */
+
+
+#include "pcre_internal.h"
 #include "pcreposix.h"
 #include "stdlib.h"
 
 
 
-/* Corresponding tables of PCRE error messages and POSIX error codes. */
-
-static const char *const estring[] = {
-  ERR1,  ERR2,  ERR3,  ERR4,  ERR5,  ERR6,  ERR7,  ERR8,  ERR9,  ERR10,
-  ERR11, ERR12, ERR13, ERR14, ERR15, ERR16, ERR17, ERR18, ERR19, ERR20,
-  ERR21, ERR22, ERR23, ERR24, ERR25, ERR26, ERR27, ERR29, ERR29, ERR30,
-  ERR31, ERR32, ERR33, ERR34, ERR35, ERR36, ERR37, ERR38, ERR39, ERR40,
-  ERR41, ERR42, ERR43, ERR44, ERR45, ERR46, ERR47 };
+/* Table to translate PCRE compile time error codes into POSIX error codes. */
 
 static const int eint[] = {
-  REG_EESCAPE, /* "\\ at end of pattern" */
-  REG_EESCAPE, /* "\\c at end of pattern" */
-  REG_EESCAPE, /* "unrecognized character follows \\" */
-  REG_BADBR,   /* "numbers out of order in {} quantifier" */
-  REG_BADBR,   /* "number too big in {} quantifier" */
-  REG_EBRACK,  /* "missing terminating ] for character class" */
-  REG_ECTYPE,  /* "invalid escape sequence in character class" */
-  REG_ERANGE,  /* "range out of order in character class" */
-  REG_BADRPT,  /* "nothing to repeat" */
-  REG_BADRPT,  /* "operand of unlimited repeat could match the empty string" */
-  REG_ASSERT,  /* "internal error: unexpected repeat" */
-  REG_BADPAT,  /* "unrecognized character after (?" */
-  REG_BADPAT,  /* "POSIX named classes are supported only within a class" */
-  REG_EPAREN,  /* "missing )" */
-  REG_ESUBREG, /* "reference to non-existent subpattern" */
-  REG_INVARG,  /* "erroffset passed as NULL" */
-  REG_INVARG,  /* "unknown option bit(s) set" */
-  REG_EPAREN,  /* "missing ) after comment" */
-  REG_ESIZE,   /* "parentheses nested too deeply" */
-  REG_ESIZE,   /* "regular expression too large" */
-  REG_ESPACE,  /* "failed to get memory" */
-  REG_EPAREN,  /* "unmatched brackets" */
-  REG_ASSERT,  /* "internal error: code overflow" */
-  REG_BADPAT,  /* "unrecognized character after (?<" */
-  REG_BADPAT,  /* "lookbehind assertion is not fixed length" */
-  REG_BADPAT,  /* "malformed number after (?(" */
-  REG_BADPAT,  /* "conditional group containe more than two branches" */
-  REG_BADPAT,  /* "assertion expected after (?(" */
-  REG_BADPAT,  /* "(?R or (?digits must be followed by )" */
-  REG_ECTYPE,  /* "unknown POSIX class name" */
-  REG_BADPAT,  /* "POSIX collating elements are not supported" */
-  REG_INVARG,  /* "this version of PCRE is not compiled with PCRE_UTF8 support" */
-  REG_BADPAT,  /* "spare error" */
-  REG_BADPAT,  /* "character value in \x{...} sequence is too large" */
-  REG_BADPAT,  /* "invalid condition (?(0)" */
-  REG_BADPAT,  /* "\\C not allowed in lookbehind assertion" */
-  REG_EESCAPE, /* "PCRE does not support \\L, \\l, \\N, \\U, or \\u" */
-  REG_BADPAT,  /* "number after (?C is > 255" */
-  REG_BADPAT,  /* "closing ) for (?C expected" */
-  REG_BADPAT,  /* "recursive call could loop indefinitely" */
-  REG_BADPAT,  /* "unrecognized character after (?P" */
-  REG_BADPAT,  /* "syntax error after (?P" */
-  REG_BADPAT,  /* "two named groups have the same name" */
-  REG_BADPAT,  /* "invalid UTF-8 string" */
-  REG_BADPAT,  /* "support for \\P, \\p, and \\X has not been compiled" */
-  REG_BADPAT,  /* "malformed \\P or \\p sequence" */
-  REG_BADPAT   /* "unknown property name after \\P or \\p" */
+  0,           /* no error */
+  REG_EESCAPE, /* \ at end of pattern */
+  REG_EESCAPE, /* \c at end of pattern */
+  REG_EESCAPE, /* unrecognized character follows \ */
+  REG_BADBR,   /* numbers out of order in {} quantifier */
+  REG_BADBR,   /* number too big in {} quantifier */
+  REG_EBRACK,  /* missing terminating ] for character class */
+  REG_ECTYPE,  /* invalid escape sequence in character class */
+  REG_ERANGE,  /* range out of order in character class */
+  REG_BADRPT,  /* nothing to repeat */
+  REG_BADRPT,  /* operand of unlimited repeat could match the empty string */
+  REG_ASSERT,  /* internal error: unexpected repeat */
+  REG_BADPAT,  /* unrecognized character after (? */
+  REG_BADPAT,  /* POSIX named classes are supported only within a class */
+  REG_EPAREN,  /* missing ) */
+  REG_ESUBREG, /* reference to non-existent subpattern */
+  REG_INVARG,  /* erroffset passed as NULL */
+  REG_INVARG,  /* unknown option bit(s) set */
+  REG_EPAREN,  /* missing ) after comment */
+  REG_ESIZE,   /* parentheses nested too deeply */
+  REG_ESIZE,   /* regular expression too large */
+  REG_ESPACE,  /* failed to get memory */
+  REG_EPAREN,  /* unmatched brackets */
+  REG_ASSERT,  /* internal error: code overflow */
+  REG_BADPAT,  /* unrecognized character after (?< */
+  REG_BADPAT,  /* lookbehind assertion is not fixed length */
+  REG_BADPAT,  /* malformed number after (?( */
+  REG_BADPAT,  /* conditional group containe more than two branches */
+  REG_BADPAT,  /* assertion expected after (?( */
+  REG_BADPAT,  /* (?R or (?digits must be followed by ) */
+  REG_ECTYPE,  /* unknown POSIX class name */
+  REG_BADPAT,  /* POSIX collating elements are not supported */
+  REG_INVARG,  /* this version of PCRE is not compiled with PCRE_UTF8 support */
+  REG_BADPAT,  /* spare error */
+  REG_BADPAT,  /* character value in \x{...} sequence is too large */
+  REG_BADPAT,  /* invalid condition (?(0) */
+  REG_BADPAT,  /* \C not allowed in lookbehind assertion */
+  REG_EESCAPE, /* PCRE does not support \L, \l, \N, \U, or \u */
+  REG_BADPAT,  /* number after (?C is > 255 */
+  REG_BADPAT,  /* closing ) for (?C expected */
+  REG_BADPAT,  /* recursive call could loop indefinitely */
+  REG_BADPAT,  /* unrecognized character after (?P */
+  REG_BADPAT,  /* syntax error after (?P */
+  REG_BADPAT,  /* two named groups have the same name */
+  REG_BADPAT,  /* invalid UTF-8 string */
+  REG_BADPAT,  /* support for \P, \p, and \X has not been compiled */
+  REG_BADPAT,  /* malformed \P or \p sequence */
+  REG_BADPAT   /* unknown property name after \P or \p */
 };
 
 /* Table of texts corresponding to POSIX error codes */
@@ -135,24 +128,6 @@ static const char *const pstring[] = {
 
 
 /*************************************************
-*          Translate PCRE text code to int       *
-*************************************************/
-
-/* PCRE compile-time errors are given as strings defined as macros. We can just
-look them up in a table to turn them into POSIX-style error codes. */
-
-static int
-pcre_posix_error_code(const char *s)
-{
-size_t i;
-for (i = 0; i < sizeof(estring)/sizeof(char *); i++)
-  if (strcmp(s, estring[i]) == 0) return eint[i];
-return REG_ASSERT;
-}
-
-
-
-/*************************************************
 *          Translate error code to string        *
 *************************************************/
 
@@ -219,15 +194,18 @@ regcomp(regex_t *preg, const char *patte
 {
 const char *errorptr;
 int erroffset;
+int errorcode;
 int options = 0;
 
 if ((cflags & REG_ICASE) != 0) options |= PCRE_CASELESS;
 if ((cflags & REG_NEWLINE) != 0) options |= PCRE_MULTILINE;
+if ((cflags & REG_DOTALL) != 0) options |= PCRE_DOTALL;
 
-preg->re_pcre = pcre_compile(pattern, options, &errorptr, &erroffset, NULL);
+preg->re_pcre = pcre_compile2(pattern, options, &errorcode, &errorptr,
+  &erroffset, NULL);
 preg->re_erroffset = erroffset;
 
-if (preg->re_pcre == NULL) return pcre_posix_error_code(errorptr);
+if (preg->re_pcre == NULL) return eint[errorcode];
 
 preg->re_nsub = pcre_info((const pcre *)preg->re_pcre, NULL, NULL);
 return 0;
diff -Nurp tin-1.7.8/pcre/pcreposix.h tin-1.7.9/pcre/pcreposix.h
--- tin-1.7.8/pcre/pcreposix.h	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/pcreposix.h	2005-06-28 10:31:26.622106509 +0200
@@ -9,7 +9,7 @@
 Compatible Regular Expression library. It defines the things POSIX says should
 be there. I hope.
 
-            Copyright (c) 1997-2004 University of Cambridge
+            Copyright (c) 1997-2005 University of Cambridge
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
@@ -57,6 +57,10 @@ extern "C" {
 #define REG_NOTBOL    0x04
 #define REG_NOTEOL    0x08
 
+/* Additional options, not defined by POSIX, but somebody wanted them. */
+
+#define REG_DOTALL    0x10
+
 /* These are not used by PCRE, but by defining them we make it easier
 to slot PCRE into existing programs that make POSIX calls. */
 
diff -Nurp tin-1.7.8/pcre/pcretest.c tin-1.7.9/pcre/pcretest.c
--- tin-1.7.8/pcre/pcretest.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/pcretest.c	2005-06-28 10:31:26.655100435 +0200
@@ -4,7 +4,7 @@
 
 /* This program was hacked up as a tester for PCRE. I really should have
 written it more tidily in the first place. Will I ever learn? It has grown and
-been extended and consequently is now rather untidy in places.
+been extended and consequently is now rather, er, *very* untidy in places.
 
 -----------------------------------------------------------------------------
 Redistribution and use in source and binary forms, with or without
@@ -44,11 +44,15 @@ POSSIBILITY OF SUCH DAMAGE.
 #include <locale.h>
 #include <errno.h>
 
-/* We need the internal info for displaying the results of pcre_study(). Also
-for getting the opcodes for showing compiled code. */
-
 #define PCRE_SPY        /* For Win32 build, import data, not export */
-#include "internal.h"
+
+/* We need the internal info for displaying the results of pcre_study() and
+other internal data; pcretest also uses some of the fixed tables, and generally
+has "inside information" compared to a program that strictly follows the PCRE
+API. */
+
+#include "pcre_internal.h"
+
 
 /* It is possible to compile this test program without including support for
 testing the POSIX interface, though this is not available via the standard
@@ -58,6 +62,12 @@ Makefile. */
 #include "pcreposix.h"
 #endif
 
+/* It is also possible, for the benefit of the version imported into Exim, to
+build pcretest without support for UTF8 (define NOUTF8), without the interface
+to the DFA matcher (NODFA), and without the doublecheck of the old "info"
+function (define NOINFOCHECK). */
+
+
 #ifndef CLOCKS_PER_SEC
 #ifdef CLK_TCK
 #define CLOCKS_PER_SEC CLK_TCK
@@ -87,34 +97,6 @@ static size_t gotten_store;
 static uschar *pbuffer = NULL;
 
 
-static const int utf8_table1[] = {
-  0x0000007f, 0x000007ff, 0x0000ffff, 0x001fffff, 0x03ffffff, 0x7fffffff};
-
-static const int utf8_table2[] = {
-  0, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc};
-
-static const int utf8_table3[] = {
-  0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-
-
-/*************************************************
-*         Print compiled regex                   *
-*************************************************/
-
-/* The code for doing this is held in a separate file that is also included in
-pcre.c when it is compiled with the debug switch. It defines a function called
-print_internals(), which uses a table of opcode lengths defined by the macro
-OP_LENGTHS, whose name must be OP_lengths. It also uses a table that translates
-Unicode property names to numbers; this is kept in a separate file. */
-
-static uschar OP_lengths[] = { OP_LENGTHS };
-
-#include "ucp.h"
-#include "ucptypetable.c"
-#include "printint.c"
-
-
 
 /*************************************************
 *          Read number from string               *
@@ -143,42 +125,6 @@ return(result);
 
 
 
-/*************************************************
-*       Convert character value to UTF-8         *
-*************************************************/
-
-/* This function takes an integer value in the range 0 - 0x7fffffff
-and encodes it as a UTF-8 character in 0 to 6 bytes.
-
-Arguments:
-  cvalue     the character value
-  buffer     pointer to buffer for result - at least 6 bytes long
-
-Returns:     number of characters placed in the buffer
-             -1 if input character is negative
-             0 if input character is positive but too big (only when
-             int is longer than 32 bits)
-*/
-
-static int
-ord2utf8(int cvalue, unsigned char *buffer)
-{
-register int i, j;
-for (i = 0; i < sizeof(utf8_table1)/sizeof(int); i++)
-  if (cvalue <= utf8_table1[i]) break;
-if (i >= sizeof(utf8_table1)/sizeof(int)) return 0;
-if (cvalue < 0) return -1;
-
-buffer += i;
-for (j = i; j > 0; j--)
- {
- *buffer-- = 0x80 | (cvalue & 0x3f);
- cvalue >>= 6;
- }
-*buffer = utf8_table2[i] | cvalue;
-return i + 1;
-}
-
 
 /*************************************************
 *            Convert UTF-8 string to value       *
@@ -195,6 +141,8 @@ Returns:   >  0 => the number of bytes c
            -6 to 0 => malformed UTF-8 character at offset = (-return)
 */
 
+#if !defined NOUTF8
+
 static int
 utf82ord(unsigned char *buffer, int *vptr)
 {
@@ -214,7 +162,7 @@ if (i == 0 || i == 6) return 0;        /
 /* i now has a value in the range 1-5 */
 
 s = 6*i;
-d = (c & utf8_table3[i]) << s;
+d = (c & _pcre_utf8_table3[i]) << s;
 
 for (j = 0; j < i; j++)
   {
@@ -226,8 +174,8 @@ for (j = 0; j < i; j++)
 
 /* Check that encoding was the correct unique one */
 
-for (j = 0; j < sizeof(utf8_table1)/sizeof(int); j++)
-  if (d <= utf8_table1[j]) break;
+for (j = 0; j < _pcre_utf8_table1_size; j++)
+  if (d <= _pcre_utf8_table1[j]) break;
 if (j != i) return -(i+1);
 
 /* Valid value */
@@ -236,6 +184,8 @@ if (j != i) return -(i+1);
 return i+1;
 }
 
+#endif
+
 
 
 /*************************************************
@@ -253,6 +203,7 @@ int yield = 0;
 
 while (length-- > 0)
   {
+#if !defined NOUTF8
   if (use_utf8)
     {
     int rc = utf82ord(p, &c);
@@ -275,6 +226,7 @@ while (length-- > 0)
       continue;
       }
     }
+#endif
 
    /* Not UTF-8, or malformed UTF-8  */
 
@@ -403,7 +355,7 @@ static void *new_malloc(size_t size)
 void *block = malloc(size);
 gotten_store = size;
 if (show_malloc)
-  fprintf(outfile, "malloc       %3d %p\n", size, block);
+  fprintf(outfile, "malloc       %3d %p\n", (int)size, block);
 return block;
 }
 
@@ -421,7 +373,7 @@ static void *stack_malloc(size_t size)
 {
 void *block = malloc(size);
 if (show_malloc)
-  fprintf(outfile, "stack_malloc %3d %p\n", size, block);
+  fprintf(outfile, "stack_malloc %3d %p\n", (int)size, block);
 return block;
 }
 
@@ -484,12 +436,14 @@ int showinfo = 0;
 int showstore = 0;
 int size_offsets = 45;
 int size_offsets_max;
-int *offsets;
+int *offsets = NULL;
 #if !defined NOPOSIX
 int posix = 0;
 #endif
 int debug = 0;
 int done = 0;
+int all_use_dfa = 0;
+int yield = 0;
 
 unsigned char *buffer;
 unsigned char *dbuffer;
@@ -522,6 +476,9 @@ while (argc > 1 && argv[op][0] == '-')
   else if (strcmp(argv[op], "-t") == 0) timeit = 1;
   else if (strcmp(argv[op], "-i") == 0) showinfo = 1;
   else if (strcmp(argv[op], "-d") == 0) showinfo = debug = 1;
+#if !defined NODFA
+  else if (strcmp(argv[op], "-dfa") == 0) all_use_dfa = 1;
+#endif
   else if (strcmp(argv[op], "-o") == 0 && argc > 2 &&
       ((size_offsets = get_value((unsigned char *)argv[op+1], &endptr)),
         *endptr == 0))
@@ -558,8 +515,11 @@ while (argc > 1 && argv[op][0] == '-')
     printf("** Unknown or malformed option %s\n", argv[op]);
     printf("Usage:   pcretest [-d] [-i] [-o <n>] [-p] [-s] [-t] [<input> [<output>]]\n");
     printf("  -C     show PCRE compile-time options and exit\n");
-    printf("  -d     debug: show compiled code; implies -i\n"
-           "  -i     show information about compiled pattern\n"
+    printf("  -d     debug: show compiled code; implies -i\n");
+#if !defined NODFA
+    printf("  -dfa   force DFA matching for all subjects\n");
+#endif
+    printf("  -i     show information about compiled pattern\n"
            "  -m     output memory used information\n"
            "  -o <n> set size of offsets vector to <n>\n");
 #if !defined NOPOSIX
@@ -567,7 +527,8 @@ while (argc > 1 && argv[op][0] == '-')
 #endif
     printf("  -s     output store (memory) used information\n"
            "  -t     time compilation and execution\n");
-    return 1;
+    yield = 1;
+    goto EXIT;
     }
   op++;
   argc--;
@@ -581,7 +542,8 @@ if (offsets == NULL)
   {
   printf("** Failed to get %d bytes of memory for offsets vector\n",
     size_offsets_max * sizeof(int));
-  return 1;
+  yield = 1;
+  goto EXIT;
   }
 
 /* Sort out the input and output files */
@@ -592,7 +554,8 @@ if (argc > 1)
   if (infile == NULL)
     {
     printf("** Failed to open %s\n", argv[op]);
-    return 1;
+    yield = 1;
+    goto EXIT;
     }
   }
 
@@ -602,7 +565,8 @@ if (argc > 2)
   if (outfile == NULL)
     {
     printf("** Failed to open %s\n", argv[op+1]);
-    return 1;
+    yield = 1;
+    goto EXIT;
     }
   }
 
@@ -802,6 +766,7 @@ while (!done)
     {
     switch (*pp++)
       {
+      case 'f': options |= PCRE_FIRSTLINE; break;
       case 'g': do_g = 1; break;
       case 'i': options |= PCRE_CASELESS; break;
       case 'm': options |= PCRE_MULTILINE; break;
@@ -831,7 +796,8 @@ while (!done)
 
       case 'L':
       ppp = pp;
-      while (*ppp != '\n' && *ppp != ' ') ppp++;
+      /* The '\r' test here is so that it works on Windows */
+      while (*ppp != '\n' && *ppp != '\r' && *ppp != ' ') ppp++;
       *ppp = 0;
       if (setlocale(LC_CTYPE, (const char *)pp) == NULL)
         {
@@ -849,7 +815,10 @@ while (!done)
       *pp = 0;
       break;
 
-      case '\n': case ' ': break;
+      case '\r':                      /* So that it works in Windows */
+      case '\n':
+      case ' ':
+      break;
 
       default:
       fprintf(outfile, "** Unknown option '%c'\n", pp[-1]);
@@ -869,6 +838,7 @@ while (!done)
 
     if ((options & PCRE_CASELESS) != 0) cflags |= REG_ICASE;
     if ((options & PCRE_MULTILINE) != 0) cflags |= REG_NEWLINE;
+    if ((options & PCRE_DOTALL) != 0) cflags |= REG_DOTALL;
     rc = regcomp(&preg, (char *)p, cflags);
 
     /* Compilation failed; go back for another re, skipping to blank line
@@ -1008,7 +978,9 @@ while (!done)
     if (do_showinfo)
       {
       unsigned long int get_options, all_options;
+#if !defined NOINFOCHECK
       int old_first_char, old_options, old_count;
+#endif
       int count, backrefmax, first_char, need_char;
       int nameentrysize, namecount;
       const uschar *nametable;
@@ -1016,7 +988,7 @@ while (!done)
       if (do_debug)
         {
         fprintf(outfile, "------------------------------------------------------------------\n");
-        print_internals(re, outfile);
+        _pcre_printint(re, outfile);
         }
 
       new_info(re, NULL, PCRE_INFO_OPTIONS, &get_options);
@@ -1029,6 +1001,7 @@ while (!done)
       new_info(re, NULL, PCRE_INFO_NAMECOUNT, &namecount);
       new_info(re, NULL, PCRE_INFO_NAMETABLE, (void *)&nametable);
 
+#if !defined NOINFOCHECK
       old_count = pcre_info(re, &old_options, &old_first_char);
       if (count < 0) fprintf(outfile,
         "Error %d from pcre_info()\n", count);
@@ -1046,10 +1019,11 @@ while (!done)
           "Options disagreement: pcre_fullinfo=%ld pcre_info=%d\n",
             get_options, old_options);
         }
+#endif
 
       if (size != regex_gotten_store) fprintf(outfile,
         "Size disagreement: pcre_fullinfo=%d call to malloc for %d\n",
-        size, regex_gotten_store);
+        (int)size, (int)regex_gotten_store);
 
       fprintf(outfile, "Capturing subpattern count = %d\n", count);
       if (backrefmax > 0)
@@ -1080,11 +1054,12 @@ while (!done)
         fprintf(outfile, "Partial matching not supported\n");
 
       if (get_options == 0) fprintf(outfile, "No options\n");
-        else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s%s\n",
+        else fprintf(outfile, "Options:%s%s%s%s%s%s%s%s%s%s%s\n",
           ((get_options & PCRE_ANCHORED) != 0)? " anchored" : "",
           ((get_options & PCRE_CASELESS) != 0)? " caseless" : "",
           ((get_options & PCRE_EXTENDED) != 0)? " extended" : "",
           ((get_options & PCRE_MULTILINE) != 0)? " multiline" : "",
+          ((get_options & PCRE_FIRSTLINE) != 0)? " firstline" : "",
           ((get_options & PCRE_DOTALL) != 0)? " dotall" : "",
           ((get_options & PCRE_DOLLAR_ENDONLY) != 0)? " dollar_endonly" : "",
           ((get_options & PCRE_EXTRA) != 0)? " extra" : "",
@@ -1222,6 +1197,10 @@ while (!done)
           }
         fclose(f);
         }
+
+      new_free(re);
+      if (extra != NULL) new_free(extra);
+      if (tables != NULL) new_free((void *)tables);
       continue;  /* With next regex */
       }
     }        /* End of non-POSIX compile */
@@ -1244,6 +1223,7 @@ while (!done)
     int gmatched = 0;
     int start_offset = 0;
     int g_notempty = 0;
+    int use_dfa = 0;
 
     options = 0;
 
@@ -1299,6 +1279,7 @@ while (!done)
 
         /* Handle \x{..} specially - new Perl thing for utf8 */
 
+#if !defined NOUTF8
         if (*p == '{')
           {
           unsigned char *pt = p;
@@ -1309,7 +1290,7 @@ while (!done)
             {
             unsigned char buff8[8];
             int ii, utn;
-            utn = ord2utf8(c, buff8);
+            utn = _pcre_ord2utf8(c, buff8);
             for (ii = 0; ii < utn - 1; ii++) *q++ = buff8[ii];
             c = buff8[ii];   /* Last byte */
             p = pt + 1;
@@ -1317,6 +1298,7 @@ while (!done)
             }
           /* Not correct form; fall through */
           }
+#endif
 
         /* Ordinary \x */
 
@@ -1397,6 +1379,21 @@ while (!done)
           }
         continue;
 
+#if !defined NODFA
+        case 'D':
+#if !defined NOPOSIX
+        if (posix || do_posix)
+          printf("** Can't use dfa matching in POSIX mode: \\D ignored\n");
+        else
+#endif
+          use_dfa = 1;
+        continue;
+
+        case 'F':
+        options |= PCRE_DFA_SHORTEST;
+        continue;
+#endif
+
         case 'G':
         if (isdigit(*p))
           {
@@ -1439,7 +1436,8 @@ while (!done)
             {
             printf("** Failed to get %d bytes of memory for offsets vector\n",
               size_offsets_max * sizeof(int));
-            return 1;
+            yield = 1;
+            goto EXIT;
             }
           }
         use_size_offsets = n;
@@ -1450,6 +1448,12 @@ while (!done)
         options |= PCRE_PARTIAL;
         continue;
 
+#if !defined NODFA
+        case 'R':
+        options |= PCRE_DFA_RESTART;
+        continue;
+#endif
+
         case 'S':
         show_malloc = 1;
         continue;
@@ -1467,6 +1471,12 @@ while (!done)
     *q = 0;
     len = q - dbuffer;
 
+    if ((all_use_dfa || use_dfa) && find_match_limit)
+      {
+      printf("**Match limit not relevant for DFA matching: ignored\n");
+      find_match_limit = 0;
+      }
+
     /* Handle matching via the POSIX interface, which does not
     support timing or playing with the match limit or callout data. */
 
@@ -1524,9 +1534,23 @@ while (!done)
         register int i;
         clock_t time_taken;
         clock_t start_time = clock();
+
+#if !defined NODFA
+        if (all_use_dfa || use_dfa)
+          {
+          int workspace[1000];
+          for (i = 0; i < LOOPREPEAT; i++)
+            count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset,
+              options | g_notempty, use_offsets, use_size_offsets, workspace,
+              sizeof(workspace)/sizeof(int));
+          }
+        else
+#endif
+
         for (i = 0; i < LOOPREPEAT; i++)
           count = pcre_exec(re, extra, (char *)bptr, len,
             start_offset, options | g_notempty, use_offsets, use_size_offsets);
+
         time_taken = clock() - start_time;
         fprintf(outfile, "Execute time %.3f milliseconds\n",
           (((double)time_taken * 1000.0) / (double)LOOPREPEAT) /
@@ -1597,16 +1621,30 @@ while (!done)
       /* The normal case is just to do the match once, with the default
       value of match_limit. */
 
-      else
+#if !defined NODFA
+      else if (all_use_dfa || use_dfa)
         {
-        count = pcre_exec(re, extra, (char *)bptr, len,
-          start_offset, options | g_notempty, use_offsets, use_size_offsets);
+        int workspace[1000];
+        count = pcre_dfa_exec(re, NULL, (char *)bptr, len, start_offset,
+          options | g_notempty, use_offsets, use_size_offsets, workspace,
+          sizeof(workspace)/sizeof(int));
+        if (count == 0)
+          {
+          fprintf(outfile, "Matched, but too many subsidiary matches\n");
+          count = use_size_offsets/2;
+          }
         }
+#endif
 
-      if (count == 0)
+      else
         {
-        fprintf(outfile, "Matched, but too many substrings\n");
-        count = use_size_offsets/3;
+        count = pcre_exec(re, extra, (char *)bptr, len,
+          start_offset, options | g_notempty, use_offsets, use_size_offsets);
+        if (count == 0)
+          {
+          fprintf(outfile, "Matched, but too many substrings\n");
+          count = use_size_offsets/3;
+          }
         }
 
       /* Matched */
@@ -1692,7 +1730,13 @@ while (!done)
 
       else if (count == PCRE_ERROR_PARTIAL)
         {
-        fprintf(outfile, "Partial match\n");
+        fprintf(outfile, "Partial match");
+#if !defined NODFA
+        if ((all_use_dfa || use_dfa) && use_size_offsets > 2)
+          fprintf(outfile, ": %.*s", use_offsets[1] - use_offsets[0],
+            bptr + use_offsets[0]);
+#endif
+        fprintf(outfile, "\n");
         break;  /* Out of the /g loop */
         }
 
@@ -1770,17 +1814,28 @@ while (!done)
   if (posix || do_posix) regfree(&preg);
 #endif
 
-  if (re != NULL) free(re);
-  if (extra != NULL) free(extra);
+  if (re != NULL) new_free(re);
+  if (extra != NULL) new_free(extra);
   if (tables != NULL)
     {
-    free((void *)tables);
+    new_free((void *)tables);
     setlocale(LC_CTYPE, "C");
     }
   }
 
 if (infile == stdin) fprintf(outfile, "\n");
-return 0;
+
+EXIT:
+
+if (infile != NULL && infile != stdin) fclose(infile);
+if (outfile != NULL && outfile != stdout) fclose(outfile);
+
+free(buffer);
+free(dbuffer);
+free(pbuffer);
+free(offsets);
+
+return yield;
 }
 
-/* End */
+/* End of pcretest.c */
diff -Nurp tin-1.7.8/pcre/printint.c tin-1.7.9/pcre/printint.c
--- tin-1.7.8/pcre/printint.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/printint.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,461 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-
-/* This module contains a debugging function for printing out the internal form
-of a compiled regular expression. It is kept in a separate file so that it can
-be #included both in the pcretest program, and in the library itself when
-compiled with the debugging switch. */
-
-
-static const char *OP_names[] = { OP_NAME_LIST };
-
-
-/*************************************************
-*       Print single- or multi-byte character    *
-*************************************************/
-
-/* These tables are actually copies of ones in pcre.c. If we compile the
-library with debugging, they are included twice, but that isn't really a
-problem - compiling with debugging is pretty rare and these are very small. */
-
-static const int utf8_t3[] = { 0xff, 0x1f, 0x0f, 0x07, 0x03, 0x01};
-
-static const uschar utf8_t4[] = {
-  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-  1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-  2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
-  3,3,3,3,3,3,3,3,4,4,4,4,5,5,5,5 };
-
-static int
-print_char(FILE *f, uschar *ptr, BOOL utf8)
-{
-int c = *ptr;
-
-if (!utf8 || (c & 0xc0) != 0xc0)
-  {
-  if (isprint(c)) fprintf(f, "%c", c); else fprintf(f, "\\x%02x", c);
-  return 0;
-  }
-else
-  {
-  int i;
-  int a = utf8_t4[c & 0x3f];  /* Number of additional bytes */
-  int s = 6*a;
-  c = (c & utf8_t3[a]) << s;
-  for (i = 1; i <= a; i++)
-    {
-    /* This is a check for malformed UTF-8; it should only occur if the sanity
-    check has been turned off. Rather than swallow random bytes, just stop if
-    we hit a bad one. Print it with \X instead of \x as an indication. */
-
-    if ((ptr[i] & 0xc0) != 0x80)
-      {
-      fprintf(f, "\\X{%x}", c);
-      return i - 1;
-      }
-
-    /* The byte is OK */
-
-    s -= 6;
-    c |= (ptr[i] & 0x3f) << s;
-    }
-  if (c < 128) fprintf(f, "\\x%02x", c); else fprintf(f, "\\x{%x}", c);
-  return a;
-  }
-}
-
-
-
-
-/*************************************************
-*          Find Unicode property name            *
-*************************************************/
-
-static const char *
-get_ucpname(int property)
-{
-int i;
-for (i = sizeof(utt)/sizeof(ucp_type_table); i >= 0; i--)
-  {
-  if (property == utt[i].value) break;
-  }
-return (i >= 0)? utt[i].name : "??";
-}
-
-
-
-/*************************************************
-*         Print compiled regex                   *
-*************************************************/
-
-/* Make this function work for a regex with integers either byte order.
-However, we assume that what we are passed is a compiled regex. */
-
-static void
-print_internals(pcre *external_re, FILE *f)
-{
-real_pcre *re = (real_pcre *)external_re;
-uschar *codestart, *code;
-BOOL utf8;
-
-unsigned int options = re->options;
-int offset = re->name_table_offset;
-int count = re->name_count;
-int size = re->name_entry_size;
-
-if (re->magic_number != MAGIC_NUMBER)
-  {
-  offset = ((offset << 8) & 0xff00) | ((offset >> 8) & 0xff);
-  count = ((count << 8) & 0xff00) | ((count >> 8) & 0xff);
-  size = ((size << 8) & 0xff00) | ((size >> 8) & 0xff);
-  options = ((options << 24) & 0xff000000) |
-            ((options <<  8) & 0x00ff0000) |
-            ((options >>  8) & 0x0000ff00) |
-            ((options >> 24) & 0x000000ff);
-  }
-
-code = codestart = (uschar *)re + offset + count * size;
-utf8 = (options & PCRE_UTF8) != 0;
-
-for(;;)
-  {
-  uschar *ccode;
-  int c;
-  int extra = 0;
-
-  fprintf(f, "%3d ", code - codestart);
-
-  if (*code >= OP_BRA)
-    {
-    if (*code - OP_BRA > EXTRACT_BASIC_MAX)
-      fprintf(f, "%3d Bra extra\n", GET(code, 1));
-    else
-      fprintf(f, "%3d Bra %d\n", GET(code, 1), *code - OP_BRA);
-    code += OP_lengths[OP_BRA];
-    continue;
-    }
-
-  switch(*code)
-    {
-    case OP_END:
-    fprintf(f, "    %s\n", OP_names[*code]);
-    fprintf(f, "------------------------------------------------------------------\n");
-    return;
-
-    case OP_OPT:
-    fprintf(f, " %.2x %s", code[1], OP_names[*code]);
-    break;
-
-    case OP_CHAR:
-      {
-      fprintf(f, "    ");
-      do
-        {
-        code++;
-        code += 1 + print_char(f, code, utf8);
-        }
-      while (*code == OP_CHAR);
-      fprintf(f, "\n");
-      continue;
-      }
-    break;
-
-    case OP_CHARNC:
-      {
-      fprintf(f, " NC ");
-      do
-        {
-        code++;
-        code += 1 + print_char(f, code, utf8);
-        }
-      while (*code == OP_CHARNC);
-      fprintf(f, "\n");
-      continue;
-      }
-    break;
-
-    case OP_KETRMAX:
-    case OP_KETRMIN:
-    case OP_ALT:
-    case OP_KET:
-    case OP_ASSERT:
-    case OP_ASSERT_NOT:
-    case OP_ASSERTBACK:
-    case OP_ASSERTBACK_NOT:
-    case OP_ONCE:
-    case OP_COND:
-    case OP_REVERSE:
-    fprintf(f, "%3d %s", GET(code, 1), OP_names[*code]);
-    break;
-
-    case OP_BRANUMBER:
-    printf("%3d %s", GET2(code, 1), OP_names[*code]);
-    break;
-
-    case OP_CREF:
-    if (GET2(code, 1) == CREF_RECURSE)
-      fprintf(f, "    Cond recurse");
-    else
-      fprintf(f, "%3d %s", GET2(code,1), OP_names[*code]);
-    break;
-
-    case OP_STAR:
-    case OP_MINSTAR:
-    case OP_PLUS:
-    case OP_MINPLUS:
-    case OP_QUERY:
-    case OP_MINQUERY:
-    case OP_TYPESTAR:
-    case OP_TYPEMINSTAR:
-    case OP_TYPEPLUS:
-    case OP_TYPEMINPLUS:
-    case OP_TYPEQUERY:
-    case OP_TYPEMINQUERY:
-    fprintf(f, "    ");
-    if (*code >= OP_TYPESTAR)
-      {
-      fprintf(f, "%s", OP_names[code[1]]);
-      if (code[1] == OP_PROP || code[1] == OP_NOTPROP)
-        {
-        fprintf(f, " %s ", get_ucpname(code[2]));
-        extra = 1;
-        }
-      }
-    else extra = print_char(f, code+1, utf8);
-    fprintf(f, "%s", OP_names[*code]);
-    break;
-
-    case OP_EXACT:
-    case OP_UPTO:
-    case OP_MINUPTO:
-    fprintf(f, "    ");
-    extra = print_char(f, code+3, utf8);
-    fprintf(f, "{");
-    if (*code != OP_EXACT) fprintf(f, ",");
-    fprintf(f, "%d}", GET2(code,1));
-    if (*code == OP_MINUPTO) fprintf(f, "?");
-    break;
-
-    case OP_TYPEEXACT:
-    case OP_TYPEUPTO:
-    case OP_TYPEMINUPTO:
-    fprintf(f, "    %s", OP_names[code[3]]);
-    if (code[3] == OP_PROP || code[3] == OP_NOTPROP)
-      {
-      fprintf(f, " %s ", get_ucpname(code[4]));
-      extra = 1;
-      }
-    fprintf(f, "{");
-    if (*code != OP_TYPEEXACT) fprintf(f, "0,");
-    fprintf(f, "%d}", GET2(code,1));
-    if (*code == OP_TYPEMINUPTO) fprintf(f, "?");
-    break;
-
-    case OP_NOT:
-    if (isprint(c = code[1])) fprintf(f, "    [^%c]", c);
-      else fprintf(f, "    [^\\x%02x]", c);
-    break;
-
-    case OP_NOTSTAR:
-    case OP_NOTMINSTAR:
-    case OP_NOTPLUS:
-    case OP_NOTMINPLUS:
-    case OP_NOTQUERY:
-    case OP_NOTMINQUERY:
-    if (isprint(c = code[1])) fprintf(f, "    [^%c]", c);
-      else fprintf(f, "    [^\\x%02x]", c);
-    fprintf(f, "%s", OP_names[*code]);
-    break;
-
-    case OP_NOTEXACT:
-    case OP_NOTUPTO:
-    case OP_NOTMINUPTO:
-    if (isprint(c = code[3])) fprintf(f, "    [^%c]{", c);
-      else fprintf(f, "    [^\\x%02x]{", c);
-    if (*code != OP_NOTEXACT) fprintf(f, ",");
-    fprintf(f, "%d}", GET2(code,1));
-    if (*code == OP_NOTMINUPTO) fprintf(f, "?");
-    break;
-
-    case OP_RECURSE:
-    fprintf(f, "%3d %s", GET(code, 1), OP_names[*code]);
-    break;
-
-    case OP_REF:
-    fprintf(f, "    \\%d", GET2(code,1));
-    ccode = code + OP_lengths[*code];
-    goto CLASS_REF_REPEAT;
-
-    case OP_CALLOUT:
-    fprintf(f, "    %s %d %d %d", OP_names[*code], code[1], GET(code,2),
-      GET(code, 2 + LINK_SIZE));
-    break;
-
-    case OP_PROP:
-    case OP_NOTPROP:
-    fprintf(f, "    %s %s", OP_names[*code], get_ucpname(code[1]));
-    break;
-
-    /* OP_XCLASS can only occur in UTF-8 mode. However, there's no harm in
-    having this code always here, and it makes it less messy without all those
-    #ifdefs. */
-
-    case OP_CLASS:
-    case OP_NCLASS:
-    case OP_XCLASS:
-      {
-      int i, min, max;
-      BOOL printmap;
-
-      fprintf(f, "    [");
-
-      if (*code == OP_XCLASS)
-        {
-        extra = GET(code, 1);
-        ccode = code + LINK_SIZE + 1;
-        printmap = (*ccode & XCL_MAP) != 0;
-        if ((*ccode++ & XCL_NOT) != 0) fprintf(f, "^");
-        }
-      else
-        {
-        printmap = TRUE;
-        ccode = code + 1;
-        }
-
-      /* Print a bit map */
-
-      if (printmap)
-        {
-        for (i = 0; i < 256; i++)
-          {
-          if ((ccode[i/8] & (1 << (i&7))) != 0)
-            {
-            int j;
-            for (j = i+1; j < 256; j++)
-              if ((ccode[j/8] & (1 << (j&7))) == 0) break;
-            if (i == '-' || i == ']') fprintf(f, "\\");
-            if (isprint(i)) fprintf(f, "%c", i); else fprintf(f, "\\x%02x", i);
-            if (--j > i)
-              {
-              if (j != i + 1) fprintf(f, "-");
-              if (j == '-' || j == ']') fprintf(f, "\\");
-              if (isprint(j)) fprintf(f, "%c", j); else fprintf(f, "\\x%02x", j);
-              }
-            i = j;
-            }
-          }
-        ccode += 32;
-        }
-
-      /* For an XCLASS there is always some additional data */
-
-      if (*code == OP_XCLASS)
-        {
-        int ch;
-        while ((ch = *ccode++) != XCL_END)
-          {
-          if (ch == XCL_PROP)
-            {
-            fprintf(f, "\\p{%s}", get_ucpname(*ccode++));
-            }
-          else if (ch == XCL_NOTPROP)
-            {
-            fprintf(f, "\\P{%s}", get_ucpname(*ccode++));
-            }
-          else
-            {
-            ccode += 1 + print_char(f, ccode, TRUE);
-            if (ch == XCL_RANGE)
-              {
-              fprintf(f, "-");
-              ccode += 1 + print_char(f, ccode, TRUE);
-              }
-            }
-          }
-        }
-
-      /* Indicate a non-UTF8 class which was created by negation */
-
-      fprintf(f, "]%s", (*code == OP_NCLASS)? " (neg)" : "");
-
-      /* Handle repeats after a class or a back reference */
-
-      CLASS_REF_REPEAT:
-      switch(*ccode)
-        {
-        case OP_CRSTAR:
-        case OP_CRMINSTAR:
-        case OP_CRPLUS:
-        case OP_CRMINPLUS:
-        case OP_CRQUERY:
-        case OP_CRMINQUERY:
-        fprintf(f, "%s", OP_names[*ccode]);
-        extra += OP_lengths[*ccode];
-        break;
-
-        case OP_CRRANGE:
-        case OP_CRMINRANGE:
-        min = GET2(ccode,1);
-        max = GET2(ccode,3);
-        if (max == 0) fprintf(f, "{%d,}", min);
-        else fprintf(f, "{%d,%d}", min, max);
-        if (*ccode == OP_CRMINRANGE) fprintf(f, "?");
-        extra += OP_lengths[*ccode];
-        break;
-        }
-      }
-    break;
-
-    /* Anything else is just an item with no data*/
-
-    default:
-    fprintf(f, "    %s", OP_names[*code]);
-    break;
-    }
-
-  code += OP_lengths[*code] + extra;
-  fprintf(f, "\n");
-  }
-}
-
-/* End of printint.c */
diff -Nurp tin-1.7.8/pcre/study.c tin-1.7.9/pcre/study.c
--- tin-1.7.8/pcre/study.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/study.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,484 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-
-/* Include the internals header, which itself includes Standard C headers plus
-the external pcre header. */
-
-#include "internal.h"
-
-
-
-/*************************************************
-*      Set a bit and maybe its alternate case    *
-*************************************************/
-
-/* Given a character, set its bit in the table, and also the bit for the other
-version of a letter if we are caseless.
-
-Arguments:
-  start_bits    points to the bit map
-  c             is the character
-  caseless      the caseless flag
-  cd            the block with char table pointers
-
-Returns:        nothing
-*/
-
-static void
-set_bit(uschar *start_bits, unsigned int c, BOOL caseless, compile_data *cd)
-{
-start_bits[c/8] |= (1 << (c&7));
-if (caseless && (cd->ctypes[c] & ctype_letter) != 0)
-  start_bits[cd->fcc[c]/8] |= (1 << (cd->fcc[c]&7));
-}
-
-
-
-/*************************************************
-*          Create bitmap of starting chars       *
-*************************************************/
-
-/* This function scans a compiled unanchored expression and attempts to build a
-bitmap of the set of initial characters. If it can't, it returns FALSE. As time
-goes by, we may be able to get more clever at doing this.
-
-Arguments:
-  code         points to an expression
-  start_bits   points to a 32-byte table, initialized to 0
-  caseless     the current state of the caseless flag
-  utf8         TRUE if in UTF-8 mode
-  cd           the block with char table pointers
-
-Returns:       TRUE if table built, FALSE otherwise
-*/
-
-static BOOL
-set_start_bits(const uschar *code, uschar *start_bits, BOOL caseless,
-  BOOL utf8, compile_data *cd)
-{
-register int c;
-
-/* This next statement and the later reference to dummy are here in order to
-trick the optimizer of the IBM C compiler for OS/2 into generating correct
-code. Apparently IBM isn't going to fix the problem, and we would rather not
-disable optimization (in this module it actually makes a big difference, and
-the pcre module can use all the optimization it can get). */
-
-volatile int dummy;
-
-do
-  {
-  const uschar *tcode = code + 1 + LINK_SIZE;
-  BOOL try_next = TRUE;
-
-  while (try_next)
-    {
-    /* If a branch starts with a bracket or a positive lookahead assertion,
-    recurse to set bits from within them. That's all for this branch. */
-
-    if ((int)*tcode >= OP_BRA || *tcode == OP_ASSERT)
-      {
-      if (!set_start_bits(tcode, start_bits, caseless, utf8, cd))
-        return FALSE;
-      try_next = FALSE;
-      }
-
-    else switch(*tcode)
-      {
-      default:
-      return FALSE;
-
-      /* Skip over callout */
-
-      case OP_CALLOUT:
-      tcode += 2 + 2*LINK_SIZE;
-      break;
-
-      /* Skip over extended extraction bracket number */
-
-      case OP_BRANUMBER:
-      tcode += 3;
-      break;
-
-      /* Skip over lookbehind and negative lookahead assertions */
-
-      case OP_ASSERT_NOT:
-      case OP_ASSERTBACK:
-      case OP_ASSERTBACK_NOT:
-      do tcode += GET(tcode, 1); while (*tcode == OP_ALT);
-      tcode += 1+LINK_SIZE;
-      break;
-
-      /* Skip over an option setting, changing the caseless flag */
-
-      case OP_OPT:
-      caseless = (tcode[1] & PCRE_CASELESS) != 0;
-      tcode += 2;
-      break;
-
-      /* BRAZERO does the bracket, but carries on. */
-
-      case OP_BRAZERO:
-      case OP_BRAMINZERO:
-      if (!set_start_bits(++tcode, start_bits, caseless, utf8, cd))
-        return FALSE;
-      dummy = 1;
-      do tcode += GET(tcode,1); while (*tcode == OP_ALT);
-      tcode += 1+LINK_SIZE;
-      break;
-
-      /* Single-char * or ? sets the bit and tries the next item */
-
-      case OP_STAR:
-      case OP_MINSTAR:
-      case OP_QUERY:
-      case OP_MINQUERY:
-      set_bit(start_bits, tcode[1], caseless, cd);
-      tcode += 2;
-#ifdef SUPPORT_UTF8
-      if (utf8) while ((*tcode & 0xc0) == 0x80) tcode++;
-#endif
-      break;
-
-      /* Single-char upto sets the bit and tries the next */
-
-      case OP_UPTO:
-      case OP_MINUPTO:
-      set_bit(start_bits, tcode[3], caseless, cd);
-      tcode += 4;
-#ifdef SUPPORT_UTF8
-      if (utf8) while ((*tcode & 0xc0) == 0x80) tcode++;
-#endif
-      break;
-
-      /* At least one single char sets the bit and stops */
-
-      case OP_EXACT:       /* Fall through */
-      tcode += 2;
-
-      case OP_CHAR:
-      case OP_CHARNC:
-      case OP_PLUS:
-      case OP_MINPLUS:
-      set_bit(start_bits, tcode[1], caseless, cd);
-      try_next = FALSE;
-      break;
-
-      /* Single character type sets the bits and stops */
-
-      case OP_NOT_DIGIT:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= ~cd->cbits[c+cbit_digit];
-      try_next = FALSE;
-      break;
-
-      case OP_DIGIT:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= cd->cbits[c+cbit_digit];
-      try_next = FALSE;
-      break;
-
-      case OP_NOT_WHITESPACE:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= ~cd->cbits[c+cbit_space];
-      try_next = FALSE;
-      break;
-
-      case OP_WHITESPACE:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= cd->cbits[c+cbit_space];
-      try_next = FALSE;
-      break;
-
-      case OP_NOT_WORDCHAR:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= ~cd->cbits[c+cbit_word];
-      try_next = FALSE;
-      break;
-
-      case OP_WORDCHAR:
-      for (c = 0; c < 32; c++)
-        start_bits[c] |= cd->cbits[c+cbit_word];
-      try_next = FALSE;
-      break;
-
-      /* One or more character type fudges the pointer and restarts, knowing
-      it will hit a single character type and stop there. */
-
-      case OP_TYPEPLUS:
-      case OP_TYPEMINPLUS:
-      tcode++;
-      break;
-
-      case OP_TYPEEXACT:
-      tcode += 3;
-      break;
-
-      /* Zero or more repeats of character types set the bits and then
-      try again. */
-
-      case OP_TYPEUPTO:
-      case OP_TYPEMINUPTO:
-      tcode += 2;               /* Fall through */
-
-      case OP_TYPESTAR:
-      case OP_TYPEMINSTAR:
-      case OP_TYPEQUERY:
-      case OP_TYPEMINQUERY:
-      switch(tcode[1])
-        {
-        case OP_ANY:
-        return FALSE;
-
-        case OP_NOT_DIGIT:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= ~cd->cbits[c+cbit_digit];
-        break;
-
-        case OP_DIGIT:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= cd->cbits[c+cbit_digit];
-        break;
-
-        case OP_NOT_WHITESPACE:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= ~cd->cbits[c+cbit_space];
-        break;
-
-        case OP_WHITESPACE:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= cd->cbits[c+cbit_space];
-        break;
-
-        case OP_NOT_WORDCHAR:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= ~cd->cbits[c+cbit_word];
-        break;
-
-        case OP_WORDCHAR:
-        for (c = 0; c < 32; c++)
-          start_bits[c] |= cd->cbits[c+cbit_word];
-        break;
-        }
-
-      tcode += 2;
-      break;
-
-      /* Character class where all the information is in a bit map: set the
-      bits and either carry on or not, according to the repeat count. If it was
-      a negative class, and we are operating with UTF-8 characters, any byte
-      with a value >= 0xc4 is a potentially valid starter because it starts a
-      character with a value > 255. */
-
-      case OP_NCLASS:
-      if (utf8)
-        {
-        start_bits[24] |= 0xf0;              /* Bits for 0xc4 - 0xc8 */
-        memset(start_bits+25, 0xff, 7);      /* Bits for 0xc9 - 0xff */
-        }
-      /* Fall through */
-
-      case OP_CLASS:
-        {
-        tcode++;
-
-        /* In UTF-8 mode, the bits in a bit map correspond to character
-        values, not to byte values. However, the bit map we are constructing is
-        for byte values. So we have to do a conversion for characters whose
-        value is > 127. In fact, there are only two possible starting bytes for
-        characters in the range 128 - 255. */
-
-        if (utf8)
-          {
-          for (c = 0; c < 16; c++) start_bits[c] |= tcode[c];
-          for (c = 128; c < 256; c++)
-            {
-            if ((tcode[c/8] && (1 << (c&7))) != 0)
-              {
-              int d = (c >> 6) | 0xc0;            /* Set bit for this starter */
-              start_bits[d/8] |= (1 << (d&7));    /* and then skip on to the */
-              c = (c & 0xc0) + 0x40 - 1;          /* next relevant character. */
-              }
-            }
-          }
-
-        /* In non-UTF-8 mode, the two bit maps are completely compatible. */
-
-        else
-          {
-          for (c = 0; c < 32; c++) start_bits[c] |= tcode[c];
-          }
-
-        /* Advance past the bit map, and act on what follows */
-
-        tcode += 32;
-        switch (*tcode)
-          {
-          case OP_CRSTAR:
-          case OP_CRMINSTAR:
-          case OP_CRQUERY:
-          case OP_CRMINQUERY:
-          tcode++;
-          break;
-
-          case OP_CRRANGE:
-          case OP_CRMINRANGE:
-          if (((tcode[1] << 8) + tcode[2]) == 0) tcode += 5;
-            else try_next = FALSE;
-          break;
-
-          default:
-          try_next = FALSE;
-          break;
-          }
-        }
-      break; /* End of bitmap class handling */
-
-      }      /* End of switch */
-    }        /* End of try_next loop */
-
-  code += GET(code, 1);   /* Advance to next branch */
-  }
-while (*code == OP_ALT);
-return TRUE;
-}
-
-
-
-/*************************************************
-*          Study a compiled expression           *
-*************************************************/
-
-/* This function is handed a compiled expression that it must study to produce
-information that will speed up the matching. It returns a pcre_extra block
-which then gets handed back to pcre_exec().
-
-Arguments:
-  re        points to the compiled expression
-  options   contains option bits
-  errorptr  points to where to place error messages;
-            set NULL unless error
-
-Returns:    pointer to a pcre_extra block, with study_data filled in and the
-              appropriate flag set;
-            NULL on error or if no optimization possible
-*/
-
-EXPORT pcre_extra *
-pcre_study(const pcre *external_re, int options, const char **errorptr)
-{
-uschar start_bits[32];
-pcre_extra *extra;
-pcre_study_data *study;
-const uschar *tables;
-const real_pcre *re = (const real_pcre *)external_re;
-uschar *code = (uschar *)re + re->name_table_offset +
-  (re->name_count * re->name_entry_size);
-compile_data compile_block;
-
-*errorptr = NULL;
-
-if (re == NULL || re->magic_number != MAGIC_NUMBER)
-  {
-  *errorptr = "argument is not a compiled regular expression";
-  return NULL;
-  }
-
-if ((options & ~PUBLIC_STUDY_OPTIONS) != 0)
-  {
-  *errorptr = "unknown or incorrect option bit(s) set";
-  return NULL;
-  }
-
-/* For an anchored pattern, or an unanchored pattern that has a first char, or
-a multiline pattern that matches only at "line starts", no further processing
-at present. */
-
-if ((re->options & (PCRE_ANCHORED|PCRE_FIRSTSET|PCRE_STARTLINE)) != 0)
-  return NULL;
-
-/* Set the character tables in the block that is passed around */
-
-tables = re->tables;
-if (tables == NULL)
-  (void)pcre_fullinfo(external_re, NULL, PCRE_INFO_DEFAULT_TABLES, &tables);
-
-compile_block.lcc = tables + lcc_offset;
-compile_block.fcc = tables + fcc_offset;
-compile_block.cbits = tables + cbits_offset;
-compile_block.ctypes = tables + ctypes_offset;
-
-/* See if we can find a fixed set of initial characters for the pattern. */
-
-memset(start_bits, 0, 32 * sizeof(uschar));
-if (!set_start_bits(code, start_bits, (re->options & PCRE_CASELESS) != 0,
-  (re->options & PCRE_UTF8) != 0, &compile_block)) return NULL;
-
-/* Get a pcre_extra block and a pcre_study_data block. The study data is put in
-the latter, which is pointed to by the former, which may also get additional
-data set later by the calling program. At the moment, the size of
-pcre_study_data is fixed. We nevertheless save it in a field for returning via
-the pcre_fullinfo() function so that if it becomes variable in the future, we
-don't have to change that code. */
-
-extra = (pcre_extra *)(pcre_malloc)
-  (sizeof(pcre_extra) + sizeof(pcre_study_data));
-
-if (extra == NULL)
-  {
-  *errorptr = "failed to get memory";
-  return NULL;
-  }
-
-study = (pcre_study_data *)((char *)extra + sizeof(pcre_extra));
-extra->flags = PCRE_EXTRA_STUDY_DATA;
-extra->study_data = study;
-
-study->size = sizeof(pcre_study_data);
-study->options = PCRE_STUDY_MAPPED;
-memcpy(study->start_bits, start_bits, sizeof(start_bits));
-
-return extra;
-}
-
-/* End of study.c */
diff -Nurp tin-1.7.8/pcre/testdata/testinput1 tin-1.7.9/pcre/testdata/testinput1
--- tin-1.7.8/pcre/testdata/testinput1	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testinput1	2005-06-28 10:31:27.035030495 +0200
@@ -3838,4 +3838,12 @@
 /(?<=Z)X./
   \x84XAZXB
 
+/ab cd (?x) de fg/
+    ab cd defg
+
+/ab cd(?x) de fg/
+    ab cddefg
+    ** Failers 
+    abcddefg
+
 / End of testinput1 /
diff -Nurp tin-1.7.8/pcre/testdata/testinput2 tin-1.7.9/pcre/testdata/testinput2
--- tin-1.7.8/pcre/testdata/testinput2	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testinput2	2005-06-28 10:31:27.053027182 +0200
@@ -1069,6 +1069,12 @@
 /(?<=(abc)(?C))xyz/
    abcxyz\C+
    
+/a(b+)(c*)(?C1)/
+    abbbbbccc\C*1
+
+/a(b+?)(c*?)(?C1)/
+    abbbbbccc\C*1
+   
 /(?C)abc/ 
 
 /(?C)^abc/
@@ -1393,4 +1399,34 @@
 
 /^a/IF
 
+/line\nbreak/
+    this is a line\nbreak
+    line one\nthis is a line\nbreak in the second line 
+
+/line\nbreak/f
+    this is a line\nbreak
+    ** Failers 
+    line one\nthis is a line\nbreak in the second line 
+
+/line\nbreak/mf
+    this is a line\nbreak
+    ** Failers 
+    line one\nthis is a line\nbreak in the second line 
+
+/ab.cd/P
+    ab-cd
+    ab=cd 
+    ** Failers
+    ab\ncd
+
+/ab.cd/Ps
+    ab-cd
+    ab=cd 
+    ab\ncd
+
+/(?i)(?-i)AbCd/
+    AbCd
+    ** Failers
+    abcd  
+
 / End of testinput2 /
diff -Nurp tin-1.7.8/pcre/testdata/testinput7 tin-1.7.9/pcre/testdata/testinput7
--- tin-1.7.8/pcre/testdata/testinput7	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testinput7	2005-06-28 10:31:27.186002704 +0200
@@ -0,0 +1,4013 @@
+/abc/
+    abc
+    
+/ab*c/
+    abc
+    abbbbc
+    ac
+    
+/ab+c/
+    abc
+    abbbbbbc
+    *** Failers 
+    ac
+    ab
+    
+/a*/
+    a
+    aaaaaaaaaaaaaaaaa
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\F 
+    
+/(a|abcd|african)/
+    a
+    abcd
+    african
+    
+/^abc/
+    abcdef
+    *** Failers
+    xyzabc
+    xyz\nabc    
+    
+/^abc/m
+    abcdef
+    xyz\nabc    
+    *** Failers
+    xyzabc
+    
+/\Aabc/
+    abcdef
+    *** Failers
+    xyzabc
+    xyz\nabc    
+    
+/\Aabc/m
+    abcdef
+    *** Failers
+    xyzabc
+    xyz\nabc    
+    
+/\Gabc/
+    abcdef
+    xyzabc\>3
+    *** Failers
+    xyzabc    
+    xyzabc\>2 
+    
+/x\dy\Dz/
+    x9yzz
+    x0y+z
+    *** Failers
+    xyz
+    xxy0z     
+    
+/x\sy\Sz/
+    x yzz
+    x y+z
+    *** Failers
+    xyz
+    xxyyz
+    
+/x\wy\Wz/
+    xxy+z
+    *** Failers
+    xxy0z
+    x+y+z         
+    
+/x.y/
+    x+y
+    x-y
+    *** Failers
+    x\ny
+    
+/x.y/s
+    x+y
+    x-y
+    x\ny
+
+/(a.b(?s)c.d|x.y)p.q/
+    a+bc+dp+q
+    a+bc\ndp+q
+    x\nyp+q 
+    *** Failers 
+    a\nbc\ndp+q
+    a+bc\ndp\nq
+    x\nyp\nq 
+
+/a\d\z/
+    ba0
+    *** Failers
+    ba0\n
+    ba0\ncd   
+
+/a\d\z/m
+    ba0
+    *** Failers
+    ba0\n
+    ba0\ncd   
+
+/a\d\Z/
+    ba0
+    ba0\n
+    *** Failers
+    ba0\ncd   
+
+/a\d\Z/m
+    ba0
+    ba0\n
+    *** Failers
+    ba0\ncd   
+
+/a\d$/
+    ba0
+    ba0\n
+    *** Failers
+    ba0\ncd   
+
+/a\d$/m
+    ba0
+    ba0\n
+    ba0\ncd   
+    *** Failers
+
+/abc/i
+    abc
+    aBc
+    ABC
+    
+/[^a]/
+    abcd
+    
+/ab?\w/
+    abz
+    abbz
+    azz  
+
+/x{0,3}yz/
+    ayzq
+    axyzq
+    axxyz
+    axxxyzq
+    axxxxyzq
+    *** Failers
+    ax
+    axx     
+      
+/x{3}yz/
+    axxxyzq
+    axxxxyzq
+    *** Failers
+    ax
+    axx     
+    ayzq
+    axyzq
+    axxyz
+      
+/x{2,3}yz/
+    axxyz
+    axxxyzq
+    axxxxyzq
+    *** Failers
+    ax
+    axx     
+    ayzq
+    axyzq
+      
+/[^a]+/
+    bac
+    bcdefax
+    *** Failers
+    aaaaa   
+
+/[^a]*/
+    bac
+    bcdefax
+    *** Failers
+    aaaaa   
+    
+/[^a]{3,5}/
+    xyz
+    awxyza
+    abcdefa
+    abcdefghijk
+    *** Failers
+    axya
+    axa
+    aaaaa         
+
+/\d*/
+    1234b567
+    xyz
+    
+/\D*/
+    a1234b567
+    xyz
+     
+/\d+/
+    ab1234c56
+    *** Failers
+    xyz
+    
+/\D+/
+    ab123c56
+    *** Failers
+    789
+    
+/\d?A/
+    045ABC
+    ABC
+    *** Failers
+    XYZ
+    
+/\D?A/
+    ABC
+    BAC
+    9ABC             
+    *** Failers
+
+/a+/
+    aaaa
+
+/^.*xyz/
+    xyz
+    ggggggggxyz
+    
+/^.+xyz/
+    abcdxyz
+    axyz
+    *** Failers
+    xyz
+    
+/^.?xyz/
+    xyz
+    cxyz       
+
+/^\d{2,3}X/
+    12X
+    123X
+    *** Failers
+    X
+    1X
+    1234X     
+
+/^[abcd]\d/
+    a45
+    b93
+    c99z
+    d04
+    *** Failers
+    e45
+    abcd      
+    abcd1234
+    1234  
+
+/^[abcd]*\d/
+    a45
+    b93
+    c99z
+    d04
+    abcd1234
+    1234  
+    *** Failers
+    e45
+    abcd      
+
+/^[abcd]+\d/
+    a45
+    b93
+    c99z
+    d04
+    abcd1234
+    *** Failers
+    1234  
+    e45
+    abcd      
+
+/^a+X/
+    aX
+    aaX 
+
+/^[abcd]?\d/
+    a45
+    b93
+    c99z
+    d04
+    1234  
+    *** Failers
+    abcd1234
+    e45
+
+/^[abcd]{2,3}\d/
+    ab45
+    bcd93
+    *** Failers
+    1234 
+    a36 
+    abcd1234
+    ee45
+
+/^(abc)*\d/
+    abc45
+    abcabcabc45
+    42xyz 
+    *** Failers
+
+/^(abc)+\d/
+    abc45
+    abcabcabc45
+    *** Failers
+    42xyz 
+
+/^(abc)?\d/
+    abc45
+    42xyz 
+    *** Failers
+    abcabcabc45
+
+/^(abc){2,3}\d/
+    abcabc45
+    abcabcabc45
+    *** Failers
+    abcabcabcabc45
+    abc45
+    42xyz 
+
+/1(abc|xyz)2(?1)3/
+    1abc2abc3456
+    1abc2xyz3456 
+
+/^(a*\w|ab)=(a*\w|ab)/
+    ab=ab
+
+/^(a*\w|ab)=(?1)/
+    ab=ab
+
+/^([^()]|\((?1)*\))*$/
+    abc
+    a(b)c
+    a(b(c))d  
+    *** Failers)
+    a(b(c)d  
+
+/^>abc>([^()]|\((?1)*\))*<xyz<$/
+    >abc>123<xyz<
+    >abc>1(2)3<xyz<
+    >abc>(1(2)3)<xyz<
+
+/^(?>a*)\d/
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
+    *** Failers 
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/< (?: (?(R) \d++  | [^<>]*+) | (?R)) * >/x
+    <>
+    <abcd>
+    <abc <123> hij>
+    <abc <def> hij>
+    <abc<>def> 
+    <abc<>      
+    *** Failers
+    <abc
+
+/^(?(?=abc)\w{3}:|\d\d)$/        
+    abc:                          
+    12                             
+    *** Failers                     
+    123                       
+    xyz                        
+                                
+/^(?(?!abc)\d\d|\w{3}:)$/      
+    abc:                        
+    12         
+    *** Failers
+    123
+    xyz    
+
+/^(?=abc)\w{5}:$/        
+    abcde:                          
+    *** Failers                     
+    abc.. 
+    123                       
+    vwxyz                        
+                                
+/^(?!abc)\d\d$/      
+    12         
+    *** Failers
+    abcde:
+    abc..  
+    123
+    vwxyz    
+
+/(?<=abc|xy)123/
+    abc12345
+    wxy123z
+    *** Failers
+    123abc
+
+/(?<!abc|xy)123/
+    123abc
+    mno123456 
+    *** Failers
+    abc12345
+    wxy123z
+
+/abc(?C1)xyz/
+    abcxyz
+    123abcxyz999 
+
+/(ab|cd){3,4}/C
+  ababab
+  abcdabcd
+  abcdcdcdcdcd  
+
+/^abc/
+    abcdef
+    *** Failers
+    abcdef\B  
+
+/^(a*|xyz)/
+    bcd
+    aaabcd
+    xyz
+    xyz\N  
+    *** Failers
+    bcd\N   
+    
+/xyz$/
+    xyz
+    xyz\n
+    *** Failers
+    xyz\Z
+    xyz\n\Z    
+    
+/xyz$/m
+    xyz
+    xyz\n 
+    abcxyz\npqr 
+    abcxyz\npqr\Z 
+    xyz\n\Z    
+    *** Failers
+    xyz\Z
+
+/\Gabc/
+    abcdef
+    defabcxyz\>3 
+    *** Failers 
+    defabcxyz
+
+/^abcdef/
+    ab\P
+    abcde\P
+    abcdef\P
+    *** Failers
+    abx\P    
+
+/^a{2,4}\d+z/
+    a\P
+    aa\P
+    aa2\P 
+    aaa\P
+    aaa23\P 
+    aaaa12345\P
+    aa0z\P
+    aaaa4444444444444z\P 
+    *** Failers
+    az\P 
+    aaaaa\P 
+    a56\P 
+
+/^abcdef/
+   abc\P
+   def\R 
+   
+/(?<=foo)bar/
+   xyzfo\P 
+   foob\R\P\>2 
+   foobar...\R\P\>4 
+   xyzfo\P
+   foobar\R\>2  
+   *** Failers
+   xyzfo\P
+   obar\R   
+
+/(ab*(cd|ef))+X/
+    adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\P\Z
+    lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\P\B\Z
+    cdabbbbbbbb\P\R\B\Z
+    efabbbbbbbbbbbbbbbb\P\R\B\Z
+    bbbbbbbbbbbbcdXyasdfadf\P\R\B\Z    
+
+/(a|b)/SF>testsavedregex
+<testsavedregex
+    abc
+    ** Failers
+    def  
+    
+/the quick brown fox/
+    the quick brown fox
+    The quick brown FOX
+    What do you know about the quick brown fox?
+    What do you know about THE QUICK BROWN FOX?
+
+/The quick brown fox/i
+    the quick brown fox
+    The quick brown FOX
+    What do you know about the quick brown fox?
+    What do you know about THE QUICK BROWN FOX?
+
+/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
+    abcd\t\n\r\f\a\e9;\$\\?caxyz
+
+/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
+    abxyzpqrrrabbxyyyypqAzz
+    abxyzpqrrrabbxyyyypqAzz
+    aabxyzpqrrrabbxyyyypqAzz
+    aaabxyzpqrrrabbxyyyypqAzz
+    aaaabxyzpqrrrabbxyyyypqAzz
+    abcxyzpqrrrabbxyyyypqAzz
+    aabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypAzz
+    aaabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+    aaaabcxyzpqrrrabbxyyyypqAzz
+    abxyzzpqrrrabbxyyyypqAzz
+    aabxyzzzpqrrrabbxyyyypqAzz
+    aaabxyzzzzpqrrrabbxyyyypqAzz
+    aaaabxyzzzzpqrrrabbxyyyypqAzz
+    abcxyzzpqrrrabbxyyyypqAzz
+    aabcxyzzzpqrrrabbxyyyypqAzz
+    aaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypABzz
+    aaabcxyzpqrrrabbxyyyypABBzz
+    >>>aaabxyzpqrrrabbxyyyypqAzz
+    >aaaabxyzpqrrrabbxyyyypqAzz
+    >>>>abcxyzpqrrrabbxyyyypqAzz
+    *** Failers
+    abxyzpqrrabbxyyyypqAzz
+    abxyzpqrrrrabbxyyyypqAzz
+    abxyzpqrrrabxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyypqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
+
+/^(abc){1,2}zz/
+    abczz
+    abcabczz
+    *** Failers
+    zz
+    abcabcabczz
+    >>abczz
+
+/^(b+?|a){1,2}?c/
+    bc
+    bbc
+    bbbc
+    bac
+    bbac
+    aac
+    abbbbbbbbbbbc
+    bbbbbbbbbbbac
+    *** Failers
+    aaac
+    abbbbbbbbbbbac
+
+/^(b+|a){1,2}c/
+    bc
+    bbc
+    bbbc
+    bac
+    bbac
+    aac
+    abbbbbbbbbbbc
+    bbbbbbbbbbbac
+    *** Failers
+    aaac
+    abbbbbbbbbbbac
+
+/^(b+|a){1,2}?bc/
+    bbc
+
+/^(b*|ba){1,2}?bc/
+    babc
+    bbabc
+    bababc
+    *** Failers
+    bababbc
+    babababc
+
+/^(ba|b*){1,2}?bc/
+    babc
+    bbabc
+    bababc
+    *** Failers
+    bababbc
+    babababc
+
+/^\ca\cA\c[\c{\c:/
+    \x01\x01\e;z
+
+/^[ab\]cde]/
+    athing
+    bthing
+    ]thing
+    cthing
+    dthing
+    ething
+    *** Failers
+    fthing
+    [thing
+    \\thing
+
+/^[]cde]/
+    ]thing
+    cthing
+    dthing
+    ething
+    *** Failers
+    athing
+    fthing
+
+/^[^ab\]cde]/
+    fthing
+    [thing
+    \\thing
+    *** Failers
+    athing
+    bthing
+    ]thing
+    cthing
+    dthing
+    ething
+
+/^[^]cde]/
+    athing
+    fthing
+    *** Failers
+    ]thing
+    cthing
+    dthing
+    ething
+
+/^\/
+    
+
+/^ÿ/
+    ÿ
+
+/^[0-9]+$/
+    0
+    1
+    2
+    3
+    4
+    5
+    6
+    7
+    8
+    9
+    10
+    100
+    *** Failers
+    abc
+
+/^.*nter/
+    enter
+    inter
+    uponter
+
+/^xxx[0-9]+$/
+    xxx0
+    xxx1234
+    *** Failers
+    xxx
+
+/^.+[0-9][0-9][0-9]$/
+    x123
+    xx123
+    123456
+    *** Failers
+    123
+    x1234
+
+/^.+?[0-9][0-9][0-9]$/
+    x123
+    xx123
+    123456
+    *** Failers
+    123
+    x1234
+
+/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
+    abc!pqr=apquxz.ixr.zzz.ac.uk
+    *** Failers
+    !pqr=apquxz.ixr.zzz.ac.uk
+    abc!=apquxz.ixr.zzz.ac.uk
+    abc!pqr=apquxz:ixr.zzz.ac.uk
+    abc!pqr=apquxz.ixr.zzz.ac.ukk
+
+/:/
+    Well, we need a colon: somewhere
+    *** Fail if we don't
+
+/([\da-f:]+)$/i
+    0abc
+    abc
+    fed
+    E
+    ::
+    5f03:12C0::932e
+    fed def
+    Any old stuff
+    *** Failers
+    0zzz
+    gzzz
+    fed\x20
+    Any old rubbish
+
+/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
+    .1.2.3
+    A.12.123.0
+    *** Failers
+    .1.2.3333
+    1.2.3
+    1234.2.3
+
+/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
+    1 IN SOA non-sp1 non-sp2(
+    1    IN    SOA    non-sp1    non-sp2   (
+    *** Failers
+    1IN SOA non-sp1 non-sp2(
+
+/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
+    a.
+    Z.
+    2.
+    ab-c.pq-r.
+    sxk.zzz.ac.uk.
+    x-.y-.
+    *** Failers
+    -abc.peq.
+
+/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
+    *.a
+    *.b0-a
+    *.c3-b.c
+    *.c-a.b-c
+    *** Failers
+    *.0
+    *.a-
+    *.a-b.c-
+    *.c-a.0-c
+
+/^(?=ab(de))(abd)(e)/
+    abde
+
+/^(?!(ab)de|x)(abd)(f)/
+    abdf
+
+/^(?=(ab(cd)))(ab)/
+    abcd
+
+/^[\da-f](\.[\da-f])*$/i
+    a.b.c.d
+    A.B.C.D
+    a.b.c.1.2.3.C
+
+/^\".*\"\s*(;.*)?$/
+    \"1234\"
+    \"abcd\" ;
+    \"\" ; rhubarb
+    *** Failers
+    \"1234\" : things
+
+/^$/
+    \
+    *** Failers
+
+/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
+    ab c
+    *** Failers
+    abc
+    ab cde
+
+/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
+    ab c
+    *** Failers
+    abc
+    ab cde
+
+/^   a\ b[c ]d       $/x
+    a bcd
+    a b d
+    *** Failers
+    abcd
+    ab d
+
+/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
+    abcdefhijklm
+
+/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
+    abcdefhijklm
+
+/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
+    a+ Z0+\x08\n\x1d\x12
+
+/^[.^$|()*+?{,}]+/
+    .^\$(*+)|{?,?}
+
+/^a*\w/
+    z
+    az
+    aaaz
+    a
+    aa
+    aaaa
+    a+
+    aa+
+
+/^a*?\w/
+    z
+    az
+    aaaz
+    a
+    aa
+    aaaa
+    a+
+    aa+
+
+/^a+\w/
+    az
+    aaaz
+    aa
+    aaaa
+    aa+
+
+/^a+?\w/
+    az
+    aaaz
+    aa
+    aaaa
+    aa+
+
+/^\d{8}\w{2,}/
+    1234567890
+    12345678ab
+    12345678__
+    *** Failers
+    1234567
+
+/^[aeiou\d]{4,5}$/
+    uoie
+    1234
+    12345
+    aaaaa
+    *** Failers
+    123456
+
+/^[aeiou\d]{4,5}?/
+    uoie
+    1234
+    12345
+    aaaaa
+    123456
+
+/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
+    From abcd  Mon Sep 01 12:33:02 1997
+
+/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
+    From abcd  Mon Sep 01 12:33:02 1997
+    From abcd  Mon Sep  1 12:33:02 1997
+    *** Failers
+    From abcd  Sep 01 12:33:02 1997
+
+/^12.34/s
+    12\n34
+    12\r34
+
+/\w+(?=\t)/
+    the quick brown\t fox
+
+/foo(?!bar)(.*)/
+    foobar is foolish see?
+
+/(?:(?!foo)...|^.{0,2})bar(.*)/
+    foobar crowbar etc
+    barrel
+    2barrel
+    A barrel
+
+/^(\D*)(?=\d)(?!123)/
+    abc456
+    *** Failers
+    abc123
+
+/^1234(?# test newlines
+  inside)/
+    1234
+
+/^1234 #comment in extended re
+  /x
+    1234
+
+/#rhubarb
+  abcd/x
+    abcd
+
+/^abcd#rhubarb/x
+    abcd
+
+/(?!^)abc/
+    the abc
+    *** Failers
+    abc
+
+/(?=^)abc/
+    abc
+    *** Failers
+    the abc
+
+/^[ab]{1,3}(ab*|b)/
+    aabbbbb
+
+/^[ab]{1,3}?(ab*|b)/
+    aabbbbb
+
+/^[ab]{1,3}?(ab*?|b)/
+    aabbbbb
+
+/^[ab]{1,3}(ab*?|b)/
+    aabbbbb
+
+/  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*                          # optional leading comment
+(?:    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)                    # initial word
+(?:  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)  )* # further okay, if led by a period
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+# address
+|                     #  or
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)             # one word, optionally followed by....
+(?:
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
+\(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)       |  # comments, or...
+
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+# quoted strings
+)*
+<  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*                     # leading <
+(?:  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+
+(?:  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  ,  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+)* # further okay, if led by comma
+:                                # closing colon
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  )? #       optional route
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)                    # initial word
+(?:  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)  )* # further okay, if led by a period
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+#       address spec
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  > #                  trailing >
+# name and address
+)  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*                       # optional trailing comment
+/x
+    Alan Other <user\@dom.ain>
+    <user\@dom.ain>
+    user\@dom.ain
+    \"A. Other\" <user.1234\@dom.ain> (a comment)
+    A. Other <user.1234\@dom.ain> (a comment)
+    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
+    A missing angle <user\@some.where
+    *** Failers
+    The quick brown fox
+
+/[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional leading comment
+(?:
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# additional words
+)*
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+# address
+|                             #  or
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+# leading word
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
+(?:
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+|
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+) # "special" comment or quoted string
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
+)*
+<
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# <
+(?:
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+(?: ,
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+)*  # additional domains
+:
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)?     #       optional route
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# additional words
+)*
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+#       address spec
+>                    #                 >
+# name and address
+)
+/x
+    Alan Other <user\@dom.ain>
+    <user\@dom.ain>
+    user\@dom.ain
+    \"A. Other\" <user.1234\@dom.ain> (a comment)
+    A. Other <user.1234\@dom.ain> (a comment)
+    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
+    A missing angle <user\@some.where
+    *** Failers
+    The quick brown fox
+
+/abc\0def\00pqr\000xyz\0000AB/
+    abc\0def\00pqr\000xyz\0000AB
+    abc456 abc\0def\00pqr\000xyz\0000ABCDE
+
+/abc\x0def\x00pqr\x000xyz\x0000AB/
+    abc\x0def\x00pqr\x000xyz\x0000AB
+    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
+
+/^[\000-\037]/
+    \0A
+    \01B
+    \037C
+
+/\0*/
+    \0\0\0\0
+
+/A\x0{2,3}Z/
+    The A\x0\x0Z
+    An A\0\x0\0Z
+    *** Failers
+    A\0Z
+    A\0\x0\0\x0Z
+
+/^\s/
+    \040abc
+    \x0cabc
+    \nabc
+    \rabc
+    \tabc
+    *** Failers
+    abc
+
+/^a	b
+      c/x
+    abc
+
+/ab{1,3}bc/
+    abbbbc
+    abbbc
+    abbc
+    *** Failers
+    abc
+    abbbbbc
+
+/([^.]*)\.([^:]*):[T ]+(.*)/
+    track1.title:TBlah blah blah
+
+/([^.]*)\.([^:]*):[T ]+(.*)/i
+    track1.title:TBlah blah blah
+
+/([^.]*)\.([^:]*):[t ]+(.*)/i
+    track1.title:TBlah blah blah
+
+/^[W-c]+$/
+    WXY_^abc
+    *** Failers
+    wxy
+
+/^[W-c]+$/i
+    WXY_^abc
+    wxy_^ABC
+
+/^[\x3f-\x5F]+$/i
+    WXY_^abc
+    wxy_^ABC
+
+/^abc$/m
+    abc
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+
+/^abc$/
+    abc
+    *** Failers
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+
+/\Aabc\Z/m
+    abc
+    abc\n 
+    *** Failers
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+    
+/\A(.)*\Z/s
+    abc\ndef
+
+/\A(.)*\Z/m
+    *** Failers
+    abc\ndef
+
+/(?:b)|(?::+)/
+    b::c
+    c::b
+
+/[-az]+/
+    az-
+    *** Failers
+    b
+
+/[az-]+/
+    za-
+    *** Failers
+    b
+
+/[a\-z]+/
+    a-z
+    *** Failers
+    b
+
+/[a-z]+/
+    abcdxyz
+
+/[\d-]+/
+    12-34
+    *** Failers
+    aaa
+
+/[\d-z]+/
+    12-34z
+    *** Failers
+    aaa
+
+/\x5c/
+    \\
+
+/\x20Z/
+    the Zoo
+    *** Failers
+    Zulu
+
+/ab{3cd/
+    ab{3cd
+
+/ab{3,cd/
+    ab{3,cd
+
+/ab{3,4a}cd/
+    ab{3,4a}cd
+
+/{4,5a}bc/
+    {4,5a}bc
+
+/^a.b/
+    a\rb
+    *** Failers
+    a\nb
+
+/abc$/
+    abc
+    abc\n
+    *** Failers
+    abc\ndef
+
+/(abc)\123/
+    abc\x53
+
+/(abc)\223/
+    abc\x93
+
+/(abc)\323/
+    abc\xd3
+
+/(abc)\500/
+    abc\x40
+    abc\100
+
+/(abc)\5000/
+    abc\x400
+    abc\x40\x30
+    abc\1000
+    abc\100\x30
+    abc\100\060
+    abc\100\60
+
+/abc\81/
+    abc\081
+    abc\0\x38\x31
+
+/abc\91/
+    abc\091
+    abc\0\x39\x31
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
+    abcdefghijk\12S
+
+/ab\gdef/
+    abgdef
+
+/a{0}bc/
+    bc
+
+/(a|(bc)){0,0}?xyz/
+    xyz
+
+/abc[\10]de/
+    abc\010de
+
+/abc[\1]de/
+    abc\1de
+
+/(abc)[\1]de/
+    abc\1de
+
+/(?s)a.b/
+    a\nb
+
+/^([^a])([^\b])([^c]*)([^d]{3,4})/
+    baNOTccccd
+    baNOTcccd
+    baNOTccd
+    bacccd
+    *** Failers
+    anything
+    b\bc   
+    baccd
+
+/[^a]/
+    Abc
+  
+/[^a]/i
+    Abc 
+
+/[^a]+/
+    AAAaAbc
+  
+/[^a]+/i
+    AAAaAbc 
+
+/[^a]+/
+    bbb\nccc
+   
+/[^k]$/
+    abc
+    *** Failers
+    abk   
+   
+/[^k]{2,3}$/
+    abc
+    kbc
+    kabc 
+    *** Failers
+    abk
+    akb
+    akk 
+
+/^\d{8,}\@.+[^k]$/
+    12345678\@a.b.c.d
+    123456789\@x.y.z
+    *** Failers
+    12345678\@x.y.uk
+    1234567\@a.b.c.d       
+
+/[^a]/
+    aaaabcd
+    aaAabcd 
+
+/[^a]/i
+    aaaabcd
+    aaAabcd 
+
+/[^az]/
+    aaaabcd
+    aaAabcd 
+
+/[^az]/i
+    aaaabcd
+    aaAabcd 
+
+/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
+ \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
+
+/P[^*]TAIRE[^*]{1,6}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+
+/P[^*]TAIRE[^*]{1,}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+
+/(\.\d\d[1-9]?)\d+/
+    1.230003938
+    1.875000282   
+    1.235  
+                  
+/(\.\d\d((?=0)|\d(?=\d)))/
+    1.230003938      
+    1.875000282
+    *** Failers 
+    1.235 
+    
+/a(?)b/
+    ab 
+ 
+/\b(foo)\s+(\w+)/i
+    Food is on the foo table
+    
+/foo(.*)bar/
+    The food is under the bar in the barn.
+    
+/foo(.*?)bar/  
+    The food is under the bar in the barn.
+
+/(.*)(\d*)/
+    I have 2 numbers: 53147
+    
+/(.*)(\d+)/
+    I have 2 numbers: 53147
+ 
+/(.*?)(\d*)/
+    I have 2 numbers: 53147
+
+/(.*?)(\d+)/
+    I have 2 numbers: 53147
+
+/(.*)(\d+)$/
+    I have 2 numbers: 53147
+
+/(.*?)(\d+)$/
+    I have 2 numbers: 53147
+
+/(.*)\b(\d+)$/
+    I have 2 numbers: 53147
+
+/(.*\D)(\d+)$/
+    I have 2 numbers: 53147
+
+/^\D*(?!123)/
+    ABC123
+     
+/^(\D*)(?=\d)(?!123)/
+    ABC445
+    *** Failers
+    ABC123
+    
+/^[W-]46]/
+    W46]789 
+    -46]789
+    *** Failers
+    Wall
+    Zebra
+    42
+    [abcd] 
+    ]abcd[
+       
+/^[W-\]46]/
+    W46]789 
+    Wall
+    Zebra
+    Xylophone  
+    42
+    [abcd] 
+    ]abcd[
+    \\backslash 
+    *** Failers
+    -46]789
+    well
+    
+/\d\d\/\d\d\/\d\d\d\d/
+    01/01/2000
+
+/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark otherword
+  word cat dog elephant mussel cow horse canary baboon snake shark
+
+/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+
+/^(a){0,0}/
+    bcd
+    abc
+    aab     
+
+/^(a){0,1}/
+    bcd
+    abc
+    aab  
+
+/^(a){0,2}/
+    bcd
+    abc
+    aab  
+
+/^(a){0,3}/
+    bcd
+    abc
+    aab
+    aaa   
+
+/^(a){0,}/
+    bcd
+    abc
+    aab
+    aaa
+    aaaaaaaa    
+
+/^(a){1,1}/
+    bcd
+    abc
+    aab  
+
+/^(a){1,2}/
+    bcd
+    abc
+    aab  
+
+/^(a){1,3}/
+    bcd
+    abc
+    aab
+    aaa   
+
+/^(a){1,}/
+    bcd
+    abc
+    aab
+    aaa
+    aaaaaaaa    
+
+/.*\.gif/
+    borfle\nbib.gif\nno
+
+/.{0,}\.gif/
+    borfle\nbib.gif\nno
+
+/.*\.gif/m
+    borfle\nbib.gif\nno
+
+/.*\.gif/s
+    borfle\nbib.gif\nno
+
+/.*\.gif/ms
+    borfle\nbib.gif\nno
+    
+/.*$/
+    borfle\nbib.gif\nno
+
+/.*$/m
+    borfle\nbib.gif\nno
+
+/.*$/s
+    borfle\nbib.gif\nno
+
+/.*$/ms
+    borfle\nbib.gif\nno
+    
+/.*$/
+    borfle\nbib.gif\nno\n
+
+/.*$/m
+    borfle\nbib.gif\nno\n
+
+/.*$/s
+    borfle\nbib.gif\nno\n
+
+/.*$/ms
+    borfle\nbib.gif\nno\n
+    
+/(.*X|^B)/
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers
+    abcde\nBar  
+
+/(.*X|^B)/m
+    abcde\n1234Xyz
+    BarFoo 
+    abcde\nBar  
+
+/(.*X|^B)/s
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers
+    abcde\nBar  
+
+/(.*X|^B)/ms
+    abcde\n1234Xyz
+    BarFoo 
+    abcde\nBar  
+
+/(?s)(.*X|^B)/
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers 
+    abcde\nBar  
+
+/(?s:.*X|^B)/
+    abcde\n1234Xyz
+    BarFoo 
+    *** Failers 
+    abcde\nBar  
+
+/^.*B/
+    **** Failers
+    abc\nB
+     
+/(?s)^.*B/
+    abc\nB
+
+/(?m)^.*B/
+    abc\nB
+     
+/(?ms)^.*B/
+    abc\nB
+
+/(?ms)^B/
+    abc\nB
+
+/(?s)B$/
+    B\n
+
+/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
+    123456654321
+  
+/^\d\d\d\d\d\d\d\d\d\d\d\d/
+    123456654321 
+
+/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
+    123456654321
+  
+/^[abc]{12}/
+    abcabcabcabc
+    
+/^[a-c]{12}/
+    abcabcabcabc
+    
+/^(a|b|c){12}/
+    abcabcabcabc 
+
+/^[abcdefghijklmnopqrstuvwxy0123456789]/
+    n
+    *** Failers 
+    z 
+
+/abcde{0,0}/
+    abcd
+    *** Failers
+    abce  
+
+/ab[cd]{0,0}e/
+    abe
+    *** Failers
+    abcde 
+    
+/ab(c){0,0}d/
+    abd
+    *** Failers
+    abcd   
+
+/a(b*)/
+    a
+    ab
+    abbbb
+    *** Failers
+    bbbbb    
+    
+/ab\d{0}e/
+    abe
+    *** Failers
+    ab1e   
+    
+/"([^\\"]+|\\.)*"/
+    the \"quick\" brown fox
+    \"the \\\"quick\\\" brown fox\" 
+
+/.*?/g+
+    abc
+  
+/\b/g+
+    abc 
+
+/\b/+g
+    abc 
+
+//g
+    abc
+
+/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
+  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
+
+/a[^a]b/
+    acb
+    a\nb
+    
+/a.b/
+    acb
+    *** Failers 
+    a\nb   
+    
+/a[^a]b/s
+    acb
+    a\nb  
+    
+/a.b/s
+    acb
+    a\nb  
+
+/^(b+?|a){1,2}?c/
+    bac
+    bbac
+    bbbac
+    bbbbac
+    bbbbbac 
+
+/^(b+|a){1,2}?c/
+    bac
+    bbac
+    bbbac
+    bbbbac
+    bbbbbac 
+    
+/(?!\A)x/m
+    x\nb\n
+    a\bx\n  
+    
+/\x0{ab}/
+    \0{ab} 
+
+/(A|B)*?CD/
+    CD 
+    
+/(A|B)*CD/
+    CD 
+
+/(?<!bar)foo/
+    foo
+    catfood
+    arfootle
+    rfoosh
+    *** Failers
+    barfoo
+    towbarfoo
+
+/\w{3}(?<!bar)foo/
+    catfood
+    *** Failers
+    foo
+    barfoo
+    towbarfoo
+
+/(?<=(foo)a)bar/
+    fooabar
+    *** Failers
+    bar
+    foobbar
+      
+/\Aabc\z/m
+    abc
+    *** Failers
+    abc\n   
+    qqq\nabc
+    abc\nzzz
+    qqq\nabc\nzzz
+
+"(?>.*/)foo"
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
+
+"(?>.*/)foo"
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+
+/(?>(\.\d\d[1-9]?))\d+/
+    1.230003938
+    1.875000282
+    *** Failers 
+    1.235 
+
+/^((?>\w+)|(?>\s+))*$/
+    now is the time for all good men to come to the aid of the party
+    *** Failers
+    this is not a line with only words and spaces!
+    
+/(\d+)(\w)/
+    12345a
+    12345+ 
+
+/((?>\d+))(\w)/
+    12345a
+    *** Failers
+    12345+ 
+
+/(?>a+)b/
+    aaab
+
+/((?>a+)b)/
+    aaab
+
+/(?>(a+))b/
+    aaab
+
+/(?>b)+/
+    aaabbbccc
+
+/(?>a+|b+|c+)*c/
+    aaabbbbccccd
+    
+/(a+|b+|c+)*c/
+    aaabbbbccccd
+
+/((?>[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+    
+/\(((?>[^()]+)|\([^()]+\))+\)/ 
+    (abc)
+    (abc(def)xyz)
+    *** Failers
+    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
+
+/a(?-i)b/i
+    ab
+    Ab
+    *** Failers 
+    aB
+    AB
+        
+/(a (?x)b c)d e/
+    a bcd e
+    *** Failers
+    a b cd e
+    abcd e   
+    a bcde 
+ 
+/(a b(?x)c d (?-x)e f)/
+    a bcde f
+    *** Failers
+    abcdef  
+
+/(a(?i)b)c/
+    abc
+    aBc
+    *** Failers
+    abC
+    aBC  
+    Abc
+    ABc
+    ABC
+    AbC
+    
+/a(?i:b)c/
+    abc
+    aBc
+    *** Failers 
+    ABC
+    abC
+    aBC
+    
+/a(?i:b)*c/
+    aBc
+    aBBc
+    *** Failers 
+    aBC
+    aBBC
+    
+/a(?=b(?i)c)\w\wd/
+    abcd
+    abCd
+    *** Failers
+    aBCd
+    abcD     
+    
+/(?s-i:more.*than).*million/i
+    more than million
+    more than MILLION
+    more \n than Million 
+    *** Failers
+    MORE THAN MILLION    
+    more \n than \n million 
+
+/(?:(?s-i)more.*than).*million/i
+    more than million
+    more than MILLION
+    more \n than Million 
+    *** Failers
+    MORE THAN MILLION    
+    more \n than \n million 
+    
+/(?>a(?i)b+)+c/ 
+    abc
+    aBbc
+    aBBc 
+    *** Failers
+    Abc
+    abAb    
+    abbC 
+    
+/(?=a(?i)b)\w\wc/
+    abc
+    aBc
+    *** Failers
+    Ab 
+    abC
+    aBC     
+    
+/(?<=a(?i)b)(\w\w)c/
+    abxxc
+    aBxxc
+    *** Failers
+    Abxxc
+    ABxxc
+    abxxC      
+
+/^(?(?=abc)\w{3}:|\d\d)$/
+    abc:
+    12
+    *** Failers
+    123
+    xyz    
+
+/^(?(?!abc)\d\d|\w{3}:)$/
+    abc:
+    12
+    *** Failers
+    123
+    xyz    
+    
+/(?(?<=foo)bar|cat)/
+    foobar
+    cat
+    fcat
+    focat   
+    *** Failers
+    foocat  
+
+/(?(?<!foo)cat|bar)/
+    foobar
+    cat
+    fcat
+    focat   
+    *** Failers
+    foocat  
+
+/(?>a*)*/
+    a
+    aa
+    aaaa
+    
+/(abc|)+/
+    abc
+    abcabc
+    abcabcabc
+    xyz      
+
+/([a]*)*/
+    a
+    aaaaa 
+ 
+/([ab]*)*/
+    a
+    b
+    ababab
+    aaaabcde
+    bbbb    
+ 
+/([^a]*)*/
+    b
+    bbbb
+    aaa   
+ 
+/([^ab]*)*/
+    cccc
+    abab  
+ 
+/([a]*?)*/
+    a
+    aaaa 
+ 
+/([ab]*?)*/
+    a
+    b
+    abab
+    baba   
+ 
+/([^a]*?)*/
+    b
+    bbbb
+    aaa   
+ 
+/([^ab]*?)*/
+    c
+    cccc
+    baba   
+ 
+/(?>a*)*/
+    a
+    aaabcde 
+ 
+/((?>a*))*/
+    aaaaa
+    aabbaa 
+ 
+/((?>a*?))*/
+    aaaaa
+    aabbaa 
+
+/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
+    12-sep-98
+    12-09-98
+    *** Failers
+    sep-12-98
+        
+/(?i:saturday|sunday)/
+    saturday
+    sunday
+    Saturday
+    Sunday
+    SATURDAY
+    SUNDAY
+    SunDay
+    
+/(a(?i)bc|BB)x/
+    abcx
+    aBCx
+    bbx
+    BBx
+    *** Failers
+    abcX
+    aBCX
+    bbX
+    BBX               
+
+/^([ab](?i)[cd]|[ef])/
+    ac
+    aC
+    bD
+    elephant
+    Europe 
+    frog
+    France
+    *** Failers
+    Africa     
+
+/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
+    ab
+    aBd
+    xy
+    xY
+    zebra
+    Zambesi
+    *** Failers
+    aCD  
+    XY  
+
+/(?<=foo\n)^bar/m
+    foo\nbar
+    *** Failers
+    bar
+    baz\nbar   
+
+/(?<=(?<!foo)bar)baz/
+    barbaz
+    barbarbaz 
+    koobarbaz 
+    *** Failers
+    baz
+    foobarbaz 
+
+/The following tests are taken from the Perl 5.005 test suite; some of them/
+/are compatible with 5.004, but I'd rather not have to sort them out./
+
+/abc/
+    abc
+    xabcy
+    ababc
+    *** Failers
+    xbc
+    axc
+    abx
+
+/ab*c/
+    abc
+
+/ab*bc/
+    abc
+    abbc
+    abbbbc
+
+/.{1}/
+    abbbbc
+
+/.{3,4}/
+    abbbbc
+
+/ab{0,}bc/
+    abbbbc
+
+/ab+bc/
+    abbc
+    *** Failers
+    abc
+    abq
+
+/ab{1,}bc/
+
+/ab+bc/
+    abbbbc
+
+/ab{1,}bc/
+    abbbbc
+
+/ab{1,3}bc/
+    abbbbc
+
+/ab{3,4}bc/
+    abbbbc
+
+/ab{4,5}bc/
+    *** Failers
+    abq
+    abbbbc
+
+/ab?bc/
+    abbc
+    abc
+
+/ab{0,1}bc/
+    abc
+
+/ab?bc/
+
+/ab?c/
+    abc
+
+/ab{0,1}c/
+    abc
+
+/^abc$/
+    abc
+    *** Failers
+    abbbbc
+    abcc
+
+/^abc/
+    abcc
+
+/^abc$/
+
+/abc$/
+    aabc
+    *** Failers
+    aabc
+    aabcd
+
+/^/
+    abc
+
+/$/
+    abc
+
+/a.c/
+    abc
+    axc
+
+/a.*c/
+    axyzc
+
+/a[bc]d/
+    abd
+    *** Failers
+    axyzd
+    abc
+
+/a[b-d]e/
+    ace
+
+/a[b-d]/
+    aac
+
+/a[-b]/
+    a-
+
+/a[b-]/
+    a-
+
+/a]/
+    a]
+
+/a[]]b/
+    a]b
+
+/a[^bc]d/
+    aed
+    *** Failers
+    abd
+    abd
+
+/a[^-b]c/
+    adc
+
+/a[^]b]c/
+    adc
+    *** Failers
+    a-c
+    a]c
+
+/\ba\b/
+    a-
+    -a
+    -a-
+
+/\by\b/
+    *** Failers
+    xy
+    yz
+    xyz
+
+/\Ba\B/
+    *** Failers
+    a-
+    -a
+    -a-
+
+/\By\b/
+    xy
+
+/\by\B/
+    yz
+
+/\By\B/
+    xyz
+
+/\w/
+    a
+
+/\W/
+    -
+    *** Failers
+    -
+    a
+
+/a\sb/
+    a b
+
+/a\Sb/
+    a-b
+    *** Failers
+    a-b
+    a b
+
+/\d/
+    1
+
+/\D/
+    -
+    *** Failers
+    -
+    1
+
+/[\w]/
+    a
+
+/[\W]/
+    -
+    *** Failers
+    -
+    a
+
+/a[\s]b/
+    a b
+
+/a[\S]b/
+    a-b
+    *** Failers
+    a-b
+    a b
+
+/[\d]/
+    1
+
+/[\D]/
+    -
+    *** Failers
+    -
+    1
+
+/ab|cd/
+    abc
+    abcd
+
+/()ef/
+    def
+
+/$b/
+
+/a\(b/
+    a(b
+
+/a\(*b/
+    ab
+    a((b
+
+/a\\b/
+    a\b
+
+/((a))/
+    abc
+
+/(a)b(c)/
+    abc
+
+/a+b+c/
+    aabbabc
+
+/a{1,}b{1,}c/
+    aabbabc
+
+/a.+?c/
+    abcabc
+
+/(a+|b)*/
+    ab
+
+/(a+|b){0,}/
+    ab
+
+/(a+|b)+/
+    ab
+
+/(a+|b){1,}/
+    ab
+
+/(a+|b)?/
+    ab
+
+/(a+|b){0,1}/
+    ab
+
+/[^ab]*/
+    cde
+
+/abc/
+    *** Failers
+    b
+    
+
+/a*/
+    
+
+/([abc])*d/
+    abbbcd
+
+/([abc])*bcd/
+    abcd
+
+/a|b|c|d|e/
+    e
+
+/(a|b|c|d|e)f/
+    ef
+
+/abcd*efg/
+    abcdefg
+
+/ab*/
+    xabyabbbz
+    xayabbbz
+
+/(ab|cd)e/
+    abcde
+
+/[abhgefdc]ij/
+    hij
+
+/^(ab|cd)e/
+
+/(abc|)ef/
+    abcdef
+
+/(a|b)c*d/
+    abcd
+
+/(ab|ab*)bc/
+    abc
+
+/a([bc]*)c*/
+    abc
+
+/a([bc]*)(c*d)/
+    abcd
+
+/a([bc]+)(c*d)/
+    abcd
+
+/a([bc]*)(c+d)/
+    abcd
+
+/a[bcd]*dcdcde/
+    adcdcde
+
+/a[bcd]+dcdcde/
+    *** Failers
+    abcde
+    adcdcde
+
+/(ab|a)b*c/
+    abc
+
+/((a)(b)c)(d)/
+    abcd
+
+/[a-zA-Z_][a-zA-Z0-9_]*/
+    alpha
+
+/^a(bc+|b[eh])g|.h$/
+    abh
+
+/(bc+d$|ef*g.|h?i(j|k))/
+    effgz
+    ij
+    reffgz
+    *** Failers
+    effg
+    bcdd
+
+/((((((((((a))))))))))/
+    a
+
+/(((((((((a)))))))))/
+    a
+
+/multiple words of text/
+    *** Failers
+    aa
+    uh-uh
+
+/multiple words/
+    multiple words, yeah
+
+/(.*)c(.*)/
+    abcde
+
+/\((.*), (.*)\)/
+    (a, b)
+
+/[k]/
+
+/abcd/
+    abcd
+
+/a(bc)d/
+    abcd
+
+/a[-]?c/
+    ac
+
+/abc/i
+    ABC
+    XABCY
+    ABABC
+    *** Failers
+    aaxabxbaxbbx
+    XBC
+    AXC
+    ABX
+
+/ab*c/i
+    ABC
+
+/ab*bc/i
+    ABC
+    ABBC
+
+/ab*?bc/i
+    ABBBBC
+
+/ab{0,}?bc/i
+    ABBBBC
+
+/ab+?bc/i
+    ABBC
+
+/ab+bc/i
+    *** Failers
+    ABC
+    ABQ
+
+/ab{1,}bc/i
+
+/ab+bc/i
+    ABBBBC
+
+/ab{1,}?bc/i
+    ABBBBC
+
+/ab{1,3}?bc/i
+    ABBBBC
+
+/ab{3,4}?bc/i
+    ABBBBC
+
+/ab{4,5}?bc/i
+    *** Failers
+    ABQ
+    ABBBBC
+
+/ab??bc/i
+    ABBC
+    ABC
+
+/ab{0,1}?bc/i
+    ABC
+
+/ab??bc/i
+
+/ab??c/i
+    ABC
+
+/ab{0,1}?c/i
+    ABC
+
+/^abc$/i
+    ABC
+    *** Failers
+    ABBBBC
+    ABCC
+
+/^abc/i
+    ABCC
+
+/^abc$/i
+
+/abc$/i
+    AABC
+
+/^/i
+    ABC
+
+/$/i
+    ABC
+
+/a.c/i
+    ABC
+    AXC
+
+/a.*?c/i
+    AXYZC
+
+/a.*c/i
+    *** Failers
+    AABC
+    AXYZD
+
+/a[bc]d/i
+    ABD
+
+/a[b-d]e/i
+    ACE
+    *** Failers
+    ABC
+    ABD
+
+/a[b-d]/i
+    AAC
+
+/a[-b]/i
+    A-
+
+/a[b-]/i
+    A-
+
+/a]/i
+    A]
+
+/a[]]b/i
+    A]B
+
+/a[^bc]d/i
+    AED
+
+/a[^-b]c/i
+    ADC
+    *** Failers
+    ABD
+    A-C
+
+/a[^]b]c/i
+    ADC
+
+/ab|cd/i
+    ABC
+    ABCD
+
+/()ef/i
+    DEF
+
+/$b/i
+    *** Failers
+    A]C
+    B
+
+/a\(b/i
+    A(B
+
+/a\(*b/i
+    AB
+    A((B
+
+/a\\b/i
+    A\B
+
+/((a))/i
+    ABC
+
+/(a)b(c)/i
+    ABC
+
+/a+b+c/i
+    AABBABC
+
+/a{1,}b{1,}c/i
+    AABBABC
+
+/a.+?c/i
+    ABCABC
+
+/a.*?c/i
+    ABCABC
+
+/a.{0,5}?c/i
+    ABCABC
+
+/(a+|b)*/i
+    AB
+
+/(a+|b){0,}/i
+    AB
+
+/(a+|b)+/i
+    AB
+
+/(a+|b){1,}/i
+    AB
+
+/(a+|b)?/i
+    AB
+
+/(a+|b){0,1}/i
+    AB
+
+/(a+|b){0,1}?/i
+    AB
+
+/[^ab]*/i
+    CDE
+
+/abc/i
+
+/a*/i
+    
+
+/([abc])*d/i
+    ABBBCD
+
+/([abc])*bcd/i
+    ABCD
+
+/a|b|c|d|e/i
+    E
+
+/(a|b|c|d|e)f/i
+    EF
+
+/abcd*efg/i
+    ABCDEFG
+
+/ab*/i
+    XABYABBBZ
+    XAYABBBZ
+
+/(ab|cd)e/i
+    ABCDE
+
+/[abhgefdc]ij/i
+    HIJ
+
+/^(ab|cd)e/i
+    ABCDE
+
+/(abc|)ef/i
+    ABCDEF
+
+/(a|b)c*d/i
+    ABCD
+
+/(ab|ab*)bc/i
+    ABC
+
+/a([bc]*)c*/i
+    ABC
+
+/a([bc]*)(c*d)/i
+    ABCD
+
+/a([bc]+)(c*d)/i
+    ABCD
+
+/a([bc]*)(c+d)/i
+    ABCD
+
+/a[bcd]*dcdcde/i
+    ADCDCDE
+
+/a[bcd]+dcdcde/i
+
+/(ab|a)b*c/i
+    ABC
+
+/((a)(b)c)(d)/i
+    ABCD
+
+/[a-zA-Z_][a-zA-Z0-9_]*/i
+    ALPHA
+
+/^a(bc+|b[eh])g|.h$/i
+    ABH
+
+/(bc+d$|ef*g.|h?i(j|k))/i
+    EFFGZ
+    IJ
+    REFFGZ
+    *** Failers
+    ADCDCDE
+    EFFG
+    BCDD
+
+/((((((((((a))))))))))/i
+    A
+
+/(((((((((a)))))))))/i
+    A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
+    A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
+    C
+
+/multiple words of text/i
+    *** Failers
+    AA
+    UH-UH
+
+/multiple words/i
+    MULTIPLE WORDS, YEAH
+
+/(.*)c(.*)/i
+    ABCDE
+
+/\((.*), (.*)\)/i
+    (A, B)
+
+/[k]/i
+
+/abcd/i
+    ABCD
+
+/a(bc)d/i
+    ABCD
+
+/a[-]?c/i
+    AC
+
+/a(?!b)./
+    abad
+
+/a(?=d)./
+    abad
+
+/a(?=c|d)./
+    abad
+
+/a(?:b|c|d)(.)/
+    ace
+
+/a(?:b|c|d)*(.)/
+    ace
+
+/a(?:b|c|d)+?(.)/
+    ace
+    acdbcdbe
+
+/a(?:b|c|d)+(.)/
+    acdbcdbe
+
+/a(?:b|c|d){2}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){4,5}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){4,5}?(.)/
+    acdbcdbe
+
+/((foo)|(bar))*/
+    foobar
+
+/a(?:b|c|d){6,7}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){6,7}?(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,6}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,6}?(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,7}(.)/
+    acdbcdbe
+
+/a(?:b|c|d){5,7}?(.)/
+    acdbcdbe
+
+/a(?:b|(c|e){1,2}?|d)+?(.)/
+    ace
+
+/^(.+)?B/
+    AB
+
+/^([^a-z])|(\^)$/
+    .
+
+/^[<>]&/
+    <&OUT
+
+/(?:(f)(o)(o)|(b)(a)(r))*/
+    foobar
+
+/(?<=a)b/
+    ab
+    *** Failers
+    cb
+    b
+
+/(?<!c)b/
+    ab
+    b
+    b
+
+/(?:..)*a/
+    aba
+
+/(?:..)*?a/
+    aba
+
+/^(){3,5}/
+    abc
+
+/^(a+)*ax/
+    aax
+
+/^((a|b)+)*ax/
+    aax
+
+/^((a|bc)+)*ax/
+    aax
+
+/(a|x)*ab/
+    cab
+
+/(a)*ab/
+    cab
+
+/(?:(?i)a)b/
+    ab
+
+/((?i)a)b/
+    ab
+
+/(?:(?i)a)b/
+    Ab
+
+/((?i)a)b/
+    Ab
+
+/(?:(?i)a)b/
+    *** Failers
+    cb
+    aB
+
+/((?i)a)b/
+
+/(?i:a)b/
+    ab
+
+/((?i:a))b/
+    ab
+
+/(?i:a)b/
+    Ab
+
+/((?i:a))b/
+    Ab
+
+/(?i:a)b/
+    *** Failers
+    aB
+    aB
+
+/((?i:a))b/
+
+/(?:(?-i)a)b/i
+    ab
+
+/((?-i)a)b/i
+    ab
+
+/(?:(?-i)a)b/i
+    aB
+
+/((?-i)a)b/i
+    aB
+
+/(?:(?-i)a)b/i
+    *** Failers
+    aB
+    Ab
+
+/((?-i)a)b/i
+
+/(?:(?-i)a)b/i
+    aB
+
+/((?-i)a)b/i
+    aB
+
+/(?:(?-i)a)b/i
+    *** Failers
+    Ab
+    AB
+
+/((?-i)a)b/i
+
+/(?-i:a)b/i
+    ab
+
+/((?-i:a))b/i
+    ab
+
+/(?-i:a)b/i
+    aB
+
+/((?-i:a))b/i
+    aB
+
+/(?-i:a)b/i
+    *** Failers
+    AB
+    Ab
+
+/((?-i:a))b/i
+
+/(?-i:a)b/i
+    aB
+
+/((?-i:a))b/i
+    aB
+
+/(?-i:a)b/i
+    *** Failers
+    Ab
+    AB
+
+/((?-i:a))b/i
+
+/((?-i:a.))b/i
+    *** Failers
+    AB
+    a\nB
+
+/((?s-i:a.))b/i
+    a\nB
+
+/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
+    cabbbb
+
+/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
+    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+
+/foo\w*\d{4}baz/
+    foobar1234baz
+
+/x(~~)*(?:(?:F)?)?/
+    x~~
+
+/^a(?#xxx){3}c/
+    aaac
+
+/^a (?#xxx) (?#yyy) {3}c/x
+    aaac
+
+/(?<![cd])b/
+    *** Failers
+    B\nB
+    dbcb
+
+/(?<![cd])[ab]/
+    dbaacb
+
+/(?<!(c|d))b/
+
+/(?<!(c|d))[ab]/
+    dbaacb
+
+/(?<!cd)[ab]/
+    cdaccb
+
+/^(?:a?b?)*$/
+    *** Failers
+    dbcb
+    a--
+
+/((?s)^a(.))((?m)^b$)/
+    a\nb\nc\n
+
+/((?m)^b$)/
+    a\nb\nc\n
+
+/(?m)^b/
+    a\nb\n
+
+/(?m)^(b)/
+    a\nb\n
+
+/((?m)^b)/
+    a\nb\n
+
+/\n((?m)^b)/
+    a\nb\n
+
+/((?s).)c(?!.)/
+    a\nb\nc\n
+    a\nb\nc\n
+
+/((?s)b.)c(?!.)/
+    a\nb\nc\n
+    a\nb\nc\n
+
+/^b/
+
+/()^b/
+    *** Failers
+    a\nb\nc\n
+    a\nb\nc\n
+
+/((?m)^b)/
+    a\nb\nc\n
+
+/(?(?!a)a|b)/
+
+/(?(?!a)b|a)/
+    a
+
+/(?(?=a)b|a)/
+    *** Failers
+    a
+    a
+
+/(?(?=a)a|b)/
+    a
+
+/(\w+:)+/
+    one:
+
+/$(?<=^(a))/
+    a
+
+/([\w:]+::)?(\w+)$/
+    abcd
+    xy:z:::abcd
+
+/^[^bcd]*(c+)/
+    aexycd
+
+/(a*)b+/
+    caab
+
+/([\w:]+::)?(\w+)$/
+    abcd
+    xy:z:::abcd
+    *** Failers
+    abcd:
+    abcd:
+
+/^[^bcd]*(c+)/
+    aexycd
+
+/(>a+)ab/
+
+/(?>a+)b/
+    aaab
+
+/([[:]+)/
+    a:[b]:
+
+/([[=]+)/
+    a=[b]=
+
+/([[.]+)/
+    a.[b].
+
+/((?>a+)b)/
+    aaab
+
+/(?>(a+))b/
+    aaab
+
+/((?>[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+
+/a\Z/
+    *** Failers
+    aaab
+    a\nb\n
+
+/b\Z/
+    a\nb\n
+
+/b\z/
+
+/b\Z/
+    a\nb
+
+/b\z/
+    a\nb
+    *** Failers
+    
+/(?>.*)(?<=(abcd|wxyz))/
+    alphabetabcd
+    endingwxyz
+    *** Failers
+    a rather long string that doesn't end with one of them
+
+/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark otherword
+    word cat dog elephant mussel cow horse canary baboon snake shark
+  
+/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+
+/(?<=\d{3}(?!999))foo/
+    999foo
+    123999foo 
+    *** Failers
+    123abcfoo
+    
+/(?<=(?!...999)\d{3})foo/
+    999foo
+    123999foo 
+    *** Failers
+    123abcfoo
+
+/(?<=\d{3}(?!999)...)foo/
+    123abcfoo
+    123456foo 
+    *** Failers
+    123999foo  
+    
+/(?<=\d{3}...)(?<!999)foo/
+    123abcfoo   
+    123456foo 
+    *** Failers
+    123999foo  
+
+/((Z)+|A)*/
+    ZABCDEFG
+
+/(Z()|A)*/
+    ZABCDEFG
+
+/(Z(())|A)*/
+    ZABCDEFG
+
+/((?>Z)+|A)*/
+    ZABCDEFG
+
+/((?>)+|A)*/
+    ZABCDEFG
+
+/a*/g
+    abbab
+
+/^[a-\d]/
+    abcde
+    -things
+    0digit
+    *** Failers
+    bcdef    
+
+/^[\d-a]/
+    abcde
+    -things
+    0digit
+    *** Failers
+    bcdef    
+    
+/[[:space:]]+/
+    > \x09\x0a\x0c\x0d\x0b<
+     
+/[[:blank:]]+/
+    > \x09\x0a\x0c\x0d\x0b<
+     
+/[\s]+/
+    > \x09\x0a\x0c\x0d\x0b<
+     
+/\s+/
+    > \x09\x0a\x0c\x0d\x0b<
+     
+/ab/x
+    ab
+
+/(?!\A)x/m
+  a\nxb\n
+
+/(?!^)x/m
+  a\nxb\n
+
+/abc\Qabc\Eabc/
+    abcabcabc
+    
+/abc\Q(*+|\Eabc/
+    abc(*+|abc 
+
+/   abc\Q abc\Eabc/x
+    abc abcabc
+    *** Failers
+    abcabcabc  
+    
+/abc#comment
+    \Q#not comment
+    literal\E/x
+    abc#not comment\n    literal     
+
+/abc#comment
+    \Q#not comment
+    literal/x
+    abc#not comment\n    literal     
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment
+    /x
+    abc#not comment\n    literal     
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment/x
+    abc#not comment\n    literal     
+
+/\Qabc\$xyz\E/
+    abc\\\$xyz
+
+/\Qabc\E\$\Qxyz\E/
+    abc\$xyz
+
+/\Gabc/
+    abc
+    *** Failers
+    xyzabc  
+
+/\Gabc./g
+    abc1abc2xyzabc3
+
+/abc./g
+    abc1abc2xyzabc3 
+
+/a(?x: b c )d/
+    XabcdY
+    *** Failers 
+    Xa b c d Y 
+
+/((?x)x y z | a b c)/
+    XabcY
+    AxyzB 
+
+/(?i)AB(?-i)C/
+    XabCY
+    *** Failers
+    XabcY  
+
+/((?i)AB(?-i)C|D)E/
+    abCE
+    DE
+    *** Failers
+    abcE
+    abCe  
+    dE
+    De    
+
+/[z\Qa-d]\E]/
+    z
+    a
+    -
+    d
+    ] 
+    *** Failers
+    b     
+
+/[\z\C]/
+    z
+    C 
+    
+/\M/
+    M 
+    
+/(a+)*b/
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
+    
+/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
+    REGular
+    regulaer
+    Regex  
+    regulär 
+
+/Åæåä[à-ÿÀ-ß]+/
+    Åæåäà
+    Åæåäÿ
+    ÅæåäÀ
+    Åæåäß
+
+/(?<=Z)X./
+    \x84XAZXB
+
+/^(?(2)a|(1)(2))+$/
+    123a
+
+/(?<=a|bbbb)c/
+    ac
+    bbbbc
+
+/abc/>testsavedregex
+<testsavedregex
+    abc
+    *** Failers
+    bca
+    
+/abc/F>testsavedregex
+<testsavedregex
+    abc
+    *** Failers
+    bca
+
+/(a|b)/S>testsavedregex
+<testsavedregex
+    abc
+    *** Failers
+    def  
+    
+/(a|b)/SF>testsavedregex
+<testsavedregex
+    abc
+    *** Failers
+    def  
+    
+/line\nbreak/
+    this is a line\nbreak
+    line one\nthis is a line\nbreak in the second line 
+
+/line\nbreak/f
+    this is a line\nbreak
+    ** Failers 
+    line one\nthis is a line\nbreak in the second line 
+
+/line\nbreak/mf
+    this is a line\nbreak
+    ** Failers 
+    line one\nthis is a line\nbreak in the second line 
+
+/ End of testinput7 /
diff -Nurp tin-1.7.8/pcre/testdata/testinput8 tin-1.7.9/pcre/testdata/testinput8
--- tin-1.7.8/pcre/testdata/testinput8	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testinput8	2005-06-28 10:31:27.200000127 +0200
@@ -0,0 +1,540 @@
+/-- Do not use the \x{} construct except with patterns that have the --/
+/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
+/-- that option is set. However, the latest Perls recognize them always. --/
+
+/\x{100}ab/8
+  \x{100}ab
+  
+/a\x{100}*b/8
+    ab
+    a\x{100}b  
+    a\x{100}\x{100}b  
+    
+/a\x{100}+b/8
+    a\x{100}b  
+    a\x{100}\x{100}b  
+    *** Failers 
+    ab
+     
+/\bX/8
+    Xoanon
+    +Xoanon
+    \x{300}Xoanon 
+    *** Failers 
+    YXoanon  
+    
+/\BX/8
+    YXoanon
+    *** Failers
+    Xoanon
+    +Xoanon    
+    \x{300}Xoanon 
+
+/X\b/8
+    X+oanon
+    ZX\x{300}oanon 
+    FAX 
+    *** Failers 
+    Xoanon  
+    
+/X\B/8
+    Xoanon  
+    *** Failers
+    X+oanon
+    ZX\x{300}oanon 
+    FAX 
+    
+/[^a]/8
+    abcd
+    a\x{100}   
+
+/^[abc\x{123}\x{400}-\x{402}]{2,3}\d/8
+    ab99
+    \x{123}\x{123}45
+    \x{400}\x{401}\x{402}6  
+    *** Failers
+    d99
+    \x{123}\x{122}4   
+    \x{400}\x{403}6  
+    \x{400}\x{401}\x{402}\x{402}6  
+
+/abc/8
+    Ã]
+    Ã
+    ÃÃÃ
+    ÃÃÃ\?
+
+/a.b/8
+    acb
+    a\x7fb
+    a\x{100}b 
+    *** Failers
+    a\nb  
+
+/a(.{3})b/8
+    a\x{4000}xyb 
+    a\x{4000}\x7fyb 
+    a\x{4000}\x{100}yb 
+    *** Failers
+    a\x{4000}b 
+    ac\ncb 
+
+/a(.*?)(.)/
+    a\xc0\x88b
+
+/a(.*?)(.)/8
+    a\x{100}b
+
+/a(.*)(.)/
+    a\xc0\x88b
+
+/a(.*)(.)/8
+    a\x{100}b
+
+/a(.)(.)/
+    a\xc0\x92bcd
+
+/a(.)(.)/8
+    a\x{240}bcd
+
+/a(.?)(.)/
+    a\xc0\x92bcd
+
+/a(.?)(.)/8
+    a\x{240}bcd
+
+/a(.??)(.)/
+    a\xc0\x92bcd
+
+/a(.??)(.)/8
+    a\x{240}bcd
+
+/a(.{3})b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    *** Failers
+    a\x{1234}b 
+    ac\ncb 
+
+/a(.{3,})b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    *** Failers
+    a\x{1234}b 
+
+/a(.{3,}?)b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    *** Failers
+    a\x{1234}b 
+
+/a(.{3,5})b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    axbxxbcdefghijb 
+    axxxxxbcdefghijb 
+    *** Failers
+    a\x{1234}b 
+    axxxxxxbcdefghijb 
+
+/a(.{3,5}?)b/8
+    a\x{1234}xyb 
+    a\x{1234}\x{4321}yb 
+    a\x{1234}\x{4321}\x{3412}b 
+    axxxxbcdefghijb 
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+    axbxxbcdefghijb 
+    axxxxxbcdefghijb 
+    *** Failers
+    a\x{1234}b 
+    axxxxxxbcdefghijb 
+
+/^[a\x{c0}]/8
+    *** Failers
+    \x{100}
+
+/(?<=aXb)cd/8
+    aXbcd
+
+/(?<=a\x{100}b)cd/8
+    a\x{100}bcd
+
+/(?<=a\x{100000}b)cd/8
+    a\x{100000}bcd
+    
+/(?:\x{100}){3}b/8
+    \x{100}\x{100}\x{100}b
+    *** Failers 
+    \x{100}\x{100}b
+
+/\x{ab}/8
+    \x{ab} 
+    \xc2\xab
+    *** Failers 
+    \x00{ab}
+
+/(?<=(.))X/8
+    WXYZ
+    \x{256}XYZ 
+    *** Failers
+    XYZ 
+
+/[^a]+/8g
+    bcd
+    \x{100}aY\x{256}Z 
+    
+/^[^a]{2}/8
+    \x{100}bc
+ 
+/^[^a]{2,}/8
+    \x{100}bcAa
+
+/^[^a]{2,}?/8
+    \x{100}bca
+
+/[^a]+/8ig
+    bcd
+    \x{100}aY\x{256}Z 
+    
+/^[^a]{2}/8i
+    \x{100}bc
+ 
+/^[^a]{2,}/8i
+    \x{100}bcAa
+
+/^[^a]{2,}?/8i
+    \x{100}bca
+
+/\x{100}{0,0}/8
+    abcd
+ 
+/\x{100}?/8
+    abcd
+    \x{100}\x{100} 
+
+/\x{100}{0,3}/8 
+    \x{100}\x{100} 
+    \x{100}\x{100}\x{100}\x{100} 
+    
+/\x{100}*/8
+    abce
+    \x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}{1,1}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}{1,3}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}+/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+
+/\x{100}{3}/8
+    abcd\x{100}\x{100}\x{100}XX
+
+/\x{100}{3,5}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+
+/\x{100}{3,}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+
+/(?<=a\x{100}{2}b)X/8
+    Xyyya\x{100}\x{100}bXzzz
+
+/\D*/8
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/\D*/8
+  \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+
+/\D/8
+    1X2
+    1\x{100}2 
+  
+/>\S/8
+    > >X Y
+    > >\x{100} Y
+  
+/\d/8
+    \x{100}3
+    
+/\s/8
+    \x{100} X
+    
+/\D+/8
+    12abcd34
+    *** Failers
+    1234  
+
+/\D{2,3}/8
+    12abcd34
+    12ab34
+    *** Failers  
+    1234
+    12a34  
+
+/\D{2,3}?/8
+    12abcd34
+    12ab34
+    *** Failers  
+    1234
+    12a34  
+
+/\d+/8
+    12abcd34
+    *** Failers
+
+/\d{2,3}/8
+    12abcd34
+    1234abcd
+    *** Failers  
+    1.4 
+
+/\d{2,3}?/8
+    12abcd34
+    1234abcd
+    *** Failers  
+    1.4 
+
+/\S+/8
+    12abcd34
+    *** Failers
+    \    \ 
+
+/\S{2,3}/8
+    12abcd34
+    1234abcd
+    *** Failers
+    \     \  
+
+/\S{2,3}?/8
+    12abcd34
+    1234abcd
+    *** Failers
+    \     \  
+
+/>\s+</8
+    12>      <34
+    *** Failers
+
+/>\s{2,3}</8
+    ab>  <cd
+    ab>   <ce
+    *** Failers
+    ab>    <cd 
+
+/>\s{2,3}?</8
+    ab>  <cd
+    ab>   <ce
+    *** Failers
+    ab>    <cd 
+
+/\w+/8
+    12      34
+    *** Failers
+    +++=*! 
+
+/\w{2,3}/8
+    ab  cd
+    abcd ce
+    *** Failers
+    a.b.c
+
+/\w{2,3}?/8
+    ab  cd
+    abcd ce
+    *** Failers
+    a.b.c
+
+/\W+/8
+    12====34
+    *** Failers
+    abcd 
+
+/\W{2,3}/8
+    ab====cd
+    ab==cd
+    *** Failers
+    a.b.c
+
+/\W{2,3}?/8
+    ab====cd
+    ab==cd
+    *** Failers
+    a.b.c
+
+/[\x{100}]/8
+    \x{100}
+    Z\x{100}
+    \x{100}Z
+    *** Failers 
+
+/[Z\x{100}]/8
+    Z\x{100}
+    \x{100}
+    \x{100}Z
+    *** Failers 
+
+/[\x{100}\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   *** Failers  
+
+/[\x{100}-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   *** Failers  
+
+/[z-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   abzcd
+   ab|cd  
+   *** Failers  
+
+/[Q\x{100}\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   Q? 
+   *** Failers  
+
+/[Q\x{100}-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   Q? 
+   *** Failers  
+
+/[Qz-\x{200}]/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{111}cd 
+   abzcd
+   ab|cd  
+   Q? 
+   *** Failers  
+
+/[\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/[\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/[Q\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/[Q\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+   ab\x{200}cd
+   ab\x{200}\x{100}\x{200}\x{100}cd
+   *** Failers  
+
+/(?<=[\x{100}\x{200}])X/8
+    abc\x{200}X
+    abc\x{100}X 
+    *** Failers
+    X  
+
+/(?<=[Q\x{100}\x{200}])X/8
+    abc\x{200}X
+    abc\x{100}X 
+    abQX 
+    *** Failers
+    X  
+
+/(?<=[\x{100}\x{200}]{3})X/8
+    abc\x{100}\x{200}\x{100}X
+    *** Failers
+    abc\x{200}X
+    X  
+
+/[^\x{100}\x{200}]X/8
+    AX
+    \x{150}X
+    \x{500}X 
+    *** Failers
+    \x{100}X
+    \x{200}X   
+
+/[^Q\x{100}\x{200}]X/8
+    AX
+    \x{150}X
+    \x{500}X 
+    *** Failers
+    \x{100}X
+    \x{200}X   
+    QX 
+
+/[^\x{100}-\x{200}]X/8
+    AX
+    \x{500}X 
+    *** Failers
+    \x{100}X
+    \x{150}X
+    \x{200}X   
+
+/[z-\x{100}]/8i
+    z
+    Z 
+    \x{100}
+    *** Failers
+    \x{102}
+    y    
+
+/[\xFF]/
+    >\xff<
+
+/[\xff]/8
+    >\x{ff}<
+
+/[^\xFF]/
+    XYZ
+
+/[^\xff]/8
+    XYZ
+    \x{123} 
+
+/^[ac]*b/8
+  xb
+
+/^[ac\x{100}]*b/8
+  xb
+
+/^[^x]*b/8i
+  xb
+
+/^[^x]*b/8
+  xb
+  
+/^\d*b/8
+  xb 
+
+/(|a)/g8
+    catac
+    a\x{256}a 
+
+/^\x{85}$/8i
+    \x{85}
+
+/ End of testinput 8 / 
diff -Nurp tin-1.7.8/pcre/testdata/testinput9 tin-1.7.9/pcre/testdata/testinput9
--- tin-1.7.8/pcre/testdata/testinput9	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testinput9	2005-06-28 10:31:27.212997734 +0200
@@ -0,0 +1,599 @@
+/\pL\P{Nd}/8
+    AB
+    *** Failers
+    A0
+    00   
+
+/\X./8
+    AB
+    A\x{300}BC 
+    A\x{300}\x{301}\x{302}BC 
+    *** Failers
+    \x{300}  
+
+/\X\X/8
+    ABC
+    A\x{300}B\x{300}\x{301}C 
+    A\x{300}\x{301}\x{302}BC 
+    *** Failers
+    \x{300}  
+
+/^\pL+/8
+    abcd
+    a 
+    *** Failers 
+
+/^\PL+/8
+    1234
+    = 
+    *** Failers 
+    abcd 
+
+/^\X+/8
+    abcdA\x{300}\x{301}\x{302}
+    A\x{300}\x{301}\x{302}
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}
+    a 
+    *** Failers 
+    \x{300}\x{301}\x{302}
+
+/\X?abc/8
+    abc
+    A\x{300}abc
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+    \x{300}abc  
+    *** Failers
+
+/^\X?abc/8
+    abc
+    A\x{300}abc
+    *** Failers
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+    \x{300}abc  
+
+/\X*abc/8
+    abc
+    A\x{300}abc
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+    \x{300}abc  
+    *** Failers
+
+/^\X*abc/8
+    abc
+    A\x{300}abc
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+    *** Failers
+    \x{300}abc  
+
+/^\pL?=./8
+    A=b
+    =c 
+    *** Failers
+    1=2 
+    AAAA=b  
+
+/^\pL*=./8
+    AAAA=b
+    =c 
+    *** Failers
+    1=2  
+
+/^\X{2,3}X/8
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X 
+    *** Failers
+    X
+    A\x{300}\x{301}\x{302}X
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+
+/^\pC\pL\pM\pN\pP\pS\pZ</8
+    \x7f\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
+    \np\x{300}9!\$ < 
+    ** Failers 
+    ap\x{300}9!\$ < 
+  
+/^\PC/8
+    X
+    ** Failers 
+    \x7f
+  
+/^\PL/8
+    9
+    ** Failers 
+    \x{c0}
+  
+/^\PM/8
+    X
+    ** Failers 
+    \x{30f}
+  
+/^\PN/8
+    X
+    ** Failers 
+    \x{660}
+  
+/^\PP/8
+    X
+    ** Failers 
+    \x{66c}
+  
+/^\PS/8
+    X
+    ** Failers 
+    \x{f01}
+  
+/^\PZ/8
+    X
+    ** Failers 
+    \x{1680}
+    
+/^\p{Cc}/8
+    \x{017}
+    \x{09f} 
+    ** Failers
+    \x{0600} 
+  
+/^\p{Cf}/8
+    \x{601}
+    ** Failers
+    \x{09f} 
+  
+/^\p{Cn}/8
+    ** Failers
+    \x{09f} 
+  
+/^\p{Co}/8
+    \x{f8ff}
+    ** Failers
+    \x{09f} 
+  
+/^\p{Cs}/8
+    \x{dfff}
+    ** Failers
+    \x{09f} 
+  
+/^\p{Ll}/8
+    a
+    ** Failers 
+    Z
+    \x{dfff}  
+  
+/^\p{Lm}/8
+    \x{2b0}
+    ** Failers
+    a 
+  
+/^\p{Lo}/8
+    \x{1bb}
+    ** Failers
+    a 
+    \x{2b0}
+  
+/^\p{Lt}/8
+    \x{1c5}
+    ** Failers
+    a 
+    \x{2b0}
+  
+/^\p{Lu}/8
+    A
+    ** Failers
+    \x{2b0}
+  
+/^\p{Mc}/8
+    \x{903}
+    ** Failers
+    X
+    \x{300}
+       
+/^\p{Me}/8
+    \x{488}
+    ** Failers
+    X
+    \x{903}
+    \x{300}
+  
+/^\p{Mn}/8
+    \x{300}
+    ** Failers
+    X
+    \x{903}
+  
+/^\p{Nd}+/8
+    0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}\x{669}\x{66a}
+    \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}\x{6fa}
+    \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}\x{970}
+    ** Failers
+    X
+  
+/^\p{Nl}/8
+    \x{16ee}
+    ** Failers
+    X
+    \x{966}
+  
+/^\p{No}/8
+    \x{b2}
+    \x{b3}
+    ** Failers
+    X
+    \x{16ee}
+  
+/^\p{Pc}/8
+    \x5f
+    \x{203f}
+    ** Failers
+    X
+    -
+    \x{58a}
+  
+/^\p{Pd}/8
+    -
+    \x{58a}
+    ** Failers
+    X
+    \x{203f}
+  
+/^\p{Pe}/8
+    )
+    ]
+    }
+    \x{f3b}
+    ** Failers
+    X
+    \x{203f}
+    (
+    [
+    {
+    \x{f3c}
+  
+/^\p{Pf}/8
+    \x{bb}
+    \x{2019}
+    ** Failers
+    X
+    \x{203f}
+  
+/^\p{Pi}/8
+    \x{ab}
+    \x{2018}
+    ** Failers
+    X
+    \x{203f}
+  
+/^\p{Po}/8
+    !
+    \x{37e}
+    ** Failers
+    X
+    \x{203f}
+  
+/^\p{Ps}/8
+    (
+    [
+    {
+    \x{f3c}
+    ** Failers
+    X
+    )
+    ]
+    }
+    \x{f3b}
+  
+/^\p{Sc}+/8
+    $\x{a2}\x{a3}\x{a4}\x{a5}\x{a6}
+    \x{9f2}
+    ** Failers
+    X
+    \x{2c2}
+  
+/^\p{Sk}/8
+    \x{2c2}
+    ** Failers
+    X
+    \x{9f2}
+  
+/^\p{Sm}+/8
+    +<|~\x{ac}\x{2044}
+    ** Failers
+    X
+    \x{9f2}
+  
+/^\p{So}/8
+    \x{a6}
+    \x{482} 
+    ** Failers
+    X
+    \x{9f2}
+  
+/^\p{Zl}/8
+    \x{2028}
+    ** Failers
+    X
+    \x{2029}
+  
+/^\p{Zp}/8
+    \x{2029}
+    ** Failers
+    X
+    \x{2028}
+  
+/^\p{Zs}/8
+    \ \
+    \x{a0}
+    \x{1680}
+    \x{180e}
+    \x{2000}
+    \x{2001}     
+    ** Failers
+    \x{2028}
+    \x{200d} 
+  
+/\p{Nd}+(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}+?(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}{2,}(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}{2,}?(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}*(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}*?(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}{2}(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}{2,3}(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}{2,3}?(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}?(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}??(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}*+(..)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}*+(...)/8
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}*+(....)/8
+      ** Failers
+      \x{660}\x{661}\x{662}ABC
+  
+/\p{Lu}/8i
+    A
+    a\x{10a0}B 
+    ** Failers 
+    a
+    \x{1d00}  
+
+/\p{^Lu}/8i
+    1234
+    ** Failers
+    ABC 
+
+/\P{Lu}/8i
+    1234
+    ** Failers
+    ABC 
+
+/(?<=A\p{Nd})XYZ/8
+    A2XYZ
+    123A5XYZPQR
+    ABA\x{660}XYZpqr
+    ** Failers
+    AXYZ
+    XYZ     
+    
+/(?<!\pL)XYZ/8
+    1XYZ
+    AB=XYZ.. 
+    XYZ 
+    ** Failers
+    WXYZ 
+
+/[\p{Nd}]/8
+    1234
+
+/[\p{Nd}+-]+/8
+    1234
+    12-34
+    12+\x{661}-34  
+    ** Failers
+    abcd  
+
+/[\P{Nd}]+/8
+    abcd
+    ** Failers
+    1234
+
+/\D+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+     
+/\P{Nd}+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/[\D]+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/[\P{Nd}]+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/[\D\P{Nd}]+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/\pL/8
+    a
+    A 
+
+/\pL/8i
+    a
+    A 
+    
+/\p{Lu}/8 
+    A
+    aZ
+    ** Failers
+    abc   
+
+/\p{Lu}/8i
+    A
+    aZ
+    ** Failers
+    abc   
+
+/\p{Ll}/8 
+    a
+    Az
+    ** Failers
+    ABC   
+
+/\p{Ll}/8i 
+    a
+    Az
+    ** Failers
+    ABC   
+
+/^\x{c0}$/8i
+    \x{c0}
+    \x{e0} 
+
+/^\x{e0}$/8i
+    \x{c0}
+    \x{e0} 
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8
+    A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+    ** Failers
+    a\x{391}\x{10427}\x{ff3a}\x{1fb0}   
+    A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
+    A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
+    A\x{391}\x{10427}\x{ff5a}\x{1fb0}
+    A\x{391}\x{10427}\x{ff3a}\x{1fb8}
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8i
+    A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+    a\x{391}\x{10427}\x{ff3a}\x{1fb0}   
+    A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
+    A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
+    A\x{391}\x{10427}\x{ff5a}\x{1fb0}
+    A\x{391}\x{10427}\x{ff3a}\x{1fb8}
+
+/\x{391}+/8i
+    \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
+
+/\x{391}{3,5}(.)/8i
+    \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
+
+/\x{391}{3,5}?(.)/8i
+    \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
+
+/[\x{391}\x{ff3a}]/8i
+    \x{391}
+    \x{ff3a}
+    \x{3b1}
+    \x{ff5a}   
+    
+/[\x{c0}\x{391}]/8i
+    \x{c0}
+    \x{e0} 
+
+/[\x{105}-\x{109}]/8i
+    \x{104}
+    \x{105}
+    \x{109}  
+    ** Failers
+    \x{100}
+    \x{10a} 
+    
+/[z-\x{100}]/8i 
+    Z
+    z
+    \x{39c}
+    \x{178}
+    |
+    \x{80}
+    \x{ff}
+    \x{100}
+    \x{101} 
+    ** Failers
+    \x{102}
+    Y
+    y           
+
+/[z-\x{100}]/8i
+
+/^\X/8
+    A
+    A\x{300}BC 
+    A\x{300}\x{301}\x{302}BC 
+    *** Failers
+    \x{300}  
+
+/^[\X]/8
+    X123
+    *** Failers
+    AXYZ
+
+/^(\X*)C/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+
+/^(\X*?)C/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+
+/^(\X*)(.)/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+
+/^(\X*?)(.)/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+
+/^\X(.)/8
+    *** Failers
+    A\x{300}\x{301}\x{302}
+
+/^\X{2,3}(.)/8
+    A\x{300}\x{301}B\x{300}X
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}DA\x{300}X
+    
+/^\X{2,3}?(.)/8
+    A\x{300}\x{301}B\x{300}X
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}DA\x{300}X
+
+/^\pN{2,3}X/
+    12X
+    123X
+    *** Failers
+    X
+    1X
+    1234X     
+
+/\x{100}/i8
+    \x{100}   
+    \x{101} 
+    
+/ End / 
diff -Nurp tin-1.7.8/pcre/testdata/testoutput1 tin-1.7.9/pcre/testdata/testoutput1
--- tin-1.7.8/pcre/testdata/testoutput1	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput1	2005-06-28 10:31:27.244991845 +0200
@@ -1,4 +1,4 @@
-PCRE version 5.0 13-Sep-2004
+PCRE version 6.1 21-Jun-2005
 
 /the quick brown fox/
     the quick brown fox
@@ -6271,4 +6271,16 @@ No match
   \x84XAZXB
  0: XB
 
+/ab cd (?x) de fg/
+    ab cd defg
+ 0: ab cd defg
+
+/ab cd(?x) de fg/
+    ab cddefg
+ 0: ab cddefg
+    ** Failers 
+No match
+    abcddefg
+No match
+
 / End of testinput1 /
diff -Nurp tin-1.7.8/pcre/testdata/testoutput2 tin-1.7.9/pcre/testdata/testoutput2
--- tin-1.7.8/pcre/testdata/testoutput2	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput2	2005-06-28 10:31:27.296982274 +0200
@@ -1,4 +1,4 @@
-PCRE version 5.0 13-Sep-2004
+PCRE version 6.1 21-Jun-2005
 
 /(a)b|/
 Capturing subpattern count = 1
@@ -3841,6 +3841,58 @@ Callout 0: last capture = 1
  0: xyz
  1: abc
    
+/a(b+)(c*)(?C1)/
+Capturing subpattern count = 2
+Partial matching not supported
+No options
+First char = 'a'
+Need char = 'b'
+    abbbbbccc\C*1
+--->abbbbbccc
+  1 ^        ^    
+Callout data = 1
+  1 ^       ^     
+Callout data = 1
+  1 ^      ^      
+Callout data = 1
+  1 ^     ^       
+Callout data = 1
+  1 ^    ^        
+Callout data = 1
+  1 ^   ^         
+Callout data = 1
+  1 ^  ^          
+Callout data = 1
+  1 ^ ^           
+Callout data = 1
+No match
+
+/a(b+?)(c*?)(?C1)/
+Capturing subpattern count = 2
+Partial matching not supported
+No options
+First char = 'a'
+Need char = 'b'
+    abbbbbccc\C*1
+--->abbbbbccc
+  1 ^ ^           
+Callout data = 1
+  1 ^  ^          
+Callout data = 1
+  1 ^   ^         
+Callout data = 1
+  1 ^    ^        
+Callout data = 1
+  1 ^     ^       
+Callout data = 1
+  1 ^      ^      
+Callout data = 1
+  1 ^       ^     
+Callout data = 1
+  1 ^        ^    
+Callout data = 1
+No match
+   
 /(?C)abc/ 
 Capturing subpattern count = 0
 No options
@@ -5600,6 +5652,70 @@ Options: anchored
 No first char
 No need char
 
+/line\nbreak/
+Capturing subpattern count = 0
+No options
+First char = 'l'
+Need char = 'k'
+    this is a line\nbreak
+ 0: line\x0abreak
+    line one\nthis is a line\nbreak in the second line 
+ 0: line\x0abreak
+
+/line\nbreak/f
+Capturing subpattern count = 0
+Options: firstline
+First char = 'l'
+Need char = 'k'
+    this is a line\nbreak
+ 0: line\x0abreak
+    ** Failers 
+No match
+    line one\nthis is a line\nbreak in the second line 
+No match
+
+/line\nbreak/mf
+Capturing subpattern count = 0
+Options: multiline firstline
+First char = 'l'
+Need char = 'k'
+    this is a line\nbreak
+ 0: line\x0abreak
+    ** Failers 
+No match
+    line one\nthis is a line\nbreak in the second line 
+No match
+
+/ab.cd/P
+    ab-cd
+ 0: ab-cd
+    ab=cd 
+ 0: ab=cd
+    ** Failers
+No match: POSIX code 17: match failed
+    ab\ncd
+No match: POSIX code 17: match failed
+
+/ab.cd/Ps
+    ab-cd
+ 0: ab-cd
+    ab=cd 
+ 0: ab=cd
+    ab\ncd
+ 0: ab\x0acd
+
+/(?i)(?-i)AbCd/
+Capturing subpattern count = 0
+No options
+First char = 'A'
+Need char = 'd'
+    AbCd
+ 0: AbCd
+    ** Failers
+No match
+    abcd  
+No match
+
 / End of testinput2 /
 Capturing subpattern count = 0
 No options
diff -Nurp tin-1.7.8/pcre/testdata/testoutput3 tin-1.7.9/pcre/testdata/testoutput3
--- tin-1.7.8/pcre/testdata/testoutput3	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput3	2005-06-28 10:31:27.310979697 +0200
@@ -1,4 +1,4 @@
-PCRE version 5.0 13-Sep-2004
+PCRE version 6.1 21-Jun-2005
 
 /^[\w]+/
     *** Failers
diff -Nurp tin-1.7.8/pcre/testdata/testoutput4 tin-1.7.9/pcre/testdata/testoutput4
--- tin-1.7.8/pcre/testdata/testoutput4	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput4	2005-06-28 10:31:27.321977673 +0200
@@ -1,4 +1,4 @@
-PCRE version 5.0 13-Sep-2004
+PCRE version 6.1 21-Jun-2005
 
 /-- Do not use the \x{} construct except with patterns that have the --/
 /-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
diff -Nurp tin-1.7.8/pcre/testdata/testoutput5 tin-1.7.9/pcre/testdata/testoutput5
--- tin-1.7.8/pcre/testdata/testoutput5	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput5	2005-06-28 10:31:27.335975096 +0200
@@ -1,4 +1,4 @@
-PCRE version 5.0 13-Sep-2004
+PCRE version 6.1 21-Jun-2005
 
 /\x{100}/8DM
 Memory allocation (code space): 10
diff -Nurp tin-1.7.8/pcre/testdata/testoutput6 tin-1.7.9/pcre/testdata/testoutput6
--- tin-1.7.8/pcre/testdata/testoutput6	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput6	2005-06-28 10:31:27.348972703 +0200
@@ -1,4 +1,4 @@
-PCRE version 5.0 13-Sep-2004
+PCRE version 6.1 21-Jun-2005
 
 /^\pC\pL\pM\pN\pP\pS\pZ</8
     \x7f\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
diff -Nurp tin-1.7.8/pcre/testdata/testoutput7 tin-1.7.9/pcre/testdata/testoutput7
--- tin-1.7.8/pcre/testdata/testoutput7	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput7	2005-06-28 10:31:27.410961292 +0200
@@ -0,0 +1,6516 @@
+PCRE version 6.1 21-Jun-2005
+
+/abc/
+    abc
+ 0: abc
+    
+/ab*c/
+    abc
+ 0: abc
+    abbbbc
+ 0: abbbbc
+    ac
+ 0: ac
+    
+/ab+c/
+    abc
+ 0: abc
+    abbbbbbc
+ 0: abbbbbbc
+    *** Failers 
+No match
+    ac
+No match
+    ab
+No match
+    
+/a*/
+    a
+ 0: a
+ 1: 
+    aaaaaaaaaaaaaaaaa
+ 0: aaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaa
+ 5: aaaaaaaaaaaa
+ 6: aaaaaaaaaaa
+ 7: aaaaaaaaaa
+ 8: aaaaaaaaa
+ 9: aaaaaaaa
+10: aaaaaaa
+11: aaaaaa
+12: aaaaa
+13: aaaa
+14: aaa
+15: aa
+16: a
+17: 
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
+Matched, but too many subsidiary matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaa
+17: aaaaaaaaaaaaa
+18: aaaaaaaaaaaa
+19: aaaaaaaaaaa
+20: aaaaaaaaaa
+21: aaaaaaaaa
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\F 
+ 0: 
+    
+/(a|abcd|african)/
+    a
+ 0: a
+    abcd
+ 0: abcd
+ 1: a
+    african
+ 0: african
+ 1: a
+    
+/^abc/
+    abcdef
+ 0: abc
+    *** Failers
+No match
+    xyzabc
+No match
+    xyz\nabc    
+No match
+    
+/^abc/m
+    abcdef
+ 0: abc
+    xyz\nabc    
+ 0: abc
+    *** Failers
+No match
+    xyzabc
+No match
+    
+/\Aabc/
+    abcdef
+ 0: abc
+    *** Failers
+No match
+    xyzabc
+No match
+    xyz\nabc    
+No match
+    
+/\Aabc/m
+    abcdef
+ 0: abc
+    *** Failers
+No match
+    xyzabc
+No match
+    xyz\nabc    
+No match
+    
+/\Gabc/
+    abcdef
+ 0: abc
+    xyzabc\>3
+ 0: abc
+    *** Failers
+No match
+    xyzabc    
+No match
+    xyzabc\>2 
+No match
+    
+/x\dy\Dz/
+    x9yzz
+ 0: x9yzz
+    x0y+z
+ 0: x0y+z
+    *** Failers
+No match
+    xyz
+No match
+    xxy0z     
+No match
+    
+/x\sy\Sz/
+    x yzz
+ 0: x yzz
+    x y+z
+ 0: x y+z
+    *** Failers
+No match
+    xyz
+No match
+    xxyyz
+No match
+    
+/x\wy\Wz/
+    xxy+z
+ 0: xxy+z
+    *** Failers
+No match
+    xxy0z
+No match
+    x+y+z         
+No match
+    
+/x.y/
+    x+y
+ 0: x+y
+    x-y
+ 0: x-y
+    *** Failers
+No match
+    x\ny
+No match
+    
+/x.y/s
+    x+y
+ 0: x+y
+    x-y
+ 0: x-y
+    x\ny
+ 0: x\x0ay
+
+/(a.b(?s)c.d|x.y)p.q/
+    a+bc+dp+q
+ 0: a+bc+dp+q
+    a+bc\ndp+q
+ 0: a+bc\x0adp+q
+    x\nyp+q 
+ 0: x\x0ayp+q
+    *** Failers 
+No match
+    a\nbc\ndp+q
+No match
+    a+bc\ndp\nq
+No match
+    x\nyp\nq 
+No match
+
+/a\d\z/
+    ba0
+ 0: a0
+    *** Failers
+No match
+    ba0\n
+No match
+    ba0\ncd   
+No match
+
+/a\d\z/m
+    ba0
+ 0: a0
+    *** Failers
+No match
+    ba0\n
+No match
+    ba0\ncd   
+No match
+
+/a\d\Z/
+    ba0
+ 0: a0
+    ba0\n
+ 0: a0
+    *** Failers
+No match
+    ba0\ncd   
+No match
+
+/a\d\Z/m
+    ba0
+ 0: a0
+    ba0\n
+ 0: a0
+    *** Failers
+No match
+    ba0\ncd   
+No match
+
+/a\d$/
+    ba0
+ 0: a0
+    ba0\n
+ 0: a0
+    *** Failers
+No match
+    ba0\ncd   
+No match
+
+/a\d$/m
+    ba0
+ 0: a0
+    ba0\n
+ 0: a0
+    ba0\ncd   
+ 0: a0
+    *** Failers
+No match
+
+/abc/i
+    abc
+ 0: abc
+    aBc
+ 0: aBc
+    ABC
+ 0: ABC
+    
+/[^a]/
+    abcd
+ 0: b
+    
+/ab?\w/
+    abz
+ 0: abz
+ 1: ab
+    abbz
+ 0: abb
+ 1: ab
+    azz  
+ 0: az
+
+/x{0,3}yz/
+    ayzq
+ 0: yz
+    axyzq
+ 0: xyz
+    axxyz
+ 0: xxyz
+    axxxyzq
+ 0: xxxyz
+    axxxxyzq
+ 0: xxxyz
+    *** Failers
+No match
+    ax
+No match
+    axx     
+No match
+      
+/x{3}yz/
+    axxxyzq
+ 0: xxxyz
+    axxxxyzq
+ 0: xxxyz
+    *** Failers
+No match
+    ax
+No match
+    axx     
+No match
+    ayzq
+No match
+    axyzq
+No match
+    axxyz
+No match
+      
+/x{2,3}yz/
+    axxyz
+ 0: xxyz
+    axxxyzq
+ 0: xxxyz
+    axxxxyzq
+ 0: xxxyz
+    *** Failers
+No match
+    ax
+No match
+    axx     
+No match
+    ayzq
+No match
+    axyzq
+No match
+      
+/[^a]+/
+    bac
+ 0: b
+    bcdefax
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+ 3: bc
+ 4: b
+    *** Failers
+ 0: *** F
+ 1: *** 
+ 2: ***
+ 3: **
+ 4: *
+    aaaaa   
+No match
+
+/[^a]*/
+    bac
+ 0: b
+ 1: 
+    bcdefax
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+ 3: bc
+ 4: b
+ 5: 
+    *** Failers
+ 0: *** F
+ 1: *** 
+ 2: ***
+ 3: **
+ 4: *
+ 5: 
+    aaaaa   
+ 0: 
+    
+/[^a]{3,5}/
+    xyz
+ 0: xyz
+    awxyza
+ 0: wxyz
+ 1: wxy
+    abcdefa
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+    abcdefghijk
+ 0: bcdef
+ 1: bcde
+ 2: bcd
+    *** Failers
+ 0: *** F
+ 1: *** 
+ 2: ***
+    axya
+No match
+    axa
+No match
+    aaaaa         
+No match
+
+/\d*/
+    1234b567
+ 0: 1234
+ 1: 123
+ 2: 12
+ 3: 1
+ 4: 
+    xyz
+ 0: 
+    
+/\D*/
+    a1234b567
+ 0: a
+ 1: 
+    xyz
+ 0: xyz
+ 1: xy
+ 2: x
+ 3: 
+     
+/\d+/
+    ab1234c56
+ 0: 1234
+ 1: 123
+ 2: 12
+ 3: 1
+    *** Failers
+No match
+    xyz
+No match
+    
+/\D+/
+    ab123c56
+ 0: ab
+ 1: a
+    *** Failers
+ 0: *** Failers
+ 1: *** Failer
+ 2: *** Faile
+ 3: *** Fail
+ 4: *** Fai
+ 5: *** Fa
+ 6: *** F
+ 7: *** 
+ 8: ***
+ 9: **
+10: *
+    789
+No match
+    
+/\d?A/
+    045ABC
+ 0: 5A
+    ABC
+ 0: A
+    *** Failers
+No match
+    XYZ
+No match
+    
+/\D?A/
+    ABC
+ 0: A
+    BAC
+ 0: BA
+    9ABC             
+ 0: A
+    *** Failers
+No match
+
+/a+/
+    aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+
+/^.*xyz/
+    xyz
+ 0: xyz
+    ggggggggxyz
+ 0: ggggggggxyz
+    
+/^.+xyz/
+    abcdxyz
+ 0: abcdxyz
+    axyz
+ 0: axyz
+    *** Failers
+No match
+    xyz
+No match
+    
+/^.?xyz/
+    xyz
+ 0: xyz
+    cxyz       
+ 0: cxyz
+
+/^\d{2,3}X/
+    12X
+ 0: 12X
+    123X
+ 0: 123X
+    *** Failers
+No match
+    X
+No match
+    1X
+No match
+    1234X     
+No match
+
+/^[abcd]\d/
+    a45
+ 0: a4
+    b93
+ 0: b9
+    c99z
+ 0: c9
+    d04
+ 0: d0
+    *** Failers
+No match
+    e45
+No match
+    abcd      
+No match
+    abcd1234
+No match
+    1234  
+No match
+
+/^[abcd]*\d/
+    a45
+ 0: a4
+    b93
+ 0: b9
+    c99z
+ 0: c9
+    d04
+ 0: d0
+    abcd1234
+ 0: abcd1
+    1234  
+ 0: 1
+    *** Failers
+No match
+    e45
+No match
+    abcd      
+No match
+
+/^[abcd]+\d/
+    a45
+ 0: a4
+    b93
+ 0: b9
+    c99z
+ 0: c9
+    d04
+ 0: d0
+    abcd1234
+ 0: abcd1
+    *** Failers
+No match
+    1234  
+No match
+    e45
+No match
+    abcd      
+No match
+
+/^a+X/
+    aX
+ 0: aX
+    aaX 
+ 0: aaX
+
+/^[abcd]?\d/
+    a45
+ 0: a4
+    b93
+ 0: b9
+    c99z
+ 0: c9
+    d04
+ 0: d0
+    1234  
+ 0: 1
+    *** Failers
+No match
+    abcd1234
+No match
+    e45
+No match
+
+/^[abcd]{2,3}\d/
+    ab45
+ 0: ab4
+    bcd93
+ 0: bcd9
+    *** Failers
+No match
+    1234 
+No match
+    a36 
+No match
+    abcd1234
+No match
+    ee45
+No match
+
+/^(abc)*\d/
+    abc45
+ 0: abc4
+    abcabcabc45
+ 0: abcabcabc4
+    42xyz 
+ 0: 4
+    *** Failers
+No match
+
+/^(abc)+\d/
+    abc45
+ 0: abc4
+    abcabcabc45
+ 0: abcabcabc4
+    *** Failers
+No match
+    42xyz 
+No match
+
+/^(abc)?\d/
+    abc45
+ 0: abc4
+    42xyz 
+ 0: 4
+    *** Failers
+No match
+    abcabcabc45
+No match
+
+/^(abc){2,3}\d/
+    abcabc45
+ 0: abcabc4
+    abcabcabc45
+ 0: abcabcabc4
+    *** Failers
+No match
+    abcabcabcabc45
+No match
+    abc45
+No match
+    42xyz 
+No match
+
+/1(abc|xyz)2(?1)3/
+    1abc2abc3456
+ 0: 1abc2abc3
+    1abc2xyz3456 
+ 0: 1abc2xyz3
+
+/^(a*\w|ab)=(a*\w|ab)/
+    ab=ab
+ 0: ab=ab
+ 1: ab=a
+
+/^(a*\w|ab)=(?1)/
+    ab=ab
+ 0: ab=ab
+ 1: ab=a
+
+/^([^()]|\((?1)*\))*$/
+    abc
+ 0: abc
+    a(b)c
+ 0: a(b)c
+    a(b(c))d  
+ 0: a(b(c))d
+    *** Failers)
+No match
+    a(b(c)d  
+No match
+
+/^>abc>([^()]|\((?1)*\))*<xyz<$/
+    >abc>123<xyz<
+ 0: >abc>123<xyz<
+    >abc>1(2)3<xyz<
+ 0: >abc>1(2)3<xyz<
+    >abc>(1(2)3)<xyz<
+ 0: >abc>(1(2)3)<xyz<
+
+/^(?>a*)\d/
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9876
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa9
+    *** Failers 
+No match
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+No match
+
+/< (?: (?(R) \d++  | [^<>]*+) | (?R)) * >/x
+    <>
+ 0: <>
+    <abcd>
+ 0: <abcd>
+    <abc <123> hij>
+ 0: <abc <123> hij>
+    <abc <def> hij>
+ 0: <def>
+    <abc<>def> 
+ 0: <abc<>def>
+    <abc<>      
+ 0: <>
+    *** Failers
+No match
+    <abc
+No match
+
+/^(?(?=abc)\w{3}:|\d\d)$/        
+    abc:                          
+ 0: abc:
+    12                             
+ 0: 12
+    *** Failers                     
+No match
+    123                       
+No match
+    xyz                        
+No match
+                                
+/^(?(?!abc)\d\d|\w{3}:)$/      
+    abc:                        
+ 0: abc:
+    12         
+ 0: 12
+    *** Failers
+No match
+    123
+No match
+    xyz    
+No match
+
+/^(?=abc)\w{5}:$/        
+    abcde:                          
+ 0: abcde:
+    *** Failers                     
+No match
+    abc.. 
+No match
+    123                       
+No match
+    vwxyz                        
+No match
+                                
+/^(?!abc)\d\d$/      
+    12         
+ 0: 12
+    *** Failers
+No match
+    abcde:
+No match
+    abc..  
+No match
+    123
+No match
+    vwxyz    
+No match
+
+/(?<=abc|xy)123/
+    abc12345
+ 0: 123
+    wxy123z
+ 0: 123
+    *** Failers
+No match
+    123abc
+No match
+
+/(?<!abc|xy)123/
+    123abc
+ 0: 123
+    mno123456 
+ 0: 123
+    *** Failers
+No match
+    abc12345
+No match
+    wxy123z
+No match
+
+/abc(?C1)xyz/
+    abcxyz
+--->abcxyz
+  1 ^  ^       x
+ 0: abcxyz
+    123abcxyz999 
+--->123abcxyz999
+  1    ^  ^          x
+ 0: abcxyz
+
+/(ab|cd){3,4}/C
+  ababab
+--->ababab
+ +0 ^          (ab|cd){3,4}
+ +1 ^          a
+ +4 ^          c
+ +2 ^^         b
+ +3 ^ ^        |
+ +1 ^ ^        a
+ +4 ^ ^        c
+ +2 ^  ^       b
+ +3 ^   ^      |
+ +1 ^   ^      a
+ +4 ^   ^      c
+ +2 ^    ^     b
+ +3 ^     ^    |
++12 ^     ^    
+ +1 ^     ^    a
+ +4 ^     ^    c
+ 0: ababab
+  abcdabcd
+--->abcdabcd
+ +0 ^            (ab|cd){3,4}
+ +1 ^            a
+ +4 ^            c
+ +2 ^^           b
+ +3 ^ ^          |
+ +1 ^ ^          a
+ +4 ^ ^          c
+ +5 ^  ^         d
+ +6 ^   ^        )
+ +1 ^   ^        a
+ +4 ^   ^        c
+ +2 ^    ^       b
+ +3 ^     ^      |
++12 ^     ^      
+ +1 ^     ^      a
+ +4 ^     ^      c
+ +5 ^      ^     d
+ +6 ^       ^    )
++12 ^       ^    
+ 0: abcdabcd
+ 1: abcdab
+  abcdcdcdcdcd  
+--->abcdcdcdcdcd
+ +0 ^                (ab|cd){3,4}
+ +1 ^                a
+ +4 ^                c
+ +2 ^^               b
+ +3 ^ ^              |
+ +1 ^ ^              a
+ +4 ^ ^              c
+ +5 ^  ^             d
+ +6 ^   ^            )
+ +1 ^   ^            a
+ +4 ^   ^            c
+ +5 ^    ^           d
+ +6 ^     ^          )
++12 ^     ^          
+ +1 ^     ^          a
+ +4 ^     ^          c
+ +5 ^      ^         d
+ +6 ^       ^        )
++12 ^       ^        
+ 0: abcdcdcd
+ 1: abcdcd
+
+/^abc/
+    abcdef
+ 0: abc
+    *** Failers
+No match
+    abcdef\B  
+No match
+
+/^(a*|xyz)/
+    bcd
+ 0: 
+    aaabcd
+ 0: aaa
+ 1: aa
+ 2: a
+ 3: 
+    xyz
+ 0: xyz
+ 1: 
+    xyz\N  
+ 0: xyz
+    *** Failers
+ 0: 
+    bcd\N   
+No match
+    
+/xyz$/
+    xyz
+ 0: xyz
+    xyz\n
+ 0: xyz
+    *** Failers
+No match
+    xyz\Z
+No match
+    xyz\n\Z    
+No match
+    
+/xyz$/m
+    xyz
+ 0: xyz
+    xyz\n 
+ 0: xyz
+    abcxyz\npqr 
+ 0: xyz
+    abcxyz\npqr\Z 
+ 0: xyz
+    xyz\n\Z    
+ 0: xyz
+    *** Failers
+No match
+    xyz\Z
+No match
+
+/\Gabc/
+    abcdef
+ 0: abc
+    defabcxyz\>3 
+ 0: abc
+    *** Failers 
+No match
+    defabcxyz
+No match
+
+/^abcdef/
+    ab\P
+Partial match: ab
+    abcde\P
+Partial match: abcde
+    abcdef\P
+ 0: abcdef
+    *** Failers
+No match
+    abx\P    
+No match
+
+/^a{2,4}\d+z/
+    a\P
+Partial match: a
+    aa\P
+Partial match: aa
+    aa2\P 
+Partial match: aa2
+    aaa\P
+Partial match: aaa
+    aaa23\P 
+Partial match: aaa23
+    aaaa12345\P
+Partial match: aaaa12345
+    aa0z\P
+ 0: aa0z
+    aaaa4444444444444z\P 
+ 0: aaaa4444444444444z
+    *** Failers
+No match
+    az\P 
+No match
+    aaaaa\P 
+No match
+    a56\P 
+No match
+
+/^abcdef/
+   abc\P
+Partial match: abc
+   def\R 
+ 0: def
+   
+/(?<=foo)bar/
+   xyzfo\P 
+No match
+   foob\R\P\>2 
+Partial match: b
+   foobar...\R\P\>4 
+ 0: ar
+   xyzfo\P
+No match
+   foobar\R\>2  
+ 0: bar
+   *** Failers
+No match
+   xyzfo\P
+No match
+   obar\R   
+No match
+
+/(ab*(cd|ef))+X/
+    adfadadaklhlkalkajhlkjahdfasdfasdfladsfjkj\P\Z
+No match
+    lkjhlkjhlkjhlkjhabbbbbbcdaefabbbbbbbefa\P\B\Z
+Partial match: abbbbbbcdaefabbbbbbbefa
+    cdabbbbbbbb\P\R\B\Z
+Partial match: cdabbbbbbbb
+    efabbbbbbbbbbbbbbbb\P\R\B\Z
+Partial match: efabbbbbbbbbbbbbbbb
+    bbbbbbbbbbbbcdXyasdfadf\P\R\B\Z    
+ 0: bbbbbbbbbbbbcdX
+
+/(a|b)/SF>testsavedregex
+Compiled regex written to testsavedregex
+Study data written to testsavedregex
+<testsavedregex
+Compiled regex (byte-inverted) loaded from testsavedregex
+Study data loaded from testsavedregex
+    abc
+ 0: a
+    ** Failers
+ 0: a
+    def  
+No match
+    
+/the quick brown fox/
+    the quick brown fox
+ 0: the quick brown fox
+    The quick brown FOX
+No match
+    What do you know about the quick brown fox?
+ 0: the quick brown fox
+    What do you know about THE QUICK BROWN FOX?
+No match
+
+/The quick brown fox/i
+    the quick brown fox
+ 0: the quick brown fox
+    The quick brown FOX
+ 0: The quick brown FOX
+    What do you know about the quick brown fox?
+ 0: the quick brown fox
+    What do you know about THE QUICK BROWN FOX?
+ 0: THE QUICK BROWN FOX
+
+/abcd\t\n\r\f\a\e\071\x3b\$\\\?caxyz/
+    abcd\t\n\r\f\a\e9;\$\\?caxyz
+ 0: abcd\x09\x0a\x0d\x0c\x07\x1b9;$\?caxyz
+
+/a*abc?xyz+pqr{3}ab{2,}xy{4,5}pq{0,6}AB{0,}zz/
+    abxyzpqrrrabbxyyyypqAzz
+ 0: abxyzpqrrrabbxyyyypqAzz
+    abxyzpqrrrabbxyyyypqAzz
+ 0: abxyzpqrrrabbxyyyypqAzz
+    aabxyzpqrrrabbxyyyypqAzz
+ 0: aabxyzpqrrrabbxyyyypqAzz
+    aaabxyzpqrrrabbxyyyypqAzz
+ 0: aaabxyzpqrrrabbxyyyypqAzz
+    aaaabxyzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzpqrrrabbxyyyypqAzz
+    abcxyzpqrrrabbxyyyypqAzz
+ 0: abcxyzpqrrrabbxyyyypqAzz
+    aabcxyzpqrrrabbxyyyypqAzz
+ 0: aabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypAzz
+ 0: aaabcxyzpqrrrabbxyyyypAzz
+    aaabcxyzpqrrrabbxyyyypqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqqAzz
+    aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+ 0: aaabcxyzpqrrrabbxyyyypqqqqqqAzz
+    aaaabcxyzpqrrrabbxyyyypqAzz
+ 0: aaaabcxyzpqrrrabbxyyyypqAzz
+    abxyzzpqrrrabbxyyyypqAzz
+ 0: abxyzzpqrrrabbxyyyypqAzz
+    aabxyzzzpqrrrabbxyyyypqAzz
+ 0: aabxyzzzpqrrrabbxyyyypqAzz
+    aaabxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaabxyzzzzpqrrrabbxyyyypqAzz
+    aaaabxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzzzzpqrrrabbxyyyypqAzz
+    abcxyzzpqrrrabbxyyyypqAzz
+ 0: abcxyzzpqrrrabbxyyyypqAzz
+    aabcxyzzzpqrrrabbxyyyypqAzz
+ 0: aabcxyzzzpqrrrabbxyyyypqAzz
+    aaabcxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbxyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbbxyyyypqAzz
+    aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+ 0: aaaabcxyzzzzpqrrrabbbxyyyyypqAzz
+    aaabcxyzpqrrrabbxyyyypABzz
+ 0: aaabcxyzpqrrrabbxyyyypABzz
+    aaabcxyzpqrrrabbxyyyypABBzz
+ 0: aaabcxyzpqrrrabbxyyyypABBzz
+    >>>aaabxyzpqrrrabbxyyyypqAzz
+ 0: aaabxyzpqrrrabbxyyyypqAzz
+    >aaaabxyzpqrrrabbxyyyypqAzz
+ 0: aaaabxyzpqrrrabbxyyyypqAzz
+    >>>>abcxyzpqrrrabbxyyyypqAzz
+ 0: abcxyzpqrrrabbxyyyypqAzz
+    *** Failers
+No match
+    abxyzpqrrabbxyyyypqAzz
+No match
+    abxyzpqrrrrabbxyyyypqAzz
+No match
+    abxyzpqrrrabxyyyypqAzz
+No match
+    aaaabcxyzzzzpqrrrabbbxyyyyyypqAzz
+No match
+    aaaabcxyzzzzpqrrrabbbxyyypqAzz
+No match
+    aaabcxyzpqrrrabbxyyyypqqqqqqqAzz
+No match
+
+/^(abc){1,2}zz/
+    abczz
+ 0: abczz
+    abcabczz
+ 0: abcabczz
+    *** Failers
+No match
+    zz
+No match
+    abcabcabczz
+No match
+    >>abczz
+No match
+
+/^(b+?|a){1,2}?c/
+    bc
+ 0: bc
+    bbc
+ 0: bbc
+    bbbc
+ 0: bbbc
+    bac
+ 0: bac
+    bbac
+ 0: bbac
+    aac
+ 0: aac
+    abbbbbbbbbbbc
+ 0: abbbbbbbbbbbc
+    bbbbbbbbbbbac
+ 0: bbbbbbbbbbbac
+    *** Failers
+No match
+    aaac
+No match
+    abbbbbbbbbbbac
+No match
+
+/^(b+|a){1,2}c/
+    bc
+ 0: bc
+    bbc
+ 0: bbc
+    bbbc
+ 0: bbbc
+    bac
+ 0: bac
+    bbac
+ 0: bbac
+    aac
+ 0: aac
+    abbbbbbbbbbbc
+ 0: abbbbbbbbbbbc
+    bbbbbbbbbbbac
+ 0: bbbbbbbbbbbac
+    *** Failers
+No match
+    aaac
+No match
+    abbbbbbbbbbbac
+No match
+
+/^(b+|a){1,2}?bc/
+    bbc
+ 0: bbc
+
+/^(b*|ba){1,2}?bc/
+    babc
+ 0: babc
+    bbabc
+ 0: bbabc
+    bababc
+ 0: bababc
+    *** Failers
+No match
+    bababbc
+No match
+    babababc
+No match
+
+/^(ba|b*){1,2}?bc/
+    babc
+ 0: babc
+    bbabc
+ 0: bbabc
+    bababc
+ 0: bababc
+    *** Failers
+No match
+    bababbc
+No match
+    babababc
+No match
+
+/^\ca\cA\c[\c{\c:/
+    \x01\x01\e;z
+ 0: \x01\x01\x1b;z
+
+/^[ab\]cde]/
+    athing
+ 0: a
+    bthing
+ 0: b
+    ]thing
+ 0: ]
+    cthing
+ 0: c
+    dthing
+ 0: d
+    ething
+ 0: e
+    *** Failers
+No match
+    fthing
+No match
+    [thing
+No match
+    \\thing
+No match
+
+/^[]cde]/
+    ]thing
+ 0: ]
+    cthing
+ 0: c
+    dthing
+ 0: d
+    ething
+ 0: e
+    *** Failers
+No match
+    athing
+No match
+    fthing
+No match
+
+/^[^ab\]cde]/
+    fthing
+ 0: f
+    [thing
+ 0: [
+    \\thing
+ 0: \
+    *** Failers
+ 0: *
+    athing
+No match
+    bthing
+No match
+    ]thing
+No match
+    cthing
+No match
+    dthing
+No match
+    ething
+No match
+
+/^[^]cde]/
+    athing
+ 0: a
+    fthing
+ 0: f
+    *** Failers
+ 0: *
+    ]thing
+No match
+    cthing
+No match
+    dthing
+No match
+    ething
+No match
+
+/^\/
+    
+ 0: \x81
+
+/^ÿ/
+    ÿ
+ 0: \xff
+
+/^[0-9]+$/
+    0
+ 0: 0
+    1
+ 0: 1
+    2
+ 0: 2
+    3
+ 0: 3
+    4
+ 0: 4
+    5
+ 0: 5
+    6
+ 0: 6
+    7
+ 0: 7
+    8
+ 0: 8
+    9
+ 0: 9
+    10
+ 0: 10
+    100
+ 0: 100
+    *** Failers
+No match
+    abc
+No match
+
+/^.*nter/
+    enter
+ 0: enter
+    inter
+ 0: inter
+    uponter
+ 0: uponter
+
+/^xxx[0-9]+$/
+    xxx0
+ 0: xxx0
+    xxx1234
+ 0: xxx1234
+    *** Failers
+No match
+    xxx
+No match
+
+/^.+[0-9][0-9][0-9]$/
+    x123
+ 0: x123
+    xx123
+ 0: xx123
+    123456
+ 0: 123456
+    *** Failers
+No match
+    123
+No match
+    x1234
+ 0: x1234
+
+/^.+?[0-9][0-9][0-9]$/
+    x123
+ 0: x123
+    xx123
+ 0: xx123
+    123456
+ 0: 123456
+    *** Failers
+No match
+    123
+No match
+    x1234
+ 0: x1234
+
+/^([^!]+)!(.+)=apquxz\.ixr\.zzz\.ac\.uk$/
+    abc!pqr=apquxz.ixr.zzz.ac.uk
+ 0: abc!pqr=apquxz.ixr.zzz.ac.uk
+    *** Failers
+No match
+    !pqr=apquxz.ixr.zzz.ac.uk
+No match
+    abc!=apquxz.ixr.zzz.ac.uk
+No match
+    abc!pqr=apquxz:ixr.zzz.ac.uk
+No match
+    abc!pqr=apquxz.ixr.zzz.ac.ukk
+No match
+
+/:/
+    Well, we need a colon: somewhere
+ 0: :
+    *** Fail if we don't
+No match
+
+/([\da-f:]+)$/i
+    0abc
+ 0: 0abc
+    abc
+ 0: abc
+    fed
+ 0: fed
+    E
+ 0: E
+    ::
+ 0: ::
+    5f03:12C0::932e
+ 0: 5f03:12C0::932e
+    fed def
+ 0: def
+    Any old stuff
+ 0: ff
+    *** Failers
+No match
+    0zzz
+No match
+    gzzz
+No match
+    fed\x20
+No match
+    Any old rubbish
+No match
+
+/^.*\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/
+    .1.2.3
+ 0: .1.2.3
+    A.12.123.0
+ 0: A.12.123.0
+    *** Failers
+No match
+    .1.2.3333
+No match
+    1.2.3
+No match
+    1234.2.3
+No match
+
+/^(\d+)\s+IN\s+SOA\s+(\S+)\s+(\S+)\s*\(\s*$/
+    1 IN SOA non-sp1 non-sp2(
+ 0: 1 IN SOA non-sp1 non-sp2(
+    1    IN    SOA    non-sp1    non-sp2   (
+ 0: 1    IN    SOA    non-sp1    non-sp2   (
+    *** Failers
+No match
+    1IN SOA non-sp1 non-sp2(
+No match
+
+/^[a-zA-Z\d][a-zA-Z\d\-]*(\.[a-zA-Z\d][a-zA-z\d\-]*)*\.$/
+    a.
+ 0: a.
+    Z.
+ 0: Z.
+    2.
+ 0: 2.
+    ab-c.pq-r.
+ 0: ab-c.pq-r.
+    sxk.zzz.ac.uk.
+ 0: sxk.zzz.ac.uk.
+    x-.y-.
+ 0: x-.y-.
+    *** Failers
+No match
+    -abc.peq.
+No match
+
+/^\*\.[a-z]([a-z\-\d]*[a-z\d]+)?(\.[a-z]([a-z\-\d]*[a-z\d]+)?)*$/
+    *.a
+ 0: *.a
+    *.b0-a
+ 0: *.b0-a
+    *.c3-b.c
+ 0: *.c3-b.c
+    *.c-a.b-c
+ 0: *.c-a.b-c
+    *** Failers
+No match
+    *.0
+No match
+    *.a-
+No match
+    *.a-b.c-
+No match
+    *.c-a.0-c
+No match
+
+/^(?=ab(de))(abd)(e)/
+    abde
+ 0: abde
+
+/^(?!(ab)de|x)(abd)(f)/
+    abdf
+ 0: abdf
+
+/^(?=(ab(cd)))(ab)/
+    abcd
+ 0: ab
+
+/^[\da-f](\.[\da-f])*$/i
+    a.b.c.d
+ 0: a.b.c.d
+    A.B.C.D
+ 0: A.B.C.D
+    a.b.c.1.2.3.C
+ 0: a.b.c.1.2.3.C
+
+/^\".*\"\s*(;.*)?$/
+    \"1234\"
+ 0: "1234"
+    \"abcd\" ;
+ 0: "abcd" ;
+    \"\" ; rhubarb
+ 0: "" ; rhubarb
+    *** Failers
+No match
+    \"1234\" : things
+No match
+
+/^$/
+    \
+ 0: 
+    *** Failers
+No match
+
+/   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/x
+    ab c
+ 0: ab c
+    *** Failers
+No match
+    abc
+No match
+    ab cde
+No match
+
+/(?x)   ^    a   (?# begins with a)  b\sc (?# then b c) $ (?# then end)/
+    ab c
+ 0: ab c
+    *** Failers
+No match
+    abc
+No match
+    ab cde
+No match
+
+/^   a\ b[c ]d       $/x
+    a bcd
+ 0: a bcd
+    a b d
+ 0: a b d
+    *** Failers
+No match
+    abcd
+No match
+    ab d
+No match
+
+/^(a(b(c)))(d(e(f)))(h(i(j)))(k(l(m)))$/
+    abcdefhijklm
+ 0: abcdefhijklm
+
+/^(?:a(b(c)))(?:d(e(f)))(?:h(i(j)))(?:k(l(m)))$/
+    abcdefhijklm
+ 0: abcdefhijklm
+
+/^[\w][\W][\s][\S][\d][\D][\b][\n][\c]][\022]/
+    a+ Z0+\x08\n\x1d\x12
+ 0: a+ Z0+\x08\x0a\x1d\x12
+
+/^[.^$|()*+?{,}]+/
+    .^\$(*+)|{?,?}
+ 0: .^$(*+)|{?,?}
+ 1: .^$(*+)|{?,?
+ 2: .^$(*+)|{?,
+ 3: .^$(*+)|{?
+ 4: .^$(*+)|{
+ 5: .^$(*+)|
+ 6: .^$(*+)
+ 7: .^$(*+
+ 8: .^$(*
+ 9: .^$(
+10: .^$
+11: .^
+12: .
+
+/^a*\w/
+    z
+ 0: z
+    az
+ 0: az
+ 1: a
+    aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+ 3: a
+    a
+ 0: a
+    aa
+ 0: aa
+ 1: a
+    aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+    a+
+ 0: a
+    aa+
+ 0: aa
+ 1: a
+
+/^a*?\w/
+    z
+ 0: z
+    az
+ 0: az
+ 1: a
+    aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+ 3: a
+    a
+ 0: a
+    aa
+ 0: aa
+ 1: a
+    aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+    a+
+ 0: a
+    aa+
+ 0: aa
+ 1: a
+
+/^a+\w/
+    az
+ 0: az
+    aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+    aa
+ 0: aa
+    aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+    aa+
+ 0: aa
+
+/^a+?\w/
+    az
+ 0: az
+    aaaz
+ 0: aaaz
+ 1: aaa
+ 2: aa
+    aa
+ 0: aa
+    aaaa
+ 0: aaaa
+ 1: aaa
+ 2: aa
+    aa+
+ 0: aa
+
+/^\d{8}\w{2,}/
+    1234567890
+ 0: 1234567890
+    12345678ab
+ 0: 12345678ab
+    12345678__
+ 0: 12345678__
+    *** Failers
+No match
+    1234567
+No match
+
+/^[aeiou\d]{4,5}$/
+    uoie
+ 0: uoie
+    1234
+ 0: 1234
+    12345
+ 0: 12345
+    aaaaa
+ 0: aaaaa
+    *** Failers
+No match
+    123456
+No match
+
+/^[aeiou\d]{4,5}?/
+    uoie
+ 0: uoie
+    1234
+ 0: 1234
+    12345
+ 0: 12345
+ 1: 1234
+    aaaaa
+ 0: aaaaa
+ 1: aaaa
+    123456
+ 0: 12345
+ 1: 1234
+
+/^From +([^ ]+) +[a-zA-Z][a-zA-Z][a-zA-Z] +[a-zA-Z][a-zA-Z][a-zA-Z] +[0-9]?[0-9] +[0-9][0-9]:[0-9][0-9]/
+    From abcd  Mon Sep 01 12:33:02 1997
+ 0: From abcd  Mon Sep 01 12:33
+
+/^From\s+\S+\s+([a-zA-Z]{3}\s+){2}\d{1,2}\s+\d\d:\d\d/
+    From abcd  Mon Sep 01 12:33:02 1997
+ 0: From abcd  Mon Sep 01 12:33
+    From abcd  Mon Sep  1 12:33:02 1997
+ 0: From abcd  Mon Sep  1 12:33
+    *** Failers
+No match
+    From abcd  Sep 01 12:33:02 1997
+No match
+
+/^12.34/s
+    12\n34
+ 0: 12\x0a34
+    12\r34
+ 0: 12\x0d34
+
+/\w+(?=\t)/
+    the quick brown\t fox
+ 0: brown
+
+/foo(?!bar)(.*)/
+    foobar is foolish see?
+ 0: foolish see?
+ 1: foolish see
+ 2: foolish se
+ 3: foolish s
+ 4: foolish 
+ 5: foolish
+ 6: foolis
+ 7: fooli
+ 8: fool
+ 9: foo
+
+/(?:(?!foo)...|^.{0,2})bar(.*)/
+    foobar crowbar etc
+ 0: rowbar etc
+ 1: rowbar et
+ 2: rowbar e
+ 3: rowbar 
+ 4: rowbar
+    barrel
+ 0: barrel
+ 1: barre
+ 2: barr
+ 3: bar
+    2barrel
+ 0: 2barrel
+ 1: 2barre
+ 2: 2barr
+ 3: 2bar
+    A barrel
+ 0: A barrel
+ 1: A barre
+ 2: A barr
+ 3: A bar
+
+/^(\D*)(?=\d)(?!123)/
+    abc456
+ 0: abc
+    *** Failers
+No match
+    abc123
+No match
+
+/^1234(?# test newlines
+  inside)/
+    1234
+ 0: 1234
+
+/^1234 #comment in extended re
+  /x
+    1234
+ 0: 1234
+
+/#rhubarb
+  abcd/x
+    abcd
+ 0: abcd
+
+/^abcd#rhubarb/x
+    abcd
+ 0: abcd
+
+/(?!^)abc/
+    the abc
+ 0: abc
+    *** Failers
+No match
+    abc
+No match
+
+/(?=^)abc/
+    abc
+ 0: abc
+    *** Failers
+No match
+    the abc
+No match
+
+/^[ab]{1,3}(ab*|b)/
+    aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/^[ab]{1,3}?(ab*|b)/
+    aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/^[ab]{1,3}?(ab*?|b)/
+    aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/^[ab]{1,3}(ab*?|b)/
+    aabbbbb
+ 0: aabbbbb
+ 1: aabbbb
+ 2: aabbb
+ 3: aabb
+ 4: aab
+ 5: aa
+
+/  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*                          # optional leading comment
+(?:    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)                    # initial word
+(?:  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)  )* # further okay, if led by a period
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+# address
+|                     #  or
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)             # one word, optionally followed by....
+(?:
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037]  |  # atom and space parts, or...
+\(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)       |  # comments, or...
+
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+# quoted strings
+)*
+<  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*                     # leading <
+(?:  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+
+(?:  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  ,  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+)* # further okay, if led by comma
+:                                # closing colon
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  )? #       optional route
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)                    # initial word
+(?:  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+" (?:                      # opening quote...
+[^\\\x80-\xff\n\015"]                #   Anything except backslash and quote
+|                     #    or
+\\ [^\x80-\xff]           #   Escaped something (something != CR)
+)* "  # closing quote
+)  )* # further okay, if led by a period
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  @  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*    (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                           # initial subdomain
+(?:                                  #
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  \.                        # if led by a period...
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*   (?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|   \[                         # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*    #    stuff
+\]                        #           ]
+)                     #   ...further okay
+)*
+#       address spec
+(?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*  > #                  trailing >
+# name and address
+)  (?: [\040\t] |  \(
+(?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  |  \( (?:  [^\\\x80-\xff\n\015()]  |  \\ [^\x80-\xff]  )* \)  )*
+\)  )*                       # optional trailing comment
+/x
+    Alan Other <user\@dom.ain>
+ 0: Alan Other <user@dom.ain>
+    <user\@dom.ain>
+ 0: user@dom.ain
+ 1: user@dom
+    user\@dom.ain
+ 0: user@dom.ain
+ 1: user@dom
+    \"A. Other\" <user.1234\@dom.ain> (a comment)
+ 0: "A. Other" <user.1234@dom.ain> (a comment)
+ 1: "A. Other" <user.1234@dom.ain> 
+ 2: "A. Other" <user.1234@dom.ain>
+    A. Other <user.1234\@dom.ain> (a comment)
+ 0:  Other <user.1234@dom.ain> (a comment)
+ 1:  Other <user.1234@dom.ain> 
+ 2:  Other <user.1234@dom.ain>
+    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
+ 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
+ 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
+    A missing angle <user\@some.where
+ 0: user@some.where
+ 1: user@some
+    *** Failers
+No match
+    The quick brown fox
+No match
+
+/[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional leading comment
+(?:
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# additional words
+)*
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+# address
+|                             #  or
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+# leading word
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *               # "normal" atoms and or spaces
+(?:
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+|
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+) # "special" comment or quoted string
+[^()<>@,;:".\\\[\]\x80-\xff\000-\010\012-\037] *            #  more "normal"
+)*
+<
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# <
+(?:
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+(?: ,
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+)*  # additional domains
+:
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)?     #       optional route
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+# Atom
+|                       #  or
+"                                     # "
+[^\\\x80-\xff\n\015"] *                            #   normal
+(?:  \\ [^\x80-\xff]  [^\\\x80-\xff\n\015"] * )*        #   ( special normal* )*
+"                                     #        "
+# Quoted string
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# additional words
+)*
+@
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+(?:
+\.
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+(?:
+[^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]+    # some number of atom characters...
+(?![^(\040)<>@,;:".\\\[\]\000-\037\x80-\xff]) # ..not followed by something that could be part of an atom
+|
+\[                            # [
+(?: [^\\\x80-\xff\n\015\[\]] |  \\ [^\x80-\xff]  )*     #    stuff
+\]                           #           ]
+)
+[\040\t]*                    # Nab whitespace.
+(?:
+\(                              #  (
+[^\\\x80-\xff\n\015()] *                             #     normal*
+(?:                                 #       (
+(?:  \\ [^\x80-\xff]  |
+\(                            #  (
+[^\\\x80-\xff\n\015()] *                            #     normal*
+(?:  \\ [^\x80-\xff]   [^\\\x80-\xff\n\015()] * )*        #     (special normal*)*
+\)                           #                       )
+)    #         special
+[^\\\x80-\xff\n\015()] *                         #         normal*
+)*                                  #            )*
+\)                             #                )
+[\040\t]* )*    # If comment found, allow more spaces.
+# optional trailing comments
+)*
+#       address spec
+>                    #                 >
+# name and address
+)
+/x
+    Alan Other <user\@dom.ain>
+ 0: Alan Other <user@dom.ain>
+    <user\@dom.ain>
+ 0: user@dom.ain
+ 1: user@dom
+    user\@dom.ain
+ 0: user@dom.ain
+ 1: user@dom
+    \"A. Other\" <user.1234\@dom.ain> (a comment)
+ 0: "A. Other" <user.1234@dom.ain>
+    A. Other <user.1234\@dom.ain> (a comment)
+ 0:  Other <user.1234@dom.ain>
+    \"/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/\"\@x400-re.lay
+ 0: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re.lay
+ 1: "/s=user/ou=host/o=place/prmd=uu.yy/admd= /c=gb/"@x400-re
+    A missing angle <user\@some.where
+ 0: user@some.where
+ 1: user@some
+    *** Failers
+No match
+    The quick brown fox
+No match
+
+/abc\0def\00pqr\000xyz\0000AB/
+    abc\0def\00pqr\000xyz\0000AB
+ 0: abc\x00def\x00pqr\x00xyz\x000AB
+    abc456 abc\0def\00pqr\000xyz\0000ABCDE
+ 0: abc\x00def\x00pqr\x00xyz\x000AB
+
+/abc\x0def\x00pqr\x000xyz\x0000AB/
+    abc\x0def\x00pqr\x000xyz\x0000AB
+ 0: abc\x0def\x00pqr\x000xyz\x0000AB
+    abc456 abc\x0def\x00pqr\x000xyz\x0000ABCDE
+ 0: abc\x0def\x00pqr\x000xyz\x0000AB
+
+/^[\000-\037]/
+    \0A
+ 0: \x00
+    \01B
+ 0: \x01
+    \037C
+ 0: \x1f
+
+/\0*/
+    \0\0\0\0
+ 0: \x00\x00\x00\x00
+ 1: \x00\x00\x00
+ 2: \x00\x00
+ 3: \x00
+ 4: 
+
+/A\x0{2,3}Z/
+    The A\x0\x0Z
+ 0: A\x00\x00Z
+    An A\0\x0\0Z
+ 0: A\x00\x00\x00Z
+    *** Failers
+No match
+    A\0Z
+No match
+    A\0\x0\0\x0Z
+No match
+
+/^\s/
+    \040abc
+ 0:  
+    \x0cabc
+ 0: \x0c
+    \nabc
+ 0: \x0a
+    \rabc
+ 0: \x0d
+    \tabc
+ 0: \x09
+    *** Failers
+No match
+    abc
+No match
+
+/^a	b
+      c/x
+    abc
+ 0: abc
+
+/ab{1,3}bc/
+    abbbbc
+ 0: abbbbc
+    abbbc
+ 0: abbbc
+    abbc
+ 0: abbc
+    *** Failers
+No match
+    abc
+No match
+    abbbbbc
+No match
+
+/([^.]*)\.([^:]*):[T ]+(.*)/
+    track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1.title:TBlah blah bla
+ 2: track1.title:TBlah blah bl
+ 3: track1.title:TBlah blah b
+ 4: track1.title:TBlah blah 
+ 5: track1.title:TBlah blah
+ 6: track1.title:TBlah bla
+ 7: track1.title:TBlah bl
+ 8: track1.title:TBlah b
+ 9: track1.title:TBlah 
+10: track1.title:TBlah
+11: track1.title:TBla
+12: track1.title:TBl
+13: track1.title:TB
+14: track1.title:T
+
+/([^.]*)\.([^:]*):[T ]+(.*)/i
+    track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1.title:TBlah blah bla
+ 2: track1.title:TBlah blah bl
+ 3: track1.title:TBlah blah b
+ 4: track1.title:TBlah blah 
+ 5: track1.title:TBlah blah
+ 6: track1.title:TBlah bla
+ 7: track1.title:TBlah bl
+ 8: track1.title:TBlah b
+ 9: track1.title:TBlah 
+10: track1.title:TBlah
+11: track1.title:TBla
+12: track1.title:TBl
+13: track1.title:TB
+14: track1.title:T
+
+/([^.]*)\.([^:]*):[t ]+(.*)/i
+    track1.title:TBlah blah blah
+ 0: track1.title:TBlah blah blah
+ 1: track1.title:TBlah blah bla
+ 2: track1.title:TBlah blah bl
+ 3: track1.title:TBlah blah b
+ 4: track1.title:TBlah blah 
+ 5: track1.title:TBlah blah
+ 6: track1.title:TBlah bla
+ 7: track1.title:TBlah bl
+ 8: track1.title:TBlah b
+ 9: track1.title:TBlah 
+10: track1.title:TBlah
+11: track1.title:TBla
+12: track1.title:TBl
+13: track1.title:TB
+14: track1.title:T
+
+/^[W-c]+$/
+    WXY_^abc
+ 0: WXY_^abc
+    *** Failers
+No match
+    wxy
+No match
+
+/^[W-c]+$/i
+    WXY_^abc
+ 0: WXY_^abc
+    wxy_^ABC
+ 0: wxy_^ABC
+
+/^[\x3f-\x5F]+$/i
+    WXY_^abc
+ 0: WXY_^abc
+    wxy_^ABC
+ 0: wxy_^ABC
+
+/^abc$/m
+    abc
+ 0: abc
+    qqq\nabc
+ 0: abc
+    abc\nzzz
+ 0: abc
+    qqq\nabc\nzzz
+ 0: abc
+
+/^abc$/
+    abc
+ 0: abc
+    *** Failers
+No match
+    qqq\nabc
+No match
+    abc\nzzz
+No match
+    qqq\nabc\nzzz
+No match
+
+/\Aabc\Z/m
+    abc
+ 0: abc
+    abc\n 
+ 0: abc
+    *** Failers
+No match
+    qqq\nabc
+No match
+    abc\nzzz
+No match
+    qqq\nabc\nzzz
+No match
+    
+/\A(.)*\Z/s
+    abc\ndef
+ 0: abc\x0adef
+
+/\A(.)*\Z/m
+    *** Failers
+ 0: *** Failers
+    abc\ndef
+No match
+
+/(?:b)|(?::+)/
+    b::c
+ 0: b
+    c::b
+ 0: ::
+ 1: :
+
+/[-az]+/
+    az-
+ 0: az-
+ 1: az
+ 2: a
+    *** Failers
+ 0: a
+    b
+No match
+
+/[az-]+/
+    za-
+ 0: za-
+ 1: za
+ 2: z
+    *** Failers
+ 0: a
+    b
+No match
+
+/[a\-z]+/
+    a-z
+ 0: a-z
+ 1: a-
+ 2: a
+    *** Failers
+ 0: a
+    b
+No match
+
+/[a-z]+/
+    abcdxyz
+ 0: abcdxyz
+ 1: abcdxy
+ 2: abcdx
+ 3: abcd
+ 4: abc
+ 5: ab
+ 6: a
+
+/[\d-]+/
+    12-34
+ 0: 12-34
+ 1: 12-3
+ 2: 12-
+ 3: 12
+ 4: 1
+    *** Failers
+No match
+    aaa
+No match
+
+/[\d-z]+/
+    12-34z
+ 0: 12-34z
+ 1: 12-34
+ 2: 12-3
+ 3: 12-
+ 4: 12
+ 5: 1
+    *** Failers
+No match
+    aaa
+No match
+
+/\x5c/
+    \\
+ 0: \
+
+/\x20Z/
+    the Zoo
+ 0:  Z
+    *** Failers
+No match
+    Zulu
+No match
+
+/ab{3cd/
+    ab{3cd
+ 0: ab{3cd
+
+/ab{3,cd/
+    ab{3,cd
+ 0: ab{3,cd
+
+/ab{3,4a}cd/
+    ab{3,4a}cd
+ 0: ab{3,4a}cd
+
+/{4,5a}bc/
+    {4,5a}bc
+ 0: {4,5a}bc
+
+/^a.b/
+    a\rb
+ 0: a\x0db
+    *** Failers
+No match
+    a\nb
+No match
+
+/abc$/
+    abc
+ 0: abc
+    abc\n
+ 0: abc
+    *** Failers
+No match
+    abc\ndef
+No match
+
+/(abc)\123/
+    abc\x53
+ 0: abcS
+
+/(abc)\223/
+    abc\x93
+ 0: abc\x93
+
+/(abc)\323/
+    abc\xd3
+ 0: abc\xd3
+
+/(abc)\500/
+    abc\x40
+ 0: abc@
+    abc\100
+ 0: abc@
+
+/(abc)\5000/
+    abc\x400
+ 0: abc@0
+    abc\x40\x30
+ 0: abc@0
+    abc\1000
+ 0: abc@0
+    abc\100\x30
+ 0: abc@0
+    abc\100\060
+ 0: abc@0
+    abc\100\60
+ 0: abc@0
+
+/abc\81/
+    abc\081
+ 0: abc\x0081
+    abc\0\x38\x31
+ 0: abc\x0081
+
+/abc\91/
+    abc\091
+ 0: abc\x0091
+    abc\0\x39\x31
+ 0: abc\x0091
+
+/(a)(b)(c)(d)(e)(f)(g)(h)(i)(j)(k)\12\123/
+    abcdefghijk\12S
+ 0: abcdefghijk\x0aS
+
+/ab\gdef/
+    abgdef
+ 0: abgdef
+
+/a{0}bc/
+    bc
+ 0: bc
+
+/(a|(bc)){0,0}?xyz/
+    xyz
+ 0: xyz
+
+/abc[\10]de/
+    abc\010de
+ 0: abc\x08de
+
+/abc[\1]de/
+    abc\1de
+ 0: abc\x01de
+
+/(abc)[\1]de/
+    abc\1de
+ 0: abc\x01de
+
+/(?s)a.b/
+    a\nb
+ 0: a\x0ab
+
+/^([^a])([^\b])([^c]*)([^d]{3,4})/
+    baNOTccccd
+ 0: baNOTcccc
+ 1: baNOTccc
+ 2: baNOTcc
+ 3: baNOTc
+ 4: baNOT
+    baNOTcccd
+ 0: baNOTccc
+ 1: baNOTcc
+ 2: baNOTc
+ 3: baNOT
+    baNOTccd
+ 0: baNOTcc
+ 1: baNOTc
+ 2: baNOT
+    bacccd
+ 0: baccc
+    *** Failers
+ 0: *** Failers
+ 1: *** Failer
+ 2: *** Faile
+ 3: *** Fail
+ 4: *** Fai
+ 5: *** Fa
+ 6: *** F
+    anything
+No match
+    b\bc   
+No match
+    baccd
+No match
+
+/[^a]/
+    Abc
+ 0: A
+  
+/[^a]/i
+    Abc 
+ 0: b
+
+/[^a]+/
+    AAAaAbc
+ 0: AAA
+ 1: AA
+ 2: A
+  
+/[^a]+/i
+    AAAaAbc 
+ 0: bc
+ 1: b
+
+/[^a]+/
+    bbb\nccc
+ 0: bbb\x0accc
+ 1: bbb\x0acc
+ 2: bbb\x0ac
+ 3: bbb\x0a
+ 4: bbb
+ 5: bb
+ 6: b
+   
+/[^k]$/
+    abc
+ 0: c
+    *** Failers
+ 0: s
+    abk   
+No match
+   
+/[^k]{2,3}$/
+    abc
+ 0: abc
+    kbc
+ 0: bc
+    kabc 
+ 0: abc
+    *** Failers
+ 0: ers
+    abk
+No match
+    akb
+No match
+    akk 
+No match
+
+/^\d{8,}\@.+[^k]$/
+    12345678\@a.b.c.d
+ 0: 12345678@a.b.c.d
+    123456789\@x.y.z
+ 0: 123456789@x.y.z
+    *** Failers
+No match
+    12345678\@x.y.uk
+No match
+    1234567\@a.b.c.d       
+No match
+
+/[^a]/
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: A
+
+/[^a]/i
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: b
+
+/[^az]/
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: A
+
+/[^az]/i
+    aaaabcd
+ 0: b
+    aaAabcd 
+ 0: b
+
+/\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377/
+ \000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037\040\041\042\043\044\045\046\047\050\051\052\053\054\055\056\057\060\061\062\063\064\065\066\067\070\071\072\073\074\075\076\077\100\101\102\103\104\105\106\107\110\111\112\113\114\115\116\117\120\121\122\123\124\125\126\127\130\131\132\133\134\135\136\137\140\141\142\143\144\145\146\147\150\151\152\153\154\155\156\157\160\161\162\163\164\165\166\167\170\171\172\173\174\175\176\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377
+ 0: \x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7f\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8a\x8b\x8c\x8d\x8e\x8f\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9a\x9b\x9c\x9d\x9e\x9f\xa0\xa1\xa2\xa3\xa4\xa5\xa6\xa7\xa8\xa9\xaa\xab\xac\xad\xae\xaf\xb0\xb1\xb2\xb3\xb4\xb5\xb6\xb7\xb8\xb9\xba\xbb\xbc\xbd\xbe\xbf\xc0\xc1\xc2\xc3\xc4\xc5\xc6\xc7\xc8\xc9\xca\xcb\xcc\xcd\xce\xcf\xd0\xd1\xd2\xd3\xd4\xd5\xd6\xd7\xd8\xd9\xda\xdb\xdc\xdd\xde\xdf\xe0\xe1\xe2\xe3\xe4\xe5\xe6\xe7\xe8\xe9\xea\xeb\xec\xed\xee\xef\xf0\xf1\xf2\xf3\xf4\xf5\xf6\xf7\xf8\xf9\xfa\xfb\xfc\xfd\xfe\xff
+
+/P[^*]TAIRE[^*]{1,6}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+ 0: PSTAIREISLL
+
+/P[^*]TAIRE[^*]{1,}?LL/
+    xxxxxxxxxxxPSTAIREISLLxxxxxxxxx
+ 0: PSTAIREISLL
+
+/(\.\d\d[1-9]?)\d+/
+    1.230003938
+ 0: .230003938
+ 1: .23000393
+ 2: .2300039
+ 3: .230003
+ 4: .23000
+ 5: .2300
+ 6: .230
+    1.875000282   
+ 0: .875000282
+ 1: .87500028
+ 2: .8750002
+ 3: .875000
+ 4: .87500
+ 5: .8750
+ 6: .875
+    1.235  
+ 0: .235
+                  
+/(\.\d\d((?=0)|\d(?=\d)))/
+    1.230003938      
+ 0: .230
+ 1: .23
+    1.875000282
+ 0: .875
+    *** Failers 
+No match
+    1.235 
+No match
+    
+/a(?)b/
+    ab 
+ 0: ab
+ 
+/\b(foo)\s+(\w+)/i
+    Food is on the foo table
+ 0: foo table
+ 1: foo tabl
+ 2: foo tab
+ 3: foo ta
+ 4: foo t
+    
+/foo(.*)bar/
+    The food is under the bar in the barn.
+ 0: food is under the bar in the bar
+ 1: food is under the bar
+    
+/foo(.*?)bar/  
+    The food is under the bar in the barn.
+ 0: food is under the bar in the bar
+ 1: food is under the bar
+
+/(.*)(\d*)/
+    I have 2 numbers: 53147
+Matched, but too many subsidiary matches
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2 numbers: 
+ 6: I have 2 numbers:
+ 7: I have 2 numbers
+ 8: I have 2 number
+ 9: I have 2 numbe
+10: I have 2 numb
+11: I have 2 num
+12: I have 2 nu
+13: I have 2 n
+14: I have 2 
+15: I have 2
+16: I have 
+17: I have
+18: I hav
+19: I ha
+20: I h
+21: I 
+    
+/(.*)(\d+)/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2
+ 
+/(.*?)(\d*)/
+    I have 2 numbers: 53147
+Matched, but too many subsidiary matches
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2 numbers: 
+ 6: I have 2 numbers:
+ 7: I have 2 numbers
+ 8: I have 2 number
+ 9: I have 2 numbe
+10: I have 2 numb
+11: I have 2 num
+12: I have 2 nu
+13: I have 2 n
+14: I have 2 
+15: I have 2
+16: I have 
+17: I have
+18: I hav
+19: I ha
+20: I h
+21: I 
+
+/(.*?)(\d+)/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+ 1: I have 2 numbers: 5314
+ 2: I have 2 numbers: 531
+ 3: I have 2 numbers: 53
+ 4: I have 2 numbers: 5
+ 5: I have 2
+
+/(.*)(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/(.*?)(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/(.*)\b(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/(.*\D)(\d+)$/
+    I have 2 numbers: 53147
+ 0: I have 2 numbers: 53147
+
+/^\D*(?!123)/
+    ABC123
+ 0: AB
+ 1: A
+ 2: 
+     
+/^(\D*)(?=\d)(?!123)/
+    ABC445
+ 0: ABC
+    *** Failers
+No match
+    ABC123
+No match
+    
+/^[W-]46]/
+    W46]789 
+ 0: W46]
+    -46]789
+ 0: -46]
+    *** Failers
+No match
+    Wall
+No match
+    Zebra
+No match
+    42
+No match
+    [abcd] 
+No match
+    ]abcd[
+No match
+       
+/^[W-\]46]/
+    W46]789 
+ 0: W
+    Wall
+ 0: W
+    Zebra
+ 0: Z
+    Xylophone  
+ 0: X
+    42
+ 0: 4
+    [abcd] 
+ 0: [
+    ]abcd[
+ 0: ]
+    \\backslash 
+ 0: \
+    *** Failers
+No match
+    -46]789
+No match
+    well
+No match
+    
+/\d\d\/\d\d\/\d\d\d\d/
+    01/01/2000
+ 0: 01/01/2000
+
+/word (?:[a-zA-Z0-9]+ ){0,10}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
+  word cat dog elephant mussel cow horse canary baboon snake shark
+No match
+
+/word (?:[a-zA-Z0-9]+ ){0,300}otherword/
+  word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+No match
+
+/^(a){0,0}/
+    bcd
+ 0: 
+    abc
+ 0: 
+    aab     
+ 0: 
+
+/^(a){0,1}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: 
+    aab  
+ 0: a
+ 1: 
+
+/^(a){0,2}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: 
+    aab  
+ 0: aa
+ 1: a
+ 2: 
+
+/^(a){0,3}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: 
+    aab
+ 0: aa
+ 1: a
+ 2: 
+    aaa   
+ 0: aaa
+ 1: aa
+ 2: a
+ 3: 
+
+/^(a){0,}/
+    bcd
+ 0: 
+    abc
+ 0: a
+ 1: 
+    aab
+ 0: aa
+ 1: a
+ 2: 
+    aaa
+ 0: aaa
+ 1: aa
+ 2: a
+ 3: 
+    aaaaaaaa    
+ 0: aaaaaaaa
+ 1: aaaaaaa
+ 2: aaaaaa
+ 3: aaaaa
+ 4: aaaa
+ 5: aaa
+ 6: aa
+ 7: a
+ 8: 
+
+/^(a){1,1}/
+    bcd
+No match
+    abc
+ 0: a
+    aab  
+ 0: a
+
+/^(a){1,2}/
+    bcd
+No match
+    abc
+ 0: a
+    aab  
+ 0: aa
+ 1: a
+
+/^(a){1,3}/
+    bcd
+No match
+    abc
+ 0: a
+    aab
+ 0: aa
+ 1: a
+    aaa   
+ 0: aaa
+ 1: aa
+ 2: a
+
+/^(a){1,}/
+    bcd
+No match
+    abc
+ 0: a
+    aab
+ 0: aa
+ 1: a
+    aaa
+ 0: aaa
+ 1: aa
+ 2: a
+    aaaaaaaa    
+ 0: aaaaaaaa
+ 1: aaaaaaa
+ 2: aaaaaa
+ 3: aaaaa
+ 4: aaaa
+ 5: aaa
+ 6: aa
+ 7: a
+
+/.*\.gif/
+    borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.{0,}\.gif/
+    borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.*\.gif/m
+    borfle\nbib.gif\nno
+ 0: bib.gif
+
+/.*\.gif/s
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif
+
+/.*\.gif/ms
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif
+    
+/.*$/
+    borfle\nbib.gif\nno
+ 0: no
+
+/.*$/m
+    borfle\nbib.gif\nno
+ 0: borfle
+
+/.*$/s
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif\x0ano
+
+/.*$/ms
+    borfle\nbib.gif\nno
+ 0: borfle\x0abib.gif\x0ano
+ 1: borfle\x0abib.gif
+ 2: borfle
+    
+/.*$/
+    borfle\nbib.gif\nno\n
+ 0: no
+
+/.*$/m
+    borfle\nbib.gif\nno\n
+ 0: borfle
+
+/.*$/s
+    borfle\nbib.gif\nno\n
+ 0: borfle\x0abib.gif\x0ano\x0a
+ 1: borfle\x0abib.gif\x0ano
+
+/.*$/ms
+    borfle\nbib.gif\nno\n
+ 0: borfle\x0abib.gif\x0ano\x0a
+ 1: borfle\x0abib.gif\x0ano
+ 2: borfle\x0abib.gif
+ 3: borfle
+    
+/(.*X|^B)/
+    abcde\n1234Xyz
+ 0: 1234X
+    BarFoo 
+ 0: B
+    *** Failers
+No match
+    abcde\nBar  
+No match
+
+/(.*X|^B)/m
+    abcde\n1234Xyz
+ 0: 1234X
+    BarFoo 
+ 0: B
+    abcde\nBar  
+ 0: B
+
+/(.*X|^B)/s
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+    BarFoo 
+ 0: B
+    *** Failers
+No match
+    abcde\nBar  
+No match
+
+/(.*X|^B)/ms
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+    BarFoo 
+ 0: B
+    abcde\nBar  
+ 0: B
+
+/(?s)(.*X|^B)/
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+    BarFoo 
+ 0: B
+    *** Failers 
+No match
+    abcde\nBar  
+No match
+
+/(?s:.*X|^B)/
+    abcde\n1234Xyz
+ 0: abcde\x0a1234X
+    BarFoo 
+ 0: B
+    *** Failers 
+No match
+    abcde\nBar  
+No match
+
+/^.*B/
+    **** Failers
+No match
+    abc\nB
+No match
+     
+/(?s)^.*B/
+    abc\nB
+ 0: abc\x0aB
+
+/(?m)^.*B/
+    abc\nB
+ 0: B
+     
+/(?ms)^.*B/
+    abc\nB
+ 0: abc\x0aB
+
+/(?ms)^B/
+    abc\nB
+ 0: B
+
+/(?s)B$/
+    B\n
+ 0: B
+
+/^[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/
+    123456654321
+ 0: 123456654321
+  
+/^\d\d\d\d\d\d\d\d\d\d\d\d/
+    123456654321 
+ 0: 123456654321
+
+/^[\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d][\d]/
+    123456654321
+ 0: 123456654321
+  
+/^[abc]{12}/
+    abcabcabcabc
+ 0: abcabcabcabc
+    
+/^[a-c]{12}/
+    abcabcabcabc
+ 0: abcabcabcabc
+    
+/^(a|b|c){12}/
+    abcabcabcabc 
+ 0: abcabcabcabc
+
+/^[abcdefghijklmnopqrstuvwxy0123456789]/
+    n
+ 0: n
+    *** Failers 
+No match
+    z 
+No match
+
+/abcde{0,0}/
+    abcd
+ 0: abcd
+    *** Failers
+No match
+    abce  
+No match
+
+/ab[cd]{0,0}e/
+    abe
+ 0: abe
+    *** Failers
+No match
+    abcde 
+No match
+    
+/ab(c){0,0}d/
+    abd
+ 0: abd
+    *** Failers
+No match
+    abcd   
+No match
+
+/a(b*)/
+    a
+ 0: a
+    ab
+ 0: ab
+ 1: a
+    abbbb
+ 0: abbbb
+ 1: abbb
+ 2: abb
+ 3: ab
+ 4: a
+    *** Failers
+ 0: a
+    bbbbb    
+No match
+    
+/ab\d{0}e/
+    abe
+ 0: abe
+    *** Failers
+No match
+    ab1e   
+No match
+    
+/"([^\\"]+|\\.)*"/
+    the \"quick\" brown fox
+ 0: "quick"
+    \"the \\\"quick\\\" brown fox\" 
+ 0: "the \"quick\" brown fox"
+
+/.*?/g+
+    abc
+ 0: abc
+ 0+ 
+ 1: ab
+ 2: a
+ 3: 
+ 0: 
+ 0+ 
+  
+/\b/g+
+    abc 
+ 0: 
+ 0+ abc
+ 0: 
+ 0+ 
+
+/\b/+g
+    abc 
+ 0: 
+ 0+ abc
+ 0: 
+ 0+ 
+
+//g
+    abc
+ 0: 
+ 0: 
+ 0: 
+ 0: 
+
+/<tr([\w\W\s\d][^<>]{0,})><TD([\w\W\s\d][^<>]{0,})>([\d]{0,}\.)(.*)((<BR>([\w\W\s\d][^<>]{0,})|[\s]{0,}))<\/a><\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><TD([\w\W\s\d][^<>]{0,})>([\w\W\s\d][^<>]{0,})<\/TD><\/TR>/is
+  <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
+ 0: <TR BGCOLOR='#DBE9E9'><TD align=left valign=top>43.<a href='joblist.cfm?JobID=94 6735&Keyword='>Word Processor<BR>(N-1286)</a></TD><TD align=left valign=top>Lega lstaff.com</TD><TD align=left valign=top>CA - Statewide</TD></TR>
+
+/a[^a]b/
+    acb
+ 0: acb
+    a\nb
+ 0: a\x0ab
+    
+/a.b/
+    acb
+ 0: acb
+    *** Failers 
+No match
+    a\nb   
+No match
+    
+/a[^a]b/s
+    acb
+ 0: acb
+    a\nb  
+ 0: a\x0ab
+    
+/a.b/s
+    acb
+ 0: acb
+    a\nb  
+ 0: a\x0ab
+
+/^(b+?|a){1,2}?c/
+    bac
+ 0: bac
+    bbac
+ 0: bbac
+    bbbac
+ 0: bbbac
+    bbbbac
+ 0: bbbbac
+    bbbbbac 
+ 0: bbbbbac
+
+/^(b+|a){1,2}?c/
+    bac
+ 0: bac
+    bbac
+ 0: bbac
+    bbbac
+ 0: bbbac
+    bbbbac
+ 0: bbbbac
+    bbbbbac 
+ 0: bbbbbac
+    
+/(?!\A)x/m
+    x\nb\n
+No match
+    a\bx\n  
+ 0: x
+    
+/\x0{ab}/
+    \0{ab} 
+ 0: \x00{ab}
+
+/(A|B)*?CD/
+    CD 
+ 0: CD
+    
+/(A|B)*CD/
+    CD 
+ 0: CD
+
+/(?<!bar)foo/
+    foo
+ 0: foo
+    catfood
+ 0: foo
+    arfootle
+ 0: foo
+    rfoosh
+ 0: foo
+    *** Failers
+No match
+    barfoo
+No match
+    towbarfoo
+No match
+
+/\w{3}(?<!bar)foo/
+    catfood
+ 0: catfoo
+    *** Failers
+No match
+    foo
+No match
+    barfoo
+No match
+    towbarfoo
+No match
+
+/(?<=(foo)a)bar/
+    fooabar
+ 0: bar
+    *** Failers
+No match
+    bar
+No match
+    foobbar
+No match
+      
+/\Aabc\z/m
+    abc
+ 0: abc
+    *** Failers
+No match
+    abc\n   
+No match
+    qqq\nabc
+No match
+    abc\nzzz
+No match
+    qqq\nabc\nzzz
+No match
+
+"(?>.*/)foo"
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/it/you/see/
+No match
+
+"(?>.*/)foo"
+    /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+ 0: /this/is/a/very/long/line/in/deed/with/very/many/slashes/in/and/foo
+
+/(?>(\.\d\d[1-9]?))\d+/
+    1.230003938
+ 0: .230003938
+ 1: .23000393
+ 2: .2300039
+ 3: .230003
+ 4: .23000
+ 5: .2300
+ 6: .230
+    1.875000282
+ 0: .875000282
+ 1: .87500028
+ 2: .8750002
+ 3: .875000
+ 4: .87500
+ 5: .8750
+    *** Failers 
+No match
+    1.235 
+No match
+
+/^((?>\w+)|(?>\s+))*$/
+    now is the time for all good men to come to the aid of the party
+ 0: now is the time for all good men to come to the aid of the party
+    *** Failers
+No match
+    this is not a line with only words and spaces!
+No match
+    
+/(\d+)(\w)/
+    12345a
+ 0: 12345a
+ 1: 12345
+ 2: 1234
+ 3: 123
+ 4: 12
+    12345+ 
+ 0: 12345
+ 1: 1234
+ 2: 123
+ 3: 12
+
+/((?>\d+))(\w)/
+    12345a
+ 0: 12345a
+    *** Failers
+No match
+    12345+ 
+No match
+
+/(?>a+)b/
+    aaab
+ 0: aaab
+
+/((?>a+)b)/
+    aaab
+ 0: aaab
+
+/(?>(a+))b/
+    aaab
+ 0: aaab
+
+/(?>b)+/
+    aaabbbccc
+ 0: bbb
+ 1: bb
+ 2: b
+
+/(?>a+|b+|c+)*c/
+    aaabbbbccccd
+ 0: aaabbbbcccc
+ 1: aaabbbbc
+    
+/(a+|b+|c+)*c/
+    aaabbbbccccd
+ 0: aaabbbbcccc
+ 1: aaabbbbccc
+ 2: aaabbbbcc
+ 3: aaabbbbc
+
+/((?>[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+ 0: abc(ade)ufh()()x
+ 1: abc(ade)ufh()()
+ 2: abc(ade)ufh()
+ 3: abc(ade)ufh
+ 4: abc(ade)
+ 5: abc
+    
+/\(((?>[^()]+)|\([^()]+\))+\)/ 
+    (abc)
+ 0: (abc)
+    (abc(def)xyz)
+ 0: (abc(def)xyz)
+    *** Failers
+No match
+    ((()aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa   
+No match
+
+/a(?-i)b/i
+    ab
+ 0: ab
+    Ab
+ 0: Ab
+    *** Failers 
+No match
+    aB
+No match
+    AB
+No match
+        
+/(a (?x)b c)d e/
+    a bcd e
+ 0: a bcd e
+    *** Failers
+No match
+    a b cd e
+No match
+    abcd e   
+No match
+    a bcde 
+No match
+ 
+/(a b(?x)c d (?-x)e f)/
+    a bcde f
+ 0: a bcde f
+    *** Failers
+No match
+    abcdef  
+No match
+
+/(a(?i)b)c/
+    abc
+ 0: abc
+    aBc
+ 0: aBc
+    *** Failers
+No match
+    abC
+No match
+    aBC  
+No match
+    Abc
+No match
+    ABc
+No match
+    ABC
+No match
+    AbC
+No match
+    
+/a(?i:b)c/
+    abc
+ 0: abc
+    aBc
+ 0: aBc
+    *** Failers 
+No match
+    ABC
+No match
+    abC
+No match
+    aBC
+No match
+    
+/a(?i:b)*c/
+    aBc
+ 0: aBc
+    aBBc
+ 0: aBBc
+    *** Failers 
+No match
+    aBC
+No match
+    aBBC
+No match
+    
+/a(?=b(?i)c)\w\wd/
+    abcd
+ 0: abcd
+    abCd
+ 0: abCd
+    *** Failers
+No match
+    aBCd
+No match
+    abcD     
+No match
+    
+/(?s-i:more.*than).*million/i
+    more than million
+ 0: more than million
+    more than MILLION
+ 0: more than MILLION
+    more \n than Million 
+ 0: more \x0a than Million
+    *** Failers
+No match
+    MORE THAN MILLION    
+No match
+    more \n than \n million 
+No match
+
+/(?:(?s-i)more.*than).*million/i
+    more than million
+ 0: more than million
+    more than MILLION
+ 0: more than MILLION
+    more \n than Million 
+ 0: more \x0a than Million
+    *** Failers
+No match
+    MORE THAN MILLION    
+No match
+    more \n than \n million 
+No match
+    
+/(?>a(?i)b+)+c/ 
+    abc
+ 0: abc
+    aBbc
+ 0: aBbc
+    aBBc 
+ 0: aBBc
+    *** Failers
+No match
+    Abc
+No match
+    abAb    
+No match
+    abbC 
+No match
+    
+/(?=a(?i)b)\w\wc/
+    abc
+ 0: abc
+    aBc
+ 0: aBc
+    *** Failers
+No match
+    Ab 
+No match
+    abC
+No match
+    aBC     
+No match
+    
+/(?<=a(?i)b)(\w\w)c/
+    abxxc
+ 0: xxc
+    aBxxc
+ 0: xxc
+    *** Failers
+No match
+    Abxxc
+No match
+    ABxxc
+No match
+    abxxC      
+No match
+
+/^(?(?=abc)\w{3}:|\d\d)$/
+    abc:
+ 0: abc:
+    12
+ 0: 12
+    *** Failers
+No match
+    123
+No match
+    xyz    
+No match
+
+/^(?(?!abc)\d\d|\w{3}:)$/
+    abc:
+ 0: abc:
+    12
+ 0: 12
+    *** Failers
+No match
+    123
+No match
+    xyz    
+No match
+    
+/(?(?<=foo)bar|cat)/
+    foobar
+ 0: bar
+    cat
+ 0: cat
+    fcat
+ 0: cat
+    focat   
+ 0: cat
+    *** Failers
+No match
+    foocat  
+No match
+
+/(?(?<!foo)cat|bar)/
+    foobar
+ 0: bar
+    cat
+ 0: cat
+    fcat
+ 0: cat
+    focat   
+ 0: cat
+    *** Failers
+No match
+    foocat  
+No match
+
+/(?>a*)*/
+    a
+ 0: a
+ 1: 
+    aa
+ 0: aa
+ 1: 
+    aaaa
+ 0: aaaa
+ 1: 
+    
+/(abc|)+/
+    abc
+ 0: abc
+ 1: 
+    abcabc
+ 0: abcabc
+ 1: abc
+ 2: 
+    abcabcabc
+ 0: abcabcabc
+ 1: abcabc
+ 2: abc
+ 3: 
+    xyz      
+ 0: 
+
+/([a]*)*/
+    a
+ 0: a
+ 1: 
+    aaaaa 
+ 0: aaaaa
+ 1: aaaa
+ 2: aaa
+ 3: aa
+ 4: a
+ 5: 
+ 
+/([ab]*)*/
+    a
+ 0: a
+ 1: 
+    b
+ 0: b
+ 1: 
+    ababab
+ 0: ababab
+ 1: ababa
+ 2: abab
+ 3: aba
+ 4: ab
+ 5: a
+ 6: 
+    aaaabcde
+ 0: aaaab
+ 1: aaaa
+ 2: aaa
+ 3: aa
+ 4: a
+ 5: 
+    bbbb    
+ 0: bbbb
+ 1: bbb
+ 2: bb
+ 3: b
+ 4: 
+ 
+/([^a]*)*/
+    b
+ 0: b
+ 1: 
+    bbbb
+ 0: bbbb
+ 1: bbb
+ 2: bb
+ 3: b
+ 4: 
+    aaa   
+ 0: 
+ 
+/([^ab]*)*/
+    cccc
+ 0: cccc
+ 1: ccc
+ 2: cc
+ 3: c
+ 4: 
+    abab  
+ 0: 
+ 
+/([a]*?)*/
+    a
+ 0: a
+ 1: 
+    aaaa 
+ 0: aaaa
+ 1: aaa
+ 2: aa
+ 3: a
+ 4: 
+ 
+/([ab]*?)*/
+    a
+ 0: a
+ 1: 
+    b
+ 0: b
+ 1: 
+    abab
+ 0: abab
+ 1: aba
+ 2: ab
+ 3: a
+ 4: 
+    baba   
+ 0: baba
+ 1: bab
+ 2: ba
+ 3: b
+ 4: 
+ 
+/([^a]*?)*/
+    b
+ 0: b
+ 1: 
+    bbbb
+ 0: bbbb
+ 1: bbb
+ 2: bb
+ 3: b
+ 4: 
+    aaa   
+ 0: 
+ 
+/([^ab]*?)*/
+    c
+ 0: c
+ 1: 
+    cccc
+ 0: cccc
+ 1: ccc
+ 2: cc
+ 3: c
+ 4: 
+    baba   
+ 0: 
+ 
+/(?>a*)*/
+    a
+ 0: a
+ 1: 
+    aaabcde 
+ 0: aaa
+ 1: 
+ 
+/((?>a*))*/
+    aaaaa
+ 0: aaaaa
+ 1: 
+    aabbaa 
+ 0: aa
+ 1: 
+ 
+/((?>a*?))*/
+    aaaaa
+ 0: aaaaa
+ 1: 
+    aabbaa 
+ 0: aa
+ 1: 
+
+/(?(?=[^a-z]+[a-z])  \d{2}-[a-z]{3}-\d{2}  |  \d{2}-\d{2}-\d{2} ) /x
+    12-sep-98
+ 0: 12-sep-98
+    12-09-98
+ 0: 12-09-98
+    *** Failers
+No match
+    sep-12-98
+No match
+        
+/(?i:saturday|sunday)/
+    saturday
+ 0: saturday
+    sunday
+ 0: sunday
+    Saturday
+ 0: Saturday
+    Sunday
+ 0: Sunday
+    SATURDAY
+ 0: SATURDAY
+    SUNDAY
+ 0: SUNDAY
+    SunDay
+ 0: SunDay
+    
+/(a(?i)bc|BB)x/
+    abcx
+ 0: abcx
+    aBCx
+ 0: aBCx
+    bbx
+ 0: bbx
+    BBx
+ 0: BBx
+    *** Failers
+No match
+    abcX
+No match
+    aBCX
+No match
+    bbX
+No match
+    BBX               
+No match
+
+/^([ab](?i)[cd]|[ef])/
+    ac
+ 0: ac
+    aC
+ 0: aC
+    bD
+ 0: bD
+    elephant
+ 0: e
+    Europe 
+ 0: E
+    frog
+ 0: f
+    France
+ 0: F
+    *** Failers
+No match
+    Africa     
+No match
+
+/^(ab|a(?i)[b-c](?m-i)d|x(?i)y|z)/
+    ab
+ 0: ab
+    aBd
+ 0: aBd
+    xy
+ 0: xy
+    xY
+ 0: xY
+    zebra
+ 0: z
+    Zambesi
+ 0: Z
+    *** Failers
+No match
+    aCD  
+No match
+    XY  
+No match
+
+/(?<=foo\n)^bar/m
+    foo\nbar
+ 0: bar
+    *** Failers
+No match
+    bar
+No match
+    baz\nbar   
+No match
+
+/(?<=(?<!foo)bar)baz/
+    barbaz
+ 0: baz
+    barbarbaz 
+ 0: baz
+    koobarbaz 
+ 0: baz
+    *** Failers
+No match
+    baz
+No match
+    foobarbaz 
+No match
+
+/The following tests are taken from the Perl 5.005 test suite; some of them/
+/are compatible with 5.004, but I'd rather not have to sort them out./
+No match
+
+/abc/
+    abc
+ 0: abc
+    xabcy
+ 0: abc
+    ababc
+ 0: abc
+    *** Failers
+No match
+    xbc
+No match
+    axc
+No match
+    abx
+No match
+
+/ab*c/
+    abc
+ 0: abc
+
+/ab*bc/
+    abc
+ 0: abc
+    abbc
+ 0: abbc
+    abbbbc
+ 0: abbbbc
+
+/.{1}/
+    abbbbc
+ 0: a
+
+/.{3,4}/
+    abbbbc
+ 0: abbb
+ 1: abb
+
+/ab{0,}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab+bc/
+    abbc
+ 0: abbc
+    *** Failers
+No match
+    abc
+No match
+    abq
+No match
+
+/ab{1,}bc/
+
+/ab+bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{1,}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{1,3}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{3,4}bc/
+    abbbbc
+ 0: abbbbc
+
+/ab{4,5}bc/
+    *** Failers
+No match
+    abq
+No match
+    abbbbc
+No match
+
+/ab?bc/
+    abbc
+ 0: abbc
+    abc
+ 0: abc
+
+/ab{0,1}bc/
+    abc
+ 0: abc
+
+/ab?bc/
+
+/ab?c/
+    abc
+ 0: abc
+
+/ab{0,1}c/
+    abc
+ 0: abc
+
+/^abc$/
+    abc
+ 0: abc
+    *** Failers
+No match
+    abbbbc
+No match
+    abcc
+No match
+
+/^abc/
+    abcc
+ 0: abc
+
+/^abc$/
+
+/abc$/
+    aabc
+ 0: abc
+    *** Failers
+No match
+    aabc
+ 0: abc
+    aabcd
+No match
+
+/^/
+    abc
+ 0: 
+
+/$/
+    abc
+ 0: 
+
+/a.c/
+    abc
+ 0: abc
+    axc
+ 0: axc
+
+/a.*c/
+    axyzc
+ 0: axyzc
+
+/a[bc]d/
+    abd
+ 0: abd
+    *** Failers
+No match
+    axyzd
+No match
+    abc
+No match
+
+/a[b-d]e/
+    ace
+ 0: ace
+
+/a[b-d]/
+    aac
+ 0: ac
+
+/a[-b]/
+    a-
+ 0: a-
+
+/a[b-]/
+    a-
+ 0: a-
+
+/a]/
+    a]
+ 0: a]
+
+/a[]]b/
+    a]b
+ 0: a]b
+
+/a[^bc]d/
+    aed
+ 0: aed
+    *** Failers
+No match
+    abd
+No match
+    abd
+No match
+
+/a[^-b]c/
+    adc
+ 0: adc
+
+/a[^]b]c/
+    adc
+ 0: adc
+    *** Failers
+No match
+    a-c
+ 0: a-c
+    a]c
+No match
+
+/\ba\b/
+    a-
+ 0: a
+    -a
+ 0: a
+    -a-
+ 0: a
+
+/\by\b/
+    *** Failers
+No match
+    xy
+No match
+    yz
+No match
+    xyz
+No match
+
+/\Ba\B/
+    *** Failers
+ 0: a
+    a-
+No match
+    -a
+No match
+    -a-
+No match
+
+/\By\b/
+    xy
+ 0: y
+
+/\by\B/
+    yz
+ 0: y
+
+/\By\B/
+    xyz
+ 0: y
+
+/\w/
+    a
+ 0: a
+
+/\W/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    a
+No match
+
+/a\sb/
+    a b
+ 0: a b
+
+/a\Sb/
+    a-b
+ 0: a-b
+    *** Failers
+No match
+    a-b
+ 0: a-b
+    a b
+No match
+
+/\d/
+    1
+ 0: 1
+
+/\D/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    1
+No match
+
+/[\w]/
+    a
+ 0: a
+
+/[\W]/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    a
+No match
+
+/a[\s]b/
+    a b
+ 0: a b
+
+/a[\S]b/
+    a-b
+ 0: a-b
+    *** Failers
+No match
+    a-b
+ 0: a-b
+    a b
+No match
+
+/[\d]/
+    1
+ 0: 1
+
+/[\D]/
+    -
+ 0: -
+    *** Failers
+ 0: *
+    -
+ 0: -
+    1
+No match
+
+/ab|cd/
+    abc
+ 0: ab
+    abcd
+ 0: ab
+
+/()ef/
+    def
+ 0: ef
+
+/$b/
+
+/a\(b/
+    a(b
+ 0: a(b
+
+/a\(*b/
+    ab
+ 0: ab
+    a((b
+ 0: a((b
+
+/a\\b/
+    a\b
+No match
+
+/((a))/
+    abc
+ 0: a
+
+/(a)b(c)/
+    abc
+ 0: abc
+
+/a+b+c/
+    aabbabc
+ 0: abc
+
+/a{1,}b{1,}c/
+    aabbabc
+ 0: abc
+
+/a.+?c/
+    abcabc
+ 0: abcabc
+ 1: abc
+
+/(a+|b)*/
+    ab
+ 0: ab
+ 1: a
+ 2: 
+
+/(a+|b){0,}/
+    ab
+ 0: ab
+ 1: a
+ 2: 
+
+/(a+|b)+/
+    ab
+ 0: ab
+ 1: a
+
+/(a+|b){1,}/
+    ab
+ 0: ab
+ 1: a
+
+/(a+|b)?/
+    ab
+ 0: a
+ 1: 
+
+/(a+|b){0,1}/
+    ab
+ 0: a
+ 1: 
+
+/[^ab]*/
+    cde
+ 0: cde
+ 1: cd
+ 2: c
+ 3: 
+
+/abc/
+    *** Failers
+No match
+    b
+No match
+    
+
+/a*/
+    
+
+/([abc])*d/
+    abbbcd
+ 0: abbbcd
+
+/([abc])*bcd/
+    abcd
+ 0: abcd
+
+/a|b|c|d|e/
+    e
+ 0: e
+
+/(a|b|c|d|e)f/
+    ef
+ 0: ef
+
+/abcd*efg/
+    abcdefg
+ 0: abcdefg
+
+/ab*/
+    xabyabbbz
+ 0: ab
+ 1: a
+    xayabbbz
+ 0: a
+
+/(ab|cd)e/
+    abcde
+ 0: cde
+
+/[abhgefdc]ij/
+    hij
+ 0: hij
+
+/^(ab|cd)e/
+
+/(abc|)ef/
+    abcdef
+ 0: ef
+
+/(a|b)c*d/
+    abcd
+ 0: bcd
+
+/(ab|ab*)bc/
+    abc
+ 0: abc
+
+/a([bc]*)c*/
+    abc
+ 0: abc
+ 1: ab
+ 2: a
+
+/a([bc]*)(c*d)/
+    abcd
+ 0: abcd
+
+/a([bc]+)(c*d)/
+    abcd
+ 0: abcd
+
+/a([bc]*)(c+d)/
+    abcd
+ 0: abcd
+
+/a[bcd]*dcdcde/
+    adcdcde
+ 0: adcdcde
+
+/a[bcd]+dcdcde/
+    *** Failers
+No match
+    abcde
+No match
+    adcdcde
+No match
+
+/(ab|a)b*c/
+    abc
+ 0: abc
+
+/((a)(b)c)(d)/
+    abcd
+ 0: abcd
+
+/[a-zA-Z_][a-zA-Z0-9_]*/
+    alpha
+ 0: alpha
+ 1: alph
+ 2: alp
+ 3: al
+ 4: a
+
+/^a(bc+|b[eh])g|.h$/
+    abh
+ 0: bh
+
+/(bc+d$|ef*g.|h?i(j|k))/
+    effgz
+ 0: effgz
+    ij
+ 0: ij
+    reffgz
+ 0: effgz
+    *** Failers
+No match
+    effg
+No match
+    bcdd
+No match
+
+/((((((((((a))))))))))/
+    a
+ 0: a
+
+/(((((((((a)))))))))/
+    a
+ 0: a
+
+/multiple words of text/
+    *** Failers
+No match
+    aa
+No match
+    uh-uh
+No match
+
+/multiple words/
+    multiple words, yeah
+ 0: multiple words
+
+/(.*)c(.*)/
+    abcde
+ 0: abcde
+ 1: abcd
+ 2: abc
+
+/\((.*), (.*)\)/
+    (a, b)
+ 0: (a, b)
+
+/[k]/
+
+/abcd/
+    abcd
+ 0: abcd
+
+/a(bc)d/
+    abcd
+ 0: abcd
+
+/a[-]?c/
+    ac
+ 0: ac
+
+/abc/i
+    ABC
+ 0: ABC
+    XABCY
+ 0: ABC
+    ABABC
+ 0: ABC
+    *** Failers
+No match
+    aaxabxbaxbbx
+No match
+    XBC
+No match
+    AXC
+No match
+    ABX
+No match
+
+/ab*c/i
+    ABC
+ 0: ABC
+
+/ab*bc/i
+    ABC
+ 0: ABC
+    ABBC
+ 0: ABBC
+
+/ab*?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{0,}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab+?bc/i
+    ABBC
+ 0: ABBC
+
+/ab+bc/i
+    *** Failers
+No match
+    ABC
+No match
+    ABQ
+No match
+
+/ab{1,}bc/i
+
+/ab+bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{1,}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{1,3}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{3,4}?bc/i
+    ABBBBC
+ 0: ABBBBC
+
+/ab{4,5}?bc/i
+    *** Failers
+No match
+    ABQ
+No match
+    ABBBBC
+No match
+
+/ab??bc/i
+    ABBC
+ 0: ABBC
+    ABC
+ 0: ABC
+
+/ab{0,1}?bc/i
+    ABC
+ 0: ABC
+
+/ab??bc/i
+
+/ab??c/i
+    ABC
+ 0: ABC
+
+/ab{0,1}?c/i
+    ABC
+ 0: ABC
+
+/^abc$/i
+    ABC
+ 0: ABC
+    *** Failers
+No match
+    ABBBBC
+No match
+    ABCC
+No match
+
+/^abc/i
+    ABCC
+ 0: ABC
+
+/^abc$/i
+
+/abc$/i
+    AABC
+ 0: ABC
+
+/^/i
+    ABC
+ 0: 
+
+/$/i
+    ABC
+ 0: 
+
+/a.c/i
+    ABC
+ 0: ABC
+    AXC
+ 0: AXC
+
+/a.*?c/i
+    AXYZC
+ 0: AXYZC
+
+/a.*c/i
+    *** Failers
+No match
+    AABC
+ 0: AABC
+    AXYZD
+No match
+
+/a[bc]d/i
+    ABD
+ 0: ABD
+
+/a[b-d]e/i
+    ACE
+ 0: ACE
+    *** Failers
+No match
+    ABC
+No match
+    ABD
+No match
+
+/a[b-d]/i
+    AAC
+ 0: AC
+
+/a[-b]/i
+    A-
+ 0: A-
+
+/a[b-]/i
+    A-
+ 0: A-
+
+/a]/i
+    A]
+ 0: A]
+
+/a[]]b/i
+    A]B
+ 0: A]B
+
+/a[^bc]d/i
+    AED
+ 0: AED
+
+/a[^-b]c/i
+    ADC
+ 0: ADC
+    *** Failers
+No match
+    ABD
+No match
+    A-C
+No match
+
+/a[^]b]c/i
+    ADC
+ 0: ADC
+
+/ab|cd/i
+    ABC
+ 0: AB
+    ABCD
+ 0: AB
+
+/()ef/i
+    DEF
+ 0: EF
+
+/$b/i
+    *** Failers
+No match
+    A]C
+No match
+    B
+No match
+
+/a\(b/i
+    A(B
+ 0: A(B
+
+/a\(*b/i
+    AB
+ 0: AB
+    A((B
+ 0: A((B
+
+/a\\b/i
+    A\B
+No match
+
+/((a))/i
+    ABC
+ 0: A
+
+/(a)b(c)/i
+    ABC
+ 0: ABC
+
+/a+b+c/i
+    AABBABC
+ 0: ABC
+
+/a{1,}b{1,}c/i
+    AABBABC
+ 0: ABC
+
+/a.+?c/i
+    ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/a.*?c/i
+    ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/a.{0,5}?c/i
+    ABCABC
+ 0: ABCABC
+ 1: ABC
+
+/(a+|b)*/i
+    AB
+ 0: AB
+ 1: A
+ 2: 
+
+/(a+|b){0,}/i
+    AB
+ 0: AB
+ 1: A
+ 2: 
+
+/(a+|b)+/i
+    AB
+ 0: AB
+ 1: A
+
+/(a+|b){1,}/i
+    AB
+ 0: AB
+ 1: A
+
+/(a+|b)?/i
+    AB
+ 0: A
+ 1: 
+
+/(a+|b){0,1}/i
+    AB
+ 0: A
+ 1: 
+
+/(a+|b){0,1}?/i
+    AB
+ 0: A
+ 1: 
+
+/[^ab]*/i
+    CDE
+ 0: CDE
+ 1: CD
+ 2: C
+ 3: 
+
+/abc/i
+
+/a*/i
+    
+
+/([abc])*d/i
+    ABBBCD
+ 0: ABBBCD
+
+/([abc])*bcd/i
+    ABCD
+ 0: ABCD
+
+/a|b|c|d|e/i
+    E
+ 0: E
+
+/(a|b|c|d|e)f/i
+    EF
+ 0: EF
+
+/abcd*efg/i
+    ABCDEFG
+ 0: ABCDEFG
+
+/ab*/i
+    XABYABBBZ
+ 0: AB
+ 1: A
+    XAYABBBZ
+ 0: A
+
+/(ab|cd)e/i
+    ABCDE
+ 0: CDE
+
+/[abhgefdc]ij/i
+    HIJ
+ 0: HIJ
+
+/^(ab|cd)e/i
+    ABCDE
+No match
+
+/(abc|)ef/i
+    ABCDEF
+ 0: EF
+
+/(a|b)c*d/i
+    ABCD
+ 0: BCD
+
+/(ab|ab*)bc/i
+    ABC
+ 0: ABC
+
+/a([bc]*)c*/i
+    ABC
+ 0: ABC
+ 1: AB
+ 2: A
+
+/a([bc]*)(c*d)/i
+    ABCD
+ 0: ABCD
+
+/a([bc]+)(c*d)/i
+    ABCD
+ 0: ABCD
+
+/a([bc]*)(c+d)/i
+    ABCD
+ 0: ABCD
+
+/a[bcd]*dcdcde/i
+    ADCDCDE
+ 0: ADCDCDE
+
+/a[bcd]+dcdcde/i
+
+/(ab|a)b*c/i
+    ABC
+ 0: ABC
+
+/((a)(b)c)(d)/i
+    ABCD
+ 0: ABCD
+
+/[a-zA-Z_][a-zA-Z0-9_]*/i
+    ALPHA
+ 0: ALPHA
+ 1: ALPH
+ 2: ALP
+ 3: AL
+ 4: A
+
+/^a(bc+|b[eh])g|.h$/i
+    ABH
+ 0: BH
+
+/(bc+d$|ef*g.|h?i(j|k))/i
+    EFFGZ
+ 0: EFFGZ
+    IJ
+ 0: IJ
+    REFFGZ
+ 0: EFFGZ
+    *** Failers
+No match
+    ADCDCDE
+No match
+    EFFG
+No match
+    BCDD
+No match
+
+/((((((((((a))))))))))/i
+    A
+ 0: A
+
+/(((((((((a)))))))))/i
+    A
+ 0: A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i
+    A
+ 0: A
+
+/(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i
+    C
+ 0: C
+
+/multiple words of text/i
+    *** Failers
+No match
+    AA
+No match
+    UH-UH
+No match
+
+/multiple words/i
+    MULTIPLE WORDS, YEAH
+ 0: MULTIPLE WORDS
+
+/(.*)c(.*)/i
+    ABCDE
+ 0: ABCDE
+ 1: ABCD
+ 2: ABC
+
+/\((.*), (.*)\)/i
+    (A, B)
+ 0: (A, B)
+
+/[k]/i
+
+/abcd/i
+    ABCD
+ 0: ABCD
+
+/a(bc)d/i
+    ABCD
+ 0: ABCD
+
+/a[-]?c/i
+    AC
+ 0: AC
+
+/a(?!b)./
+    abad
+ 0: ad
+
+/a(?=d)./
+    abad
+ 0: ad
+
+/a(?=c|d)./
+    abad
+ 0: ad
+
+/a(?:b|c|d)(.)/
+    ace
+ 0: ace
+
+/a(?:b|c|d)*(.)/
+    ace
+ 0: ace
+ 1: ac
+
+/a(?:b|c|d)+?(.)/
+    ace
+ 0: ace
+    acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+ 2: acdbcd
+ 3: acdbc
+ 4: acdb
+ 5: acd
+
+/a(?:b|c|d)+(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+ 2: acdbcd
+ 3: acdbc
+ 4: acdb
+ 5: acd
+
+/a(?:b|c|d){2}(.)/
+    acdbcdbe
+ 0: acdb
+
+/a(?:b|c|d){4,5}(.)/
+    acdbcdbe
+ 0: acdbcdb
+ 1: acdbcd
+
+/a(?:b|c|d){4,5}?(.)/
+    acdbcdbe
+ 0: acdbcdb
+ 1: acdbcd
+
+/((foo)|(bar))*/
+    foobar
+ 0: foobar
+ 1: foo
+ 2: 
+
+/a(?:b|c|d){6,7}(.)/
+    acdbcdbe
+ 0: acdbcdbe
+
+/a(?:b|c|d){6,7}?(.)/
+    acdbcdbe
+ 0: acdbcdbe
+
+/a(?:b|c|d){5,6}(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|c|d){5,6}?(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|c|d){5,7}(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|c|d){5,7}?(.)/
+    acdbcdbe
+ 0: acdbcdbe
+ 1: acdbcdb
+
+/a(?:b|(c|e){1,2}?|d)+?(.)/
+    ace
+ 0: ace
+
+/^(.+)?B/
+    AB
+ 0: AB
+
+/^([^a-z])|(\^)$/
+    .
+ 0: .
+
+/^[<>]&/
+    <&OUT
+ 0: <&
+
+/(?:(f)(o)(o)|(b)(a)(r))*/
+    foobar
+ 0: foobar
+ 1: foo
+ 2: 
+
+/(?<=a)b/
+    ab
+ 0: b
+    *** Failers
+No match
+    cb
+No match
+    b
+No match
+
+/(?<!c)b/
+    ab
+ 0: b
+    b
+ 0: b
+    b
+ 0: b
+
+/(?:..)*a/
+    aba
+ 0: aba
+ 1: a
+
+/(?:..)*?a/
+    aba
+ 0: aba
+ 1: a
+
+/^(){3,5}/
+    abc
+ 0: 
+
+/^(a+)*ax/
+    aax
+ 0: aax
+
+/^((a|b)+)*ax/
+    aax
+ 0: aax
+
+/^((a|bc)+)*ax/
+    aax
+ 0: aax
+
+/(a|x)*ab/
+    cab
+ 0: ab
+
+/(a)*ab/
+    cab
+ 0: ab
+
+/(?:(?i)a)b/
+    ab
+ 0: ab
+
+/((?i)a)b/
+    ab
+ 0: ab
+
+/(?:(?i)a)b/
+    Ab
+ 0: Ab
+
+/((?i)a)b/
+    Ab
+ 0: Ab
+
+/(?:(?i)a)b/
+    *** Failers
+No match
+    cb
+No match
+    aB
+No match
+
+/((?i)a)b/
+
+/(?i:a)b/
+    ab
+ 0: ab
+
+/((?i:a))b/
+    ab
+ 0: ab
+
+/(?i:a)b/
+    Ab
+ 0: Ab
+
+/((?i:a))b/
+    Ab
+ 0: Ab
+
+/(?i:a)b/
+    *** Failers
+No match
+    aB
+No match
+    aB
+No match
+
+/((?i:a))b/
+
+/(?:(?-i)a)b/i
+    ab
+ 0: ab
+
+/((?-i)a)b/i
+    ab
+ 0: ab
+
+/(?:(?-i)a)b/i
+    aB
+ 0: aB
+
+/((?-i)a)b/i
+    aB
+ 0: aB
+
+/(?:(?-i)a)b/i
+    *** Failers
+No match
+    aB
+ 0: aB
+    Ab
+No match
+
+/((?-i)a)b/i
+
+/(?:(?-i)a)b/i
+    aB
+ 0: aB
+
+/((?-i)a)b/i
+    aB
+ 0: aB
+
+/(?:(?-i)a)b/i
+    *** Failers
+No match
+    Ab
+No match
+    AB
+No match
+
+/((?-i)a)b/i
+
+/(?-i:a)b/i
+    ab
+ 0: ab
+
+/((?-i:a))b/i
+    ab
+ 0: ab
+
+/(?-i:a)b/i
+    aB
+ 0: aB
+
+/((?-i:a))b/i
+    aB
+ 0: aB
+
+/(?-i:a)b/i
+    *** Failers
+No match
+    AB
+No match
+    Ab
+No match
+
+/((?-i:a))b/i
+
+/(?-i:a)b/i
+    aB
+ 0: aB
+
+/((?-i:a))b/i
+    aB
+ 0: aB
+
+/(?-i:a)b/i
+    *** Failers
+No match
+    Ab
+No match
+    AB
+No match
+
+/((?-i:a))b/i
+
+/((?-i:a.))b/i
+    *** Failers
+No match
+    AB
+No match
+    a\nB
+No match
+
+/((?s-i:a.))b/i
+    a\nB
+ 0: a\x0aB
+
+/(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/
+    cabbbb
+ 0: cabbbb
+
+/(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/
+    caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+ 0: caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
+
+/foo\w*\d{4}baz/
+    foobar1234baz
+ 0: foobar1234baz
+
+/x(~~)*(?:(?:F)?)?/
+    x~~
+ 0: x~~
+ 1: x
+
+/^a(?#xxx){3}c/
+    aaac
+ 0: aaac
+
+/^a (?#xxx) (?#yyy) {3}c/x
+    aaac
+ 0: aaac
+
+/(?<![cd])b/
+    *** Failers
+No match
+    B\nB
+No match
+    dbcb
+No match
+
+/(?<![cd])[ab]/
+    dbaacb
+ 0: a
+
+/(?<!(c|d))b/
+
+/(?<!(c|d))[ab]/
+    dbaacb
+ 0: a
+
+/(?<!cd)[ab]/
+    cdaccb
+ 0: b
+
+/^(?:a?b?)*$/
+    *** Failers
+No match
+    dbcb
+No match
+    a--
+No match
+
+/((?s)^a(.))((?m)^b$)/
+    a\nb\nc\n
+ 0: a\x0ab
+
+/((?m)^b$)/
+    a\nb\nc\n
+ 0: b
+
+/(?m)^b/
+    a\nb\n
+ 0: b
+
+/(?m)^(b)/
+    a\nb\n
+ 0: b
+
+/((?m)^b)/
+    a\nb\n
+ 0: b
+
+/\n((?m)^b)/
+    a\nb\n
+ 0: \x0ab
+
+/((?s).)c(?!.)/
+    a\nb\nc\n
+ 0: \x0ac
+    a\nb\nc\n
+ 0: \x0ac
+
+/((?s)b.)c(?!.)/
+    a\nb\nc\n
+ 0: b\x0ac
+    a\nb\nc\n
+ 0: b\x0ac
+
+/^b/
+
+/()^b/
+    *** Failers
+No match
+    a\nb\nc\n
+No match
+    a\nb\nc\n
+No match
+
+/((?m)^b)/
+    a\nb\nc\n
+ 0: b
+
+/(?(?!a)a|b)/
+
+/(?(?!a)b|a)/
+    a
+ 0: a
+
+/(?(?=a)b|a)/
+    *** Failers
+No match
+    a
+No match
+    a
+No match
+
+/(?(?=a)a|b)/
+    a
+ 0: a
+
+/(\w+:)+/
+    one:
+ 0: one:
+
+/$(?<=^(a))/
+    a
+ 0: 
+
+/([\w:]+::)?(\w+)$/
+    abcd
+ 0: abcd
+    xy:z:::abcd
+ 0: xy:z:::abcd
+
+/^[^bcd]*(c+)/
+    aexycd
+ 0: aexyc
+
+/(a*)b+/
+    caab
+ 0: aab
+
+/([\w:]+::)?(\w+)$/
+    abcd
+ 0: abcd
+    xy:z:::abcd
+ 0: xy:z:::abcd
+    *** Failers
+ 0: Failers
+    abcd:
+No match
+    abcd:
+No match
+
+/^[^bcd]*(c+)/
+    aexycd
+ 0: aexyc
+
+/(>a+)ab/
+
+/(?>a+)b/
+    aaab
+ 0: aaab
+
+/([[:]+)/
+    a:[b]:
+ 0: :[
+ 1: :
+
+/([[=]+)/
+    a=[b]=
+ 0: =[
+ 1: =
+
+/([[.]+)/
+    a.[b].
+ 0: .[
+ 1: .
+
+/((?>a+)b)/
+    aaab
+ 0: aaab
+
+/(?>(a+))b/
+    aaab
+ 0: aaab
+
+/((?>[^()]+)|\([^()]*\))+/
+    ((abc(ade)ufh()()x
+ 0: abc(ade)ufh()()x
+ 1: abc(ade)ufh()()
+ 2: abc(ade)ufh()
+ 3: abc(ade)ufh
+ 4: abc(ade)
+ 5: abc
+
+/a\Z/
+    *** Failers
+No match
+    aaab
+No match
+    a\nb\n
+No match
+
+/b\Z/
+    a\nb\n
+ 0: b
+
+/b\z/
+
+/b\Z/
+    a\nb
+ 0: b
+
+/b\z/
+    a\nb
+ 0: b
+    *** Failers
+No match
+    
+/(?>.*)(?<=(abcd|wxyz))/
+    alphabetabcd
+ 0: alphabetabcd
+    endingwxyz
+ 0: endingwxyz
+    *** Failers
+No match
+    a rather long string that doesn't end with one of them
+No match
+
+/word (?>(?:(?!otherword)[a-zA-Z0-9]+ ){0,30})otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark otherword
+ 0: word cat dog elephant mussel cow horse canary baboon snake shark otherword
+    word cat dog elephant mussel cow horse canary baboon snake shark
+No match
+  
+/word (?>[a-zA-Z0-9]+ ){0,30}otherword/
+    word cat dog elephant mussel cow horse canary baboon snake shark the quick brown fox and the lazy dog and several other words getting close to thirty by now I hope
+No match
+
+/(?<=\d{3}(?!999))foo/
+    999foo
+ 0: foo
+    123999foo 
+ 0: foo
+    *** Failers
+No match
+    123abcfoo
+No match
+    
+/(?<=(?!...999)\d{3})foo/
+    999foo
+ 0: foo
+    123999foo 
+ 0: foo
+    *** Failers
+No match
+    123abcfoo
+No match
+
+/(?<=\d{3}(?!999)...)foo/
+    123abcfoo
+ 0: foo
+    123456foo 
+ 0: foo
+    *** Failers
+No match
+    123999foo  
+No match
+    
+/(?<=\d{3}...)(?<!999)foo/
+    123abcfoo   
+ 0: foo
+    123456foo 
+ 0: foo
+    *** Failers
+No match
+    123999foo  
+No match
+
+/((Z)+|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2: 
+
+/(Z()|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2: 
+
+/(Z(())|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2: 
+
+/((?>Z)+|A)*/
+    ZABCDEFG
+ 0: ZA
+ 1: Z
+ 2: 
+
+/((?>)+|A)*/
+    ZABCDEFG
+ 0: 
+
+/a*/g
+    abbab
+ 0: a
+ 1: 
+ 0: 
+ 0: 
+ 0: a
+ 1: 
+ 0: 
+ 0: 
+
+/^[a-\d]/
+    abcde
+ 0: a
+    -things
+ 0: -
+    0digit
+ 0: 0
+    *** Failers
+No match
+    bcdef    
+No match
+
+/^[\d-a]/
+    abcde
+ 0: a
+    -things
+ 0: -
+    0digit
+ 0: 0
+    *** Failers
+No match
+    bcdef    
+No match
+    
+/[[:space:]]+/
+    > \x09\x0a\x0c\x0d\x0b<
+ 0:  \x09\x0a\x0c\x0d\x0b
+ 1:  \x09\x0a\x0c\x0d
+ 2:  \x09\x0a\x0c
+ 3:  \x09\x0a
+ 4:  \x09
+ 5:  
+     
+/[[:blank:]]+/
+    > \x09\x0a\x0c\x0d\x0b<
+ 0:  \x09
+ 1:  
+     
+/[\s]+/
+    > \x09\x0a\x0c\x0d\x0b<
+ 0:  \x09\x0a\x0c\x0d
+ 1:  \x09\x0a\x0c
+ 2:  \x09\x0a
+ 3:  \x09
+ 4:  
+     
+/\s+/
+    > \x09\x0a\x0c\x0d\x0b<
+ 0:  \x09\x0a\x0c\x0d
+ 1:  \x09\x0a\x0c
+ 2:  \x09\x0a
+ 3:  \x09
+ 4:  
+     
+/ab/x
+    ab
+No match
+
+/(?!\A)x/m
+  a\nxb\n
+ 0: x
+
+/(?!^)x/m
+  a\nxb\n
+No match
+
+/abc\Qabc\Eabc/
+    abcabcabc
+ 0: abcabcabc
+    
+/abc\Q(*+|\Eabc/
+    abc(*+|abc 
+ 0: abc(*+|abc
+
+/   abc\Q abc\Eabc/x
+    abc abcabc
+ 0: abc abcabc
+    *** Failers
+No match
+    abcabcabc  
+No match
+    
+/abc#comment
+    \Q#not comment
+    literal\E/x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/abc#comment
+    \Q#not comment
+    literal/x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment
+    /x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/abc#comment
+    \Q#not comment
+    literal\E #more comment/x
+    abc#not comment\n    literal     
+ 0: abc#not comment\x0a    literal
+
+/\Qabc\$xyz\E/
+    abc\\\$xyz
+ 0: abc\$xyz
+
+/\Qabc\E\$\Qxyz\E/
+    abc\$xyz
+ 0: abc$xyz
+
+/\Gabc/
+    abc
+ 0: abc
+    *** Failers
+No match
+    xyzabc  
+No match
+
+/\Gabc./g
+    abc1abc2xyzabc3
+ 0: abc1
+ 0: abc2
+
+/abc./g
+    abc1abc2xyzabc3 
+ 0: abc1
+ 0: abc2
+ 0: abc3
+
+/a(?x: b c )d/
+    XabcdY
+ 0: abcd
+    *** Failers 
+No match
+    Xa b c d Y 
+No match
+
+/((?x)x y z | a b c)/
+    XabcY
+ 0: abc
+    AxyzB 
+ 0: xyz
+
+/(?i)AB(?-i)C/
+    XabCY
+ 0: abC
+    *** Failers
+No match
+    XabcY  
+No match
+
+/((?i)AB(?-i)C|D)E/
+    abCE
+ 0: abCE
+    DE
+ 0: DE
+    *** Failers
+No match
+    abcE
+No match
+    abCe  
+No match
+    dE
+No match
+    De    
+No match
+
+/[z\Qa-d]\E]/
+    z
+ 0: z
+    a
+ 0: a
+    -
+ 0: -
+    d
+ 0: d
+    ] 
+ 0: ]
+    *** Failers
+ 0: a
+    b     
+No match
+
+/[\z\C]/
+    z
+ 0: z
+    C 
+ 0: C
+    
+/\M/
+    M 
+ 0: M
+    
+/(a+)*b/
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 
+No match
+    
+/(?i)reg(?:ul(?:[aä]|ae)r|ex)/
+    REGular
+ 0: REGular
+    regulaer
+ 0: regulaer
+    Regex  
+ 0: Regex
+    regulär 
+ 0: regul\xe4r
+
+/Åæåä[à-ÿÀ-ß]+/
+    Åæåäà
+ 0: \xc5\xe6\xe5\xe4\xe0
+    Åæåäÿ
+ 0: \xc5\xe6\xe5\xe4\xff
+    ÅæåäÀ
+ 0: \xc5\xe6\xe5\xe4\xc0
+    Åæåäß
+ 0: \xc5\xe6\xe5\xe4\xdf
+
+/(?<=Z)X./
+    \x84XAZXB
+ 0: XB
+
+/^(?(2)a|(1)(2))+$/
+    123a
+Error -17
+
+/(?<=a|bbbb)c/
+    ac
+ 0: c
+    bbbbc
+ 0: c
+
+/abc/>testsavedregex
+Compiled regex written to testsavedregex
+<testsavedregex
+Compiled regex loaded from testsavedregex
+No study data
+    abc
+ 0: abc
+    *** Failers
+No match
+    bca
+No match
+    
+/abc/F>testsavedregex
+Compiled regex written to testsavedregex
+<testsavedregex
+Compiled regex (byte-inverted) loaded from testsavedregex
+No study data
+    abc
+ 0: abc
+    *** Failers
+No match
+    bca
+No match
+
+/(a|b)/S>testsavedregex
+Compiled regex written to testsavedregex
+Study data written to testsavedregex
+<testsavedregex
+Compiled regex loaded from testsavedregex
+Study data loaded from testsavedregex
+    abc
+ 0: a
+    *** Failers
+ 0: a
+    def  
+No match
+    
+/(a|b)/SF>testsavedregex
+Compiled regex written to testsavedregex
+Study data written to testsavedregex
+<testsavedregex
+Compiled regex (byte-inverted) loaded from testsavedregex
+Study data loaded from testsavedregex
+    abc
+ 0: a
+    *** Failers
+ 0: a
+    def  
+No match
+    
+/line\nbreak/
+    this is a line\nbreak
+ 0: line\x0abreak
+    line one\nthis is a line\nbreak in the second line 
+ 0: line\x0abreak
+
+/line\nbreak/f
+    this is a line\nbreak
+ 0: line\x0abreak
+    ** Failers 
+No match
+    line one\nthis is a line\nbreak in the second line 
+No match
+
+/line\nbreak/mf
+    this is a line\nbreak
+ 0: line\x0abreak
+    ** Failers 
+No match
+    line one\nthis is a line\nbreak in the second line 
+No match
+
+/ End of testinput7 /
diff -Nurp tin-1.7.8/pcre/testdata/testoutput8 tin-1.7.9/pcre/testdata/testoutput8
--- tin-1.7.8/pcre/testdata/testoutput8	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput8	2005-06-28 10:31:27.451953746 +0200
@@ -0,0 +1,1033 @@
+PCRE version 6.1 21-Jun-2005
+
+/-- Do not use the \x{} construct except with patterns that have the --/
+/-- /8 option set, because PCRE doesn't recognize them as UTF-8 unless --/
+No match
+/-- that option is set. However, the latest Perls recognize them always. --/
+No match
+
+/\x{100}ab/8
+  \x{100}ab
+ 0: \x{100}ab
+  
+/a\x{100}*b/8
+    ab
+ 0: ab
+    a\x{100}b  
+ 0: a\x{100}b
+    a\x{100}\x{100}b  
+ 0: a\x{100}\x{100}b
+    
+/a\x{100}+b/8
+    a\x{100}b  
+ 0: a\x{100}b
+    a\x{100}\x{100}b  
+ 0: a\x{100}\x{100}b
+    *** Failers 
+No match
+    ab
+No match
+     
+/\bX/8
+    Xoanon
+ 0: X
+    +Xoanon
+ 0: X
+    \x{300}Xoanon 
+ 0: X
+    *** Failers 
+No match
+    YXoanon  
+No match
+    
+/\BX/8
+    YXoanon
+ 0: X
+    *** Failers
+No match
+    Xoanon
+No match
+    +Xoanon    
+No match
+    \x{300}Xoanon 
+No match
+
+/X\b/8
+    X+oanon
+ 0: X
+    ZX\x{300}oanon 
+ 0: X
+    FAX 
+ 0: X
+    *** Failers 
+No match
+    Xoanon  
+No match
+    
+/X\B/8
+    Xoanon  
+ 0: X
+    *** Failers
+No match
+    X+oanon
+No match
+    ZX\x{300}oanon 
+No match
+    FAX 
+No match
+    
+/[^a]/8
+    abcd
+ 0: b
+    a\x{100}   
+ 0: \x{100}
+
+/^[abc\x{123}\x{400}-\x{402}]{2,3}\d/8
+    ab99
+ 0: ab9
+    \x{123}\x{123}45
+ 0: \x{123}\x{123}4
+    \x{400}\x{401}\x{402}6  
+ 0: \x{400}\x{401}\x{402}6
+    *** Failers
+No match
+    d99
+No match
+    \x{123}\x{122}4   
+No match
+    \x{400}\x{403}6  
+No match
+    \x{400}\x{401}\x{402}\x{402}6  
+No match
+
+/abc/8
+    Ã]
+Error -10
+    Ã
+Error -10
+    ÃÃÃ
+Error -10
+    ÃÃÃ\?
+No match
+
+/a.b/8
+    acb
+ 0: acb
+    a\x7fb
+ 0: a\x{7f}b
+    a\x{100}b 
+ 0: a\x{100}b
+    *** Failers
+No match
+    a\nb  
+No match
+
+/a(.{3})b/8
+    a\x{4000}xyb 
+ 0: a\x{4000}xyb
+    a\x{4000}\x7fyb 
+ 0: a\x{4000}\x{7f}yb
+    a\x{4000}\x{100}yb 
+ 0: a\x{4000}\x{100}yb
+    *** Failers
+No match
+    a\x{4000}b 
+No match
+    ac\ncb 
+No match
+
+/a(.*?)(.)/
+    a\xc0\x88b
+ 0: a\xc0\x88b
+ 1: a\xc0\x88
+ 2: a\xc0
+
+/a(.*?)(.)/8
+    a\x{100}b
+ 0: a\x{100}b
+ 1: a\x{100}
+
+/a(.*)(.)/
+    a\xc0\x88b
+ 0: a\xc0\x88b
+ 1: a\xc0\x88
+ 2: a\xc0
+
+/a(.*)(.)/8
+    a\x{100}b
+ 0: a\x{100}b
+ 1: a\x{100}
+
+/a(.)(.)/
+    a\xc0\x92bcd
+ 0: a\xc0\x92
+
+/a(.)(.)/8
+    a\x{240}bcd
+ 0: a\x{240}b
+
+/a(.?)(.)/
+    a\xc0\x92bcd
+ 0: a\xc0\x92
+ 1: a\xc0
+
+/a(.?)(.)/8
+    a\x{240}bcd
+ 0: a\x{240}b
+ 1: a\x{240}
+
+/a(.??)(.)/
+    a\xc0\x92bcd
+ 0: a\xc0\x92
+ 1: a\xc0
+
+/a(.??)(.)/8
+    a\x{240}bcd
+ 0: a\x{240}b
+ 1: a\x{240}
+
+/a(.{3})b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+    ac\ncb 
+No match
+
+/a(.{3,})b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+    axxxxbcdefghijb 
+ 0: axxxxbcdefghijb
+ 1: axxxxb
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+
+/a(.{3,}?)b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+    axxxxbcdefghijb 
+ 0: axxxxbcdefghijb
+ 1: axxxxb
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+
+/a(.{3,5})b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+    axxxxbcdefghijb 
+ 0: axxxxb
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+    axbxxbcdefghijb 
+ 0: axbxxb
+    axxxxxbcdefghijb 
+ 0: axxxxxb
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+    axxxxxxbcdefghijb 
+No match
+
+/a(.{3,5}?)b/8
+    a\x{1234}xyb 
+ 0: a\x{1234}xyb
+    a\x{1234}\x{4321}yb 
+ 0: a\x{1234}\x{4321}yb
+    a\x{1234}\x{4321}\x{3412}b 
+ 0: a\x{1234}\x{4321}\x{3412}b
+    axxxxbcdefghijb 
+ 0: axxxxb
+    a\x{1234}\x{4321}\x{3412}\x{3421}b 
+ 0: a\x{1234}\x{4321}\x{3412}\x{3421}b
+    axbxxbcdefghijb 
+ 0: axbxxb
+    axxxxxbcdefghijb 
+ 0: axxxxxb
+    *** Failers
+No match
+    a\x{1234}b 
+No match
+    axxxxxxbcdefghijb 
+No match
+
+/^[a\x{c0}]/8
+    *** Failers
+No match
+    \x{100}
+No match
+
+/(?<=aXb)cd/8
+    aXbcd
+ 0: cd
+
+/(?<=a\x{100}b)cd/8
+    a\x{100}bcd
+ 0: cd
+
+/(?<=a\x{100000}b)cd/8
+    a\x{100000}bcd
+ 0: cd
+    
+/(?:\x{100}){3}b/8
+    \x{100}\x{100}\x{100}b
+ 0: \x{100}\x{100}\x{100}b
+    *** Failers 
+No match
+    \x{100}\x{100}b
+No match
+
+/\x{ab}/8
+    \x{ab} 
+ 0: \x{ab}
+    \xc2\xab
+ 0: \x{ab}
+    *** Failers 
+No match
+    \x00{ab}
+No match
+
+/(?<=(.))X/8
+    WXYZ
+ 0: X
+    \x{256}XYZ 
+ 0: X
+    *** Failers
+No match
+    XYZ 
+No match
+
+/[^a]+/8g
+    bcd
+ 0: bcd
+ 1: bc
+ 2: b
+    \x{100}aY\x{256}Z 
+ 0: \x{100}
+ 0: Y\x{256}Z
+ 1: Y\x{256}
+ 2: Y
+    
+/^[^a]{2}/8
+    \x{100}bc
+ 0: \x{100}b
+ 
+/^[^a]{2,}/8
+    \x{100}bcAa
+ 0: \x{100}bcA
+ 1: \x{100}bc
+ 2: \x{100}b
+
+/^[^a]{2,}?/8
+    \x{100}bca
+ 0: \x{100}bc
+ 1: \x{100}b
+
+/[^a]+/8ig
+    bcd
+ 0: bcd
+ 1: bc
+ 2: b
+    \x{100}aY\x{256}Z 
+ 0: \x{100}
+ 0: Y\x{256}Z
+ 1: Y\x{256}
+ 2: Y
+    
+/^[^a]{2}/8i
+    \x{100}bc
+ 0: \x{100}b
+ 
+/^[^a]{2,}/8i
+    \x{100}bcAa
+ 0: \x{100}bc
+ 1: \x{100}b
+
+/^[^a]{2,}?/8i
+    \x{100}bca
+ 0: \x{100}bc
+ 1: \x{100}b
+
+/\x{100}{0,0}/8
+    abcd
+ 0: 
+ 
+/\x{100}?/8
+    abcd
+ 0: 
+    \x{100}\x{100} 
+ 0: \x{100}
+ 1: 
+
+/\x{100}{0,3}/8 
+    \x{100}\x{100} 
+ 0: \x{100}\x{100}
+ 1: \x{100}
+ 2: 
+    \x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}
+ 2: \x{100}
+ 3: 
+    
+/\x{100}*/8
+    abce
+ 0: 
+    \x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}
+ 3: \x{100}
+ 4: 
+
+/\x{100}{1,1}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}
+
+/\x{100}{1,3}/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}
+ 2: \x{100}
+
+/\x{100}+/8
+    abcd\x{100}\x{100}\x{100}\x{100} 
+ 0: \x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}
+ 3: \x{100}
+
+/\x{100}{3}/8
+    abcd\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}
+
+/\x{100}{3,5}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}\x{100}
+
+/\x{100}{3,}/8
+    abcd\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}XX
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}\x{100}\x{100}\x{100}
+ 3: \x{100}\x{100}\x{100}\x{100}
+ 4: \x{100}\x{100}\x{100}
+
+/(?<=a\x{100}{2}b)X/8
+    Xyyya\x{100}\x{100}bXzzz
+ 0: X
+
+/\D*/8
+  aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but too many subsidiary matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/\D*/8
+  \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+Matched, but too many subsidiary matches
+ 0: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 1: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 2: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 3: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 4: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 5: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 6: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 7: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 8: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+ 9: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+10: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+11: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+12: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+13: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+14: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+15: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+16: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+17: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+18: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+19: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+20: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+21: \x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}\x{100}
+
+/\D/8
+    1X2
+ 0: X
+    1\x{100}2 
+ 0: \x{100}
+  
+/>\S/8
+    > >X Y
+ 0: >X
+    > >\x{100} Y
+ 0: >\x{100}
+  
+/\d/8
+    \x{100}3
+ 0: 3
+    
+/\s/8
+    \x{100} X
+ 0:  
+    
+/\D+/8
+    12abcd34
+ 0: abcd
+ 1: abc
+ 2: ab
+ 3: a
+    *** Failers
+ 0: *** Failers
+ 1: *** Failer
+ 2: *** Faile
+ 3: *** Fail
+ 4: *** Fai
+ 5: *** Fa
+ 6: *** F
+ 7: *** 
+ 8: ***
+ 9: **
+10: *
+    1234  
+No match
+
+/\D{2,3}/8
+    12abcd34
+ 0: abc
+ 1: ab
+    12ab34
+ 0: ab
+    *** Failers  
+ 0: ***
+ 1: **
+    1234
+No match
+    12a34  
+No match
+
+/\D{2,3}?/8
+    12abcd34
+ 0: abc
+ 1: ab
+    12ab34
+ 0: ab
+    *** Failers  
+ 0: ***
+ 1: **
+    1234
+No match
+    12a34  
+No match
+
+/\d+/8
+    12abcd34
+ 0: 12
+ 1: 1
+    *** Failers
+No match
+
+/\d{2,3}/8
+    12abcd34
+ 0: 12
+    1234abcd
+ 0: 123
+ 1: 12
+    *** Failers  
+No match
+    1.4 
+No match
+
+/\d{2,3}?/8
+    12abcd34
+ 0: 12
+    1234abcd
+ 0: 123
+ 1: 12
+    *** Failers  
+No match
+    1.4 
+No match
+
+/\S+/8
+    12abcd34
+ 0: 12abcd34
+ 1: 12abcd3
+ 2: 12abcd
+ 3: 12abc
+ 4: 12ab
+ 5: 12a
+ 6: 12
+ 7: 1
+    *** Failers
+ 0: ***
+ 1: **
+ 2: *
+    \    \ 
+No match
+
+/\S{2,3}/8
+    12abcd34
+ 0: 12a
+ 1: 12
+    1234abcd
+ 0: 123
+ 1: 12
+    *** Failers
+ 0: ***
+ 1: **
+    \     \  
+No match
+
+/\S{2,3}?/8
+    12abcd34
+ 0: 12a
+ 1: 12
+    1234abcd
+ 0: 123
+ 1: 12
+    *** Failers
+ 0: ***
+ 1: **
+    \     \  
+No match
+
+/>\s+</8
+    12>      <34
+ 0: >      <
+    *** Failers
+No match
+
+/>\s{2,3}</8
+    ab>  <cd
+ 0: >  <
+    ab>   <ce
+ 0: >   <
+    *** Failers
+No match
+    ab>    <cd 
+No match
+
+/>\s{2,3}?</8
+    ab>  <cd
+ 0: >  <
+    ab>   <ce
+ 0: >   <
+    *** Failers
+No match
+    ab>    <cd 
+No match
+
+/\w+/8
+    12      34
+ 0: 12
+ 1: 1
+    *** Failers
+ 0: Failers
+ 1: Failer
+ 2: Faile
+ 3: Fail
+ 4: Fai
+ 5: Fa
+ 6: F
+    +++=*! 
+No match
+
+/\w{2,3}/8
+    ab  cd
+ 0: ab
+    abcd ce
+ 0: abc
+ 1: ab
+    *** Failers
+ 0: Fai
+ 1: Fa
+    a.b.c
+No match
+
+/\w{2,3}?/8
+    ab  cd
+ 0: ab
+    abcd ce
+ 0: abc
+ 1: ab
+    *** Failers
+ 0: Fai
+ 1: Fa
+    a.b.c
+No match
+
+/\W+/8
+    12====34
+ 0: ====
+ 1: ===
+ 2: ==
+ 3: =
+    *** Failers
+ 0: *** 
+ 1: ***
+ 2: **
+ 3: *
+    abcd 
+No match
+
+/\W{2,3}/8
+    ab====cd
+ 0: ===
+ 1: ==
+    ab==cd
+ 0: ==
+    *** Failers
+ 0: ***
+ 1: **
+    a.b.c
+No match
+
+/\W{2,3}?/8
+    ab====cd
+ 0: ===
+ 1: ==
+    ab==cd
+ 0: ==
+    *** Failers
+ 0: ***
+ 1: **
+    a.b.c
+No match
+
+/[\x{100}]/8
+    \x{100}
+ 0: \x{100}
+    Z\x{100}
+ 0: \x{100}
+    \x{100}Z
+ 0: \x{100}
+    *** Failers 
+No match
+
+/[Z\x{100}]/8
+    Z\x{100}
+ 0: Z
+    \x{100}
+ 0: \x{100}
+    \x{100}Z
+ 0: \x{100}
+    *** Failers 
+No match
+
+/[\x{100}\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   *** Failers  
+No match
+
+/[\x{100}-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   *** Failers  
+No match
+
+/[z-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   abzcd
+ 0: z
+   ab|cd  
+ 0: |
+   *** Failers  
+No match
+
+/[Q\x{100}\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   Q? 
+ 0: Q
+   *** Failers  
+No match
+
+/[Q\x{100}-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   Q? 
+ 0: Q
+   *** Failers  
+No match
+
+/[Qz-\x{200}]/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{111}cd 
+ 0: \x{111}
+   abzcd
+ 0: z
+   ab|cd  
+ 0: |
+   Q? 
+ 0: Q
+   *** Failers  
+No match
+
+/[\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+   *** Failers  
+No match
+
+/[\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+   *** Failers  
+No match
+
+/[Q\x{100}\x{200}]{1,3}/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+   *** Failers  
+No match
+
+/[Q\x{100}\x{200}]{1,3}?/8
+   ab\x{100}cd
+ 0: \x{100}
+   ab\x{200}cd
+ 0: \x{200}
+   ab\x{200}\x{100}\x{200}\x{100}cd
+ 0: \x{200}\x{100}\x{200}
+ 1: \x{200}\x{100}
+ 2: \x{200}
+   *** Failers  
+No match
+
+/(?<=[\x{100}\x{200}])X/8
+    abc\x{200}X
+ 0: X
+    abc\x{100}X 
+ 0: X
+    *** Failers
+No match
+    X  
+No match
+
+/(?<=[Q\x{100}\x{200}])X/8
+    abc\x{200}X
+ 0: X
+    abc\x{100}X 
+ 0: X
+    abQX 
+ 0: X
+    *** Failers
+No match
+    X  
+No match
+
+/(?<=[\x{100}\x{200}]{3})X/8
+    abc\x{100}\x{200}\x{100}X
+ 0: X
+    *** Failers
+No match
+    abc\x{200}X
+No match
+    X  
+No match
+
+/[^\x{100}\x{200}]X/8
+    AX
+ 0: AX
+    \x{150}X
+ 0: \x{150}X
+    \x{500}X 
+ 0: \x{500}X
+    *** Failers
+No match
+    \x{100}X
+No match
+    \x{200}X   
+No match
+
+/[^Q\x{100}\x{200}]X/8
+    AX
+ 0: AX
+    \x{150}X
+ 0: \x{150}X
+    \x{500}X 
+ 0: \x{500}X
+    *** Failers
+No match
+    \x{100}X
+No match
+    \x{200}X   
+No match
+    QX 
+No match
+
+/[^\x{100}-\x{200}]X/8
+    AX
+ 0: AX
+    \x{500}X 
+ 0: \x{500}X
+    *** Failers
+No match
+    \x{100}X
+No match
+    \x{150}X
+No match
+    \x{200}X   
+No match
+
+/[z-\x{100}]/8i
+    z
+ 0: z
+    Z 
+ 0: Z
+    \x{100}
+ 0: \x{100}
+    *** Failers
+No match
+    \x{102}
+No match
+    y    
+No match
+
+/[\xFF]/
+    >\xff<
+ 0: \xff
+
+/[\xff]/8
+    >\x{ff}<
+ 0: \x{ff}
+
+/[^\xFF]/
+    XYZ
+ 0: X
+
+/[^\xff]/8
+    XYZ
+ 0: X
+    \x{123} 
+ 0: \x{123}
+
+/^[ac]*b/8
+  xb
+No match
+
+/^[ac\x{100}]*b/8
+  xb
+No match
+
+/^[^x]*b/8i
+  xb
+No match
+
+/^[^x]*b/8
+  xb
+No match
+  
+/^\d*b/8
+  xb 
+No match
+
+/(|a)/g8
+    catac
+ 0: 
+ 0: a
+ 1: 
+ 0: 
+ 0: a
+ 1: 
+ 0: 
+ 0: 
+    a\x{256}a 
+ 0: a
+ 1: 
+ 0: 
+ 0: a
+ 1: 
+ 0: 
+
+/^\x{85}$/8i
+    \x{85}
+ 0: \x{85}
+
+/ End of testinput 8 / 
diff -Nurp tin-1.7.8/pcre/testdata/testoutput9 tin-1.7.9/pcre/testdata/testoutput9
--- tin-1.7.8/pcre/testdata/testoutput9	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/testdata/testoutput9	2005-06-28 10:31:27.476949145 +0200
@@ -0,0 +1,1234 @@
+PCRE version 6.1 21-Jun-2005
+
+/\pL\P{Nd}/8
+    AB
+ 0: AB
+    *** Failers
+ 0: Fa
+    A0
+No match
+    00   
+No match
+
+/\X./8
+    AB
+ 0: AB
+    A\x{300}BC 
+ 0: A\x{300}B
+    A\x{300}\x{301}\x{302}BC 
+ 0: A\x{300}\x{301}\x{302}B
+    *** Failers
+ 0: **
+    \x{300}  
+No match
+
+/\X\X/8
+    ABC
+ 0: AB
+    A\x{300}B\x{300}\x{301}C 
+ 0: A\x{300}B\x{300}\x{301}
+    A\x{300}\x{301}\x{302}BC 
+ 0: A\x{300}\x{301}\x{302}B
+    *** Failers
+ 0: **
+    \x{300}  
+No match
+
+/^\pL+/8
+    abcd
+ 0: abcd
+ 1: abc
+ 2: ab
+ 3: a
+    a 
+ 0: a
+    *** Failers 
+No match
+
+/^\PL+/8
+    1234
+ 0: 1234
+ 1: 123
+ 2: 12
+ 3: 1
+    = 
+ 0: =
+    *** Failers 
+ 0: *** 
+ 1: ***
+ 2: **
+ 3: *
+    abcd 
+No match
+
+/^\X+/8
+    abcdA\x{300}\x{301}\x{302}
+ 0: abcdA\x{300}\x{301}\x{302}
+ 1: abcd
+ 2: abc
+ 3: ab
+ 4: a
+    A\x{300}\x{301}\x{302}
+ 0: A\x{300}\x{301}\x{302}
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}
+ 0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}
+ 1: A\x{300}\x{301}\x{302}
+    a 
+ 0: a
+    *** Failers 
+ 0: *** Failers
+ 1: *** Failer
+ 2: *** Faile
+ 3: *** Fail
+ 4: *** Fai
+ 5: *** Fa
+ 6: *** F
+ 7: *** 
+ 8: ***
+ 9: **
+10: *
+    \x{300}\x{301}\x{302}
+No match
+
+/\X?abc/8
+    abc
+ 0: abc
+    A\x{300}abc
+ 0: A\x{300}abc
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+ 0: A\x{300}abc
+    \x{300}abc  
+ 0: abc
+    *** Failers
+No match
+
+/^\X?abc/8
+    abc
+ 0: abc
+    A\x{300}abc
+ 0: A\x{300}abc
+    *** Failers
+No match
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+No match
+    \x{300}abc  
+No match
+
+/\X*abc/8
+    abc
+ 0: abc
+    A\x{300}abc
+ 0: A\x{300}abc
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+ 0: A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abc
+    \x{300}abc  
+ 0: abc
+    *** Failers
+No match
+
+/^\X*abc/8
+    abc
+ 0: abc
+    A\x{300}abc
+ 0: A\x{300}abc
+    A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abcxyz
+ 0: A\x{300}\x{301}\x{302}A\x{300}A\x{300}A\x{300}abc
+    *** Failers
+No match
+    \x{300}abc  
+No match
+
+/^\pL?=./8
+    A=b
+ 0: A=b
+    =c 
+ 0: =c
+    *** Failers
+No match
+    1=2 
+No match
+    AAAA=b  
+No match
+
+/^\pL*=./8
+    AAAA=b
+ 0: AAAA=b
+    =c 
+ 0: =c
+    *** Failers
+No match
+    1=2  
+No match
+
+/^\X{2,3}X/8
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+ 0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X 
+ 0: A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+    *** Failers
+No match
+    X
+No match
+    A\x{300}\x{301}\x{302}X
+No match
+    A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}A\x{300}\x{301}\x{302}X
+No match
+
+/^\pC\pL\pM\pN\pP\pS\pZ</8
+    \x7f\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
+ 0: \x{7f}\x{c0}\x{30f}\x{660}\x{66c}\x{f01}\x{1680}<
+    \np\x{300}9!\$ < 
+ 0: \x{0a}p\x{300}9!$ <
+    ** Failers 
+No match
+    ap\x{300}9!\$ < 
+No match
+  
+/^\PC/8
+    X
+ 0: X
+    ** Failers 
+ 0: *
+    \x7f
+No match
+  
+/^\PL/8
+    9
+ 0: 9
+    ** Failers 
+ 0: *
+    \x{c0}
+No match
+  
+/^\PM/8
+    X
+ 0: X
+    ** Failers 
+ 0: *
+    \x{30f}
+No match
+  
+/^\PN/8
+    X
+ 0: X
+    ** Failers 
+ 0: *
+    \x{660}
+No match
+  
+/^\PP/8
+    X
+ 0: X
+    ** Failers 
+No match
+    \x{66c}
+No match
+  
+/^\PS/8
+    X
+ 0: X
+    ** Failers 
+ 0: *
+    \x{f01}
+No match
+  
+/^\PZ/8
+    X
+ 0: X
+    ** Failers 
+ 0: *
+    \x{1680}
+No match
+    
+/^\p{Cc}/8
+    \x{017}
+ 0: \x{17}
+    \x{09f} 
+ 0: \x{9f}
+    ** Failers
+No match
+    \x{0600} 
+No match
+  
+/^\p{Cf}/8
+    \x{601}
+ 0: \x{601}
+    ** Failers
+No match
+    \x{09f} 
+No match
+  
+/^\p{Cn}/8
+    ** Failers
+No match
+    \x{09f} 
+No match
+  
+/^\p{Co}/8
+    \x{f8ff}
+ 0: \x{f8ff}
+    ** Failers
+No match
+    \x{09f} 
+No match
+  
+/^\p{Cs}/8
+    \x{dfff}
+ 0: \x{dfff}
+    ** Failers
+No match
+    \x{09f} 
+No match
+  
+/^\p{Ll}/8
+    a
+ 0: a
+    ** Failers 
+No match
+    Z
+No match
+    \x{dfff}  
+No match
+  
+/^\p{Lm}/8
+    \x{2b0}
+ 0: \x{2b0}
+    ** Failers
+No match
+    a 
+No match
+  
+/^\p{Lo}/8
+    \x{1bb}
+ 0: \x{1bb}
+    ** Failers
+No match
+    a 
+No match
+    \x{2b0}
+No match
+  
+/^\p{Lt}/8
+    \x{1c5}
+ 0: \x{1c5}
+    ** Failers
+No match
+    a 
+No match
+    \x{2b0}
+No match
+  
+/^\p{Lu}/8
+    A
+ 0: A
+    ** Failers
+No match
+    \x{2b0}
+No match
+  
+/^\p{Mc}/8
+    \x{903}
+ 0: \x{903}
+    ** Failers
+No match
+    X
+No match
+    \x{300}
+No match
+       
+/^\p{Me}/8
+    \x{488}
+ 0: \x{488}
+    ** Failers
+No match
+    X
+No match
+    \x{903}
+No match
+    \x{300}
+No match
+  
+/^\p{Mn}/8
+    \x{300}
+ 0: \x{300}
+    ** Failers
+No match
+    X
+No match
+    \x{903}
+No match
+  
+/^\p{Nd}+/8
+    0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}\x{669}\x{66a}
+ 0: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}\x{669}
+ 1: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}\x{668}
+ 2: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}\x{667}
+ 3: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}\x{666}
+ 4: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}\x{665}
+ 5: 0123456789\x{660}\x{661}\x{662}\x{663}\x{664}
+ 6: 0123456789\x{660}\x{661}\x{662}\x{663}
+ 7: 0123456789\x{660}\x{661}\x{662}
+ 8: 0123456789\x{660}\x{661}
+ 9: 0123456789\x{660}
+10: 0123456789
+11: 012345678
+12: 01234567
+13: 0123456
+14: 012345
+15: 01234
+16: 0123
+17: 012
+18: 01
+19: 0
+    \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}\x{6fa}
+ 0: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}\x{6f9}
+ 1: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}\x{6f8}
+ 2: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}\x{6f7}
+ 3: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}\x{6f6}
+ 4: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}\x{6f5}
+ 5: \x{6f0}\x{6f1}\x{6f2}\x{6f3}\x{6f4}
+ 6: \x{6f0}\x{6f1}\x{6f2}\x{6f3}
+ 7: \x{6f0}\x{6f1}\x{6f2}
+ 8: \x{6f0}\x{6f1}
+ 9: \x{6f0}
+    \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}\x{970}
+ 0: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}\x{96f}
+ 1: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}\x{96e}
+ 2: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}\x{96d}
+ 3: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}\x{96c}
+ 4: \x{966}\x{967}\x{968}\x{969}\x{96a}\x{96b}
+ 5: \x{966}\x{967}\x{968}\x{969}\x{96a}
+ 6: \x{966}\x{967}\x{968}\x{969}
+ 7: \x{966}\x{967}\x{968}
+ 8: \x{966}\x{967}
+ 9: \x{966}
+    ** Failers
+No match
+    X
+No match
+  
+/^\p{Nl}/8
+    \x{16ee}
+ 0: \x{16ee}
+    ** Failers
+No match
+    X
+No match
+    \x{966}
+No match
+  
+/^\p{No}/8
+    \x{b2}
+ 0: \x{b2}
+    \x{b3}
+ 0: \x{b3}
+    ** Failers
+No match
+    X
+No match
+    \x{16ee}
+No match
+  
+/^\p{Pc}/8
+    \x5f
+ 0: _
+    \x{203f}
+ 0: \x{203f}
+    ** Failers
+No match
+    X
+No match
+    -
+No match
+    \x{58a}
+No match
+  
+/^\p{Pd}/8
+    -
+ 0: -
+    \x{58a}
+ 0: \x{58a}
+    ** Failers
+No match
+    X
+No match
+    \x{203f}
+No match
+  
+/^\p{Pe}/8
+    )
+ 0: )
+    ]
+ 0: ]
+    }
+ 0: }
+    \x{f3b}
+ 0: \x{f3b}
+    ** Failers
+No match
+    X
+No match
+    \x{203f}
+No match
+    (
+No match
+    [
+No match
+    {
+No match
+    \x{f3c}
+No match
+  
+/^\p{Pf}/8
+    \x{bb}
+ 0: \x{bb}
+    \x{2019}
+ 0: \x{2019}
+    ** Failers
+No match
+    X
+No match
+    \x{203f}
+No match
+  
+/^\p{Pi}/8
+    \x{ab}
+ 0: \x{ab}
+    \x{2018}
+ 0: \x{2018}
+    ** Failers
+No match
+    X
+No match
+    \x{203f}
+No match
+  
+/^\p{Po}/8
+    !
+ 0: !
+    \x{37e}
+ 0: \x{37e}
+    ** Failers
+ 0: *
+    X
+No match
+    \x{203f}
+No match
+  
+/^\p{Ps}/8
+    (
+ 0: (
+    [
+ 0: [
+    {
+ 0: {
+    \x{f3c}
+ 0: \x{f3c}
+    ** Failers
+No match
+    X
+No match
+    )
+No match
+    ]
+No match
+    }
+No match
+    \x{f3b}
+No match
+  
+/^\p{Sc}+/8
+    $\x{a2}\x{a3}\x{a4}\x{a5}\x{a6}
+ 0: $\x{a2}\x{a3}\x{a4}\x{a5}
+ 1: $\x{a2}\x{a3}\x{a4}
+ 2: $\x{a2}\x{a3}
+ 3: $\x{a2}
+ 4: $
+    \x{9f2}
+ 0: \x{9f2}
+    ** Failers
+No match
+    X
+No match
+    \x{2c2}
+No match
+  
+/^\p{Sk}/8
+    \x{2c2}
+ 0: \x{2c2}
+    ** Failers
+No match
+    X
+No match
+    \x{9f2}
+No match
+  
+/^\p{Sm}+/8
+    +<|~\x{ac}\x{2044}
+ 0: +<|~\x{ac}\x{2044}
+ 1: +<|~\x{ac}
+ 2: +<|~
+ 3: +<|
+ 4: +<
+ 5: +
+    ** Failers
+No match
+    X
+No match
+    \x{9f2}
+No match
+  
+/^\p{So}/8
+    \x{a6}
+ 0: \x{a6}
+    \x{482} 
+ 0: \x{482}
+    ** Failers
+No match
+    X
+No match
+    \x{9f2}
+No match
+  
+/^\p{Zl}/8
+    \x{2028}
+ 0: \x{2028}
+    ** Failers
+No match
+    X
+No match
+    \x{2029}
+No match
+  
+/^\p{Zp}/8
+    \x{2029}
+ 0: \x{2029}
+    ** Failers
+No match
+    X
+No match
+    \x{2028}
+No match
+  
+/^\p{Zs}/8
+    \ \
+ 0:  
+    \x{a0}
+ 0: \x{a0}
+    \x{1680}
+ 0: \x{1680}
+    \x{180e}
+ 0: \x{180e}
+    \x{2000}
+ 0: \x{2000}
+    \x{2001}     
+ 0: \x{2001}
+    ** Failers
+No match
+    \x{2028}
+No match
+    \x{200d} 
+No match
+  
+/\p{Nd}+(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+ 2: \x{660}\x{661}\x{662}
+  
+/\p{Nd}+?(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+ 2: \x{660}\x{661}\x{662}
+  
+/\p{Nd}{2,}(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+  
+/\p{Nd}{2,}?(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+  
+/\p{Nd}*(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+ 2: \x{660}\x{661}\x{662}
+ 3: \x{660}\x{661}
+  
+/\p{Nd}*?(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+ 2: \x{660}\x{661}\x{662}
+ 3: \x{660}\x{661}
+  
+/\p{Nd}{2}(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}A
+  
+/\p{Nd}{2,3}(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+  
+/\p{Nd}{2,3}?(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+ 1: \x{660}\x{661}\x{662}A
+  
+/\p{Nd}?(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}
+ 1: \x{660}\x{661}
+  
+/\p{Nd}??(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}
+ 1: \x{660}\x{661}
+  
+/\p{Nd}*+(..)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}AB
+  
+/\p{Nd}*+(...)/8
+      \x{660}\x{661}\x{662}ABC
+ 0: \x{660}\x{661}\x{662}ABC
+  
+/\p{Nd}*+(....)/8
+      ** Failers
+ 0: ** F
+      \x{660}\x{661}\x{662}ABC
+No match
+  
+/\p{Lu}/8i
+    A
+ 0: A
+    a\x{10a0}B 
+ 0: \x{10a0}
+    ** Failers 
+ 0: F
+    a
+No match
+    \x{1d00}  
+No match
+
+/\p{^Lu}/8i
+    1234
+ 0: 1
+    ** Failers
+ 0: *
+    ABC 
+No match
+
+/\P{Lu}/8i
+    1234
+ 0: 1
+    ** Failers
+ 0: *
+    ABC 
+No match
+
+/(?<=A\p{Nd})XYZ/8
+    A2XYZ
+ 0: XYZ
+    123A5XYZPQR
+ 0: XYZ
+    ABA\x{660}XYZpqr
+ 0: XYZ
+    ** Failers
+No match
+    AXYZ
+No match
+    XYZ     
+No match
+    
+/(?<!\pL)XYZ/8
+    1XYZ
+ 0: XYZ
+    AB=XYZ.. 
+ 0: XYZ
+    XYZ 
+ 0: XYZ
+    ** Failers
+No match
+    WXYZ 
+No match
+
+/[\p{Nd}]/8
+    1234
+ 0: 1
+
+/[\p{Nd}+-]+/8
+    1234
+ 0: 1234
+ 1: 123
+ 2: 12
+ 3: 1
+    12-34
+ 0: 12-34
+ 1: 12-3
+ 2: 12-
+ 3: 12
+ 4: 1
+    12+\x{661}-34  
+ 0: 12+\x{661}-34
+ 1: 12+\x{661}-3
+ 2: 12+\x{661}-
+ 3: 12+\x{661}
+ 4: 12+
+ 5: 12
+ 6: 1
+    ** Failers
+No match
+    abcd  
+No match
+
+/[\P{Nd}]+/8
+    abcd
+ 0: abcd
+ 1: abc
+ 2: ab
+ 3: a
+    ** Failers
+ 0: ** Failers
+ 1: ** Failer
+ 2: ** Faile
+ 3: ** Fail
+ 4: ** Fai
+ 5: ** Fa
+ 6: ** F
+ 7: ** 
+ 8: **
+ 9: *
+    1234
+No match
+
+/\D+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+No match
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but too many subsidiary matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+     
+/\P{Nd}+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+No match
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but too many subsidiary matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/[\D]+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+No match
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but too many subsidiary matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/[\P{Nd}]+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+No match
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but too many subsidiary matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/[\D\P{Nd}]+/8
+    11111111111111111111111111111111111111111111111111111111111111111111111
+No match
+    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+Matched, but too many subsidiary matches
+ 0: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 1: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 2: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 3: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 4: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 5: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 6: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 7: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 8: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ 9: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+10: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+11: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+12: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+13: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+14: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+15: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+16: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+17: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+18: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+19: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+20: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+21: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+
+/\pL/8
+    a
+ 0: a
+    A 
+ 0: A
+
+/\pL/8i
+    a
+ 0: a
+    A 
+ 0: A
+    
+/\p{Lu}/8 
+    A
+ 0: A
+    aZ
+ 0: Z
+    ** Failers
+ 0: F
+    abc   
+No match
+
+/\p{Lu}/8i
+    A
+ 0: A
+    aZ
+ 0: Z
+    ** Failers
+ 0: F
+    abc   
+No match
+
+/\p{Ll}/8 
+    a
+ 0: a
+    Az
+ 0: z
+    ** Failers
+ 0: a
+    ABC   
+No match
+
+/\p{Ll}/8i 
+    a
+ 0: a
+    Az
+ 0: z
+    ** Failers
+ 0: a
+    ABC   
+No match
+
+/^\x{c0}$/8i
+    \x{c0}
+ 0: \x{c0}
+    \x{e0} 
+ 0: \x{e0}
+
+/^\x{e0}$/8i
+    \x{c0}
+ 0: \x{c0}
+    \x{e0} 
+ 0: \x{e0}
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8
+    A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 0: A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+    ** Failers
+No match
+    a\x{391}\x{10427}\x{ff3a}\x{1fb0}   
+No match
+    A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
+No match
+    A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
+No match
+    A\x{391}\x{10427}\x{ff5a}\x{1fb0}
+No match
+    A\x{391}\x{10427}\x{ff3a}\x{1fb8}
+No match
+
+/A\x{391}\x{10427}\x{ff3a}\x{1fb0}/8i
+    A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+ 0: A\x{391}\x{10427}\x{ff3a}\x{1fb0}
+    a\x{391}\x{10427}\x{ff3a}\x{1fb0}   
+ 0: a\x{391}\x{10427}\x{ff3a}\x{1fb0}
+    A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
+ 0: A\x{3b1}\x{10427}\x{ff3a}\x{1fb0}
+    A\x{391}\x{1044F}\x{ff3a}\x{1fb0}
+ 0: A\x{391}\x{1044f}\x{ff3a}\x{1fb0}
+    A\x{391}\x{10427}\x{ff5a}\x{1fb0}
+ 0: A\x{391}\x{10427}\x{ff5a}\x{1fb0}
+    A\x{391}\x{10427}\x{ff3a}\x{1fb8}
+ 0: A\x{391}\x{10427}\x{ff3a}\x{1fb8}
+
+/\x{391}+/8i
+    \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
+ 0: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
+ 1: \x{391}\x{3b1}\x{3b1}\x{3b1}
+ 2: \x{391}\x{3b1}\x{3b1}
+ 3: \x{391}\x{3b1}
+ 4: \x{391}
+
+/\x{391}{3,5}(.)/8i
+    \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
+ 0: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
+ 1: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
+ 2: \x{391}\x{3b1}\x{3b1}\x{3b1}
+
+/\x{391}{3,5}?(.)/8i
+    \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
+ 0: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}X
+ 1: \x{391}\x{3b1}\x{3b1}\x{3b1}\x{391}
+ 2: \x{391}\x{3b1}\x{3b1}\x{3b1}
+
+/[\x{391}\x{ff3a}]/8i
+    \x{391}
+ 0: \x{391}
+    \x{ff3a}
+ 0: \x{ff3a}
+    \x{3b1}
+ 0: \x{3b1}
+    \x{ff5a}   
+ 0: \x{ff5a}
+    
+/[\x{c0}\x{391}]/8i
+    \x{c0}
+ 0: \x{c0}
+    \x{e0} 
+ 0: \x{e0}
+
+/[\x{105}-\x{109}]/8i
+    \x{104}
+ 0: \x{104}
+    \x{105}
+ 0: \x{105}
+    \x{109}  
+ 0: \x{109}
+    ** Failers
+No match
+    \x{100}
+No match
+    \x{10a} 
+No match
+    
+/[z-\x{100}]/8i 
+    Z
+ 0: Z
+    z
+ 0: z
+    \x{39c}
+ 0: \x{39c}
+    \x{178}
+ 0: \x{178}
+    |
+ 0: |
+    \x{80}
+ 0: \x{80}
+    \x{ff}
+ 0: \x{ff}
+    \x{100}
+ 0: \x{100}
+    \x{101} 
+ 0: \x{101}
+    ** Failers
+No match
+    \x{102}
+No match
+    Y
+No match
+    y           
+No match
+
+/[z-\x{100}]/8i
+
+/^\X/8
+    A
+ 0: A
+    A\x{300}BC 
+ 0: A\x{300}
+    A\x{300}\x{301}\x{302}BC 
+ 0: A\x{300}\x{301}\x{302}
+    *** Failers
+ 0: *
+    \x{300}  
+No match
+
+/^[\X]/8
+    X123
+ 0: X
+    *** Failers
+No match
+    AXYZ
+No match
+
+/^(\X*)C/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+ 0: A\x{300}\x{301}\x{302}BC
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+ 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
+ 1: A\x{300}\x{301}\x{302}BC
+
+/^(\X*?)C/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+ 0: A\x{300}\x{301}\x{302}BC
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+ 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
+ 1: A\x{300}\x{301}\x{302}BC
+
+/^(\X*)(.)/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+ 0: A\x{300}\x{301}\x{302}BCA
+ 1: A\x{300}\x{301}\x{302}BC
+ 2: A\x{300}\x{301}\x{302}B
+ 3: A
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+ 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
+ 1: A\x{300}\x{301}\x{302}BCA
+ 2: A\x{300}\x{301}\x{302}BC
+ 3: A\x{300}\x{301}\x{302}B
+ 4: A
+
+/^(\X*?)(.)/8
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301} 
+ 0: A\x{300}\x{301}\x{302}BCA
+ 1: A\x{300}\x{301}\x{302}BC
+ 2: A\x{300}\x{301}\x{302}B
+ 3: A
+    A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C 
+ 0: A\x{300}\x{301}\x{302}BCA\x{300}\x{301}C
+ 1: A\x{300}\x{301}\x{302}BCA
+ 2: A\x{300}\x{301}\x{302}BC
+ 3: A\x{300}\x{301}\x{302}B
+ 4: A
+
+/^\X(.)/8
+    *** Failers
+ 0: **
+    A\x{300}\x{301}\x{302}
+No match
+
+/^\X{2,3}(.)/8
+    A\x{300}\x{301}B\x{300}X
+ 0: A\x{300}\x{301}B\x{300}X
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}
+ 0: A\x{300}\x{301}B\x{300}C
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
+ 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
+ 1: A\x{300}\x{301}B\x{300}C
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}DA\x{300}X
+ 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}D
+ 1: A\x{300}\x{301}B\x{300}C
+    
+/^\X{2,3}?(.)/8
+    A\x{300}\x{301}B\x{300}X
+ 0: A\x{300}\x{301}B\x{300}X
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}
+ 0: A\x{300}\x{301}B\x{300}C
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
+ 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}X
+ 1: A\x{300}\x{301}B\x{300}C
+    A\x{300}\x{301}B\x{300}C\x{300}\x{301}DA\x{300}X
+ 0: A\x{300}\x{301}B\x{300}C\x{300}\x{301}D
+ 1: A\x{300}\x{301}B\x{300}C
+
+/^\pN{2,3}X/
+    12X
+ 0: 12X
+    123X
+ 0: 123X
+    *** Failers
+No match
+    X
+No match
+    1X
+No match
+    1234X     
+No match
+
+/\x{100}/i8
+    \x{100}   
+ 0: \x{100}
+    \x{101} 
+ 0: \x{101}
+    
+/ End / 
diff -Nurp tin-1.7.8/pcre/ucp.c tin-1.7.9/pcre/ucp.c
--- tin-1.7.8/pcre/ucp.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/ucp.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,150 +0,0 @@
-/*************************************************
-*     libucp - Unicode Property Table handler    *
-*************************************************/
-
-/* This function provides a fast way of obtaining the basic Unicode properties
-of a character, using a compact binary tree that occupies less than 100K bytes.
-
-           Copyright (c) 2004 University of Cambridge
-
--------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
--------------------------------------------------------------------------------
-*/
-
-#include "ucp.h"               /* Exported interface */
-#include "ucpinternal.h"       /* Internal table details */
-#include "ucptable.c"          /* The table itself */
-
-
-
-/*************************************************
-*         Search table and return data           *
-*************************************************/
-
-/* Two values are returned: the category is ucp_C, ucp_L, etc. The detailed
-character type is ucp_Lu, ucp_Nd, etc.
-
-Arguments:
-  c           the character value
-  type_ptr    the detailed character type is returned here
-  case_ptr    for letters, the opposite case is returned here, if there
-                is one, else zero
-
-Returns:      the character type category or -1 if not found
-*/
-
-static int
-ucp_findchar(const int c, int *type_ptr, int *case_ptr)
-{
-cnode *node = ucp_table;
-register int cc = c;
-int case_offset;
-
-for (;;)
-  {
-  register int d = node->f1 | ((node->f0 & f0_chhmask) << 16);
-  if (cc == d) break;
-  if (cc < d)
-    {
-    if ((node->f0 & f0_leftexists) == 0) return -1;
-    node ++;
-    }
-  else
-    {
-    register int roffset = (node->f2 & f2_rightmask) >> f2_rightshift;
-    if (roffset == 0) return -1;
-    node += 1 << (roffset - 1);
-    }
-  }
-
-switch ((*type_ptr = ((node->f0 & f0_typemask) >> f0_typeshift)))
-  {
-  case ucp_Cc:
-  case ucp_Cf:
-  case ucp_Cn:
-  case ucp_Co:
-  case ucp_Cs:
-  return ucp_C;
-  break;
-
-  case ucp_Ll:
-  case ucp_Lu:
-  case_offset = node->f2 & f2_casemask;
-  if ((case_offset & 0x0100) != 0) case_offset |= 0xfffff000;
-  *case_ptr = (case_offset == 0)? 0 : cc + case_offset;
-  return ucp_L;
-
-  case ucp_Lm:
-  case ucp_Lo:
-  case ucp_Lt:
-  *case_ptr = 0;
-  return ucp_L;
-  break;
-
-  case ucp_Mc:
-  case ucp_Me:
-  case ucp_Mn:
-  return ucp_M;
-  break;
-
-  case ucp_Nd:
-  case ucp_Nl:
-  case ucp_No:
-  return ucp_N;
-  break;
-
-  case ucp_Pc:
-  case ucp_Pd:
-  case ucp_Pe:
-  case ucp_Pf:
-  case ucp_Pi:
-  case ucp_Ps:
-  case ucp_Po:
-  return ucp_P;
-  break;
-
-  case ucp_Sc:
-  case ucp_Sk:
-  case ucp_Sm:
-  case ucp_So:
-  return ucp_S;
-  break;
-
-  case ucp_Zl:
-  case ucp_Zp:
-  case ucp_Zs:
-  return ucp_Z;
-  break;
-
-  default:         /* "Should never happen" */
-  return -1;
-  break;
-  }
-}
-
-/* End of ucp.c */
diff -Nurp tin-1.7.8/pcre/ucp.h tin-1.7.9/pcre/ucp.h
--- tin-1.7.8/pcre/ucp.h	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/ucp.h	2005-06-28 10:31:26.690093993 +0200
@@ -2,6 +2,10 @@
 *     libucp - Unicode Property Table handler    *
 *************************************************/
 
+
+#ifndef _UCP_H
+#define _UCP_H
+
 /* These are the character categories that are returned by ucp_findchar */
 
 enum {
@@ -49,10 +53,8 @@ enum {
   ucp_Zs     /* Space separator */
 };
 
-/* For use in PCRE we make this function static so that there is no conflict if
-PCRE is linked with an application that makes use of an external version -
-assuming an external version is ever released... */
+extern int ucp_findchar(const int, int *, int *);
 
-static int ucp_findchar(const int, int *, int *);
+#endif
 
 /* End of ucp.h */
diff -Nurp tin-1.7.8/pcre/ucp_findchar.c tin-1.7.9/pcre/ucp_findchar.c
--- tin-1.7.8/pcre/ucp_findchar.c	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/pcre/ucp_findchar.c	2005-06-28 10:31:26.679096018 +0200
@@ -0,0 +1,160 @@
+/*************************************************
+*     libucp - Unicode Property Table handler    *
+*************************************************/
+
+/* Copyright (c) University of Cambridge 2004 */
+
+/* This little library provides a fast way of obtaining the basic Unicode
+properties of a character, using a compact binary tree that occupies less than
+100K bytes.
+
+-----------------------------------------------------------------------------
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+    * Redistributions of source code must retain the above copyright notice,
+      this list of conditions and the following disclaimer.
+
+    * Redistributions in binary form must reproduce the above copyright
+      notice, this list of conditions and the following disclaimer in the
+      documentation and/or other materials provided with the distribution.
+
+    * Neither the name of the University of Cambridge nor the names of its
+      contributors may be used to endorse or promote products derived from
+      this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
+LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+-----------------------------------------------------------------------------
+*/
+
+
+#include "ucp.h"               /* Exported interface */
+#include "ucpinternal.h"       /* Internal table details */
+#include "ucptable.c"          /* The table itself */
+
+
+/* In some environments, external functions have to be preceded by some magic.
+In my world (Unix), they do not. Use a macro to deal with this. */
+
+#ifndef EXPORT
+#define EXPORT
+#endif
+
+
+
+/*************************************************
+*         Search table and return data           *
+*************************************************/
+
+/* Two values are returned: the category is ucp_C, ucp_L, etc. The detailed
+character type is ucp_Lu, ucp_Nd, etc.
+
+Arguments:
+  c           the character value
+  type_ptr    the detailed character type is returned here
+  case_ptr    for letters, the opposite case is returned here, if there
+                is one, else zero
+
+Returns:      the character type category or -1 if not found
+*/
+
+EXPORT int
+ucp_findchar(const int c, int *type_ptr, int *case_ptr)
+{
+cnode *node = ucp_table;
+register int cc = c;
+int case_offset;
+
+for (;;)
+  {
+  register int d = node->f1 | ((node->f0 & f0_chhmask) << 16);
+  if (cc == d) break;
+  if (cc < d)
+    {
+    if ((node->f0 & f0_leftexists) == 0) return -1;
+    node ++;
+    }
+  else
+    {
+    register int roffset = (node->f2 & f2_rightmask) >> f2_rightshift;
+    if (roffset == 0) return -1;
+    node += 1 << (roffset - 1);
+    }
+  }
+
+switch ((*type_ptr = ((node->f0 & f0_typemask) >> f0_typeshift)))
+  {
+  case ucp_Cc:
+  case ucp_Cf:
+  case ucp_Cn:
+  case ucp_Co:
+  case ucp_Cs:
+  return ucp_C;
+  break;
+
+  case ucp_Ll:
+  case ucp_Lu:
+  case_offset = node->f2 & f2_casemask;
+  if ((case_offset & 0x0100) != 0) case_offset |= 0xfffff000;
+  *case_ptr = (case_offset == 0)? 0 : cc + case_offset;
+  return ucp_L;
+
+  case ucp_Lm:
+  case ucp_Lo:
+  case ucp_Lt:
+  *case_ptr = 0;
+  return ucp_L;
+  break;
+
+  case ucp_Mc:
+  case ucp_Me:
+  case ucp_Mn:
+  return ucp_M;
+  break;
+
+  case ucp_Nd:
+  case ucp_Nl:
+  case ucp_No:
+  return ucp_N;
+  break;
+
+  case ucp_Pc:
+  case ucp_Pd:
+  case ucp_Pe:
+  case ucp_Pf:
+  case ucp_Pi:
+  case ucp_Ps:
+  case ucp_Po:
+  return ucp_P;
+  break;
+
+  case ucp_Sc:
+  case ucp_Sk:
+  case ucp_Sm:
+  case ucp_So:
+  return ucp_S;
+  break;
+
+  case ucp_Zl:
+  case ucp_Zp:
+  case ucp_Zs:
+  return ucp_Z;
+  break;
+
+  default:         /* "Should never happen" */
+  return -1;
+  break;
+  }
+}
+
+/* End of ucp_findchar.c */
diff -Nurp tin-1.7.8/pcre/ucptypetable.c tin-1.7.9/pcre/ucptypetable.c
--- tin-1.7.8/pcre/ucptypetable.c	2004-11-15 18:44:38.000000000 +0100
+++ tin-1.7.9/pcre/ucptypetable.c	1970-01-01 01:00:00.000000000 +0100
@@ -1,93 +0,0 @@
-/*************************************************
-*      Perl-Compatible Regular Expressions       *
-*************************************************/
-
-/*
-This is a library of functions to support regular expressions whose syntax
-and semantics are as close as possible to those of the Perl 5 language. See
-the file Tech.Notes for some information on the internals.
-
-Written by: Philip Hazel <ph10@cam.ac.uk>
-
-           Copyright (c) 1997-2004 University of Cambridge
-
------------------------------------------------------------------------------
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
-
-    * Redistributions of source code must retain the above copyright notice,
-      this list of conditions and the following disclaimer.
-
-    * Redistributions in binary form must reproduce the above copyright
-      notice, this list of conditions and the following disclaimer in the
-      documentation and/or other materials provided with the distribution.
-
-    * Neither the name of the University of Cambridge nor the names of its
-      contributors may be used to endorse or promote products derived from
-      this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
-LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGE.
------------------------------------------------------------------------------
-*/
-
-/* This module contains a table for translating Unicode property names into
-code values for the ucp_findchar function. It is in a separate module so that
-it can be included both in the main pcre library, and into pcretest (for
-printing out internals). */
-
-typedef struct {
-  const char *name;
-  int value;
-} ucp_type_table;
-
-static ucp_type_table utt[] = {
-  { "C",  128 + ucp_C },
-  { "Cc", ucp_Cc },
-  { "Cf", ucp_Cf },
-  { "Cn", ucp_Cn },
-  { "Co", ucp_Co },
-  { "Cs", ucp_Cs },
-  { "L",  128 + ucp_L },
-  { "Ll", ucp_Ll },
-  { "Lm", ucp_Lm },
-  { "Lo", ucp_Lo },
-  { "Lt", ucp_Lt },
-  { "Lu", ucp_Lu },
-  { "M",  128 + ucp_M },
-  { "Mc", ucp_Mc },
-  { "Me", ucp_Me },
-  { "Mn", ucp_Mn },
-  { "N",  128 + ucp_N },
-  { "Nd", ucp_Nd },
-  { "Nl", ucp_Nl },
-  { "No", ucp_No },
-  { "P",  128 + ucp_P },
-  { "Pc", ucp_Pc },
-  { "Pd", ucp_Pd },
-  { "Pe", ucp_Pe },
-  { "Pf", ucp_Pf },
-  { "Pi", ucp_Pi },
-  { "Po", ucp_Po },
-  { "Ps", ucp_Ps },
-  { "S",  128 + ucp_S },
-  { "Sc", ucp_Sc },
-  { "Sk", ucp_Sk },
-  { "Sm", ucp_Sm },
-  { "So", ucp_So },
-  { "Z",  128 + ucp_Z },
-  { "Zl", ucp_Zl },
-  { "Zp", ucp_Zp },
-  { "Zs", ucp_Zs }
-};
-
-/* End of ucptypetable.c */
diff -Nurp tin-1.7.8/pcre/version.sh tin-1.7.9/pcre/version.sh
--- tin-1.7.8/pcre/version.sh	2004-11-15 18:44:39.000000000 +0100
+++ tin-1.7.9/pcre/version.sh	2005-06-28 10:31:26.851064361 +0200
@@ -6,7 +6,7 @@
 # digits for minor numbers less than 10. There are unlikely to be
 # that many releases anyway.
 
-PCRE_MAJOR=5
-PCRE_MINOR=0
-PCRE_DATE=13-Sep-2004
+PCRE_MAJOR=6
+PCRE_MINOR=1
+PCRE_DATE=21-Jun-2005
 PCRE_VERSION=${PCRE_MAJOR}.${PCRE_MINOR}
Binary files tin-1.7.8/po/de.gmo and tin-1.7.9/po/de.gmo differ
diff -Nurp tin-1.7.8/po/de.po tin-1.7.9/po/de.po
--- tin-1.7.8/po/de.po	2005-03-21 11:43:03.000000000 +0100
+++ tin-1.7.9/po/de.po	2005-06-28 10:31:29.400595035 +0200
@@ -5,282 +5,333 @@
 # Christian Garbs <tin-dev@cgarbs.de>, 2003
 #
 msgid	""
-msgstr	"Project-Id-Version: tin 1.7.7\n"
-	"POT-Creation-Date: 2005-03-21 11:42+0100\n"
+msgstr	"Project-Id-Version: tin 1.7.9\n"
+	"Report-Msgid-Bugs-To: \n"
+	"POT-Creation-Date: 2005-06-22 20:13+0200\n"
 	"PO-Revision-Date: 2005-01-29 23:50+0100\n"
-	"Last-Translator: Sven Hartge <oweh@ds9.argh.org>, Kai Bojens "
-	"<kbojens@on-luebeck.de>\n"
+	"Last-Translator: Sven Hartge <oweh@ds9.argh.org>, Kai Bojens <kbojens@on-"
+	"luebeck.de>\n"
 	"Language-Team: German <german-tin@ds9.argh.org>\n"
 	"MIME-Version: 1.0\n"
 	"Content-Type: text/plain; charset=ISO-8859-1\n"
 	"Content-Transfer-Encoding: 8bit\n"
-	"Report-Msgid-Bugs-To: \n"
 
-#: src/art.c:1455
+#: src/art.c:1553
 #, c-format
 msgid	"%d Bad overview record (%d fields) '%s'"
 msgstr	"%d Fehlerhafter Overview-Datensatz (%d Felder) '%s'"
 
-#: src/attrib.c:604
+#: src/attrib.c:643
+#, c-format
 msgid	"# Do not edit this comment block\n"
 	"#\n"
 msgstr	"# Diesen Kommentarabschnitt nicht verändern\n"
 	"#\n"
 
-#: src/attrib.c:605
+#: src/attrib.c:644
+#, c-format
 msgid	"#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
 msgstr	"#  scope=ZEICHENKETTE  [notwendig]\n"
 	"#    Gültigkeitsbereich, z.B. alt.*,!alt.bin*\n"
 
-#: src/attrib.c:606
+#: src/attrib.c:645
+#, c-format
 msgid	"#  maildir=STRING (ie. ~/Mail)\n"
 msgstr	"#  maildir=ZEICHENKETTE\n"
 	"#    Verzeichnis der Mail-Ordner, z.B. ~/Mail\n"
 
-#: src/attrib.c:607
+#: src/attrib.c:646
+#, c-format
 msgid	"#  savedir=STRING (ie. ~user/News)\n"
 msgstr	"#  savedir=ZEICHENKETTE\n"
 	"#    Verzeichnis zum Speichern, z.B. ~user/News\n"
 
-#: src/attrib.c:608
+#: src/attrib.c:647
+#, c-format
 msgid	"#  savefile=STRING (ie. =linux)\n"
 msgstr	"#  savefile=ZEICHENKETTE\n"
 	"#    Datei zum Speichern, z.B. =linux\n"
 
-#: src/attrib.c:609
+#: src/attrib.c:648
+#, c-format
 msgid	"#  sigfile=STRING (ie. $var/sig)\n"
 msgstr	"#  sigfile=ZEICHENKETTE\n"
 	"#    Signatur, z.B. $var/sig\n"
 
-#: src/attrib.c:610
+#: src/attrib.c:649
+#, c-format
 msgid	"#  organization=STRING (if beginning with '/' read from file)\n"
 msgstr	"#  organization=ZEICHENKETTE\n"
 	"#    Organization-Header; ist das erste Zeichen ein '/', wird der\n"
 	"#    Wert aus dieser Datei gelesen.\n"
 
-#: src/attrib.c:611
+#: src/attrib.c:650
+#, c-format
 msgid	"#  followup_to=STRING\n"
 msgstr	"#  followup_to=ZEICHENKETTE\n"
 	"#    Voreinstellung für den Followup-To-Header\n"
 
-#: src/attrib.c:612
+#: src/attrib.c:651
+#, c-format
 msgid	"#  mailing_list=STRING (ie. majordomo@example.org)\n"
 msgstr	"#  mailing_list=ZEICHENKETTE\n"
 	"#    Gruppe ist eine gegatete Mailingliste, z.B. majordomo@example.org\n"
 
-#: src/attrib.c:613
+#: src/attrib.c:652
+#, c-format
 msgid	"#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
 msgstr	"#  x_headers=ZEICHENKETTE\n"
 	"#    Zusätzliche Header, z.B. ~/.tin/extra-headers\n"
 
-#: src/attrib.c:614
+#: src/attrib.c:653
+#, c-format
 msgid	"#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
 msgstr	"#  x_body=ZEICHENKETTE\n"
 	"#    Text wird automatisch zu Beginn des Artikels eingefügt,\n"
 	"#    z.B. ~/.tin/extra-body-text\n"
 
-#: src/attrib.c:615
+#: src/attrib.c:654
+#, c-format
 msgid	"#  from=STRING (just append wanted From:-line, don't use quotes)\n"
 msgstr	"#  from=ZEICHENKETTE\n"
 	"#    Absender, einfach den gewünschten Wert eintragen,\n"
 	"#    keine Anführungszeichen verwenden\n"
 
-#: src/attrib.c:616
+#: src/attrib.c:655
+#, c-format
 msgid	"#  news_quote_format=STRING\n"
 msgstr	"#  news_quote_format=ZEICHENKETTE\n"
 	"#    Einleitungszeile, z.B. news_quote_format=In %%M, %%F wrote:\n"
 
-#: src/attrib.c:617
+#: src/attrib.c:656
+#, c-format
 msgid	"#  quote_chars=STRING (%%s, %%S for initials)\n"
 msgstr	"#  quote_chars=ZEICHENKETTE\n"
 	"#    Zeichen für Zitate in Antworten, %%s oder %%S ergibt Autoreninitialien\n"
 
-#: src/attrib.c:618
+#: src/attrib.c:657
+#, c-format
 msgid	"#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
 msgstr	"#  mime_types_to_save=ZEICHENKETTE\n"
 	"#    z.B. image/*,!image/bmp\n"
 
-#: src/attrib.c:620
+#: src/attrib.c:659
+#, c-format
 msgid	"#  ispell=STRING\n"
 msgstr	"#  ispell=ZEICHENKETTE\n"
 	"#    Aufruf der Rechtschreibprüfung,\n"
 	"#    z.B. ispell -C -ddeutsch -w äöüÄÖÜß@ -Tlatin1\n"
 
-#: src/attrib.c:622
+#: src/attrib.c:661
+#, c-format
 msgid	"#  auto_select=ON/OFF\n"
 msgstr	"#  auto_select=ON/OFF\n"
 	"#    Führe GroupMarkUnselArtRead Kommando automatisch beim Betreten\n"
 	"#    der Gruppe aus\n"
 
-#: src/attrib.c:623
+#: src/attrib.c:662
+#, c-format
 msgid	"#  auto_save=ON/OFF\n"
 msgstr	"#  auto_save=ON/OFF\n"
 	"#    Artikel mit 'Archive-name:'-Header automatisch in die darin\n"
 	"#    angegebene Datei speichern\n"
 
-#: src/attrib.c:624
+#: src/attrib.c:663
+#, c-format
 msgid	"#  batch_save=ON/OFF\n"
 msgstr	"#  batch_save=ON/OFF\n"
 	"#    Im Batch-Modus werden die Artikel beachtet\n"
 
-#: src/attrib.c:625
+#: src/attrib.c:664
+#, c-format
 msgid	"#  delete_tmp_files=ON/OFF\n"
 msgstr	"#  delete_tmp_files=ON/OFF\n"
 	"#    Gespeicherte, zur Nachbearbeitung weitergegebene Artikel ohne\n"
 	"#    Nachfrage löschen\n"
 
-#: src/attrib.c:626
+#: src/attrib.c:665
+#, c-format
 msgid	"#  show_only_unread=ON/OFF\n"
 msgstr	"#  show_only_unread=ON/OFF\n"
 	"#    nur ungelesene Artikel anzeigen\n"
 
-#: src/attrib.c:627
+#: src/attrib.c:666
+#, c-format
 msgid	"#  thread_arts=NUM"
 msgstr	"#  thread_arts=ZAHL\n"
 	"#    Threading nach:"
 
-#: src/attrib.c:634
+#: src/attrib.c:673
+#, c-format
 msgid	"#  show_author=NUM\n"
 msgstr	"#  show_author=ZAHL\n"
 	"#    Anzeige des From-Felds\n"
 
-#: src/attrib.c:640
+#: src/attrib.c:679
+#, c-format
 msgid	"#  show_info=NUM\n"
 msgstr	"#  show_info=ZAHL\n"
 
-#: src/attrib.c:646
+#: src/attrib.c:685
+#, c-format
 msgid	"#  sort_art_type=NUM\n"
 msgstr	"#  sort_art_type=ZAHL\n"
 	"#    Artikel sortieren nach:\n"
 
-#: src/attrib.c:664
+#: src/attrib.c:703
+#, c-format
 msgid	"#  sort_threads_type=NUM\n"
 msgstr	"#  sort_threads_type=ZAHL\n"
 	"#    Threads sortieren nach:\n"
 
-#: src/attrib.c:669
+#: src/attrib.c:708
+#, c-format
 msgid	"#  post_proc_type=NUM\n"
 msgstr	"#  post_proc_type=ZAHL\n"
 	"#    Nachbearbeitung\n"
 
-#: src/attrib.c:674
+#: src/attrib.c:713
+#, c-format
 msgid	"#  quick_kill_scope=STRING (ie. talk.*)\n"
 msgstr	"#  quick_kill_scope=ZEICHENKETTE\n"
 	"#    Voreinstellung für Gültigkeitsbereich neuer Kill-Einträge,\n"
 	"#    z.B. talk.*\n"
 
-#: src/attrib.c:675
+#: src/attrib.c:714
+#, c-format
 msgid	"#  quick_kill_expire=ON/OFF\n"
 msgstr	"#  quick_kill_expire=ON/OFF\n"
 	"#    Kill verfällt automatisch\n"
 
-#: src/attrib.c:676
+#: src/attrib.c:715
+#, c-format
 msgid	"#  quick_kill_case=ON/OFF\n"
 msgstr	"#  quick_kill_case=ON/OFF\n"
 	"#    Kill beachtet Gross/Kleinschreibung\n"
 
-#: src/attrib.c:677
+#: src/attrib.c:716
+#, c-format
 msgid	"#  quick_kill_header=NUM\n"
 msgstr	"#  quick_kill_header=ZAHL\n"
 	"#    Killen nach:\n"
 
-#: src/attrib.c:678 src/attrib.c:685
+#: src/attrib.c:717 src/attrib.c:724
+#, c-format
 msgid	"#    0=subj (case sensitive) 1=subj (ignore case)\n"
 msgstr	"#    0=Subject (Gross/Kleinschreibung beachten), 1=Subject (G/K ignorieren)\n"
 
-#: src/attrib.c:679 src/attrib.c:686
+#: src/attrib.c:718 src/attrib.c:725
+#, c-format
 msgid	"#    2=from (case sensitive) 3=from (ignore case)\n"
 msgstr	"#    2=From (G/K beachten), 3=From (G/K ignorieren)\n"
 
-#: src/attrib.c:680 src/attrib.c:687
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
 msgid	"#    4=msgid 5=lines\n"
 msgstr	"#    4=Message-ID, 5=Zeilen\n"
 
-#: src/attrib.c:681
+#: src/attrib.c:720
+#, c-format
 msgid	"#  quick_select_scope=STRING\n"
 msgstr	"#  quick_select_scope=ZEICHENKETTE\n"
 	"#    Voreinstellung für Gültigkeitsbereich neuer Auswahlregeln (Hochscoren)\n"
 
-#: src/attrib.c:682
+#: src/attrib.c:721
+#, c-format
 msgid	"#  quick_select_expire=ON/OFF\n"
 msgstr	"#  quick_select_expire=ON/OFF\n"
 	"#    Regel verfällt automatisch\n"
 
-#: src/attrib.c:683
+#: src/attrib.c:722
+#, c-format
 msgid	"#  quick_select_case=ON/OFF\n"
 msgstr	"#  quick_select_case=ON/OFF\n"
 	"#    Regel beachtet Gross/Kleinschreibung\n"
 
-#: src/attrib.c:684
+#: src/attrib.c:723
+#, c-format
 msgid	"#  quick_select_header=NUM\n"
 msgstr	"#  quick_select_header=NUM\n"
 	"#    Auswählen (Hochscoren) nach:\n"
 
-#: src/attrib.c:688
+#: src/attrib.c:727
+#, c-format
 msgid	"#  x_comment_to=ON/OFF\n"
 msgstr	"#  x_comment_to=ON/OFF\n"
 	"#    X-Comment-To:-Header einfügen.\n"
 	"#    (Nur sinnvoll in nach Fido Technology Network gegateten Gruppen.)\n"
 
-#: src/attrib.c:689
+#: src/attrib.c:728
+#, c-format
 msgid	"#  fcc=STRING (eg. =mailbox)\n"
 msgstr	"#  fcc=ZEICHENKETTE\n"
 	"#    Datei in der eine Kopie der Mail abgelegt werden soll,#    z.B: "
 	"=mailbox\n"
 
-#: src/attrib.c:690
+#: src/attrib.c:729
+#, c-format
 msgid	"#  tex2iso_conv=ON/OFF\n"
 msgstr	"#  tex2iso_conv=ON/OFF\n"
 	"#    Automatische Umwandlung von TeX-Umlauten\n"
 
-#: src/attrib.c:691
+#: src/attrib.c:730
+#, c-format
 msgid	"#  mime_forward=ON/OFF\n"
 msgstr	"#  mime_forward=ON/OFF\n"
 	"#    Weitergeleitete Artikel als MIME-Anhang senden\n"
 
-#: src/attrib.c:693
+#: src/attrib.c:732
+#, c-format
 msgid	"#  mm_network_charset=supported_charset"
 msgstr	"#  mm_network_charset=Zeichensatz\n"
 	"#    Erlaubt sind folgende:"
 
-#: src/attrib.c:700
+#: src/attrib.c:739
+#, c-format
 msgid	"#  undeclared_charset=STRING (default is US-ASCII)\n"
 msgstr	"#  undeclared_charset=ZEICHENKETTE\n"
 	"#    Voreinstellung ist US-ASCII\n"
 
-#: src/attrib.c:702
+#: src/attrib.c:741
+#, c-format
 msgid	"#\n"
 	"# Note that it is best to put general (global scoping)\n"
 msgstr	"#\n"
 	"# Es empfiehlt sich, zuerst allgemein gültige und danach spezielle,\n"
 
-#: src/attrib.c:703
+#: src/attrib.c:742
+#, c-format
 msgid	"# entries first followed by group specific entries.\n"
 	"#\n"
 msgstr	"# nur für bestimmte Newsgruppen gültige Einträge aufzuführen.\n"
 	"#\n"
 
-#: src/attrib.c:704
+#: src/attrib.c:743
+#, c-format
 msgid	"############################################################################\n"
 	"\n"
 msgstr	"############################################################################\n"
 	"\n"
 
-#: src/attrib.c:710
+#: src/attrib.c:749
+#, c-format
 msgid	"# include extra headers\n"
 msgstr	"# Zusätzliche Header einfügen\n"
 
-#: src/attrib.c:718
+#: src/attrib.c:757
+#, c-format
 msgid	"# in *sources* set post process type to shar only\n"
 msgstr	"# in *sources* nur Nachbearbeitung mit shar\n"
 
-#: src/attrib.c:722
-msgid	"# in *binaries* do full post processing, remove tmp files\n"
-msgstr	"# in *binaries* Nachbearbeitung, temporäre Dateien löschen\n"
+#: src/attrib.c:761
+#, c-format
+msgid	"# in *binaries* do full post processing but no TeX2ISO conversion,\n"
+msgstr	"# in *binaries* Nachbearbeitung ohne TeX2ISO umwandlung,\n"
 
-#: src/attrib.c:723
-msgid	"# and set Followup-To: poster\n"
-msgstr	"# und Antwort per EMail (Followup-To: poster) anfordern\n"
+#: src/attrib.c:762
+#, c-format
+msgid	"# remove tmp files and set Followup-To: poster\n"
+msgstr	"# temporäre Dateien löschen und Followup-To: poster setzen\n"
 
 #: src/cook.c:497
 msgid	"(unknown)"
@@ -518,6 +569,7 @@ msgid	"*** Beginning of article ***"
 msgstr	"*** Anfang des Artikels ***"
 
 #: src/lang.c:97
+#, c-format
 msgid	"Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
 msgstr	"[%%s] canceln (löschen) oder superseden (überschreiben)? (%s/%s/%s): "
 
@@ -641,7 +693,7 @@ msgstr	"Erzeuge die Datei 'active' für g
 msgid	"Creating newsrc file...\n"
 msgstr	"Erzeuge newsrc Datei...\n"
 
-#: src/lang.c:129 src/lang.c:1150
+#: src/lang.c:129 src/lang.c:1147
 msgid	"Default"
 msgstr	"Voreinstellung"
 
@@ -1699,7 +1751,7 @@ msgstr	"bewegt die gewählte Gruppe inner
 msgid	"choose next group with unread news"
 msgstr	"wählt die nächste Gruppe mit ungelesenen Artikeln"
 
-#: src/lang.c:389 src/lang.c:1197
+#: src/lang.c:389 src/lang.c:1194
 msgid	"quit"
 msgstr	"Beenden"
 
@@ -1981,105 +2033,100 @@ msgstr	"Ungültige Tastenbelegung '%s'\n"
 msgid	"Invalid keyname '%s'\n"
 msgstr	"Ungültiger Tastenname '%s'\n"
 
-#: src/lang.c:462
-#, c-format
-msgid	"Key '%s' is defined for both %s%s and %s%s\n"
-msgstr	"Taste '%s' ist für %s%s und %s%s definiert\n"
-
-#: src/lang.c:464
+#: src/lang.c:461
 #, c-format
 msgid	"Keymap file was upgraded to version %s\n"
 msgstr	"Keymap-File wurde auf Version %s umgestellt\n"
 
-#: src/lang.c:465
+#: src/lang.c:462
 #, c-format
 msgid	"Kill From:     [%s] (y/n): "
 msgstr	"Filter From:   [%s] (j/n): "
 
-#: src/lang.c:466
+#: src/lang.c:463
 msgid	"Kill Lines: (</>num): "
 msgstr	"Filter Z.:  (</>num): "
 
-#: src/lang.c:467
+#: src/lang.c:464
 msgid	"Kill Article Menu"
 msgstr	"Filter Menü (Kill, Bewertung/Score verringern)"
 
-#: src/lang.c:468
+#: src/lang.c:465
 #, c-format
 msgid	"Kill Msg-Id:   [%s] (f/l/o/n): "
 msgstr	"Filter Msg-Id: [%s] (v/l/n/n): "
 
-#: src/lang.c:469
+#: src/lang.c:466
 msgid	"Kill pattern scope  : "
 msgstr	"Filter nach Muster  : "
 
-#: src/lang.c:470
+#: src/lang.c:467
 #, c-format
 msgid	"Kill Subject:  [%s] (y/n): "
 msgstr	"Filter Subject:[%s] (j/n): "
 
-#: src/lang.c:471
+#: src/lang.c:468
 msgid	"Kill text pattern   : "
 msgstr	"Filter Textmuster   : "
 
-#: src/lang.c:472
+#: src/lang.c:469
 msgid	"Kill time in days   : "
 msgstr	"Filterzeit in Tagen : "
 
-#: src/lang.c:474
+#: src/lang.c:471
 msgid	"Last"
 msgstr	"Letzte"
 
-#: src/lang.c:475
+#: src/lang.c:472
 msgid	"-- Last response --"
 msgstr	"-- Letzte Antwort --"
 
-#: src/lang.c:476
+#: src/lang.c:473
 #, c-format
 msgid	"Lines %s  "
 msgstr	"Zeilen %s "
 
-#: src/lang.c:478
+#: src/lang.c:475
 msgid	"Message-ID: line              "
 msgstr	"Message-ID: Zeile             "
 
-#: src/lang.c:479
+#: src/lang.c:476
 msgid	"Mail"
 msgstr	"Maile"
 
-#: src/lang.c:480
+#: src/lang.c:477
 msgid	"mailbox "
 msgstr	"Mailbox "
 
-#: src/lang.c:481
+#: src/lang.c:478
 #, c-format
 msgid	"Mail article(s) to [%.*s]> "
 msgstr	"Mailt Artikel an [%.*s]> "
 
-#: src/lang.c:482
+#: src/lang.c:479
 #, c-format
 msgid	"Mailing log to %s\n"
 msgstr	"Maile Log-Datei an %s\n"
 
-#: src/lang.c:483
+#: src/lang.c:480
 msgid	"Mail bug report..."
 msgstr	"Maile einen Fehlerbericht..."
 
-#: src/lang.c:484
+#: src/lang.c:481
 #, c-format
 msgid	"Mail BUG REPORT to %s?"
 msgstr	"Fehlerbericht an %s senden?"
 
-#: src/lang.c:485
+#: src/lang.c:482
 msgid	"Mailed"
 msgstr	"Gemailt"
 
-#: src/lang.c:486
+#: src/lang.c:483
 #, c-format
 msgid	"Mailing to %s..."
 msgstr	"Senden der Mail an %s..."
 
-#: src/lang.c:487
+#: src/lang.c:484
 msgid	"# [Mail/Save] active file. Format is like news active file:\n"
 	"#   groupname  max.artnum  min.artnum  /dir\n"
 	"# The 4th field is the basedir (ie. ~/Mail or ~/News)\n"
@@ -2089,283 +2136,283 @@ msgstr	"# [Mail/Speicher] active-Datei. 
 	"# Das 4. Feld ist das Basisverzeichnis (z.B. ~/Mail oder ~/News)\n"
 	"#\n"
 
-#: src/lang.c:490
+#: src/lang.c:487
 #, c-format
 msgid	"%s marked as unread"
 msgstr	"%s als ungelesen markiert"
 
-#: src/lang.c:491
+#: src/lang.c:488
 #, c-format
 msgid	"Marked %d of %d tagged %s as read"
 msgstr	"%d von %d %s als gelesen markiert"
 
-#: src/lang.c:492
+#: src/lang.c:489
 #, c-format
 msgid	"Mark all articles as read%s?"
 msgstr	"Alle Artikel als gelesen markieren%s?"
 
-#: src/lang.c:493
+#: src/lang.c:490
 #, c-format
 msgid	"Mark %s=tagged articles, %s=current article, %s=quit: "
 msgstr	"%s=markierte oder %s=aktuellen Artikel auf gelesen setzen. %s=Abbrechen: "
 
-#: src/lang.c:494
+#: src/lang.c:491
 #, c-format
 msgid	"Mark group %s as read?"
 msgstr	"Die Gruppe %s als gelesen markieren?"
 
-#: src/lang.c:495
+#: src/lang.c:492
 #, c-format
 msgid	"Mark thread as read%s?"
 msgstr	"Den Thread als gelesen markieren%s?"
 
-#: src/lang.c:496
+#: src/lang.c:493
 #, c-format
 msgid	"Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
-msgstr	"%s=markierte oder %s=aktuellen Artikel/Thread auf gelesen setzen. "
-	"%s=Abbrechen: "
+msgstr	"%s=markierte oder %s=aktuellen Artikel/Thread auf gelesen setzen. %"
+	"s=Abbrechen: "
 
-#: src/lang.c:497
+#: src/lang.c:494
 #, c-format
 msgid	"Matching %s groups..."
 msgstr	"Übereinstimmende %s Gruppen..."
 
-#: src/lang.c:498 src/lang.c:502
+#: src/lang.c:495 src/lang.c:499
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
 msgstr	"<n>=Wähle n; %s=n. ungel.; %s=Suche; %s=Filter"
 
-#: src/lang.c:499
+#: src/lang.c:496
 #, c-format
 msgid	"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %s=list "
 	"thread"
 msgstr	"%s=Autorsuche; %s=Catchup; %s=n. unten; %s=n. oben; %s=gelesen; %s=Thread anz."
 
-#: src/lang.c:500
+#: src/lang.c:497
 #, c-format
 msgid	"%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
 msgstr	"%s=n. oben; %s=n. unten; %s=BildAuf; %s=BildAb; %s=Anfang; %s=letzte Zeile"
 
-#: src/lang.c:501
+#: src/lang.c:498
 #, c-format
 msgid	"%s=search forwards; %s=search backwards; %s=quit"
 msgstr	"%s=Suche vorwärts; %s=Suche rückwärts; %s=Beenden"
 
-#: src/lang.c:503
+#: src/lang.c:500
 #, c-format
 msgid	"%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
 msgstr	"%s=Autorsuche; %s=Su. Inhalt; %s=Catchup; %s=Antw in NG; %s=gelesen"
 
-#: src/lang.c:504
+#: src/lang.c:501
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
 msgstr	"<n>=Wähle n; %s=n. ungel.; %s,%s=Suche; %s=Catchup"
 
-#: src/lang.c:505
+#: src/lang.c:502
 #, c-format
 msgid	"%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
 msgstr	"%s=n. unten; %s=n. oben; %s=Hilfe; %s=verschieben; %s=Ende; %s=Alle/Nur ungel."
 
-#: src/lang.c:506
+#: src/lang.c:503
 #, c-format
 msgid	"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/out"
 msgstr	"%s=Abo; %s=Abo n. Muster; %s=Abbestellen; %s=Abbest. n. Muster; %s=Alle/Nur "
 	"abon."
 
-#: src/lang.c:507
+#: src/lang.c:504
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
 msgstr	"<n>=Wähle n; %s=n. ungel.; %s=Catchup; %s=Infozeile"
 
-#: src/lang.c:508
+#: src/lang.c:505
 #, c-format
 msgid	"%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
 msgstr	"%s=Hilfe; %s=n. unten; %s=n. oben; %s=Ende; %s=tag; %s=ungelesen"
 
-#: src/lang.c:509
+#: src/lang.c:506
 msgid	"--More--"
 msgstr	"--Mehr--"
 
-#: src/lang.c:510
+#: src/lang.c:507
 #, c-format
 msgid	"Moving %s..."
 msgstr	"Verschiebe %s..."
 
-#: src/lang.c:512
+#: src/lang.c:509
 msgid	", name: "
 msgstr	", Name: "
 
-#: src/lang.c:513
+#: src/lang.c:510
 #, c-format
 msgid	"Goto newsgroup [%s]> "
 msgstr	"Gehe zu Gruppe [%s]> "
 
-#: src/lang.c:514
+#: src/lang.c:511
 msgid	"newsgroups"
 msgstr	"Gruppen"
 
-#: src/lang.c:515
+#: src/lang.c:512
 #, c-format
 msgid	"Position %s in group list (1,2,..,$) [%d]> "
 msgstr	"Position %s in der Gruppenliste (1,2,..,$) [%d]> "
 
-#: src/lang.c:516
+#: src/lang.c:513
 msgid	"newsgroup"
 msgstr	"Gruppe"
 
-#: src/lang.c:517
+#: src/lang.c:514
 msgid	"Try and save newsrc file again?"
 msgstr	"Erneut versuchen, die newsrc-Datei zu schreiben?"
 
-#: src/lang.c:518
+#: src/lang.c:515
 msgid	"Warning: No newsgroups were written to your newsrc file. Save aborted."
 msgstr	"Warnung: Keine Newsgruppen in die newsrc geschrieben. Speicherabbruch."
 
-#: src/lang.c:519
+#: src/lang.c:516
 msgid	"newsrc file saved successfully.\n"
 msgstr	"newsrc-Datei erfolgreich geschrieben.\n"
 
-#: src/lang.c:520
+#: src/lang.c:517
 msgid	"-- Next response --"
 msgstr	"-- Nächste Antwort --"
 
-#: src/lang.c:521
+#: src/lang.c:518
 #, c-format
 msgid	"NNTP authorization password not found for %s"
 msgstr	"NNTP Anmeldepasswort für %s nicht gefunden"
 
-#: src/lang.c:522
+#: src/lang.c:519
 msgid	"No  "
 msgstr	"Nein"
 
-#: src/lang.c:523
+#: src/lang.c:520
 msgid	"*** No articles ***"
 msgstr	"*** Keine Artikel ***"
 
-#: src/lang.c:524
+#: src/lang.c:521
 msgid	"No articles have been posted"
 msgstr	"Es wurden keine Artikel gepostet"
 
-#: src/lang.c:525
+#: src/lang.c:522
 msgid	"*** No description ***"
 msgstr	"*** Keine Kurzbeschreibung ***"
 
-#: src/lang.c:526
+#: src/lang.c:523
 msgid	"No filename"
 msgstr	"Kein Dateiname"
 
-#: src/lang.c:527
+#: src/lang.c:524
 msgid	"No group"
 msgstr	"Keine Gruppe"
 
-#: src/lang.c:528
+#: src/lang.c:525
 msgid	"*** No groups ***"
 msgstr	"*** Keine Newsgruppen ***"
 
-#: src/lang.c:529
+#: src/lang.c:526
 msgid	"No more groups to read"
 msgstr	"Keine Gruppen zum Lesen übrig"
 
-#: src/lang.c:530
+#: src/lang.c:527
 msgid	"No last message"
 msgstr	"Keine letzte Nachricht"
 
-#: src/lang.c:531
+#: src/lang.c:528
 msgid	"No mail address"
 msgstr	"Keine EMail-Adresse"
 
-#: src/lang.c:532
+#: src/lang.c:529
 msgid	"No articles marked for saving"
 msgstr	"Keine Artikel zum Speichern markiert"
 
-#: src/lang.c:533
+#: src/lang.c:530
 msgid	"No match"
 msgstr	"Kein Treffer"
 
-#: src/lang.c:534
+#: src/lang.c:531
 msgid	"No more groups"
 msgstr	"Keine Gruppen mehr"
 
-#: src/lang.c:535
+#: src/lang.c:532
 msgid	"No newsgroups"
 msgstr	"Keine Newsgruppen"
 
-#: src/lang.c:536
+#: src/lang.c:533
 msgid	"No next unread article"
 msgstr	"Kein nächster ungelesener Artikel"
 
-#: src/lang.c:537
+#: src/lang.c:534
 msgid	"No previous group"
 msgstr	"Keine vorherige Gruppe"
 
-#: src/lang.c:538
+#: src/lang.c:535
 msgid	"No previous unread article"
 msgstr	"Kein vorheriger ungelesener Artikel"
 
-#: src/lang.c:539
+#: src/lang.c:536
 msgid	"No responses"
 msgstr	"Keine Antworten"
 
-#: src/lang.c:540
+#: src/lang.c:537
 msgid	"No responses to list in current thread"
 msgstr	"Keine Antworten vorhanden im aktuellen Thread"
 
-#: src/lang.c:541
+#: src/lang.c:538
 msgid	"No search string"
 msgstr	"Kein Suchmuster"
 
-#: src/lang.c:542
+#: src/lang.c:539
 msgid	"No subject"
 msgstr	"Kein Subject"
 
-#: src/lang.c:544
+#: src/lang.c:541
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-line (ce)\n"
 msgstr	"%s: Terminal muss Löschen bis zum Ende der Zeile (ce) unterstützen\n"
 
-#: src/lang.c:545
+#: src/lang.c:542
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-screen (cd)\n"
 msgstr	"%s: Terminal muss Löschen bis zum Ende des Schirmes unterstützen (cd)\n"
 
-#: src/lang.c:546
+#: src/lang.c:543
 #, c-format
 msgid	"%s: Terminal must have clearscreen (cl) capability\n"
 msgstr	"%s: Terminal muss Schirmlöschen (cl) unterstützen\n"
 
-#: src/lang.c:547
+#: src/lang.c:544
 #, c-format
 msgid	"%s: Terminal must have cursor motion (cm)\n"
 msgstr	"%s: Terminal muss Cursor-Bewegungen unterstützen (cm)\n"
 
-#: src/lang.c:548
+#: src/lang.c:545
 #, c-format
 msgid	"%s: TERM variable must be set to use screen capabilities\n"
 msgstr	"%s: TERM-Variable muss gesetzt sein, um das Terminal richtig anzusteuern\n"
 
-#: src/lang.c:550
+#: src/lang.c:547
 #, c-format
 msgid	"No viewer found for %s/%s\n"
 msgstr	"Kein Programm für %s/%s gefunden\n"
 
-#: src/lang.c:551
+#: src/lang.c:548
 msgid	"Newsgroup does not exist on this server"
 msgstr	"Newsgruppe existiert nicht auf diesem Server"
 
-#: src/lang.c:552
+#: src/lang.c:549
 #, c-format
 msgid	"Group %s not found in active file"
 msgstr	"Gruppe %s nicht in der Active-Datei gefunden"
 
-#: src/lang.c:553
+#: src/lang.c:550
 msgid	"c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"c=erzeuge, a=alternativer Name, d=voreingestellte .newsrc, q=beende tin: "
 
-#: src/lang.c:554
+#: src/lang.c:551
 msgid	"use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"a=alternativer Name, d=voreingestellte .newsrc, q=beende tin: "
 
-#: src/lang.c:555
+#: src/lang.c:552
 #, c-format
 msgid	"# NNTP-server -> newsrc translation table and NNTP-server\n"
 	"# shortname list for %s %s\n"
@@ -2392,40 +2439,40 @@ msgstr	"# NNTP-Server -> newsrc Übersetz
 	"#   news.ka.nu    /tmp/nrc-nu      kanu    nu\n"
 	"#\n"
 
-#: src/lang.c:562
+#: src/lang.c:559
 msgid	"Only"
 msgstr	"Nur"
 
-#: src/lang.c:563
+#: src/lang.c:560
 #, c-format
 msgid	"Option not enabled. Recompile with %s."
 msgstr	"Option nicht vorhanden. Neu kompilieren mit %s."
 
-#: src/lang.c:564
+#: src/lang.c:561
 msgid	"Options Menu"
 msgstr	"Optionsmenü"
 
-#: src/lang.c:567
+#: src/lang.c:564
 #, c-format
 msgid	"Error in regex: %s at pos. %d '%s'"
 msgstr	"Fehler im regulären Ausdruck: %s an Pos. %d '%s'"
 
-#: src/lang.c:568
+#: src/lang.c:565
 #, c-format
 msgid	"Error in regex: pcre internal error %d"
 msgstr	"Fehler im regulären Ausdruck: Interner Fehler %d des pcre"
 
-#: src/lang.c:569
+#: src/lang.c:566
 #, c-format
 msgid	"Error in regex: study - pcre internal error %s"
 msgstr	"Fehler im regulären Ausdruck: pcre interner Fehler %s"
 
-#: src/lang.c:570
+#: src/lang.c:567
 msgid	"Post a followup..."
 msgstr	"Schreibe eine Antwort..."
 
 #. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
-#: src/lang.c:572
+#: src/lang.c:569
 msgid	"An error has occurred while posting the article. If you think that this\n"
 	"error is temporary or otherwise correctable, you can postpone the article\n"
 	"and pick it up again with ^O later.\n"
@@ -2433,274 +2480,276 @@ msgstr	"Ein Fehler trat beim Posten des 
 	"ein temporäres Problem ist, das später nicht mehr vorhanden ist, können Sie\n"
 	"den Artikel zurückstellen und später mit ^O wieder hervorholen.\n"
 
-#: src/lang.c:575
+#: src/lang.c:572
 msgid	"Posted articles history"
 msgstr	"Übersicht der geposteten Artikel"
 
-#: src/lang.c:576
+#: src/lang.c:573
 #, c-format
 msgid	"Post to newsgroup(s) [%s]> "
 msgstr	"In Newsgruppe(n) [%s] posten> "
 
-#: src/lang.c:577
+#: src/lang.c:574
 msgid	"-- post processing started --"
 msgstr	"-- Nachbearbeitung gestartet --"
 
-#: src/lang.c:578
+#: src/lang.c:575
 msgid	"-- post processing completed --"
 msgstr	"-- Nachbearbeitung beendet --"
 
-#: src/lang.c:579
+#: src/lang.c:576
 #, c-format
 msgid	"Post subject [%s]> "
 msgstr	"Wähle Subject [%s]> "
 
-#: src/lang.c:580
+#: src/lang.c:577
 msgid	"# Summary of mailed/posted messages viewable by 'W' command from within tin.\n"
 msgstr	"# Zusammenfassung der gemailten/geposteten Artikel mit 'W' in tin.\n"
 
-#: src/lang.c:581
+#: src/lang.c:578
 msgid	"Posting article..."
 msgstr	"Poste Artikel..."
 
-#: src/lang.c:582
+#: src/lang.c:579
+#, c-format
 msgid	"Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
 msgstr	"Zurückgelegten Artikel [%%s]posten? (%s/%s/%s/%s/%s): "
 
-#: src/lang.c:583
+#: src/lang.c:580
 #, c-format
 msgid	"Hot %s"
 msgstr	"Wichtig/Hot %s"
 
-#: src/lang.c:584
+#: src/lang.c:581
 #, c-format
 msgid	"Tagged %s"
 msgstr	"%s markiert"
 
-#: src/lang.c:585
+#: src/lang.c:582
 #, c-format
 msgid	"Untagged %s"
 msgstr	"%s Markierung entfernt"
 
-#: src/lang.c:586
+#: src/lang.c:583
 msgid	"Processing mail messages marked for deletion."
 msgstr	"Bearbeite zum Löschen markierte EMails."
 
-#: src/lang.c:587
+#: src/lang.c:584
 msgid	"Processing saved articles marked for deletion."
 msgstr	"Bearbeite zum Löschen markierte gespeicherte Artikel."
 
-#: src/lang.c:588
+#: src/lang.c:585
 #, c-format
 msgid	"Accept Followup-To? %s=post, %s=ignore, %s=quit: "
 msgstr	"Followup-To akzeptieren? %s=posten, %s=ignorieren, %s=Ende: "
 
-#: src/lang.c:589
+#: src/lang.c:586
 msgid	"Article unchanged, abort mailing?"
 msgstr	"Mail unverändert, Absenden abbrechen?"
 
-#: src/lang.c:590
+#: src/lang.c:587
 #, c-format
 msgid	"Do you want to see postponed articles (%d)?"
 msgstr	"Wollen Sie die zurückgestellten Artikel sehen (%d)?"
 
-#: src/lang.c:592
+#: src/lang.c:589
 msgid	"Add quick kill filter?"
 msgstr	"Artikel schnell (laut Voreinstellungen) killen?"
 
-#: src/lang.c:593
+#: src/lang.c:590
 msgid	"Add quick selection filter?"
 msgstr	"Filterregel (hochscoren) (laut Voreinstellungen) hinzufügen?"
 
-#: src/lang.c:594
+#: src/lang.c:591
 msgid	"Do you really want to quit?"
 msgstr	"Möchten Sie das Programm wirklich beenden?"
 
-#: src/lang.c:595
+#: src/lang.c:592
+#, c-format
 msgid	"%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
 msgstr	"%s=cancel-Nachricht editieren, %s=Ende, %s=löschen [%%s]: "
 
-#: src/lang.c:596
+#: src/lang.c:593
 msgid	"You have tagged articles in this group - quit anyway?"
 msgstr	"Es befinden sich markierte Artikel in der Gruppe, trotzdem beenden?"
 
-#: src/lang.c:597
+#: src/lang.c:594
 #, c-format
 msgid	"%s=quit, %s=edit, %s=postpone: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=zurücklegen: "
 
-#: src/lang.c:598
+#: src/lang.c:595
 #, c-format
 msgid	"%s=quit %s=edit %s=save kill description: "
 msgstr	"%s=Abbrechen %s=Editieren %s=Kill-Filter speichern: "
 
-#: src/lang.c:599
+#: src/lang.c:596
 #, c-format
 msgid	"%s=quit %s=edit %s=save select description: "
 msgstr	"%s=Abbrechen %s=Editieren %s=Filter (hot) speichern: "
 
-#: src/lang.c:600
+#: src/lang.c:597
 msgid	"Do you really want to quit without saving your configuration?"
 msgstr	"Wirklich ohne Speichern der Konfiguration beenden?"
 
-#: src/lang.c:603
+#: src/lang.c:600
 msgid	"Invalid range - valid are '0-9.$' eg. 1-$"
 msgstr	"Ungültige Bereichsangabe - Gültig wäre '0-9.$' z.B. 1-$"
 
-#: src/lang.c:604
+#: src/lang.c:601
 msgid	"Do you want to abort this operation?"
 msgstr	"Wollen Sie diese Operation abbrechen?"
 
-#: src/lang.c:605
+#: src/lang.c:602
 msgid	"Do you want to exit tin immediately?"
 msgstr	"Wollen Sie tin augenblicklich verlassen?"
 
-#: src/lang.c:606
+#: src/lang.c:603
 msgid	"Read response> "
 msgstr	"Lese Antwort> "
 
-#: src/lang.c:607
+#: src/lang.c:604
 msgid	"Reading ('q' to quit)..."
 msgstr	"Lesen ('q' zum Beenden)..."
 
-#: src/lang.c:608
+#: src/lang.c:605
 #, c-format
 msgid	"Reading %sarticles..."
 msgstr	"Lese %sArtikel..."
 
-#: src/lang.c:609
+#: src/lang.c:606
 #, c-format
 msgid	"Reading %sattributes file...\n"
 msgstr	"Lese %sAttribute-Datei...\n"
 
-#: src/lang.c:610
+#: src/lang.c:607
 #, c-format
 msgid	"Reading %sconfig file...\n"
 msgstr	"Lese %sKonfigurations-Datei...\n"
 
-#: src/lang.c:611
+#: src/lang.c:608
 msgid	"Reading filter file...\n"
 msgstr	"Lese Filter-Datei...\n"
 
-#: src/lang.c:612
+#: src/lang.c:609
 #, c-format
 msgid	"Reading %s groups..."
 msgstr	"Lese %s Gruppen..."
 
-#: src/lang.c:613
+#: src/lang.c:610
 msgid	"Reading input history file...\n"
 msgstr	"Lese Eingabe-History...\n"
 
-#: src/lang.c:614
+#: src/lang.c:611
 msgid	"Reading keymap file...\n"
 msgstr	"Lese Tastaturbelegungen...\n"
 
-#: src/lang.c:615
+#: src/lang.c:612
 msgid	"Reading groups from active file... "
 msgstr	"Lese Gruppen aus dem Active... "
 
-#: src/lang.c:616
+#: src/lang.c:613
 msgid	"Reading groups from newsrc file... "
 msgstr	"Lese Gruppen aus der newsrc-Datei... "
 
-#: src/lang.c:617
+#: src/lang.c:614
 msgid	"Reading newsgroups file... "
 msgstr	"Lese Newsgroups-Datei... "
 
-#: src/lang.c:618
+#: src/lang.c:615
 msgid	"Reading newsrc file..."
 msgstr	"Lese newsrc-Datei..."
 
-#: src/lang.c:620
+#: src/lang.c:617
 #, c-format
 msgid	"(%d:%02d remaining)"
 msgstr	"(noch %d:%02d benötigt)"
 
-#: src/lang.c:622
+#: src/lang.c:619
 #, c-format
 msgid	"Bogus group %s removed."
 msgstr	"Nicht vorhandene Gruppe %s entfernt."
 
-#: src/lang.c:623
+#: src/lang.c:620
 #, c-format
 msgid	"Error: rename %s to %s"
 msgstr	"Fehler: Benenne %s in %s"
 
-#: src/lang.c:624
+#: src/lang.c:621
 msgid	"Reply to author..."
 msgstr	"Mailantwort an Autor..."
 
-#: src/lang.c:625
+#: src/lang.c:622
 msgid	"Repost"
 msgstr	"Reposte"
 
-#: src/lang.c:626
+#: src/lang.c:623
 msgid	"Reposting article..."
 msgstr	"Wiederholtes posten des Artikels..."
 
-#: src/lang.c:627
+#: src/lang.c:624
 #, c-format
 msgid	"Repost article(s) to group(s) [%s]> "
 msgstr	"Wiederholtes posten de(s|r) Artikel(s) in [%s]> "
 
-#: src/lang.c:628
+#: src/lang.c:625
 msgid	"Reset newsrc?"
 msgstr	"newsrc zurücksetzen?"
 
-#: src/lang.c:629
+#: src/lang.c:626
 msgid	"Responses have been directed to the following newsgroups"
 msgstr	"Antworten werden in folgende Gruppen gepostet"
 
-#: src/lang.c:630
+#: src/lang.c:627
 #, c-format
 msgid	"Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
 msgstr	"Antwort per Mail wurde angefordert. %s=Mail, %s=post, %s=beenden: "
 
-#: src/lang.c:631
+#: src/lang.c:628
 #, c-format
 msgid	"RespNo %4d of %4d"
 msgstr	"Antw. %4d von %4d"
 
-#: src/lang.c:632
+#: src/lang.c:629
 msgid	"Press <RETURN> to continue..."
 msgstr	"Drücken sie <RETURN> um fortzufahren..."
 
-#: src/lang.c:634
+#: src/lang.c:631
 #, c-format
 msgid	"Select From    [%s] (y/n): "
 msgstr	"Wähle From     [%s] (j/n): "
 
-#: src/lang.c:635
+#: src/lang.c:632
 msgid	"Select Lines: (</>num): "
 msgstr	"Wähle Zeilen: (</>num): "
 
-#: src/lang.c:636
+#: src/lang.c:633
 msgid	"Auto-select Article Menu"
 msgstr	"Filter Menü (Bewertung/Score erhöhen)"
 
-#: src/lang.c:637
+#: src/lang.c:634
 #, c-format
 msgid	"Select Msg-Id  [%s] (f/l/o/n): "
 msgstr	"Wähle Msg-Id   [%s] (v/l/n/n): "
 
-#: src/lang.c:638
+#: src/lang.c:635
 msgid	"Select pattern scope: "
 msgstr	"Wähle Muster        : "
 
-#: src/lang.c:639
+#: src/lang.c:636
 #, c-format
 msgid	"Select Subject [%s] (y/n): "
 msgstr	"Wähle Subject  [%s] (j/n): "
 
-#: src/lang.c:640
+#: src/lang.c:637
 msgid	"Select text pattern : "
 msgstr	"Wähle Textmuster    : "
 
-#: src/lang.c:641
+#: src/lang.c:638
 msgid	"Select time in days   : "
 msgstr	"Wähle Zeit in Tagen   : "
 
-#: src/lang.c:642
+#: src/lang.c:639
 #, c-format
 msgid	"# %s server configuration file\n"
 	"# This file was automatically saved by %s %s %s (\"%s\")\n"
@@ -2720,222 +2769,223 @@ msgstr	"# %s Server Konfigurationsdatei\
 	"############################################################################\n"
 	"\n"
 
-#: src/lang.c:648
+#: src/lang.c:645
 msgid	"Showing unread groups only"
 msgstr	"Zeige nur Gruppen mit ungelesenen Artikeln"
 
-#: src/lang.c:649
+#: src/lang.c:646
 msgid	"Subject: line (ignore case)   "
 msgstr	"Subject: Z. (Groß-Kl. ign.)                  "
 
-#: src/lang.c:650
+#: src/lang.c:647
 msgid	"Subject: line (case sensitive)"
 msgstr	"Subject: Z. (Groß-Kl. beachten)              "
 
-#: src/lang.c:651
+#: src/lang.c:648
 msgid	"Save"
 msgstr	"Speichern"
 
-#: src/lang.c:652
+#: src/lang.c:649
 #, c-format
 msgid	"Save '%s' (%s/%s)?"
 msgstr	"'%s' (%s/%s) speichern?"
 
-#: src/lang.c:653
+#: src/lang.c:650
 msgid	"Save configuration before continuing?"
 msgstr	"Zuerst Konfiguration speichern und danach fortfahren?"
 
-#: src/lang.c:654
+#: src/lang.c:651
 msgid	"Save filename> "
 msgstr	"Name der zu speichernden Datei> "
 
-#: src/lang.c:655
+#: src/lang.c:652
 msgid	"Saved"
 msgstr	"Gespeichert"
 
-#: src/lang.c:656
+#: src/lang.c:653
 #, c-format
 msgid	"%4d unread (%4d hot) %s in %s\n"
 msgstr	"%4d ungelesene (%4d 'hot') %s in %s\n"
 
-#: src/lang.c:657
+#: src/lang.c:654
 #, c-format
 msgid	"Saved %s...\n"
 msgstr	"%s gespeichert...\n"
 
-#: src/lang.c:658
+#: src/lang.c:655
 msgid	"Nothing was saved"
 msgstr	"Nichts gespeichert"
 
-#: src/lang.c:659
+#: src/lang.c:656
 #, c-format
 msgid	"\n"
 	"%s %d %s from %d %s\n"
 msgstr	"\n"
 	"%s %d %s aus %d %s\n"
 
-#: src/lang.c:660
+#: src/lang.c:657
 #, c-format
 msgid	"-- %s saved to %s%s --"
 msgstr	"-- %s nach %s%s gespeichert --"
 
-#: src/lang.c:661
+#: src/lang.c:658
 #, c-format
 msgid	"-- %s saved to %s - %s --"
 msgstr	"-- %s gespeichert als %s - %s --"
 
-#: src/lang.c:662
+#: src/lang.c:659
 msgid	"Saving..."
 msgstr	"Speichere..."
 
-#: src/lang.c:663
+#: src/lang.c:660
 #, c-format
 msgid	"%s: Screen initialization failed"
 msgstr	"%s: Initialisierung des Bildschirms fehlgeschlagen"
 
-#: src/lang.c:665
+#: src/lang.c:662
 #, c-format
 msgid	"%s: screen is too small\n"
 msgstr	"%s: Anzeige ist zu klein\n"
 
-#: src/lang.c:667
+#: src/lang.c:664
 #, c-format
 msgid	"screen is too small, %s is exiting\n"
 msgstr	"Anzeige zu klein, %s beendet sich\n"
 
-#: src/lang.c:668
+#: src/lang.c:665
 #, c-format
 msgid	"Search backwards [%s]> "
 msgstr	"Suche rückwärts [%s]> "
 
-#: src/lang.c:669
+#: src/lang.c:666
 #, c-format
 msgid	"Search body [%s]> "
 msgstr	"Durchsuche Artikelinhalt [%s]> "
 
-#: src/lang.c:670
+#: src/lang.c:667
 #, c-format
 msgid	"Search forwards [%s]> "
 msgstr	"Suche vorwärts [%s]> "
 
-#: src/lang.c:671
+#: src/lang.c:668
 msgid	"Searching..."
 msgstr	"Suche..."
 
-#: src/lang.c:672
+#: src/lang.c:669
 #, c-format
 msgid	"Searching article %d of %d ('q' to abort)..."
 msgstr	"Suche Artikel %d von %d ('q' zum abbrechen)..."
 
-#: src/lang.c:673
+#: src/lang.c:670
 msgid	"Select article> "
 msgstr	"Wähle Artikel> "
 
-#: src/lang.c:674
+#: src/lang.c:671
 msgid	"Select option number before text or use arrow keys and <CR>. 'q' to quit."
 msgstr	"Wähle Optionsnummer, oder benutze die Cursor Tasten und <CR>. 'q' zum beenden."
 
-#: src/lang.c:675
+#: src/lang.c:672
 msgid	"Select group> "
 msgstr	"Wähle Gruppe> "
 
-#: src/lang.c:676
+#: src/lang.c:673
 #, c-format
 msgid	"Enter selection pattern [%s]> "
 msgstr	"Nenne das Auswahlmuster [%s]> "
 
-#: src/lang.c:677
+#: src/lang.c:674
 msgid	"Select thread > "
 msgstr	"Wähle thread > "
 
-#: src/lang.c:678
+#: src/lang.c:675
 #, c-format
 msgid	"%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
 msgstr	"%s %s %s (\"%s\") [%s]: schicken sie einen DETAILLIERTEN Fehlerbericht an %s\n"
 
-#: src/lang.c:679
+#: src/lang.c:676
 msgid	"servers active-file"
 msgstr	"Die 'active' Datei des Servers"
 
-#: src/lang.c:680
+#: src/lang.c:677
 msgid	"Cannot move into new newsgroups. Subscribe first..."
 msgstr	"Kann die Newsgruppe nicht öffnen. Sie muss erst abonniert werden..."
 
-#: src/lang.c:681
+#: src/lang.c:678
 msgid	"<SPACE>"
 msgstr	"<LEERT>"
 
-#: src/lang.c:682
+#: src/lang.c:679
 #, c-format
 msgid	"Starting: (%s)"
 msgstr	"Starte: (%s)"
 
-#: src/lang.c:683
+#: src/lang.c:680
 #, c-format
 msgid	"List Thread (%d of %d)"
 msgstr	"Zeige Thread (%d von %d)"
 
-#: src/lang.c:684
+#: src/lang.c:681
 #, c-format
 msgid	"Thread (%.*s)"
 msgstr	"Thread (%.*s)"
 
-#: src/lang.c:685
+#: src/lang.c:682
 msgid	"Enter wildcard subscribe pattern> "
 msgstr	"Wildcardmuster für zu abonnierende Gruppen> "
 
-#: src/lang.c:686
+#: src/lang.c:683
 #, c-format
 msgid	"subscribed to %d groups"
 msgstr	"%d Gruppen sind abonniert"
 
-#: src/lang.c:687
+#: src/lang.c:684
 #, c-format
 msgid	"Subscribed to %s"
 msgstr	"%s wurde abonniert"
 
-#: src/lang.c:688
+#: src/lang.c:685
 msgid	"Subscribing... "
 msgstr	"Abonniere... "
 
-#: src/lang.c:689
+#: src/lang.c:686
+#, c-format
 msgid	"Repost or supersede article(s) [%%s]? (%s/%s/%s): "
 msgstr	"Artikel erneut posten oder überschreiben [%%s]? (%s/%s/%s): "
 
-#: src/lang.c:690
+#: src/lang.c:687
 #, c-format
 msgid	"Supersede article(s) to group(s) [%s]> "
 msgstr	"Supersede (überschreibe) Artikel in den Gruppen [%s]> "
 
-#: src/lang.c:691
+#: src/lang.c:688
 msgid	"Superseding article ..."
 msgstr	"Überschreibe Artikel ..."
 
-#: src/lang.c:692
+#: src/lang.c:689
 #, c-format
 msgid	"\n"
 	"Stopped. Type 'fg' to restart %s\n"
 msgstr	"\n"
 	"Angehalten. Geben sie 'fg' ein um %s wieder zu starten\n"
 
-#: src/lang.c:694
+#: src/lang.c:691
 #, c-format
 msgid	"%d days"
 msgstr	"%d Tage"
 
-#: src/lang.c:695
+#: src/lang.c:692
 msgid	"<TAB>"
 msgstr	"<TAB>"
 
-#: src/lang.c:696
+#: src/lang.c:693
 msgid	"TeX "
 msgstr	"TeX "
 
-#: src/lang.c:697
+#: src/lang.c:694
 msgid	"# Default action/prompt strings\n"
 msgstr	"# Voreingestellte Aktion/zeige Zeichenkette\n"
 
-#: src/lang.c:698
+#: src/lang.c:695
 msgid	"# Defaults for quick (1 key) kill & auto-selection filters\n"
 	"# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
 	"#             5=Message-ID: & last References: entry only\n"
@@ -2951,261 +3001,261 @@ msgstr	"# Voreinstellung für schnellen (
 	"# case=ON/OFF    ON=Filter case sensitive OFF=ignoriere case\n"
 	"# expire=ON/OFF  ON=Verfallen nach default_filter_days OFF=verfällt nie\n"
 
-#: src/lang.c:711
+#: src/lang.c:708
 msgid	"# If ON use print current subject or newsgroup description in the last line\n"
 msgstr	"# Falls ON anzeige des Subject oder des Gruppennamens in der letzten Zeile.\n"
 
-#: src/lang.c:712
+#: src/lang.c:709
 msgid	"# Host & time info used for detecting new groups (don't touch)\n"
-msgstr	"# Host & Zeit Info benutzen um neue Gruppen zu finden (nicht ändern)\n"
+msgstr	"# Benutzte Host- & Zeit-Info um neue Gruppen zu finden (nicht ändern)\n"
 
-#: src/lang.c:713
+#: src/lang.c:710
 msgid	"There is no news\n"
 msgstr	"Es gibt keine neuen Artikel\n"
 
-#: src/lang.c:714
+#: src/lang.c:711
 msgid	"Thread"
 msgstr	"Thread"
 
-#: src/lang.c:715
+#: src/lang.c:712
 msgid	"Thread Level Commands"
 msgstr	"Thread Level Kommandos"
 
-#: src/lang.c:716
+#: src/lang.c:713
 msgid	"Thread deselected"
 msgstr	"Thread nicht mehr ausgewählt"
 
-#: src/lang.c:717
+#: src/lang.c:714
 msgid	"Thread selected"
 msgstr	"Thread ausgewählt"
 
-#: src/lang.c:719
+#: src/lang.c:716
 msgid	"threads"
 msgstr	"Threads"
 
-#: src/lang.c:721
+#: src/lang.c:718
 msgid	"Thread range"
 msgstr	"Thread-Bereich"
 
-#: src/lang.c:722
+#: src/lang.c:719
 msgid	"thread"
 msgstr	"Thread"
 
-#: src/lang.c:723
+#: src/lang.c:720
 #, c-format
 msgid	"Thread %4s of %4s"
 msgstr	"Thread %4s v. %4s"
 
-#: src/lang.c:724
+#: src/lang.c:721
 msgid	"Threading articles..."
 msgstr	"Sortiere Artikel..."
 
-#: src/lang.c:725
+#: src/lang.c:722
 #, c-format
 msgid	"Toggled word highlighting %s"
 msgstr	"Wort-Hervorhebung: %s"
 
-#: src/lang.c:726
+#: src/lang.c:723
 msgid	"Toggled rot13 encoding"
 msgstr	"ROT13-Kodierung (de)aktiviert"
 
-#: src/lang.c:727
+#: src/lang.c:724
 #, c-format
 msgid	"Toggled german TeX encoding %s"
 msgstr	"Deutsche TeX-Dekodierung: %s"
 
-#: src/lang.c:728
+#: src/lang.c:725
 #, c-format
 msgid	"Toggled tab-width to %d"
 msgstr	"Tabulatorweite zu %d gewechselt"
 
-#: src/lang.c:729
+#: src/lang.c:726
 #, c-format
 msgid	"%d Trying to dotlock %s"
 msgstr	"%d Versuche %s zu dotlocken"
 
-#: src/lang.c:730
+#: src/lang.c:727
 #, c-format
 msgid	"%d Trying to lock %s"
 msgstr	"%d Versuche %s zu locken"
 
-#: src/lang.c:731
+#: src/lang.c:728
 msgid	"           h=help\n"
 msgstr	"          h=Hilfe\n"
 
-#: src/lang.c:733
+#: src/lang.c:730
 msgid	"Unlimited"
 msgstr	"Unbegrenzt"
 
-#: src/lang.c:734
+#: src/lang.c:731
 msgid	"Enter wildcard unsubscribe pattern> "
 msgstr	"Wildcardmuster für abzubestellende Gruppen> "
 
-#: src/lang.c:735
+#: src/lang.c:732
 #, c-format
 msgid	"Error decoding %s : %s"
 msgstr	"Fehler beim Dekodieren von %s : %s"
 
-#: src/lang.c:736
+#: src/lang.c:733
 msgid	"No end."
 msgstr	"Kein Ende."
 
-#: src/lang.c:737
+#: src/lang.c:734
 #, c-format
 msgid	"%s successfully decoded."
 msgstr	"%s erfolgreich dekodiert."
 
-#: src/lang.c:738
+#: src/lang.c:735
 #, c-format
 msgid	"%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
 	"\n"
 msgstr	"%*s[-- %s/%s, %suukodierte Datei, %d Zeilen, Name: %s --]\n"
 	"\n"
 
-#: src/lang.c:739
+#: src/lang.c:736
 msgid	"unread "
 msgstr	"ungelesen "
 
-#: src/lang.c:740
+#: src/lang.c:737
 #, c-format
 msgid	"unsubscribed from %d groups"
 msgstr	"%d Gruppen abbestellt"
 
-#: src/lang.c:741
+#: src/lang.c:738
 #, c-format
 msgid	"Unsubscribed from %s"
 msgstr	"%s wurde abbestellt"
 
-#: src/lang.c:742
+#: src/lang.c:739
 msgid	"Unsubscribing... "
 msgstr	"Abbestellen... "
 
-#: src/lang.c:743
+#: src/lang.c:740
 msgid	"Unthreading articles..."
 msgstr	"Aktuelle Sortierung der Artikel aufheben..."
 
-#: src/lang.c:744
+#: src/lang.c:741
 msgid	"Updated"
 msgstr	"Aktualisiert"
 
-#: src/lang.c:745
+#: src/lang.c:742
 msgid	"Updating"
 msgstr	"Aktualisiere"
 
-#: src/lang.c:746
+#: src/lang.c:743
 #, c-format
 msgid	"Opening %s\n"
 msgstr	"Öffne %s\n"
 
-#: src/lang.c:747
+#: src/lang.c:744
 msgid	"No more URL's in this article"
 msgstr	"Keine weiteren URLs im Artikel"
 
-#: src/lang.c:748
+#: src/lang.c:745
 msgid	"Use MIME display program for this message?"
 msgstr	"MIME-Anzeigeprogramm für diese Nachricht benutzen?"
 
-#: src/lang.c:749
+#: src/lang.c:746
 msgid	"  -c       mark all news as read in subscribed newsgroups (batch mode)"
 msgstr	"  -c       Markiere Artikel gelesen in den abonnierten Gruppen (Batch-Modus)"
 
-#: src/lang.c:750
+#: src/lang.c:747
 msgid	"  -Z       return status indicating if any unread news (batch mode)"
 msgstr	"  -Z       Rückgabewert zeigt, ob ungelesene Artikel vorliegen (Batch-Modus)"
 
-#: src/lang.c:751
+#: src/lang.c:748
 msgid	"  -q       don't check for new newsgroups"
 msgstr	"  -q       Überprüfe nicht auf neue Newsgruppen"
 
-#: src/lang.c:752
+#: src/lang.c:749
 msgid	"  -X       don't save any files on quit"
 msgstr	"  -X       Speicher keine Dateien beim Beenden"
 
-#: src/lang.c:753
+#: src/lang.c:750
 msgid	"  -d       don't show newsgroup descriptions"
 msgstr	"  -d       Zeige keine Newsgruppenbeschreibungen"
 
-#: src/lang.c:754
+#: src/lang.c:751
 msgid	"  -G limit get only limit articles/group"
 msgstr	"  -G limit Hole nur 'limit' Artikel pro Newsgruppe"
 
-#: src/lang.c:755
+#: src/lang.c:752
 #, c-format
 msgid	"  -H       help information about %s"
 msgstr	"  -H       Hilfe und Informationen über %s"
 
-#: src/lang.c:756
+#: src/lang.c:753
 msgid	"  -h       this help message"
 msgstr	"  -h       Diese Hilfeseite"
 
-#: src/lang.c:757
+#: src/lang.c:754
 #, c-format
 msgid	"  -I dir   news index file directory [default=%s]"
 msgstr	"  -I Verz. Verzeichnis für Artikel-Index-Datei [Standard=%s]"
 
-#: src/lang.c:758
+#: src/lang.c:755
 msgid	"  -u       update index files (batch mode)"
 msgstr	"  -u       Erneuere Index-Dateien (Batch-Modus)"
 
-#: src/lang.c:759
+#: src/lang.c:756
 #, c-format
 msgid	"  -m dir   mailbox directory [default=%s]"
 msgstr	"  -m Verz. Mailbox-Verzeichnis [Standard=%s]"
 
-#: src/lang.c:760
+#: src/lang.c:757
 #, c-format
 msgid	"\n"
 	"Mail bug reports/comments to %s"
 msgstr	"\n"
 	"Schicken Sie Fehlerberichte/Kommentare an %s"
 
-#: src/lang.c:761
+#: src/lang.c:758
 msgid	"  -N       mail new news to your posts (batch mode)"
 msgstr	"  -N       Maile neue Artikel an sich selbst (Batch-Modus)"
 
-#: src/lang.c:762
+#: src/lang.c:759
 msgid	"  -M user  mail new news to specified user (batch mode)"
 msgstr	"  -M user  Maile neue News-Artikel an 'user' (Batch-Modus)"
 
-#: src/lang.c:763
+#: src/lang.c:760
 #, c-format
 msgid	"  -f file  subscribed to newsgroups file [default=%s]"
 msgstr	"  -f Datei 'Datei' als .newsrc-Datei nutzen [Standard=%s]"
 
-#: src/lang.c:764
+#: src/lang.c:761
 msgid	"  -x       no posting mode"
 msgstr	"  -x       Posten nicht erlaubt Modus"
 
-#: src/lang.c:765
+#: src/lang.c:762
 msgid	"  -w       post an article and exit"
 msgstr	"  -w       Postet einen Artikel und beendet tin"
 
-#: src/lang.c:766
+#: src/lang.c:763
 msgid	"  -o       post all postponed articles and exit"
 msgstr	"  -o       Postet alle zurückgelegten Artikel und beendet tin"
 
-#: src/lang.c:767
+#: src/lang.c:764
 msgid	"  -r       read news remotely from default NNTP server"
 msgstr	"  -r       Lese Artikel vom Standard-NNTP-Server"
 
-#: src/lang.c:768
+#: src/lang.c:765
 msgid	"  -R       read news saved by -S option"
 msgstr	"  -R       Lese Artikel, die durch -S gespeichert wurden"
 
-#: src/lang.c:769
+#: src/lang.c:766
 #, c-format
 msgid	"  -s dir   save news directory [default=%s]"
 msgstr	"  -s Verz. Verzeichnis zum News-Speichern [Standard=%s]"
 
-#: src/lang.c:770
+#: src/lang.c:767
 msgid	"  -S       save new news for later reading (batch mode)"
 msgstr	"  -S       Speichere Artikel für das spätere Lesen (Batch-Modus)"
 
-#: src/lang.c:771
+#: src/lang.c:768
 msgid	"  -z       start if any unread news"
 msgstr	"  -z       Starte, wenn ungelesene Artikel vorliegen"
 
-#: src/lang.c:772
+#: src/lang.c:769
 #, c-format
 msgid	"A Usenet reader.\n"
 	"\n"
@@ -3214,37 +3264,37 @@ msgstr	"Ein Usenet-Client.\n"
 	"\n"
 	"Syntax: %s [Optionen] [Newsgruppe[,...]]"
 
-#: src/lang.c:773
+#: src/lang.c:770
 msgid	"  -v       verbose output for batch mode options"
 msgstr	"  -v       Ausführliche Ausgabe für Batch-Modus-Optionen"
 
-#: src/lang.c:774
+#: src/lang.c:771
 msgid	"  -V       print version & date information"
 msgstr	"  -V       Gebe Versions- und Datumsinformationen aus"
 
-#: src/lang.c:775
+#: src/lang.c:772
 #, c-format
 msgid	"%s only useful without batch mode operations\n"
 msgstr	"%s ist nur sinnvoll ohne Batchmodeoperationen\n"
 
-#: src/lang.c:776
+#: src/lang.c:773
 #, c-format
 msgid	"%s only useful for batch mode operations\n"
 msgstr	"%s ist nur sinnvoll für Batchmodeoperationen\n"
 
-#: src/lang.c:778
+#: src/lang.c:775
 #, c-format
 msgid	"\n"
 	"%s%d out of range (0 - %d). Reset to 0"
 msgstr	"\n"
 	"%s%d ist außerhalb der Grenzen (0 - %d). Zurücksetzen auf 0"
 
-#: src/lang.c:779
+#: src/lang.c:776
 #, c-format
 msgid	"View '%s' (%s/%s)?"
 msgstr	"'%s' (%s/%s) anzeigen?"
 
-#: src/lang.c:781
+#: src/lang.c:778
 #, c-format
 msgid	"\n"
 	"Warning: posting exceeds %d columns. Line %d is the first long one:\n"
@@ -3253,26 +3303,26 @@ msgstr	"\n"
 	"Warnung: Artikel überschreitet %d Spalten. Zeile %d ist die erste lange:\n"
 	"%-100s\n"
 
-#: src/lang.c:782
+#: src/lang.c:779
 msgid	"\n"
 	"Warning: article unchanged after editing\n"
 msgstr	"\n"
 	"Warnung: Artikel wurde im Editor nicht verändert\n"
 
-#: src/lang.c:783
+#: src/lang.c:780
 msgid	"\n"
 	"Warning: \"Subject:\" contains only whitespaces.\n"
 msgstr	"\n"
 	"Warnung: \"Subject:\" enthält nur Leerzeichen.\n"
 
-#: src/lang.c:784
+#: src/lang.c:781
 msgid	"\n"
 	"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:\".\n"
 msgstr	"\n"
-	"Warnung: \"Subject:\" beginnt mit \"Re: \", aber es gibt keine "
-	"\"References:\".\n"
+	"Warnung: \"Subject:\" beginnt mit \"Re: \", aber es gibt keine \"References:"
+	"\".\n"
 
-#: src/lang.c:786
+#: src/lang.c:783
 msgid	"\n"
 	"Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
 	"         with \"Re: \" and does not contain \"(was:\".\n"
@@ -3280,7 +3330,7 @@ msgstr	"\n"
 	"Warnung: Artikel hat \"References:\" aber \"Subject:\" beginnt nicht\n"
 	"         mit \"Re: \" and enthält auch kein \"(was:\".\n"
 
-#: src/lang.c:789
+#: src/lang.c:786
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly written by you. This will "
@@ -3300,7 +3350,7 @@ msgstr	"Sorgfältig lesen!\n"
 	"Das ist der Artikel, den sie canceln (löschen) wollen:\n"
 	"\n"
 
-#: src/lang.c:793
+#: src/lang.c:790
 msgid	"\n"
 	"Warning: You are using a non-plain transfer encoding (such as base64 or\n"
 	"         quoted-printable) and an external inews program to submit your\n"
@@ -3312,7 +3362,7 @@ msgstr	"\n"
 	"         Artikel zu übertragen. Falls durch diesen inews eine Signatur\n"
 	"         angehängt wird, so kann diese nicht korrekt kodiert werden.\n"
 
-#: src/lang.c:798
+#: src/lang.c:795
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3325,7 +3375,7 @@ msgstr	"\n"
 	"Einige Einstellungen in Ihrem %s-File haben sich geändert!\n"
 	"Lesen sie \"WHATSNEW\", usw....\n"
 
-#: src/lang.c:800
+#: src/lang.c:797
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3337,7 +3387,7 @@ msgstr	"\n"
 	"Evtl. werden Einstellungen in Ihrem %s-File\n"
 	"nicht erkannt oder ändern sich!\n"
 
-#: src/lang.c:803
+#: src/lang.c:800
 #, c-format
 msgid	"Warning: tin wrote fewer groups to your\n"
 	"\t%s\n"
@@ -3350,19 +3400,19 @@ msgstr	"Warnung: tin hat weniger Gruppen
 	"währenddessen abbestellt haben, ist ein Fehler aufgetreten und Sie sollten\n"
 	"ihre %s wiederherstellen, bevor Sie tin nochmal starten!\n"
 
-#: src/lang.c:807
+#: src/lang.c:804
 #, c-format
 msgid	"\n"
 	"Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
 msgstr	"\n"
 	"Warnung: Es gibt %d '-- \\n' Zeilen. Das könnte einige Leute verwirren.\n"
 
-#: src/lang.c:808
+#: src/lang.c:805
 #, c-format
 msgid	"Warning: Only %d out of %d articles were saved"
 msgstr	"Warnung: Nur %d von %d Artikeln gespeichert"
 
-#: src/lang.c:809
+#: src/lang.c:806
 #, c-format
 msgid	"\n"
 	"Warning: Your signature  is longer than %d lines.  Since signatures usually "
@@ -3376,48 +3426,48 @@ msgstr	"\n"
 	"         nützlichen Informationen enthalten, sollten sie so kurz wie möglich\n"
 	"         gehalten werden.\n"
 
-#: src/lang.c:813
+#: src/lang.c:810
 #, c-format
 msgid	"Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
 msgstr	"Warnung: E-Mailadr. evtl. verfälscht (Spamfalle). %s=weiter, %s=Abbruch? "
 
-#: src/lang.c:814
+#: src/lang.c:811
 msgid	"\n"
 	"Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
 msgstr	"\n"
 	"Warnung: Signaturen sollten mit '-- \\n' und nicht mit '--\\n' beginnen.\n"
 
-#: src/lang.c:815
+#: src/lang.c:812
 msgid	"Writing attributes file..."
 msgstr	"Schreibe Datei mit den Eigenschaften der Newsgruppen..."
 
-#: src/lang.c:817
+#: src/lang.c:814
 #, c-format
 msgid	"%d Responses"
 msgstr	"%d Antworten"
 
-#: src/lang.c:819
+#: src/lang.c:816
 #, c-format
 msgid	"Added %d %s"
 msgstr	"%d %s hinzugefügt"
 
-#: src/lang.c:820
+#: src/lang.c:817
 msgid	"No unsubscribed groups to show"
 msgstr	"Keine nicht abonnierte Gruppen gefunden"
 
-#: src/lang.c:821
+#: src/lang.c:818
 msgid	"Showing subscribed to groups only"
 msgstr	"Zeige nur abonnierte Gruppen"
 
-#: src/lang.c:822
+#: src/lang.c:819
 msgid	"Yes "
 msgstr	"Ja  "
 
-#: src/lang.c:823
+#: src/lang.c:820
 msgid	"    You have mail\n"
 msgstr	"   Sie haben Mail\n"
 
-#: src/lang.c:828
+#: src/lang.c:825
 #, c-format
 msgid	"\n"
 	"Warning: Posting is in %s and contains characters which are not\n"
@@ -3436,16 +3486,11 @@ msgstr	"\n"
 	"         entfernen oder MM_NETWORK_CHARSET im M)neu auf einen\n"
 	"         passenderen Wert setzen.\n"
 
-#: src/lang.c:839
-#, c-format
-msgid	"Redefined key %s '%s' -> '%s'\n"
-msgstr	"Neubelegung %s '%s' -> '%s'\n"
-
-#: src/lang.c:840
+#: src/lang.c:836
 msgid	"  -D       debug mode 1=NNTP 2=ALL"
 msgstr	"  -D       Debug-Modus 1=NNTP 2=ALLES"
 
-#: src/lang.c:844
+#: src/lang.c:840
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly not written by you.  This "
@@ -3471,11 +3516,11 @@ msgstr	"Sorgfältig lesen!\n"
 	"Dies ist der Artikel, den Sie canceln (löschen) wollen:\n"
 	"\n"
 
-#: src/lang.c:853
+#: src/lang.c:849
 msgid	"toggle color"
 msgstr	"Farben ein/aus"
 
-#: src/lang.c:854
+#: src/lang.c:850
 msgid	"# Changing colors of several screen parts\n"
 	"# Possible values are:\n"
 	"#  -1 = default (white for foreground and black for background)\n"
@@ -3519,352 +3564,360 @@ msgstr	"# Farbeinstellungen\n"
 	"#  15 = hellweiß\n"
 	"\n"
 
-#: src/lang.c:874
+#: src/lang.c:870
 msgid	"  -a       toggle color flag"
 msgstr	"  -a       Farbe ein- oder ausschalten"
 
-#: src/lang.c:878
+#: src/lang.c:874
 msgid	"\n"
 	"Error: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Fehler: Followup-To auf mehr als eine Newsgruppe gesetzt!\n"
 
-#: src/lang.c:879
+#: src/lang.c:875
 #, c-format
 msgid	"\n"
 	"Error: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Fehler: Crossposting in %d Newsgruppen und kein Followup-To gesetzt!\n"
 
-#: src/lang.c:880
+#: src/lang.c:876
 #, c-format
 msgid	"\n"
 	"Error: \"%s\" is not a valid newsgroup!\n"
 msgstr	"\n"
 	"Fehler: \"%s\" ist keine gültige Newsgruppe!\n"
 
-#: src/lang.c:882
+#: src/lang.c:878
 msgid	"\n"
 	"Warning: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Warnung: Followup-To in mehr als eine Newsgruppe gesetzt!\n"
 
-#: src/lang.c:883
+#: src/lang.c:879
 #, c-format
 msgid	"\n"
 	"Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Warnung: Crossposting in %d Newsgruppen und kein Followup-To gesetzt!\n"
 
-#: src/lang.c:884
+#: src/lang.c:880
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
 msgstr	"\n"
 	"Warnung: \"%s\" ist nicht in Ihrer newsrc, sie könnte ungültig sein!\n"
 
-#: src/lang.c:885
+#: src/lang.c:881
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not a valid newsgroup at this site!\n"
 msgstr	"\n"
 	"Warnung: \"%s\" ist keine gültige Newsgruppe auf diesem Server!\n"
 
-#: src/lang.c:889
+#: src/lang.c:885
 #, c-format
 msgid	"%d files successfully written from %d articles. %d %s occurred."
 msgstr	"%d Dateien aus %d Artikeln erfolgreich geschrieben. %d %s trat(en) auf."
 
-#: src/lang.c:890
+#: src/lang.c:886
 msgid	"Missing parts."
 msgstr	"Teile fehlen."
 
-#: src/lang.c:891
+#: src/lang.c:887
 msgid	"No beginning."
 msgstr	"Kein Anfang."
 
-#: src/lang.c:892
+#: src/lang.c:888
 msgid	"No data."
 msgstr	"Keine Daten."
 
-#: src/lang.c:893
+#: src/lang.c:889
 msgid	"Unknown error."
 msgstr	"Unbekannter Fehler."
 
-#: src/lang.c:896
+#: src/lang.c:892
 #, c-format
 msgid	"\tChecksum of %s (%ld %s)"
 msgstr	"\tPrüfsumme für %s (%ld %s)"
 
-#: src/lang.c:901
+#: src/lang.c:897
 msgid	"Reading mail active file... "
 msgstr	"Lese EMail-Active-Datei... "
 
-#: src/lang.c:902
+#: src/lang.c:898
 msgid	"Reading mailgroups file... "
 msgstr	"Lese Mailgruppen-Datei... "
 
-#: src/lang.c:906
+#: src/lang.c:902
 msgid	"perform PGP operations on article"
 msgstr	"wendet PGP auf den Artikel an"
 
-#: src/lang.c:907
+#: src/lang.c:903
 msgid	"Add key(s) to public keyring?"
 msgstr	"Schlüssel dem Öffentlichen Schlüsselring hinzufügen?"
 
-#: src/lang.c:908
+#: src/lang.c:904
 #, c-format
 msgid	"%s=encrypt, %s=sign, %s=both, %s=quit: "
 msgstr	"%s=verschlüsseln, %s=signieren, %s=beides, %s=Ende: "
 
-#: src/lang.c:909
+#: src/lang.c:905
 #, c-format
 msgid	"%s=sign, %s=sign & include public key, %s=quit: "
 msgstr	"%s=signiere, %s=signiere & füge öffentl. Schlüssel hinzu, %s=Ende: "
 
-#: src/lang.c:910
+#: src/lang.c:906
 #, c-format
 msgid	"PGP has not been set up (can't open %s)"
 msgstr	"PGP Wurde nicht konfiguriert (kann %s nicht öffnen)"
 
-#: src/lang.c:911
+#: src/lang.c:907
 msgid	"Article not signed and no public keys found"
 msgstr	"Artikel ist nicht signiert; keine öffentlichen Schlüssel gefunden"
 
-#: src/lang.c:913
+#: src/lang.c:909
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
-msgstr	"%s=Ende, %s=bearbeiten, %s=ispell, %s=pgp, %s=Menü, %s=posten, "
-	"%s=zurücklegen: "
+msgstr	"%s=Ende, %s=bearbeiten, %s=ispell, %s=pgp, %s=Menü, %s=posten, %"
+	"s=zurücklegen: "
 
-#: src/lang.c:914
+#: src/lang.c:910
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=ispell, %s=pgp, %s=verschicken [%%s]: "
 
-#: src/lang.c:915
+#: src/lang.c:911
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=ispell, %s=pgp, %s=Menü, %s=posten, %s=zurücklegen "
 	"[%%s]: "
 
-#: src/lang.c:917
+#: src/lang.c:913
 #, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=pgp, %s=Menü, %s=posten, %s=zurücklegen: "
 
-#: src/lang.c:918
+#: src/lang.c:914
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=pgp, %s=verschicken [%%s]: "
 
-#: src/lang.c:919
+#: src/lang.c:915
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=pgp, %s=Menü, %s=posten, %s=zurücklegen [%%s]: "
 
-#: src/lang.c:923
+#: src/lang.c:919
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=ispell, %s=Menü, %s=posten, %s=zurücklegen: "
 
-#: src/lang.c:924
+#: src/lang.c:920
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=ispell, %s=verschicken [%%s]: "
 
-#: src/lang.c:925
+#: src/lang.c:921
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=ispell, %s=Menü, %s=post, %s=Zurückl. [%%s]: "
 
-#: src/lang.c:927
+#: src/lang.c:923
 #, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=Menü, %s=posten, %s=zurücklegen: "
 
-#: src/lang.c:928
+#: src/lang.c:924
+#, c-format
 msgid	"%s=quit, %s=edit, %s=send [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=verschicken [%%s]: "
 
-#: src/lang.c:929
+#: src/lang.c:925
+#, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=Ende, %s=bearbeiten, %s=Menü, %s=posten, %s=zurücklegen [%%s]: "
 
-#: src/lang.c:938
+#: src/lang.c:934
 msgid	"Try cache_overview_files to speed up things.\n"
 msgstr	"Setze cache_overview_files um das lesen zu beschleunigen.\n"
 
-#: src/lang.c:939
+#: src/lang.c:935
 msgid	"Tin will use local index files instead.\n"
 msgstr	"Tin wird lokale index files benutzen.\n"
 
-#: src/lang.c:940
+#: src/lang.c:936
 msgid	"Cannot find NNTP server name"
 msgstr	"Kann den Namen des NNTP Servers nicht finden"
 
-#: src/lang.c:941
+#: src/lang.c:937
 #, c-format
 msgid	"Connecting to %s:%d..."
 msgstr	"Verbinde mit %s:%d..."
 
-#: src/lang.c:942
+#: src/lang.c:938
 msgid	"Disconnecting from server...\n"
 msgstr	"Trenne Verbindung zum Server...\n"
 
-#: src/lang.c:943
+#: src/lang.c:939
 #, c-format
 msgid	"Wrong newsgroup name in response of GROUP command, %s for %s"
 msgstr	"Falsche Newsgruppe in Antwort auf GROUP-Befehl, %s statt %s"
 
-#: src/lang.c:944
+#: src/lang.c:940
 #, c-format
 msgid	"Failed to connect to NNTP server %s. Exiting..."
 msgstr	"Konnte nicht zum NNTP Server %s verbinden. Beende..."
 
-#: src/lang.c:945
+#: src/lang.c:941
 msgid	"205  Closing connection"
 msgstr	"205  Schließe Verbindung"
 
-#: src/lang.c:946
+#: src/lang.c:942
 msgid	"Your server does not support the NNTP XOVER or OVER command.\n"
 msgstr	"Ihr Server unterstützt kein NNTP XOVER oder OVER Kommando.\n"
 
-#: src/lang.c:947
+#: src/lang.c:943
 msgid	"Connection to news server has timed out. Reconnect?"
 msgstr	"Die Verbindung zum Newsserver wurde unterbrochen. Wieder verbinden?"
 
-#: src/lang.c:948
+#: src/lang.c:944
 #, c-format
 msgid	"Put the server name in the file %s,\n"
 	"or set the environment variable NNTPSERVER"
 msgstr	"Schreiben Sie den Servernamen in die Datei %s,\n"
 	"oder setzen Sie die Umgebungsvariable NNTPSERVER"
 
-#: src/lang.c:949
+#: src/lang.c:945
 msgid	"  -A       force authentication on connect"
 msgstr	"  -A       Erzwinge Anmeldung bei Verbindung"
 
-#: src/lang.c:950
+#: src/lang.c:946
 #, c-format
 msgid	"  -g serv  read news from NNTP server serv [default=%s]"
 msgstr	"  -g serv  Lese Artikel vom NNTP-Server 'serv' [Standard=%s]"
 
-#: src/lang.c:951
+#: src/lang.c:947
 #, c-format
 msgid	"  -p port  use port as NNTP port [default=%d]"
 msgstr	"  -p port  Benutze 'port' als NNTP-Port [Standard=%d]"
 
-#: src/lang.c:952
+#: src/lang.c:948
 msgid	"  -Q       quick start. Same as -nqd"
 msgstr	"  -Q       Schnellstart. Das Selbe wie -nqd"
 
-#: src/lang.c:953
+#: src/lang.c:949
 msgid	"  -l       use only LIST instead of GROUP (-n) command"
 msgstr	"  -l       Benutze nur das LIST anstelle vom GROUP-Kommando (-n)"
 
-#: src/lang.c:954
+#: src/lang.c:950
 msgid	"  -n       only read subscribed .newsrc groups from NNTP server"
 msgstr	"  -n       Lese nur Gruppen aus der .newsrc-Datei vom NNTP-Server"
 
-#: src/lang.c:956
+#: src/lang.c:952
 #, c-format
 msgid	"%s/tcp: Unknown service.\n"
 msgstr	"%s/tcp: Unbekannter Service.\n"
 
-#: src/lang.c:959
+#: src/lang.c:955
 msgid	"\n"
 	"socket or connect problem\n"
 msgstr	"\n"
 	"Socket oder Verbindungsproblem\n"
 
-#: src/lang.c:961
+#: src/lang.c:957
 #, c-format
 msgid	"\n"
 	"Connection to %s: "
 msgstr	"\n"
 	"Verbindung mit %s: "
 
-#: src/lang.c:962
+#: src/lang.c:958
 msgid	"Giving up...\n"
 msgstr	"Gebe auf...\n"
 
-#: src/lang.c:965
+#: src/lang.c:961
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 	"Tin will try to use XHDR XREF instead (slows down things a bit).\n"
 msgstr	"Ihr Server hat kein Xref: in seiner XOVER-Information.\n"
 	"Tin versucht XHDR XREF zu benutzen (verlangsamt den Prozess etwas).\n"
 
-#: src/lang.c:968
+#: src/lang.c:964
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 msgstr	"Ihr Server hat kein Xref: in seiner XOVER-Information.\n"
 
-#: src/lang.c:971
+#: src/lang.c:967
 #, c-format
 msgid	"Can't open %s. Try %s -r to read news via NNTP.\n"
 msgstr	"Kann %s nicht öffnen. Probieren Sie %s -r um via NNTP zu lesen.\n"
 
-#: src/lang.c:974
+#: src/lang.c:970
 msgid	"  -Q       quick start. Same as -qd"
 msgstr	"  -Q       Schnellstart. Das Selbe wie -qd"
 
-#: src/lang.c:975
+#: src/lang.c:971
 msgid	"  -l       read only active file instead of scanning spool (-n) command"
 msgstr	"  -l       Nur active File lesen ohne den Spool zu durchsuchen (-n) Kommando"
 
-#: src/lang.c:976
+#: src/lang.c:972
 msgid	"  -n       only read subscribed .newsrc groups from spool"
 msgstr	"  -n       Lese nur Gruppen aus der .newsrc-Datei aus dem lokalen Spool"
 
-#: src/lang.c:977
+#: src/lang.c:973
 msgid	"Your server does not have Xref: in its NOV-files.\n"
 msgstr	"Ihr Server hat kein Xref: in seinen NOV-Dateien.\n"
 
-#: src/lang.c:981
+#: src/lang.c:977
 msgid	"Posting using external inews failed. Use built in inews instead?"
 msgstr	"Fehler beim Posten mit externem inews, verwende eingebautes?"
 
-#: src/lang.c:982
+#: src/lang.c:978
 msgid	"It worked! Should I always use my built in inews from now on?"
 msgstr	"Das hat funktioniert. In Zukunft immer eingebautes inews verwenden?"
 
-#: src/lang.c:990
+#: src/lang.c:986
 #, c-format
 msgid	"%d %s printed"
 msgstr	"%d %s gedruckt"
 
-#: src/lang.c:991
+#: src/lang.c:987
 msgid	"output article/thread/hot/pattern/tagged articles to printer"
 msgstr	"druckt Artikel/Thread/hervorgehobene/Muster/markierten"
 
-#: src/lang.c:992
+#: src/lang.c:988
 msgid	"Print"
 msgstr	"Drucke"
 
-#: src/lang.c:993
+#: src/lang.c:989
 msgid	"Printing..."
 msgstr	"Drucke..."
 
-#: src/lang.c:997
+#: src/lang.c:993
 msgid	"pipe article/thread/hot/pattern/tagged articles into command"
 msgstr	"pipet Artikel/thread hervorgehoben/Muster/markierten Artikel"
 
-#: src/lang.c:998
+#: src/lang.c:994
 msgid	"No command"
 msgstr	"Kein Kommando"
 
-#: src/lang.c:999
+#: src/lang.c:995
 msgid	"Pipe"
 msgstr	"Pipe"
 
-#: src/lang.c:1000
+#: src/lang.c:996
 #, c-format
 msgid	"Pipe to command [%.*s]> "
 msgstr	"Pipen in Kommando [%.*s]> "
 
-#: src/lang.c:1001
+#: src/lang.c:997
 msgid	"Piping..."
 msgstr	"Pipen..."
 
-#: src/lang.c:1003
+#: src/lang.c:999
 msgid	"Piping not enabled."
 msgstr	"Pipen nicht aktiviert."
 
-#: src/lang.c:1007
+#: src/lang.c:1003
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line has spaces  in it that MUST be removed.\n"
@@ -3877,7 +3930,7 @@ msgstr	"\n"
 	"        vom Inhalt trennt. Benutzen sie ein ',' um mehrere Newsgruppen\n"
 	"        anzugeben\n"
 
-#: src/lang.c:1012
+#: src/lang.c:1008
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line is  continued in  the next line.  Since\n"
@@ -3888,7 +3941,7 @@ msgstr	"\n"
 	"        Da diese Zeile keinen leeren Raum enthalten darf, ist dies nicht\n"
 	"        erlaubt. Bitte schreiben Sie alle Newsgruppen in eine Zeile\n"
 
-#: src/lang.c:1017
+#: src/lang.c:1013
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line is continued in the next line.\n"
@@ -3899,7 +3952,7 @@ msgstr	"\n"
 	"         Da diese Zeile keinen leeren Raum enthalten darf, ist dies nicht\n"
 	"         erlaubt. Bitte schreiben Sie alle Newsgruppen in eine Zeile.\n"
 
-#: src/lang.c:1021
+#: src/lang.c:1017
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
@@ -3907,7 +3960,7 @@ msgstr	"\n"
 	"Warnung: Die \"%s:\" Zeile enthält Leerzeichen die entfernt\n"
 	"         werden sollten.\n"
 
-#: src/lang.c:1026
+#: src/lang.c:1022
 msgid	"\n"
 	"  If your article contains quoted text  please take some time to pare it "
 	"down\n"
@@ -3938,500 +3991,504 @@ msgstr	"\n"
 	"  Artikel nicht sorgfältig formatieren, ist es sehr wahrscheinlich, dass er\n"
 	"  von vielen gar nicht gelesen wird.\n"
 
-#: src/lang.c:1039
+#: src/lang.c:1035
 msgid	"shell escape"
 msgstr	"Ausgang zur Shell"
 
-#: src/lang.c:1040
+#: src/lang.c:1036
 #, c-format
 msgid	"Shell Command (%s)"
 msgstr	"Shellkommando (%s)"
 
-#: src/lang.c:1041
+#: src/lang.c:1037
 #, c-format
 msgid	"Enter shell command [%s]> "
 msgstr	"Geben Sie ein Shellkommando ein [%s]> "
 
-#: src/lang.c:1045
+#: src/lang.c:1041
 #, c-format
 msgid	"%s: Can't get entry for TERM\n"
 msgstr	"%s: Kann den Wert für TERM nicht finden\n"
 
-#: src/lang.c:1049
+#: src/lang.c:1045
 #, c-format
 msgid	"Group %.*s ('q' to quit)..."
 msgstr	"Gruppe %.*s ('q' zum beenden)..."
 
-#: src/lang.c:1051
+#: src/lang.c:1047
 #, c-format
 msgid	"Group %.*s..."
 msgstr	"Gruppe %.*s..."
 
-#: src/lang.c:1055
+#: src/lang.c:1051
 msgid	"Server unavailable\n"
 msgstr	"Server nicht erreichbar\n"
 
-#: src/lang.c:1061
+#: src/lang.c:1057
 #, c-format
-msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; "
-	"%s=post"
-msgstr	"%s=Pipe; %s=Mail; %s=Drucken; %s=Ende; %s=Alle/Nur ungel.; %s=Speich.; "
-	"%s=tag; %s=Posten"
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+	"s=post"
+msgstr	"%s=Pipe; %s=Mail; %s=Drucken; %s=Ende; %s=Alle/Nur ungel.; %s=Speich.; %"
+	"s=tag; %s=Posten"
 
-#: src/lang.c:1062
+#: src/lang.c:1058
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
-msgstr	"%s=Pipe; %s=Mail; %s=Drucken; %s=Ende; %s=Antw. Mail; %s=Speich.; %s=tag; "
-	"%s=Posten"
+msgstr	"%s=Pipe; %s=Mail; %s=Drucken; %s=Ende; %s=Antw. Mail; %s=Speich.; %s=tag; %"
+	"s=Posten"
 
-#: src/lang.c:1064
+#: src/lang.c:1060
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
-msgstr	"%s=Mail; %s=Drucken; %s=Ende; %s=Alle/Nur ungel.; %s=Speich.; %s=tag; "
-	"%s=Posten"
+msgstr	"%s=Mail; %s=Drucken; %s=Ende; %s=Alle/Nur ungel.; %s=Speich.; %s=tag; %"
+	"s=Posten"
 
-#: src/lang.c:1065
+#: src/lang.c:1061
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=Mail; %s=Drucken; %s=Ende; %s=Antw. Mail; %s=Speich.; %s=tag; %s=Posten"
 
-#: src/lang.c:1069
+#: src/lang.c:1065
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	"%s=Pipe; %s=Mail; %s=Ende; %s=Alle/Nur ungel.; %s=Speich.; %s=tag; %s=Posten"
 
-#: src/lang.c:1070
+#: src/lang.c:1066
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=Pipe; %s=Mail; %s=Ende; %s=Antw. Mail; %s=Speich.; %s=tag; %s=Posten"
 
-#: src/lang.c:1072
+#: src/lang.c:1068
 #, c-format
 msgid	"%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	"%s=Mail; %s=Ende; %s=Alle/Nur ungel.; %s=Speich.; %s=tag; %s=Posten"
 
-#: src/lang.c:1073
+#: src/lang.c:1069
 #, c-format
 msgid	"%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=Mail; %s=Ende; %s=Antw. Mail; %s=Speich.; %s=tag; %s=Posten"
 
-#: src/lang.c:1079
+#: src/lang.c:1075
 msgid	"Terminal does not support color"
 msgstr	"Terminal unterstützt keine Farben"
 
-#: src/lang.c:1084
+#: src/lang.c:1080
 #, c-format
 msgid	"Trying %s"
 msgstr	"Versuche %s"
 
-#: src/lang.c:1098 src/lang.c:1123 src/lang.c:1139 src/lang.c:1318 src/refs.c:296
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315 src/refs.c:296
 msgid	"None"
 msgstr	"Nichts"
 
-#: src/lang.c:1099
+#: src/lang.c:1095
 msgid	"Subject"
 msgstr	"Subject"
 
-#: src/lang.c:1100
+#: src/lang.c:1096
 msgid	"References"
 msgstr	"References"
 
-#: src/lang.c:1101
+#: src/lang.c:1097
 msgid	"Both Subject and References"
 msgstr	"Beides: Subject und References"
 
-#: src/lang.c:1102
+#: src/lang.c:1098
 msgid	"Multipart Subject"
 msgstr	"Mehrteilige Artikel (Subject)"
 
-#: src/lang.c:1114 src/lang.c:1225
+#: src/lang.c:1099
+msgid	"Percentage Match"
+msgstr	"Prozentualer Treffer"
+
+#: src/lang.c:1111 src/lang.c:1222
 msgid	"No"
 msgstr	"Nein"
 
-#: src/lang.c:1115 src/lang.c:1227
+#: src/lang.c:1112 src/lang.c:1224
 msgid	"Yes"
 msgstr	"Ja"
 
-#: src/lang.c:1116
+#: src/lang.c:1113
 msgid	"Hide All"
 msgstr	"Alle ausblenden"
 
-#: src/lang.c:1124
+#: src/lang.c:1121
 msgid	"Address"
 msgstr	"Adresse"
 
-#: src/lang.c:1125
+#: src/lang.c:1122
 msgid	"Full Name"
 msgstr	"Voller Name"
 
-#: src/lang.c:1126
+#: src/lang.c:1123
 msgid	"Address and Name"
 msgstr	"Adresse und Name"
 
-#: src/lang.c:1133
+#: src/lang.c:1130
 msgid	"Max"
 msgstr	"Höchster"
 
-#: src/lang.c:1134
+#: src/lang.c:1131
 msgid	"Sum"
 msgstr	"Summe"
 
-#: src/lang.c:1135
+#: src/lang.c:1132
 msgid	"Average"
 msgstr	"Durchschnitt"
 
-#: src/lang.c:1140
+#: src/lang.c:1137
 msgid	"Lines"
 msgstr	"Zeilen"
 
-#: src/lang.c:1141
+#: src/lang.c:1138
 msgid	"Score"
 msgstr	"Bewertung"
 
-#: src/lang.c:1142
+#: src/lang.c:1139
 msgid	"Lines & Score"
 msgstr	"Zeilen und Bewertung"
 
-#: src/lang.c:1151
+#: src/lang.c:1148
 msgid	"Black"
 msgstr	"Schwarz"
 
-#: src/lang.c:1152
+#: src/lang.c:1149
 msgid	"Red"
 msgstr	"Rot"
 
-#: src/lang.c:1153
+#: src/lang.c:1150
 msgid	"Green"
 msgstr	"Grün"
 
-#: src/lang.c:1154
+#: src/lang.c:1151
 msgid	"Brown"
 msgstr	"Braun"
 
-#: src/lang.c:1155
+#: src/lang.c:1152
 msgid	"Blue"
 msgstr	"Blau"
 
-#: src/lang.c:1156
+#: src/lang.c:1153
 msgid	"Pink"
 msgstr	"Rosa"
 
-#: src/lang.c:1157
+#: src/lang.c:1154
 msgid	"Cyan"
 msgstr	"Cyan"
 
-#: src/lang.c:1158
+#: src/lang.c:1155
 msgid	"White"
 msgstr	"Weiß"
 
-#: src/lang.c:1159
+#: src/lang.c:1156
 msgid	"Gray"
 msgstr	"Grau"
 
-#: src/lang.c:1160
+#: src/lang.c:1157
 msgid	"Light Red"
 msgstr	"Helles Rot"
 
-#: src/lang.c:1161
+#: src/lang.c:1158
 msgid	"Light Green"
 msgstr	"Helles Grün"
 
-#: src/lang.c:1162
+#: src/lang.c:1159
 msgid	"Yellow"
 msgstr	"Gelb"
 
-#: src/lang.c:1163
+#: src/lang.c:1160
 msgid	"Light Blue"
 msgstr	"Helles Blau"
 
-#: src/lang.c:1164
+#: src/lang.c:1161
 msgid	"Light Pink"
 msgstr	"Helles Rosa"
 
-#: src/lang.c:1165
+#: src/lang.c:1162
 msgid	"Light Cyan"
 msgstr	"Helles Cyan"
 
-#: src/lang.c:1166
+#: src/lang.c:1163
 msgid	"Light White"
 msgstr	"Helles Weiß"
 
-#: src/lang.c:1174 src/lang.c:1231 src/lang.c:1245
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
 msgid	"Nothing"
 msgstr	"Nichts"
 
-#: src/lang.c:1175
+#: src/lang.c:1172
 msgid	"Mark"
 msgstr	"Markierung"
 
-#: src/lang.c:1176
+#: src/lang.c:1173
 msgid	"Space"
 msgstr	"Leerzeichen"
 
-#: src/lang.c:1183
+#: src/lang.c:1180
 msgid	"Normal"
 msgstr	"Normal"
 
-#: src/lang.c:1184
+#: src/lang.c:1181
 msgid	"Best highlighting"
 msgstr	"Beste Hervorhebung"
 
-#: src/lang.c:1185
+#: src/lang.c:1182
 msgid	"Underline"
 msgstr	"Unterstreichen"
 
-#: src/lang.c:1186
+#: src/lang.c:1183
 msgid	"Reverse video"
 msgstr	"Invers"
 
-#: src/lang.c:1187
+#: src/lang.c:1184
 msgid	"Blinking"
 msgstr	"Blinkend"
 
-#: src/lang.c:1188
+#: src/lang.c:1185
 msgid	"Half bright"
 msgstr	"Halbe Helligkeit"
 
-#: src/lang.c:1189
+#: src/lang.c:1186
 msgid	"Bold"
 msgstr	"Fett"
 
-#: src/lang.c:1194
+#: src/lang.c:1191
 msgid	"none"
 msgstr	"Nichts"
 
-#: src/lang.c:1195
+#: src/lang.c:1192
 msgid	"commands"
 msgstr	"Kommandos"
 
-#: src/lang.c:1196
+#: src/lang.c:1193
 msgid	"select"
 msgstr	"X-Befehl"
 
-#: src/lang.c:1198
+#: src/lang.c:1195
 msgid	"commands & quit"
 msgstr	"Kommandos & Ende"
 
-#: src/lang.c:1199
+#: src/lang.c:1196
 msgid	"commands & select"
 msgstr	"Kommandos & X-Befehl"
 
-#: src/lang.c:1200
+#: src/lang.c:1197
 msgid	"quit & select"
 msgstr	"Ende & X-Befehl"
 
-#: src/lang.c:1201
+#: src/lang.c:1198
 msgid	"commands & quit & select"
 msgstr	"Kmndos & Ende & X-Befehl"
 
-#: src/lang.c:1226
+#: src/lang.c:1223
 msgid	"Shell archive"
 msgstr	"Shellarchiv"
 
-#: src/lang.c:1232
+#: src/lang.c:1229
 msgid	"Subject: (descending)"
 msgstr	"Subject: (Absteigend)"
 
-#: src/lang.c:1233
+#: src/lang.c:1230
 msgid	"Subject: (ascending)"
 msgstr	"Subject: (Aufsteigend)"
 
-#: src/lang.c:1234
+#: src/lang.c:1231
 msgid	"From: (descending)"
 msgstr	"From: (Absteigend)"
 
-#: src/lang.c:1235
+#: src/lang.c:1232
 msgid	"From: (ascending)"
 msgstr	"From: (Aufsteigend)"
 
-#: src/lang.c:1236
+#: src/lang.c:1233
 msgid	"Date: (descending)"
 msgstr	"Date: (Absteigend)"
 
-#: src/lang.c:1237
+#: src/lang.c:1234
 msgid	"Date: (ascending)"
 msgstr	"Date: (Aufsteigend)"
 
-#: src/lang.c:1238 src/lang.c:1246
+#: src/lang.c:1235 src/lang.c:1243
 msgid	"Score (descending)"
 msgstr	"Bewertung (Absteigend)"
 
-#: src/lang.c:1239 src/lang.c:1247
+#: src/lang.c:1236 src/lang.c:1244
 msgid	"Score (ascending)"
 msgstr	"Bewertung (Aufsteigend)"
 
-#: src/lang.c:1240
+#: src/lang.c:1237
 msgid	"Lines: (descending)"
 msgstr	"Lines: (Absteigend)"
 
-#: src/lang.c:1241
+#: src/lang.c:1238
 msgid	"Lines: (ascending)"
 msgstr	"Lines: (Aufsteigend)"
 
-#: src/lang.c:1252
+#: src/lang.c:1249
 msgid	"Always Keep"
 msgstr	"Immer behalten"
 
-#: src/lang.c:1253
+#: src/lang.c:1250
 msgid	"Always Remove"
 msgstr	"Immer entfernen"
 
-#: src/lang.c:1254
+#: src/lang.c:1251
 msgid	"Mark with D on selection screen"
 msgstr	"Mit D in der Anzeige markiert"
 
-#: src/lang.c:1259
+#: src/lang.c:1256
 msgid	"Kill only unread arts"
 msgstr	"Killt nur ungelesene Artikel"
 
-#: src/lang.c:1260
+#: src/lang.c:1257
 msgid	"Kill all arts & show with K"
 msgstr	"Killt alle Artikel, markiert mit K"
 
 #. TODO: s/K/art_marked_killed/
-#: src/lang.c:1261
+#: src/lang.c:1258
 msgid	"Kill all arts and never show"
 msgstr	"Killt alle Artikel, zeigt sie nie"
 
-#: src/lang.c:1266
+#: src/lang.c:1263
 msgid	"Nothing special"
 msgstr	"Nichts besonderes"
 
-#: src/lang.c:1267
+#: src/lang.c:1264
 msgid	"Compress quotes"
 msgstr	"Zitatzeichen zusammenfassen"
 
-#: src/lang.c:1268
+#: src/lang.c:1265
 msgid	"Quote signatures"
 msgstr	"Signaturen zitieren"
 
-#: src/lang.c:1269
+#: src/lang.c:1266
 msgid	"Compress quotes, quote sigs"
 msgstr	"Zitatz. kürzen, Signat. zitieren"
 
-#: src/lang.c:1270
+#: src/lang.c:1267
 msgid	"Quote empty lines"
 msgstr	"Leerzeilen zitieren"
 
-#: src/lang.c:1271
+#: src/lang.c:1268
 msgid	"Compress quotes, quote empty lines"
 msgstr	"Zitatz. kürzen, Leerzeilen zit."
 
-#: src/lang.c:1272
+#: src/lang.c:1269
 msgid	"Quote sigs & empty lines"
 msgstr	"Signat. und Leerzeilen zitieren"
 
-#: src/lang.c:1273
+#: src/lang.c:1270
 msgid	"Comp. q., quote sigs & empty lines"
 msgstr	"Zitatz. kürzen, Sign & Leerz. zit."
 
-#: src/lang.c:1311
+#: src/lang.c:1308
 msgid	"no"
 msgstr	"nein"
 
-#: src/lang.c:1312
+#: src/lang.c:1309
 msgid	"with headers"
 msgstr	"mit Header"
 
-#: src/lang.c:1313
+#: src/lang.c:1310
 msgid	"without headers"
 msgstr	"ohne Header"
 
-#: src/lang.c:1320 src/lang.c:1326
+#: src/lang.c:1317 src/lang.c:1323
 msgid	"NFKC"
 msgstr	"NFKC"
 
-#: src/lang.c:1321
+#: src/lang.c:1318
 msgid	"NFKD"
 msgstr	"NFKD"
 
-#: src/lang.c:1322
+#: src/lang.c:1319
 msgid	"NFC"
 msgstr	"NFC"
 
-#: src/lang.c:1323
+#: src/lang.c:1320
 msgid	"NFD"
 msgstr	"NFD"
 
-#: src/lang.c:1334
+#: src/lang.c:1331
 msgid	"Display Options"
 msgstr	"Darstellungseinstellungen"
 
-#: src/lang.c:1341
+#: src/lang.c:1338
 msgid	"Color Options"
 msgstr	"Farbeinstellungen"
 
-#: src/lang.c:1348
+#: src/lang.c:1345
 msgid	"Article-Limiting Options"
 msgstr	"Artikel-Begrenzungseinstellungen"
 
-#: src/lang.c:1354
+#: src/lang.c:1351
 msgid	"Posting/Mailing Options"
 msgstr	"Versandeinstellungen für Mail und News"
 
-#: src/lang.c:1360
+#: src/lang.c:1357
 msgid	"Saving/Printing Options"
 msgstr	"Speicher- und Druckereinstellungen"
 
-#: src/lang.c:1366
+#: src/lang.c:1363
 msgid	"Expert Options"
 msgstr	"Experteneinstellungen"
 
-#: src/lang.c:1372
+#: src/lang.c:1369
 msgid	"Filtering Options"
 msgstr	"Filtereinstellungen"
 
-#: src/lang.c:1377 src/lang.c:1408 src/lang.c:1414 src/lang.c:1426 src/lang.c:1476
-#: src/lang.c:1482 src/lang.c:1492 src/lang.c:1512 src/lang.c:1587 src/lang.c:1757
-#: src/lang.c:1763 src/lang.c:1769 src/lang.c:1775 src/lang.c:1787 src/lang.c:1794
-#: src/lang.c:1848 src/lang.c:1857 src/lang.c:1863 src/lang.c:1870 src/lang.c:1877
-#: src/lang.c:1884 src/lang.c:1891 src/lang.c:1898 src/lang.c:1905 src/lang.c:1912
-#: src/lang.c:1919 src/lang.c:1926 src/lang.c:1933 src/lang.c:1940 src/lang.c:1947
-#: src/lang.c:1954 src/lang.c:1961 src/lang.c:1968 src/lang.c:1975 src/lang.c:1982
-#: src/lang.c:1989 src/lang.c:1996 src/lang.c:2003 src/lang.c:2010 src/lang.c:2017
-#: src/lang.c:2025 src/lang.c:2041 src/lang.c:2048 src/lang.c:2055 src/lang.c:2062
-#: src/lang.c:2068 src/lang.c:2074 src/lang.c:2091 src/lang.c:2103 src/lang.c:2137
-#: src/lang.c:2190 src/lang.c:2197 src/lang.c:2203 src/lang.c:2228 src/lang.c:2245
-#: src/lang.c:2298 src/lang.c:2334 src/lang.c:2354 src/lang.c:2389 src/lang.c:2399
-#: src/lang.c:2424 src/lang.c:2440 src/lang.c:2459 src/lang.c:2472
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437 src/lang.c:1487
+#: src/lang.c:1493 src/lang.c:1503 src/lang.c:1523 src/lang.c:1598 src/lang.c:1768
+#: src/lang.c:1774 src/lang.c:1780 src/lang.c:1786 src/lang.c:1798 src/lang.c:1805
+#: src/lang.c:1859 src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916 src/lang.c:1923
+#: src/lang.c:1930 src/lang.c:1937 src/lang.c:1944 src/lang.c:1951 src/lang.c:1958
+#: src/lang.c:1965 src/lang.c:1972 src/lang.c:1979 src/lang.c:1986 src/lang.c:1993
+#: src/lang.c:2000 src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066 src/lang.c:2073
+#: src/lang.c:2079 src/lang.c:2085 src/lang.c:2102 src/lang.c:2114 src/lang.c:2148
+#: src/lang.c:2201 src/lang.c:2208 src/lang.c:2214 src/lang.c:2239 src/lang.c:2256
+#: src/lang.c:2309 src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
 msgid	"<SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"<SPACE> schaltet um, <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1378
+#: src/lang.c:1375
 msgid	"Show mini menu & posting etiquette"
 msgstr	"Zeigt Minimenü & Posting etiquette"
 
-#: src/lang.c:1379
+#: src/lang.c:1376
 msgid	"# If ON show a mini menu of useful commands at each level\n"
 	"# and posting etiquette after composing an article\n"
 msgstr	"# Falls ON wird ein kleines Menü mit nützlichen Kommandos in jedem Level\n"
 	"# angezeigt. Nach dem Erstellen eines Artikels wird die etiquette angezeigt\n"
 
-#: src/lang.c:1384
+#: src/lang.c:1381
 msgid	"Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
 msgstr	"Zeige Kurzbeschreibung für Gruppe. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1385
+#: src/lang.c:1382
 msgid	"Show description of each newsgroup"
 msgstr	"Zeige Beschreibung der Newsgruppen"
 
-#: src/lang.c:1386
+#: src/lang.c:1383
 msgid	"# If ON show group description text after newsgroup name at\n"
 	"# group selection level\n"
 msgstr	"# Falls ON wird die Newsgruppenbeschreibung im Gruppenauswahlmenü\n"
 	"# nach dem Namen angezeigt\n"
 
-#: src/lang.c:1391
+#: src/lang.c:1388
 msgid	"Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
 	"sets."
 msgstr	"Zeigt Subject & From (Autor) Felder im Gruppenmenü. <SPACE> wechselt & <CR> "
 	"setzt."
 
-#: src/lang.c:1392
+#: src/lang.c:1389
 msgid	"In group menu, show author by"
 msgstr	"Im Gruppenmenü, zeige Autor an nach"
 
-#: src/lang.c:1393
+#: src/lang.c:1390
 msgid	"# Part of from field to display\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = none\n"
@@ -4445,31 +4502,31 @@ msgstr	"# Anzeige des 'From:' Felds\n"
 	"# * 2 = Voller Name\n"
 	"#   3 = beides (Adresse und Name)\n"
 
-#: src/lang.c:1402
+#: src/lang.c:1399
 msgid	"Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
 msgstr	"Zeige -> oder Hervorhebung für Auswahl. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1403
+#: src/lang.c:1400
 msgid	"Draw -> instead of highlighted bar"
 msgstr	"Zeige -> anstatt einer Markierung"
 
-#: src/lang.c:1404
+#: src/lang.c:1401
 msgid	"# If ON use -> otherwise highlighted bar for selection\n"
 msgstr	"# Falls ON benutze -> andernfalls benutze eine Markierung zur Auswahl\n"
 
-#: src/lang.c:1409
+#: src/lang.c:1406
 msgid	"Use inverse video for page headers"
 msgstr	"Inverse Darstellung für die Header"
 
-#: src/lang.c:1410
+#: src/lang.c:1407
 msgid	"# If ON use inverse video for page headers at different levels\n"
 msgstr	"# Falls ON nutze inverse Darstellung für Header bei verschiedenen Ebenen\n"
 
-#: src/lang.c:1415
+#: src/lang.c:1412
 msgid	"Thread articles by"
 msgstr	"Threade Artikel anhand"
 
-#: src/lang.c:1416
+#: src/lang.c:1413
 msgid	"# Thread articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4477,6 +4534,7 @@ msgid	"# Thread articles by ...\n"
 	"#   2 = References\n"
 	"# * 3 = Both (Subject and References)\n"
 	"#   4 = Multipart Subject\n"
+	"#   5 = Percentage Match\n"
 msgstr	"# Gruppiere Artikel nach\n"
 	"# Mögliche Werte sind (die Voreinstellung ist mit * gekennzeichnet):\n"
 	"#   0 = nichts\n"
@@ -4484,12 +4542,35 @@ msgstr	"# Gruppiere Artikel nach\n"
 	"#   2 = References\n"
 	"# * 3 = beides (Subject und References)\n"
 	"#   4 = Mehrteilige Artikel\n"
+	"#   5 = prozentualer Subject vergleich\n"
+
+#: src/lang.c:1424
+msgid	"Enter percentage match required to thread together. <CR> sets."
+msgstr	"Prozent des Subject das gleich sein muß. <CR> setzt."
+
+#: src/lang.c:1425
+msgid	"Thread percentage match"
+msgstr	"Prozentualer Subject vergleich"
+
+# TRANSLATION MISSING
+#: src/lang.c:1426
+#, c-format
+msgid	"# Thread percentage match...\n"
+	"# the percentage of characters in the subject of an article that must match\n"
+	"# a base article for both those articles to be considered to belong to the\n"
+	"# same thread. This option is an integer percentage, eg. 80, no decimals may\n"
+	"# follow. If 80 is used here, then 80%% of the characters must match "
+	"exactly,\n"
+	"# no insertion of a character, for the two articles to be put in the same\n"
+	"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+	"# 'harppy' would be threaded separately from 'happy'\n"
+msgstr	""
 
-#: src/lang.c:1427
+#: src/lang.c:1438
 msgid	"Score of a thread"
 msgstr	"Bewertung eines Threads"
 
-#: src/lang.c:1428
+#: src/lang.c:1439
 msgid	"# Thread score\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = max\n"
@@ -4501,15 +4582,15 @@ msgstr	"# Bewertung des Threads\n"
 	"#   1 = Summe\n"
 	"#   2 = Durchschnitt\n"
 
-#: src/lang.c:1436
+#: src/lang.c:1447
 msgid	"Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
 msgstr	"Sortiere Artikel nach Subject, From, Datum oder Bewertung."
 
-#: src/lang.c:1437
+#: src/lang.c:1448
 msgid	"Sort articles by"
 msgstr	"Sortiere Artikel nach"
 
-#: src/lang.c:1438
+#: src/lang.c:1449
 msgid	"# Sort articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4537,17 +4618,15 @@ msgstr	"# Sortiere Artikel nach\n"
 	"#   9 = Lines absteigend\n"
 	"#  10 = Lines aufsteigend\n"
 
-# TRANLSATION TOO LONG
-#: src/lang.c:1454
+#: src/lang.c:1465
 msgid	"Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
-msgstr	"Threads nach Bewertung (Score) oder nichts ordnen. <SPACE> wechselt & <CR> "
-	"setzt."
+msgstr	"Threads nach Bewertung (Score) ordnen? <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1455
+#: src/lang.c:1466
 msgid	"Sort threads by"
 msgstr	"Sortiere Threads nach"
 
-#: src/lang.c:1456
+#: src/lang.c:1467
 msgid	"# Sort thread by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4559,43 +4638,43 @@ msgstr	"# Ordne Threads nach\n"
 	"# * 1 = Bewertung absteigend\n"
 	"#   2 = Bewertung aufsteigend\n"
 
-#: src/lang.c:1464
+#: src/lang.c:1475
 msgid	"Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
 msgstr	"Setze Cursor an ersten/letzten ungel. Artikel. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1465
+#: src/lang.c:1476
 msgid	"Goto first unread article in group"
 msgstr	"Setze Cursor auf ersten ungel. Art."
 
-#: src/lang.c:1466
+#: src/lang.c:1477
 msgid	"# If ON put cursor at first unread art in group otherwise last art\n"
-msgstr	"# Falls ON setze Cursor auf ersten ungelesenen Art., sonst auf letzten\n"
+msgstr	"# Falls ON setze Cursor auf ersten ungelesenen Artikel, sonst auf letzten\n"
 
-#: src/lang.c:1470
+#: src/lang.c:1481
 msgid	"Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
 msgstr	"Zeige alle oder nur ungelesene Artikel. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1471
+#: src/lang.c:1482
 msgid	"Show only unread articles"
 msgstr	"Zeige nur ungelesene Artikel"
 
-#: src/lang.c:1472
+#: src/lang.c:1483
 msgid	"# If ON show only new/unread articles otherwise show all.\n"
 msgstr	"# Falls ON zeige nur neue/ungelesene Artikel, sonst alle.\n"
 
-#: src/lang.c:1477
+#: src/lang.c:1488
 msgid	"Show only groups with unread arts"
 msgstr	"Zeige nur Gruppen mit ungel. Art."
 
-#: src/lang.c:1478
+#: src/lang.c:1489
 msgid	"# If ON show only subscribed to groups that contain unread articles.\n"
 msgstr	"# Falls ON zeige nur abonnierte Gruppen mit ungelesen Artikeln.\n"
 
-#: src/lang.c:1483
+#: src/lang.c:1494
 msgid	"Filter which articles"
 msgstr	"Filter (kill) anwenden auf"
 
-#: src/lang.c:1484
+#: src/lang.c:1495
 msgid	"# Filter which articles\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = only kill unread articles\n"
@@ -4607,198 +4686,198 @@ msgstr	"# Filter (kill) anwenden auf\n"
 	"#   1 = Filtert alle Artikel und markiert sie mit K\n"
 	"#   2 = Filtert alle Artikel und zeigt gekillte niemals an\n"
 
-#: src/lang.c:1493
+#: src/lang.c:1504
 msgid	"Tab goes to next unread article"
 msgstr	"Tab zeigt nächsten ungelesenen Art."
 
-#: src/lang.c:1494
+#: src/lang.c:1505
 msgid	"# If ON the TAB command will go to next unread article at article viewer "
 	"level\n"
 msgstr	"# Falls ON wechselt TAB sofort zum nächsten ungelesenen Artikel\n"
 
-#: src/lang.c:1498
+#: src/lang.c:1509
 msgid	"Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
 msgstr	"Weiterscrollen mit Leertaste am Artikelende wechselt zum nächsten ungel. "
 	"Artikel."
 
-#: src/lang.c:1499
+#: src/lang.c:1510
 msgid	"Space goes to next unread article"
 msgstr	"Leertaste zeigt nächsten unge. Art."
 
-#: src/lang.c:1500
+#: src/lang.c:1511
 msgid	"# If ON the SPACE command will go to next unread article at article viewer\n"
 	"# level when the end of the article is reached (rn-style pager)\n"
 msgstr	"# Falls ON wechselt die Leertaste zum nächsten ungelesenen Artikel, wenn\n"
 	"# das Ende des Artikels erreicht wird (rn-Stil)\n"
 
-#: src/lang.c:1505
+#: src/lang.c:1516
 msgid	"Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
 msgstr	"Weiterscrollen mit BildAb am Artikelende wechselt zum nächsten ungel. Artikel."
 
-#: src/lang.c:1506
+#: src/lang.c:1517
 msgid	"PgDn goes to next unread article"
 msgstr	"PgDn zeigt nächst. ungelesenen Art."
 
-#: src/lang.c:1507
+#: src/lang.c:1518
 msgid	"# If ON the PGDN or DOWN command will go to next unread article when\n"
 	"# pressed at end of message\n"
 msgstr	"# Falls ON wechselt Bildrunter oder Cursorrunter zum nächsten ungelesenen\n"
 	"# Artikel, wenn das Artikelende erreicht wurde\n"
 
-#: src/lang.c:1513
+#: src/lang.c:1524
 msgid	"List thread using right arrow key"
 msgstr	"Zeige Thread mit rechter Pfeilt. an"
 
-#: src/lang.c:1514
+#: src/lang.c:1525
 msgid	"# If ON automatically list thread when entering it using right arrow key.\n"
 msgstr	"# Falls ON: Thread beim Betreten mit der rechten Cursortaste automatisch\n"
 	"# anzeigen?\n"
 
-#: src/lang.c:1518
+#: src/lang.c:1529
 msgid	"Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
 msgstr	"Definiere Zeichen für gelöschte Artikel. <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1519
+#: src/lang.c:1530
 msgid	"Character to show deleted articles"
 msgstr	"Zeichen für gelöschte Artikel"
 
-#: src/lang.c:1520
+#: src/lang.c:1531
 msgid	"# Character used to show that an art was deleted (default 'D')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Zeichen für einen Artikel, der gelöscht wurde (Voreinstellung 'D')\n"
 	"# _ wird in ' ' umgewandelt\n"
 
-#: src/lang.c:1525
+#: src/lang.c:1536
 msgid	"Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
 msgstr	"Definiere Zeichen, das Artikel im Bereich anzeigt.<CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1526
+#: src/lang.c:1537
 msgid	"Character to show inrange articles"
 msgstr	"Zeichen für Artikel im Bereich"
 
-#: src/lang.c:1527
+#: src/lang.c:1538
 msgid	"# Character used to show that an art is in a range (default '#')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Zeichen für Artikel die im Bereich sind (Voreinstellung '#')\n"
 	"# _ wird in ' ' umgewandelt\n"
 
-#: src/lang.c:1532
+#: src/lang.c:1543
 msgid	"Enter character to indicate that article will return. <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Definiere Zeichen für wiederkehrende Art. <CR> setzt. <ESC> bricht ab."
 
-#: src/lang.c:1533
+#: src/lang.c:1544
 msgid	"Character to show returning arts"
 msgstr	"Zeichen für wiederkehrende Artikel"
 
-#: src/lang.c:1534
+#: src/lang.c:1545
 msgid	"# Character used to show that an art will return (default '-')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Zeichen, dass ein Artikel wiederkommen wird (Voreinstellung '-')\n"
 	"# _ wird in ' ' umgewandelt\n"
 
-#: src/lang.c:1539
+#: src/lang.c:1550
 msgid	"Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Zeichen für Artikel mit Markierung wichtig/'hot' <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1540
+#: src/lang.c:1551
 msgid	"Character to show selected articles"
 msgstr	"Zeichen für wichtige Artikel"
 
-#: src/lang.c:1541
+#: src/lang.c:1552
 msgid	"# Character used to show that an art was auto-selected (default '*')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Zeichen für Artikel mit Markierung wichtig/'hot' (Voreinstellung '*')\n"
 	"# _ wird in ' ' umgewandelt\n"
 
-#: src/lang.c:1546
+#: src/lang.c:1557
 msgid	"Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
 msgstr	"Definiere Zeichen für aktuelle Artikel. <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1547
+#: src/lang.c:1558
 msgid	"Character to show recent articles"
 msgstr	"Zeichen für aktuelle Artikel"
 
-#: src/lang.c:1548
+#: src/lang.c:1559
 msgid	"# Character used to show that an art is recent (default 'o')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Zeichen für einen aktuellen Artikel (Voreinstellung ist 'o')\n"
 	"# _ wird in ' ' umgewandelt\n"
 
-#: src/lang.c:1553
+#: src/lang.c:1564
 msgid	"Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
 msgstr	"Zeichen für ungelesene Artikel. <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1554
+#: src/lang.c:1565
 msgid	"Character to show unread articles"
 msgstr	"Zeichen für ungelesene Artikel"
 
-#: src/lang.c:1555
+#: src/lang.c:1566
 msgid	"# Character used to show that an art is unread (default '+')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Zeichen für ungelesene Artikel (Voreinstellung '+')\n"
 	"# _ wird in ' ' umgewandelt\n"
 
-#: src/lang.c:1560
+#: src/lang.c:1571
 msgid	"Enter character to indicate read articles. <CR> sets, <ESC> cancels."
 msgstr	"Zeichen für gelesene Artikel. <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1561
+#: src/lang.c:1572
 msgid	"Character to show read articles"
 msgstr	"Zeichen für gelesene Artikel"
 
-#: src/lang.c:1562
+#: src/lang.c:1573
 msgid	"# Character used to show that an art was read (default ' ')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Zeichen für gelesene Artikel (Voreinstellung ' ')\n"
 	"# _ wird in ' ' umgewandelt\n"
 
-#: src/lang.c:1567
+#: src/lang.c:1578
 msgid	"Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
 msgstr	"Zeichen für gekillte Artikel. <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1568
+#: src/lang.c:1579
 msgid	"Character to show killed articles"
 msgstr	"Zeichen für gekillte Artikel"
 
-#: src/lang.c:1569
+#: src/lang.c:1580
 msgid	"# Character used to show that an art was killed (default 'K')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr	"# Zeichen für gekillte Artikel (Voreinstellung 'K')\n"
 	"# _ wird in ' ' umgewandelt, kill_level muss passend gesetzt sein.\n"
 
-#: src/lang.c:1574
+#: src/lang.c:1585
 msgid	"Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Zeichen für gelesene wichtige/'hot' Artikel. <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1575
+#: src/lang.c:1586
 msgid	"Character to show readselected arts"
 msgstr	"Zeichen für gelesene wichtige Art."
 
-#: src/lang.c:1576
+#: src/lang.c:1587
 msgid	"# Character used to show that an art was selected before read (default ':')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr	"# Zeichen für bereits gelesene Artikel mit Markierung wichtig/'hot'\n"
 	"# (Voreinstellung ':')\n"
 	"# _ wird in ' ' umgewandelt, kill_level muss passend gesetzt sein.\n"
 
-#: src/lang.c:1581
+#: src/lang.c:1592
 msgid	"Enter maximum length of newsgroup names displayed. <CR> sets."
 msgstr	"Maximale Länge des angezeigten Newsgruppennamens. <CR> setzt."
 
-#: src/lang.c:1582
+#: src/lang.c:1593
 msgid	"Max. length of group names shown"
 msgstr	"Max. Länge angezeigter Gruppennamen"
 
-#: src/lang.c:1583
+#: src/lang.c:1594
 msgid	"# Maximum length of the names of newsgroups displayed\n"
 msgstr	"# Maximale Länge der angezeigten Newsgruppennamen\n"
 
-#: src/lang.c:1588
+#: src/lang.c:1599
 msgid	"Show lines/score in listings"
 msgstr	"Zeige Zeilenz./Bewert. in Übersicht"
 
-#: src/lang.c:1589
+#: src/lang.c:1600
 msgid	"# What informations should be displayed in article/thread listing\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4813,17 +4892,17 @@ msgstr	"# Welche weiteren Informationen 
 	"#   2 = Bewertung\n"
 	"#   3 = Zeilenzahl & Bewertung\n"
 
-#: src/lang.c:1598
-msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, "
-	"-2 = half page"
+#: src/lang.c:1609
+msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, -"
+	"2 = half page"
 msgstr	"0 = seitenweise, -1 = zeige zusätzlich letzte Zeile der vorigen Seite, -2 = "
 	"halbe Seite"
 
-#: src/lang.c:1599
+#: src/lang.c:1610
 msgid	"Number of lines to scroll in pager"
 msgstr	"Blättere Artikel um ... Zeilen"
 
-#: src/lang.c:1600
+#: src/lang.c:1611
 msgid	"# Number of lines that cursor-up/down will scroll in article pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#  -2 = half-page scrolling\n"
@@ -4840,27 +4919,27 @@ msgstr	"# Anzahl der Zeilen, die Cursor-
 	"# * 1 = zeilenweise\n"
 	"#   2 oder mehr = um 2 oder mehr Zeilen\n"
 
-#: src/lang.c:1610
+#: src/lang.c:1621
 msgid	"Display signatures. <SPACE> toggles & <CR> sets."
 msgstr	"Zeige Signaturen an. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1611
+#: src/lang.c:1622
 msgid	"Display signatures"
 msgstr	"Zeige Signaturen an"
 
-#: src/lang.c:1612
+#: src/lang.c:1623
 msgid	"# If OFF don't show signatures when displaying articles\n"
 msgstr	"# Falls OFF zeige keine Signaturen an\n"
 
-#: src/lang.c:1616
+#: src/lang.c:1627
 msgid	"Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
 msgstr	"Uu-kodierte Teile als Attachment anzeigen. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1617
+#: src/lang.c:1628
 msgid	"Display uue data as an attachment"
 msgstr	"Zeige uue-Teile als Attachment"
 
-#: src/lang.c:1618
+#: src/lang.c:1629
 msgid	"# Handling of uuencoded data in the pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no, display raw uuencoded data\n"
@@ -4875,29 +4954,29 @@ msgstr	"# Behandlung von uuencodeten Dat
 	"#       ähnlich der von MIME Anhängen\n"
 	"#   2 = Einzeilige Zusammenfassung auch für unvollständige Daten\n"
 
-#: src/lang.c:1628
+#: src/lang.c:1639
 msgid	"Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
 msgstr	"TeX german.sty Umlautkodierung auswerten. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:1629
+#: src/lang.c:1640
 msgid	"Display \"a as Umlaut-a"
 msgstr	"Wandle TeX-Umlaute automatisch um"
 
-#: src/lang.c:1630
+#: src/lang.c:1641
 msgid	"# If ON decode German style TeX umlaut codes to ISO and\n"
 	"# show \"a as Umlaut-a, etc.\n"
 msgstr	"# Wenn ON dekodiere laut german.sty (TeX) kodierte Umlaute und stelle\n"
 	"# \"a als ä, usw. dar\n"
 
-#: src/lang.c:1635 src/lang.c:1645
+#: src/lang.c:1646 src/lang.c:1656
 msgid	"Space separated list of header fields"
 msgstr	"Durch Leerzeichen getrennte Liste der Header-Felder"
 
-#: src/lang.c:1636
+#: src/lang.c:1647
 msgid	"Display these header fields (or *)"
 msgstr	"Zeige diese Header-Felder (oder *)"
 
-#: src/lang.c:1637
+#: src/lang.c:1648
 msgid	"# Which news headers you wish to see. If you want to see _all_ the headers,\n"
 	"# place an '*' as this value. This is the only way a wildcard can be used.\n"
 	"# If you enter 'X-' as the value, you will see all headers beginning with\n"
@@ -4911,11 +4990,11 @@ msgstr	"# Welche Header wollen Sie sehen
 	"# Leerzeichen getrennte Werte angeben. Wenn Sie hier nichts definieren\n"
 	"# wird diese Option deaktiviert.\n"
 
-#: src/lang.c:1646
+#: src/lang.c:1657
 msgid	"Do not display these header fields"
 msgstr	"Zeige folgende Header nicht an"
 
-#: src/lang.c:1647
+#: src/lang.c:1658
 msgid	"# Same as 'news_headers_to_display' except it denotes the opposite.\n"
 	"# An example of using both options might be if you thought X- headers were\n"
 	"# A Good Thing(tm), but thought Alan and Pape were miscreants...well then "
@@ -4926,33 +5005,33 @@ msgid	"# Same as 'news_headers_to_displa
 	"# Not defining anything turns off this option.\n"
 msgstr	"# Genau das gleiche wie 'news_headers_to_display', mit der Ausnahme,\n"
 	"# das es das Gegenteil bewirkt. Wenn Sie dachten, das die X- Header eine\n"
-	"# tolle Sachen waren, nun aber festgestellt haben, das dort einiges über-\n"
-	"# flüssiges steht, dann könnten Sie wie folgt vorgehen:\n"
+	"# tolle Sachen waren, nun aber festgestellt haben, das dort einiges\n"
+	"# überflüssiges steht, dann könnten Sie wie folgt vorgehen:\n"
 	"# news_headers_to_display=X-\n"
 	"# news_headers_to_not_display=X-Alan X-Pape\n"
 	"# Wenn Sie hier nichts angeben, wird diese Option deaktiviert.\n"
 
-#: src/lang.c:1657
+#: src/lang.c:1668
 msgid	"Do you want to enable automatic handling of multipart/alternative articles?"
 msgstr	"Automatische Bearbeitung von Art. mit multipart/alternative-Teilen aktivieren?"
 
-#: src/lang.c:1658
+#: src/lang.c:1669
 msgid	"Skip multipart/alternative parts"
 msgstr	"Übersp. multipart/alternative-Teile"
 
-#: src/lang.c:1659
+#: src/lang.c:1670
 msgid	"# If ON strip multipart/alternative messages automatically\n"
 msgstr	"# Falls ON entsorge multipart/alternative Teile des Artikels automatisch\n"
 
-#: src/lang.c:1664
+#: src/lang.c:1675
 msgid	"A regex used to decide which lines to show in col_quote."
 msgstr	"Regulärer Ausdruck für Zeilen, die mit col_quote dargestellt werden."
 
-#: src/lang.c:1665
+#: src/lang.c:1676
 msgid	"Regex used to show quoted lines"
 msgstr	"Regulärer Ausd. für zit. Zeilen"
 
-#: src/lang.c:1666
+#: src/lang.c:1677
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4961,15 +5040,15 @@ msgstr	"# Ein regulärer Ausdruck, den ti
 	"# Farbe angezeigt, die in col_quote definiert sind.\n"
 	"# Wenn Sie hier nichts angeben, werden die Voreinstellungen benutzt.\n"
 
-#: src/lang.c:1672
+#: src/lang.c:1683
 msgid	"A regex used to decide which lines to show in col_quote2."
 msgstr	"Regulärer Ausdruck für Zeilen, die mit col_quote2 dargestellt werden."
 
-#: src/lang.c:1673
+#: src/lang.c:1684
 msgid	"Regex used to show twice quoted l."
 msgstr	"Reg. Ausd. für zweifach zitierte Z."
 
-#: src/lang.c:1674
+#: src/lang.c:1685
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted twice. Twice quoted lines are shown in col_quote2.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4978,15 +5057,15 @@ msgstr	"# Ein regulärer Ausdruck, den ti
 	"# Farbe dargestellt, die in col_quote2 definiert ist.\n"
 	"# Wenn Sie hier nichts eingeben, werden die Voreinstellungen benutzt.\n"
 
-#: src/lang.c:1680
+#: src/lang.c:1691
 msgid	"A regex used to decide which lines to show in col_quote3."
 msgstr	"Regulärer Ausdruck für Zeilen, die mit col_quote3 dargestellt werden."
 
-#: src/lang.c:1681
+#: src/lang.c:1692
 msgid	"Regex used to show >= 3 times q.l."
 msgstr	"Reg. Ausd. für >=3-fach zitierte Z."
 
-#: src/lang.c:1682
+#: src/lang.c:1693
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4995,15 +5074,15 @@ msgstr	"# Ein regulärer Ausdruck, der en
 	"# dargestellt, die in col_quote3 definiert sind.\n"
 	"# Wenn Sie hier nichts eingeben, werden die Voreinstellungen benutzt.\n"
 
-#: src/lang.c:1689
+#: src/lang.c:1700
 msgid	"A regex used to decide which words to show in col_markslashes."
 msgstr	"Regulärer Ausdruck für Zeilen, die mit col_markslashes dargestellt werden."
 
-#: src/lang.c:1690
+#: src/lang.c:1701
 msgid	"Regex used to highlight /slashes/"
 msgstr	"Reg. für /Schrägst./ Hervorhebungen"
 
-#: src/lang.c:1691
+#: src/lang.c:1702
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '/' are to be shown in col_markslashes.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5011,15 +5090,15 @@ msgstr	"# Ein regulärer Ausdruck, der en
 	"# zwischen '/' in col_markslashes angezeigt werden.\n"
 	"# Wenn Sie hier nichts eingeben, werden die Voreinstellungen benutzt.\n"
 
-#: src/lang.c:1697
+#: src/lang.c:1708
 msgid	"A regex used to decide which words to show in col_markstars."
 msgstr	"Regulärer Ausdruck für Zeilen, die mit col_markstars dargestellt werden."
 
-#: src/lang.c:1698
+#: src/lang.c:1709
 msgid	"Regex used to highlight *stars*"
 msgstr	"Regu. A. für *Stern* Hervorhebungen"
 
-#: src/lang.c:1699
+#: src/lang.c:1710
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '*' are to be shown in col_markstars.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5027,15 +5106,15 @@ msgstr	"# Ein regulärer Ausdruck, der en
 	"# zwischen '*' in col_markstars angezeigt werden.\n"
 	"# Wenn Sie hier nichts eingeben, werden die Voreinstellungen benutzt.\n"
 
-#: src/lang.c:1705
+#: src/lang.c:1716
 msgid	"A regex used to decide which words to show in col_markstroke."
 msgstr	"Regulärer Ausdruck für Zeilen, die mit col_markstroke dargestellt werden."
 
-#: src/lang.c:1706
+#: src/lang.c:1717
 msgid	"Regex used to highlight -strokes-"
 msgstr	"Reg. für -Durchstr.- Hervorhebungen"
 
-#: src/lang.c:1707
+#: src/lang.c:1718
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '-' are to be shown in col_markstroke.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5043,15 +5122,15 @@ msgstr	"# Ein regulärer Ausdruck, der en
 	"# zwischen '-' in col_markstroke angezeigt werden.\n"
 	"# Wenn Sie hier nichts eingeben, werden die Voreinstellungen benutzt.\n"
 
-#: src/lang.c:1713
+#: src/lang.c:1724
 msgid	"A regex used to decide which words to show in col_markdash."
 msgstr	"Regulärer Ausdruck für Zeilen, die mit col_markdash dargestellt werden."
 
-#: src/lang.c:1714
+#: src/lang.c:1725
 msgid	"Regex used to highlight _underline_"
 msgstr	"Reg. für _Unterstr._ Hervorhebungen"
 
-#: src/lang.c:1715
+#: src/lang.c:1726
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '_' are to be shown in col_markdash.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5059,44 +5138,44 @@ msgstr	"# Ein regulärer Ausdruck, der en
 	"# zwischen '_' in col_markdash angezeigt werden.\n"
 	"# Wenn Sie hier nichts eingeben, werden die Voreinstellungen benutzt.\n"
 
-#: src/lang.c:1721
+#: src/lang.c:1732
 msgid	"A regex used to find Subject prefixes to remove.  Use '|' as separator."
 msgstr	"Reg. Ausd., um Teile im Subjectanfang zu entfernen. '|' trennt die Ausd.."
 
-#: src/lang.c:1722
+#: src/lang.c:1733
 msgid	"Regex with Subject prefixes"
 msgstr	"Reg. Ausd. für den Subjectanfang"
 
-#: src/lang.c:1723
+#: src/lang.c:1734
 msgid	"# A regular expression that tin will use to find Subject prefixes\n"
 	"# which will be removed before showing the header.\n"
 msgstr	"# Ein regulärer Ausdruck, mit dem tin Worte im Anfang des Subjects findet,\n"
 	"# die dann entfernt werden.\n"
 
-#: src/lang.c:1728
+#: src/lang.c:1739
 msgid	"A regex used to find Subject suffixes to remove.  Use '|' as separator."
 msgstr	"Reg. Ausd., um Teile am Subjectanfang zu entfernen. '|' trennt die Ausd.."
 
-#: src/lang.c:1729
+#: src/lang.c:1740
 msgid	"Regex with Subject suffixes"
 msgstr	"Reg. Ausd. für das Subjectende"
 
-#: src/lang.c:1730
+#: src/lang.c:1741
 msgid	"# A regular expression that tin will use to find Subject suffixes\n"
 	"# which will be removed when replying or posting followup.\n"
 msgstr	"# Ein regulärer Ausdruck, der beim Antworten zum Abschneiden von\n"
 	"# unerwünschten Teilen am Ende des Subjects verwendet wird.\n"
 
-#: src/lang.c:1735
+#: src/lang.c:1746
 msgid	"Enter name and options for external MIME viewer, --internal for built-in "
 	"viewer"
 msgstr	"Name und Optionen für ext. MIME-Viewer, --internal für eingebaute Version"
 
-#: src/lang.c:1736
+#: src/lang.c:1747
 msgid	"MIME binary content viewer"
 msgstr	"MIME-Viewer"
 
-#: src/lang.c:1737
+#: src/lang.c:1748
 msgid	"# If --internal automatically use the built in MIME viewer for non-text\n"
 	"# parts of articles.\n"
 	"# Otherwise specify an external viewer program (eg, metamail) or leave blank\n"
@@ -5105,51 +5184,51 @@ msgstr	"# Falls --internal wird der eing
 	"# nicht Text teilen benutzt. Andernfalls das angegebene Programm\n"
 	"# (z.B. metamail). Keine Angabe schaltet die automatische Anzeige aus.\n"
 
-#: src/lang.c:1744
+#: src/lang.c:1755
 msgid	"Confirm before starting non-text viewing program"
 msgstr	"Start des MIME-Viewers bestätigen"
 
-#: src/lang.c:1745
+#: src/lang.c:1756
 msgid	"Ask before using MIME viewer"
 msgstr	"Start des MIME-Viewers bestätigen"
 
-#: src/lang.c:1746
+#: src/lang.c:1757
 msgid	"# If ON tin will ask before using metamail to display MIME messages\n"
 	"# this only happens if metamail_prog is set to something\n"
 msgstr	"# Falls ON fragt tin nach, bevor metamail zum Anzeigen von MIME Artikeln\n"
 	"# benutzt wird. Das passiert nur, wenn auch metamail_prog gesetzt ist.\n"
 
-#: src/lang.c:1751
+#: src/lang.c:1762
 msgid	"Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
 msgstr	"Beim Beenden anbieten, alle betretenen Gruppen als gelesen zu markieren?"
 
-#: src/lang.c:1752
+#: src/lang.c:1763
 msgid	"Catchup read groups when quitting"
 msgstr	"Aufholen der Gruppen beim Beenden"
 
-#: src/lang.c:1753
+#: src/lang.c:1764
 msgid	"# If ON ask user if read groups should all be marked read\n"
 msgstr	"# Falls ON: Beim Beenden von tin anbieten, alle betretenen Gruppen\n"
 	"#           als gelesen zu markieren\n"
 
-#: src/lang.c:1758
+#: src/lang.c:1769
 msgid	"Catchup group using left key"
 msgstr	"Catchup der Gruppe mit l. Cursor"
 
-#: src/lang.c:1759
+#: src/lang.c:1770
 msgid	"# If ON catchup group/thread when leaving with the left arrow key.\n"
 msgstr	"# Falls ON: Aufholen (als gelesen markieren) der Gruppe/des Threads\n"
 	"#           beim Verlassen mit der linken Cursortaste\n"
 
-#: src/lang.c:1764
+#: src/lang.c:1775
 msgid	"Catchup thread by using left key"
 msgstr	"Catchup mit der linken Cursort."
 
-#: src/lang.c:1770
+#: src/lang.c:1781
 msgid	"Which actions require confirmation"
 msgstr	"Bestätigung erforderlich für"
 
-#: src/lang.c:1771
+#: src/lang.c:1782
 msgid	"# What should we ask confirmation for.\n"
 msgstr	"# Welche Operationen müssen explizit bestätigt werden.\n"
 	"# Kommandos, die im Manual mit [after confirmation] markiert sind,\n"
@@ -5157,79 +5236,79 @@ msgstr	"# Welche Operationen müssen expl
 	"# gelesen (siehe 'X' Befehl im Manual).\n"
 
 # TRANSLATION TOO LONG
-#: src/lang.c:1776
+#: src/lang.c:1787
 msgid	"'Mark article read' ignores tags"
 msgstr	"'Artikel gelesen markieren' ignoriert Markierte"
 
-#: src/lang.c:1777
+#: src/lang.c:1788
 msgid	"# If ON the 'Mark article read' function marks only the current article.\n"
 msgstr	"# Falls ON wird mit der Funktion 'Artikel als gelesen markieren' nur\n"
 	"# der jeweilige Artikel markiert.\n"
 
-#: src/lang.c:1781
+#: src/lang.c:1792
 msgid	"Program to run to open URL's, <CR> sets, <ESC> cancels."
 msgstr	"Öffne URLs mit ... <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:1782
+#: src/lang.c:1793
 msgid	"Program that opens URL's"
 msgstr	"Öffne URLs mit ..."
 
-#: src/lang.c:1783
+#: src/lang.c:1794
 msgid	"# The program used to open URL's. The actual URL will be appended\n"
 msgstr	"# Programm zum Öffnen von URLs, die jeweilige URL wird hinten angehängt.\n"
 
-#: src/lang.c:1788
+#: src/lang.c:1799
 msgid	"Use mouse in xterm"
 msgstr	"Maus in xterm nutzen"
 
-#: src/lang.c:1789
+#: src/lang.c:1800
 msgid	"# If ON enable mouse key support on xterm terminals\n"
 msgstr	"# Falls ON wird die Maustastenunterstützung für xterm aktiviert\n"
 
-#: src/lang.c:1795
+#: src/lang.c:1806
 msgid	"Use scroll keys on keypad"
 msgstr	"Scrollt. vom Nummernblock nutzen"
 
-#: src/lang.c:1796
+#: src/lang.c:1807
 msgid	"# If ON enable scroll keys on terminals that support it\n"
 msgstr	"# Falls ON werden die Scrolltasten genutzt (Terminalabhängig)\n"
 
-#: src/lang.c:1801
+#: src/lang.c:1812
 msgid	"Enter maximum number of article to get. <CR> sets."
 msgstr	"Maximale Anzahl der zu holenden Artikel eingeben. <CR> setzt."
 
-#: src/lang.c:1802
+#: src/lang.c:1813
 msgid	"Number of articles to get"
 msgstr	"Anzahl der zu holenden Artikel"
 
-#: src/lang.c:1803
+#: src/lang.c:1814
 msgid	"# Number of articles to get (0=no limit), if negative sets maximum number\n"
 	"# of already read articles to be read before first unread one\n"
 msgstr	"# Anzahl der zu holenden Artikel (0=unbegrenzt), falls ein negativer Wert\n"
 	"# angegeben wird, holt tin alle ungelesenen plus die letzten n gelesenen\n"
 	"# Artikel\n"
 
-#: src/lang.c:1808
+#: src/lang.c:1819
 msgid	"Enter number of days article is considered recent. <CR> sets."
 msgstr	"Anzahl der Tage, die ein Artikel als neu eingestuft wird. <CR> setzt."
 
-#: src/lang.c:1809
+#: src/lang.c:1820
 msgid	"Article recentness time limit"
 msgstr	"Artikel Neuheitszeit-Limit"
 
-#: src/lang.c:1810
+#: src/lang.c:1821
 msgid	"# Number of days in which article is considered recent, (0=OFF)\n"
 msgstr	"# Anzahl der Tage, die ein Artikel als neu eingestuft wird, (0=Aus)\n"
 
-#: src/lang.c:1814
+#: src/lang.c:1825
 msgid	"WILDMAT for normal wildcards, REGEX for full regular expression matching."
 msgstr	"WILDMAT für normale Wildcards, REGEX für die Nutzung von regulären Ausdrücken."
 
-#: src/lang.c:1815
+#: src/lang.c:1826
 msgid	"Wildcard matching"
 msgstr	"Wildcardprüfung"
 
-#: src/lang.c:1816
+#: src/lang.c:1827
 msgid	"# Wildcard matching\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = wildmat\n"
@@ -5239,310 +5318,310 @@ msgstr	"# Wildcardprüfung\n"
 	"# * 0 = wildmat\n"
 	"#   1 = Regulärer Ausdruck\n"
 
-#: src/lang.c:1823
+#: src/lang.c:1834
 msgid	"Enter minimal score before an article is marked killed. <CR> sets."
 msgstr	"Artikel mit weniger Bewertung (Score) werden als `gekillt' markiert. <CR> "
 	"setzt."
 
-#: src/lang.c:1824
+#: src/lang.c:1835
 msgid	"Score limit (kill)"
 msgstr	"Bewertungsgrenze (kill)"
 
-#: src/lang.c:1825
+#: src/lang.c:1836
 msgid	"# Score limit before an article is marked killed\n"
 msgstr	"# Jeder Artikel mit einer niedrigeren Bewertung (Score) wird als\n"
 	"# gekillt markiert\n"
 
-#: src/lang.c:1829
+#: src/lang.c:1840
 msgid	"Enter default score to kill articles. <CR> sets."
 msgstr	"Bewertung für gekillte Artikel. <CR> setzt."
 
-#: src/lang.c:1830
+#: src/lang.c:1841
 msgid	"Default score to kill articles"
 msgstr	"Bewertung für gekillte Artikel"
 
-#: src/lang.c:1831
+#: src/lang.c:1842
 msgid	"# Default score to kill articles\n"
 msgstr	"# Bewertung für gekillte Artikel\n"
 
-#: src/lang.c:1835
+#: src/lang.c:1846
 msgid	"Enter minimal score before an article is marked hot. <CR> sets."
 msgstr	"Artikel mit einer höheren Bewertung (Score) werd. als wichtig/hot markiert."
 
-#: src/lang.c:1836
+#: src/lang.c:1847
 msgid	"Score limit (select)"
 msgstr	"Bewertungsgrenze (select)"
 
-#: src/lang.c:1837
+#: src/lang.c:1848
 msgid	"# Score limit before an article is marked hot\n"
 msgstr	"# Artikel mit einer höheren Bewertung (Score) werden als\n"
 	"# wichtig (hot) markiert\n"
 
-#: src/lang.c:1841
+#: src/lang.c:1852
 msgid	"Enter default score to select articles. <CR> sets."
 msgstr	"Bewertung für wichtige Artikel (hot). <CR> setzt."
 
-#: src/lang.c:1842
+#: src/lang.c:1853
 msgid	"Default score to select articles"
 msgstr	"Bewertung für wichtige Artikel"
 
-#: src/lang.c:1843
+#: src/lang.c:1854
 msgid	"# Default score to select articles\n"
 msgstr	"# Bewertung für wichtige Artikel (hot)\n"
 
-#: src/lang.c:1849
+#: src/lang.c:1860
 msgid	"Use slrnface to show ''X-Face:''s"
 msgstr	"''X-Face:''s mit slrnface Anzeigen"
 
-#: src/lang.c:1850
+#: src/lang.c:1861
 msgid	"# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
 	"# Only useful when running in an xterm.\n"
 msgstr	"# Falls ON benutze slrnface(1) um ''X-Face:'' anzuzeigen.\n"
 	"# Funktioniert nur wenn tin in einem xterm läuft.\n"
 
-#: src/lang.c:1858
+#: src/lang.c:1869
 msgid	"Use ANSI color"
 msgstr	"Benutze ANSI-Farben"
 
-#: src/lang.c:1859
+#: src/lang.c:1870
 msgid	"# If ON using ANSI-color\n"
 msgstr	"# Falls ON benutze ANSI-Farben\n"
 
-#: src/lang.c:1864
+#: src/lang.c:1875
 msgid	"Standard foreground color"
 msgstr	"Standard Vordergrundfarbe"
 
-#: src/lang.c:1865
+#: src/lang.c:1876
 msgid	"# Standard foreground color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standard Vordergrundfarbe\n"
 	"# Voreinstellung: -1 (Standard Farbe)\n"
 
-#: src/lang.c:1871
+#: src/lang.c:1882
 msgid	"Standard background color"
 msgstr	"Standard Hintergrundfarbe"
 
-#: src/lang.c:1872
+#: src/lang.c:1883
 msgid	"# Standard background color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standard Hintergrundfarbe\n"
 	"# Voreinstellung: -1 (Standard Farbe)\n"
 
-#: src/lang.c:1878
+#: src/lang.c:1889
 msgid	"Color for inverse text (background)"
 msgstr	"Farbe des inversen Text (Hinterg.)"
 
-#: src/lang.c:1879
+#: src/lang.c:1890
 msgid	"# Color of background for inverse text\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Farbe des Hintergrunds für inversen Text\n"
 	"# Voreinstellung: 4 (blau)\n"
 
-#: src/lang.c:1885
+#: src/lang.c:1896
 msgid	"Color for inverse text (foreground)"
 msgstr	"Farbe des inversen Text (Vordergr.)"
 
-#: src/lang.c:1886
+#: src/lang.c:1897
 msgid	"# Color of foreground for inverse text\n"
 	"# Default: 7 (white)\n"
 msgstr	"# Farbe des Vordergrunds für inversen Text\n"
 	"# Voreinstellung: 7 (weiß)\n"
 
-#: src/lang.c:1892
+#: src/lang.c:1903
 msgid	"Color of text lines"
 msgstr	"Farbe der Textzeilen"
 
-#: src/lang.c:1893
+#: src/lang.c:1904
 msgid	"# Color of text lines\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Farbe der Textzeilen\n"
 	"# Voreinstellung: -1 (Standard Farbe)\n"
 
-#: src/lang.c:1899
+#: src/lang.c:1910
 msgid	"Color of mini help menu"
 msgstr	"Farbe des Minihilfemenü"
 
-#: src/lang.c:1900
+#: src/lang.c:1911
 msgid	"# Color of mini help menu\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Farbe des Minihilfemenü\n"
 	"# Voreinstellung: 3 (braun)\n"
 
-#: src/lang.c:1906
+#: src/lang.c:1917
 msgid	"Color of help text"
 msgstr	"Farbe des Hilfstext"
 
-#: src/lang.c:1907
+#: src/lang.c:1918
 msgid	"# Color of help pages\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Farbe der Hilfsseiten\n"
 	"# Voreinstellung: -1 (Standard Farbe)\n"
 
-#: src/lang.c:1913
+#: src/lang.c:1924
 msgid	"Color of status messages"
 msgstr	"Farbe der Statusmeldungen"
 
-#: src/lang.c:1914
+#: src/lang.c:1925
 msgid	"# Color of messages in last line\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Farbe der letzten Zeile im Artikel\n"
 	"# Voreinstellung: 6 (cyan)\n"
 
-#: src/lang.c:1920
+#: src/lang.c:1931
 msgid	"Color of quoted lines"
 msgstr	"Farbe der zitierten Zeilen"
 
-#: src/lang.c:1921
+#: src/lang.c:1932
 msgid	"# Color of quote-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Farbe der zitierten Zeilen\n"
 	"# Voreinstellung: 2 (grün)\n"
 
-#: src/lang.c:1927
+#: src/lang.c:1938
 msgid	"Color of twice quoted line"
 msgstr	"Farbe von zweifach zitierten Zeilen"
 
-#: src/lang.c:1928
+#: src/lang.c:1939
 msgid	"# Color of twice quoted lines\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Farbe von zweifach zitierten Zeilen\n"
 	"# Voreinstellung: 3 (braun)\n"
 
-#: src/lang.c:1934
+#: src/lang.c:1945
 msgid	"Color of =>3 times quoted line"
 msgstr	"Farbe von =>3-fach zitierten Zeilen"
 
-#: src/lang.c:1935
+#: src/lang.c:1946
 msgid	"# Color of >=3 times quoted lines\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Farbe von =>3-fach zitierten Zeilen\n"
 	"# Voreinstellung: 4 (blau)\n"
 
-#: src/lang.c:1941
+#: src/lang.c:1952
 msgid	"Color of article header lines"
 msgstr	"Farbe der Artikelheaderzeilen"
 
-#: src/lang.c:1942
+#: src/lang.c:1953
 msgid	"# Color of header-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Farbe der Artikelheaderzeilen\n"
 	"# Voreinstellung: 2 (grün)\n"
 
-#: src/lang.c:1948
+#: src/lang.c:1959
 msgid	"Color of actual news header fields"
 msgstr	"Farbe des angezeigten Headers"
 
-#: src/lang.c:1949
+#: src/lang.c:1960
 msgid	"# Color of actual news header fields\n"
 	"# Default: 9 (light red)\n"
 msgstr	"# Farbe des angezeigten Headers\n"
 	"# Voreinstellung: 9 (hellrot)\n"
 
-#: src/lang.c:1955
+#: src/lang.c:1966
 msgid	"Color of article subject lines"
 msgstr	"Farbe der Subjectzeile"
 
-#: src/lang.c:1956
+#: src/lang.c:1967
 msgid	"# Color of article subject\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Farbe der Subjectzeile\n"
 	"# Voreinstellung: 6 (cyan)\n"
 
-#: src/lang.c:1962
+#: src/lang.c:1973
 msgid	"Color of response counter"
 msgstr	"Farbe des Antwortzählers"
 
-#: src/lang.c:1963
+#: src/lang.c:1974
 msgid	"# Color of response counter\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Farbe des Antwortzählers\n"
 	"# Voreinstellung: 2 (grün)\n"
 
-#: src/lang.c:1969
+#: src/lang.c:1980
 msgid	"Color of sender (From:)"
 msgstr	"Farbe des Autors (From:)"
 
-#: src/lang.c:1970
+#: src/lang.c:1981
 msgid	"# Color of sender (From:)\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Farbe des Autors (From:)\n"
 	"# Voreinstellung: 2 (grün)\n"
 
-#: src/lang.c:1976
+#: src/lang.c:1987
 msgid	"Color of help/mail sign"
 msgstr	"Farbe des Hilfe/Mail-Zeichen"
 
-#: src/lang.c:1977
+#: src/lang.c:1988
 msgid	"# Color of Help/Mail-Sign\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Farbe des Hilfe/Mail-Zeichen\n"
 	"# Voreinstellung: 4 (blau)\n"
 
-#: src/lang.c:1983
+#: src/lang.c:1994
 msgid	"Color of signatures"
 msgstr	"Farbe von Signaturen"
 
-#: src/lang.c:1984
+#: src/lang.c:1995
 msgid	"# Color of signature\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Farbe von Signaturen\n"
 	"# Voreinstellung: 4 (blau)\n"
 
-#: src/lang.c:1990
+#: src/lang.c:2001
 msgid	"Color of highlighted URLs"
 msgstr	"Farbe der hervorgehobenen URLs"
 
-#: src/lang.c:1991
+#: src/lang.c:2002
 msgid	"# Color of highlighted URLs\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Farbe der hervorgehobenen URLs\n"
 	"# Voreinstellung: -1 (Standard Farbe)\n"
 
-#: src/lang.c:1997
+#: src/lang.c:2008
 msgid	"Color of highlighting with *stars*"
 msgstr	"Farbe der Hervorhebung *Sterne*"
 
-#: src/lang.c:1998
+#: src/lang.c:2009
 msgid	"# Color of word highlighting with *stars*\n"
 	"# Default: 11 (yellow)\n"
 msgstr	"# Farbe der Hervorhebung durch *Sterne*\n"
 	"# Voreinstellung: 11 (gelb)\n"
 
-#: src/lang.c:2004
+#: src/lang.c:2015
 msgid	"Color of highlighting with _dash_"
 msgstr	"Farbe der Hervorhebung _Striche_"
 
-#: src/lang.c:2005
+#: src/lang.c:2016
 msgid	"# Color of word highlighting with _dash_\n"
 	"# Default: 13 (light pink)\n"
 msgstr	"# Farbe der Hervorhebung durch _Striche_\n"
 	"# Voreinstellung: 13 (hellrosa)\n"
 
-#: src/lang.c:2011
+#: src/lang.c:2022
 msgid	"Color of highlighting with /slash/"
 msgstr	"Farbe der Hervorhebung /Schrägstr./"
 
-#: src/lang.c:2012
+#: src/lang.c:2023
 msgid	"# Color of word highlighting with /slash/\n"
 	"# Default: 14 (light cyan)\n"
 msgstr	"# Farbe der Hervorhebung durch /Schrägstriche/\n"
 	"# Voreinstellung: 11 (hellcyan)\n"
 
-#: src/lang.c:2018
+#: src/lang.c:2029
 msgid	"Color of highlighting with -stroke-"
 msgstr	"Farbe der Hervorhebung -Durchstr.-"
 
-#: src/lang.c:2019
+#: src/lang.c:2030
 msgid	"# Color of word highlighting with -stroke-\n"
 	"# Default: 12 (light blue)\n"
 msgstr	"# Farbe der Hervorhebung durch -Durchstreichen-\n"
 	"# Voreinstellung: 12 (hellblau)\n"
 
-#: src/lang.c:2026
+#: src/lang.c:2037
 msgid	"Attr. of highlighting with *stars*"
 msgstr	"Hervorhebungsattribute *Sterne*"
 
-#: src/lang.c:2027
+#: src/lang.c:2038
 msgid	"# Attributes of word highlighting on mono terminals\n"
 	"# Possible values are:\n"
 	"#   0 = Normal\n"
@@ -5568,57 +5647,57 @@ msgstr	"# Attribute der Hervorhebung von
 	"# Hervorhebungsattribut für *Sterne*\n"
 	"# Voreinstellung: 6 (fett)\n"
 
-#: src/lang.c:2042
+#: src/lang.c:2053
 msgid	"Attr. of highlighting with _dash_"
 msgstr	"Hervorhebungsattr. _Unterstriche_"
 
-#: src/lang.c:2043
+#: src/lang.c:2054
 msgid	"# Attribute of word highlighting with _dash_\n"
 	"# Default: 2 (best highlighting)\n"
 msgstr	"# Hervorhebungsattribut für _Unterstriche_\n"
 	"# Voreinstellung: 2 (beste Hervorhebung)\n"
 
-#: src/lang.c:2049
+#: src/lang.c:2060
 msgid	"Attr. of highlighting with /slash/"
 msgstr	"Hervorhebungsattr. /Schrägstriche/"
 
-#: src/lang.c:2050
+#: src/lang.c:2061
 msgid	"# Attribute of word highlighting with /slash/\n"
 	"# Default: 5 (half bright)\n"
 msgstr	"# Hervorhebungsattribut für /Schrägstriche/\n"
 	"# Voreinstellung: 5 (halbe Helligkeit)\n"
 
-#: src/lang.c:2056
+#: src/lang.c:2067
 msgid	"Attr. of highlighting with -stroke-"
 msgstr	"Hervorhebungsattr. -Durchstreich.-"
 
-#: src/lang.c:2057
+#: src/lang.c:2068
 msgid	"# Attribute of word highlighting with -stroke-\n"
 	"# Default: 3 (reverse video)\n"
 msgstr	"# Hervorhebungsattribut für -Durchstreichen-\n"
 	"# Voreinstellung: 3 (Invers)\n"
 
-#: src/lang.c:2063
+#: src/lang.c:2074
 msgid	"URL highlighting in message body"
 msgstr	"URL-Hervorhebung im Artikel"
 
-#: src/lang.c:2064
+#: src/lang.c:2075
 msgid	"# Enable URL highlighting?\n"
 msgstr	"# URL-Hervorhebung aktivieren?\n"
 
-#: src/lang.c:2069
+#: src/lang.c:2080
 msgid	"Word highlighting in message body"
 msgstr	"Wort-Hervorhebung im Artikel"
 
-#: src/lang.c:2070
+#: src/lang.c:2081
 msgid	"# Enable word highlighting?\n"
 msgstr	"# Wort-Hervorhebung aktivieren?\n"
 
-#: src/lang.c:2075
+#: src/lang.c:2086
 msgid	"What to display instead of mark"
 msgstr	"Anstelle der Markierung anzeigen"
 
-#: src/lang.c:2076
+#: src/lang.c:2087
 msgid	"# Should the leading and ending stars and dashes also be displayed,\n"
 	"# even when they are highlighting marks?\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -5632,59 +5711,59 @@ msgstr	"# Sollen die führenden und absch
 	"#   1 = ja, anzeigen\n"
 	"# * 2 = Leerzeichen anstelle darstellen\n"
 
-#: src/lang.c:2085
+#: src/lang.c:2096
 msgid	"Enter column number to wrap article lines to in the pager. <CR> sets."
 msgstr	"Nach wie vielen Zeichen soll im Pager umbrochen werden? <CR> setzt."
 
-#: src/lang.c:2086
+#: src/lang.c:2097
 msgid	"Page line wrap column"
 msgstr	"Zeilen umbrechen nach"
 
-#: src/lang.c:2087
+#: src/lang.c:2098
 msgid	"# Wrap article lines at column\n"
 msgstr	"# In der Artikelanzeige Zeilen umbrechen bei Spalte\n"
 
-#: src/lang.c:2092
+#: src/lang.c:2103
 msgid	"Wrap around threads on next unread"
 msgstr	"Nä.ungel.-kein Abbr. am Listenende?"
 
-#: src/lang.c:2093
+#: src/lang.c:2104
 msgid	"# If ON wrap around threads on searching next unread article\n"
 msgstr	"# Diverse Funktionen in tin wechseln zum \"nächsten\" ungelesenen\n"
 	"# Artikel. Diese Einstellung kontrolliert, ob tin am Ende der\n"
 	"# Artikel/Threadliste abbricht (OFF) oder zum Beginn derselben springt und\n"
 	"# von dort aus den nächsten ungelesenen Artikel sucht. (ON)\n"
 
-#: src/lang.c:2097
+#: src/lang.c:2108
 msgid	"Enter default mail address (and fullname). <CR> sets."
 msgstr	"Standard Mail-Adresse (und Name) eingeben. <CR> setzt."
 
-#: src/lang.c:2098
+#: src/lang.c:2109
 msgid	"Mail address (and fullname)"
 msgstr	"Mailadresse (und Name)"
 
-#: src/lang.c:2099
+#: src/lang.c:2110
 msgid	"# User's mail address (and fullname), if not username@host (fullname)\n"
 msgstr	"# EMail-Adresse und vollständiger Name des Benutzers, wenn sie nicht\n"
 	"# benutzername@host (Vollständiger Name) lautet\n"
 
-#: src/lang.c:2104
+#: src/lang.c:2115
 msgid	"Show empty Followup-To in editor"
 msgstr	"Leeres Fup'2 im Editor anzeigen"
 
-#: src/lang.c:2105
+#: src/lang.c:2116
 msgid	"# If ON show empty Followup-To header when editing an article\n"
 msgstr	"# Wenn ON, zeige leeren Followup-To:-Header im Editor\n"
 
-#: src/lang.c:2109
+#: src/lang.c:2120
 msgid	"Enter path/! command/--none to create your default signature. <CR> sets."
 msgstr	"Setze Pfad/! Kommando/--none um ihre Signatur festzulegen. <CR> setzt."
 
-#: src/lang.c:2110
+#: src/lang.c:2121
 msgid	"Create signature from path/command"
 msgstr	"Erzeuge Signatur aus Pfad/Kommando"
 
-#: src/lang.c:2111
+#: src/lang.c:2122
 msgid	"# Signature path (random sigs)/file to be used when posting/replying\n"
 	"# default_sigfile=file       appends file as signature\n"
 	"# default_sigfile=!command   executes external command to generate a "
@@ -5695,49 +5774,51 @@ msgstr	"# Pfad der Sig (Zufällige Sigs)/
 	"# default_sigfile=!Kommando führt Kommando aus um Sig zu erzeugen\n"
 	"# default_sigfile=--none    hängt keine Signatur an\n"
 
-#: src/lang.c:2118
+#: src/lang.c:2129
 msgid	"Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
 msgstr	"Trenne Sig mit \"-- \" in eigener Zeile ab. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2119
+#: src/lang.c:2130
 msgid	"Prepend signature with \"-- \""
 msgstr	"Trenne Sig mit \"-- \" ab"
 
-#: src/lang.c:2120
+#: src/lang.c:2131
 msgid	"# If ON prepend the signature with dashes '\\n-- \\n'\n"
 msgstr	"# Falls ON trenne Signatur mit '\\n-- \\n' ab\n"
 
-#: src/lang.c:2124
+#: src/lang.c:2135
 msgid	"Add signature when reposting articles. <SPACE> toggles & <CR> sets."
 msgstr	"Sig. beim Reposten eines Artikels hinzufügen? <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2125
+#: src/lang.c:2136
 msgid	"Add signature when reposting"
 msgstr	"Signatur beim Reposten anhängen"
 
-#: src/lang.c:2126
+#: src/lang.c:2137
 msgid	"# If ON add signature to reposted articles\n"
 msgstr	"# Falls ON wird die Signatur auch an repostete Artikel angehängt.\n"
 
-#: src/lang.c:2130
+#: src/lang.c:2141
+#, c-format
 msgid	"Enter quotation marks, %s or %S for author's initials."
 msgstr	"Zitatzeichen eingeben, %s oder %S für die Initialen des Verfassers."
 
-#: src/lang.c:2131
+#: src/lang.c:2142
 msgid	"Characters used as quote-marks"
 msgstr	"Zitatzeichen"
 
-#: src/lang.c:2132
+#: src/lang.c:2143
+#, c-format
 msgid	"# Characters used in quoting to followups and replies.\n"
 	"# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
 msgstr	"# Zeichen für Zitate in Antworten.\n"
 	"# '_' wird durch ' ' ersetzt. %%s, %%S wird ersetzt durch Autoreninitialen.\n"
 
-#: src/lang.c:2138
+#: src/lang.c:2149
 msgid	"Quoting behavior"
 msgstr	"Zitierverhalten"
 
-#: src/lang.c:2139
+#: src/lang.c:2150
 msgid	"# How quoting should be handled when following up or replying.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = Nothing special\n"
@@ -5760,15 +5841,16 @@ msgstr	"# Spezielle Optionen beim Zitier
 	"#   7 = Zitatzeichen zusammenziehen & Signaturen zitieren & Leerzeilen "
 	"zitieren\n"
 
-#: src/lang.c:2152 src/lang.c:2160 src/lang.c:2166
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
 msgid	"%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
 msgstr	"%A Adr %D Datum %F Adr+Name %G Gruppenname %M Message-ID %N Name %C Vorname"
 
-#: src/lang.c:2153
+#: src/lang.c:2164
 msgid	"Quote line when following up"
 msgstr	"Einleitungszeile beim Antworten"
 
-#: src/lang.c:2154
+#: src/lang.c:2165
+#, c-format
 msgid	"# Format of quote line when mailing/posting/following-up an article\n"
 	"# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
 	"# %%N Full Name  %%C First Name   %%I Initials\n"
@@ -5776,35 +5858,35 @@ msgstr	"# Format der Einleitungszeile be
 	"# %%A Adresse  %%D Datum  %%F Adr+Name  %%G Gruppenname  %%M Message-ID\n"
 	"# %%N Voller Name  %%C Vorname  %%I Initialen\n"
 
-#: src/lang.c:2161
+#: src/lang.c:2172
 msgid	"Quote line when cross-posting"
 msgstr	"Einleitungszeile beim Crossposten"
 
-#: src/lang.c:2167
+#: src/lang.c:2178
 msgid	"Quote line when mailing"
 msgstr	"Einleitungszeile bei Mailantwort"
 
-#: src/lang.c:2172
+#: src/lang.c:2183
 msgid	"If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
 msgstr	"Falls ON, füge User-Agent:-Header ein. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2173
+#: src/lang.c:2184
 msgid	"Insert 'User-Agent:'-header"
 msgstr	"Füge 'User-Agent:'-header ein"
 
-#: src/lang.c:2174
+#: src/lang.c:2185
 msgid	"# If ON include advertising User-Agent: header\n"
 msgstr	"# Falls ON füge 'User-Agent: header' ein\n"
 
-#: src/lang.c:2179
+#: src/lang.c:2190
 msgid	"Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
 msgstr	"Zeichensatz für MIME (z.B. US-ASCII, ISO-8859-1, EUC-KR), <CR> setzt."
 
-#: src/lang.c:2180
+#: src/lang.c:2191
 msgid	"MM_CHARSET"
 msgstr	"MM_CHARSET"
 
-#: src/lang.c:2181
+#: src/lang.c:2192
 msgid	"# Charset supported locally which is also used for MIME header and\n"
 	"# Content-Type header.\n"
 	"# If not set, the value of the environment variable MM_CHARSET is used.\n"
@@ -5821,27 +5903,27 @@ msgstr	"# Der lokale Zeichensatz, der au
 	"# definiert, werden andere Zeichensätze als mm_charset nicht dargestellt\n"
 	"# und die jeweiligen Zeichen durch ein '?' ersetzt.\n"
 
-#: src/lang.c:2191
+#: src/lang.c:2202
 msgid	"MM_NETWORK_CHARSET"
 msgstr	"MM_NETWORK_CHARSET"
 
-#: src/lang.c:2192
+#: src/lang.c:2203
 msgid	"# Charset used for MIME (Content-Type) header in postings.\n"
 msgstr	"# Zeichensatz für den MIME (Content-Type) Header der Artikel.\n"
 
-#: src/lang.c:2198
+#: src/lang.c:2209
 msgid	"Mailbox format"
 msgstr	"Mailbox-Format"
 
-#: src/lang.c:2199
+#: src/lang.c:2210
 msgid	"# Format of the mailbox.\n"
 msgstr	"# Format der Mailbox.\n"
 
-#: src/lang.c:2204
+#: src/lang.c:2215
 msgid	"MIME encoding in news messages"
 msgstr	"MIME-Kodierung in Newsartikeln"
 
-#: src/lang.c:2205
+#: src/lang.c:2216
 msgid	"# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
 	"# for mails and posts, if necessary. QP is efficient for most European\n"
 	"# character sets (ISO-8859-X) with small fraction of non-US-ASCII chars,\n"
@@ -5855,15 +5937,15 @@ msgstr	"# MIME-Kodierung (8bit, base64, 
 	"# die meisten 8Bit Zeichensätze aus Ostasien, Griechenland und Russland\n"
 	"# ist, da dort gehäuft 8Bit Zeichen vorkommen.\n"
 
-#: src/lang.c:2213 src/lang.c:2234
+#: src/lang.c:2224 src/lang.c:2245
 msgid	"Don't change unless you know what you are doing. <ESC> cancels."
 msgstr	"Nur ändern, wenn Sie genau wissen, was Sie machen. <ESC> bricht ab."
 
-#: src/lang.c:2214
+#: src/lang.c:2225
 msgid	"Use 8bit characters in news headers"
 msgstr	"Benutze 8bit-Zeichen im Newsheader"
 
-#: src/lang.c:2215
+#: src/lang.c:2226
 msgid	"# If ON, 8bit characters in news headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in header are encoded regardless of the value of this\n"
@@ -5875,27 +5957,27 @@ msgstr	"# Wenn ON werden 8-Bit-Zeichen (
 	"# kodiert, wenn post_mime_encoding nicht auch auf 8bit eingestellt\n"
 	"# ist.\n"
 
-#: src/lang.c:2222
+#: src/lang.c:2233
 msgid	"Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Nachbearbeitete Artikel autom. anz. <SPACE> wechselt, <CR> setzt, <ESC> Ende."
 
-#: src/lang.c:2223
+#: src/lang.c:2234
 msgid	"View post-processed files"
 msgstr	"Nachbearbeitete Artikel anzeigen"
 
-#: src/lang.c:2224
+#: src/lang.c:2235
 msgid	"# If set, post processed files will be opened in a viewer\n"
 msgstr	"# Wenn ON werden nachbearbeitete Artikel automatisch angezeigt.\n"
 
-#: src/lang.c:2229
+#: src/lang.c:2240
 msgid	"MIME encoding in mail messages"
 msgstr	"MIME-Kodierung für E-Mails"
 
-#: src/lang.c:2235
+#: src/lang.c:2246
 msgid	"Use 8bit characters in mail headers"
 msgstr	"Benutze 8bit Zeichen im Mail Header"
 
-#: src/lang.c:2236
+#: src/lang.c:2247
 msgid	"# If ON, 8bit characters in mail headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in headers are encoded regardless of the value of this "
@@ -5912,24 +5994,24 @@ msgstr	"# Wenn ON werden 8-Bit-Zeichen (
 	"# E-Mailheadern verbieten, daher sollte diese Einstellung NICHT auf ON\n"
 	"# geändert werden, wenn es keine zwingende Gründe dafür gibt.\n"
 
-#: src/lang.c:2246
+#: src/lang.c:2257
 msgid	"Strip blanks from ends of lines"
 msgstr	"Leerzeichen am Zeilenende entfernen"
 
-#: src/lang.c:2247
+#: src/lang.c:2258
 msgid	"# If ON strip blanks from ends of lines for faster display on slow "
 	"terminals.\n"
 msgstr	"# Falls ON lösche Leerzeichen am Zeilenende; verbessert die Geschwindigkeit\n"
 
-#: src/lang.c:2252
+#: src/lang.c:2263
 msgid	"If ON, use transliteration. <SPACE> toggles & <CR> sets."
 msgstr	"Wenn ON verwende Umschreibungen. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2253
+#: src/lang.c:2264
 msgid	"Transliteration"
 msgstr	"Verwende Umschreibungen"
 
-#: src/lang.c:2254
+#: src/lang.c:2265
 msgid	"# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
 	"# be represented in the in the target character set, it can be approximated\n"
 	"# through one or several similarly looking characters.\n"
@@ -5939,143 +6021,143 @@ msgstr	"# Wenn ON verwende //TRANSLIT Er
 	"# Terminal als EUR umschrieben, ohne //TRANSLIT würde tin ein\n"
 	"# Fragezeichen verwenden.\n"
 
-#: src/lang.c:2261
+#: src/lang.c:2272
 msgid	"Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Sendet ihnen automatisch eine Kopie. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2262
+#: src/lang.c:2273
 msgid	"Send you a cc automatically"
 msgstr	"Sendet Ihnen ein Cc automatisch"
 
-#: src/lang.c:2263
+#: src/lang.c:2274
 msgid	"# If ON automatically put your name in the Cc: field when mailing an article\n"
 msgstr	"# Falls ON wird Ihr Name in das Cc: Feld beim Mailen des Artikels eingesetzt\n"
 
-#: src/lang.c:2267
+#: src/lang.c:2278
 msgid	"Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Sendet ihnen automatisch eine blinde Kopie. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2268
+#: src/lang.c:2279
 msgid	"Send you a blind cc automatically"
 msgstr	"Sendet Ihnen eine blinde cc autom."
 
-#: src/lang.c:2269
+#: src/lang.c:2280
 msgid	"# If ON automatically put your name in the Bcc: field when mailing an "
 	"article\n"
 msgstr	"# Falls ON wird Ihr Name in das Bcc: Feld beim Mailen des Artikels "
 	"eingesetzt\n"
 
-#: src/lang.c:2273
+#: src/lang.c:2284
 msgid	"Enter address elements about which you want to be warned. <CR> sets."
 msgstr	"Geben Sie den Adressenteil an, vor dem Sie gewarnt werden. <CR> setzt."
 
-#: src/lang.c:2274
+#: src/lang.c:2285
 msgid	"Spamtrap warning address parts"
 msgstr	"Spamfallenwarnung in Adresse"
 
-#: src/lang.c:2275
+#: src/lang.c:2286
 msgid	"# A comma-delimited list of address-parts you want to be warned\n"
 	"# about when trying to reply by email.\n"
 msgstr	"# Eine Komma-separierte Liste von Adressteilen, vor denen gewarnt wird, wenn\n"
 	"# Sie via Mail antworten wollen.\n"
 
-#: src/lang.c:2280
+#: src/lang.c:2291
 msgid	"Enter default number of days a filter entry will be valid. <CR> sets."
 msgstr	"Gültigkeit eines Filtereintrags in Tagen. <CR> setzt."
 
-#: src/lang.c:2281
+#: src/lang.c:2292
 msgid	"No. of days a filter entry is valid"
 msgstr	"Tage, die ein Filter gültig ist"
 
-#: src/lang.c:2282
+#: src/lang.c:2293
 msgid	"# Number of days a short term filter will be active\n"
 msgstr	"# Anzahl der Tage die ein temporärer Filter aktiv ist\n"
 
-#: src/lang.c:2286
+#: src/lang.c:2297
 msgid	"Add posted articles to filter. <SPACE> toggles & <CR> sets."
 msgstr	"Gepostete Artikel zum Filter hinzufügen. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2287
+#: src/lang.c:2298
 msgid	"Add posted articles to filter"
 msgstr	"Füge gepostete Artikel zum Filter"
 
-#: src/lang.c:2288
+#: src/lang.c:2299
 msgid	"# If ON add posted articles which start a new thread to filter for\n"
 	"# highlighting follow-ups\n"
 msgstr	"# Falls ON füge gepostete Artikel die einen neuen Thread einleiten\n"
 	"# zum Filter hinzu um evtl. Antworten hervorzuheben\n"
 
-#: src/lang.c:2292
+#: src/lang.c:2303
 msgid	"The directory where articles/threads are to be saved in mailbox format."
 msgstr	"Verzeichnis, in dem Artikel/Threads im mailbox-Format gespeichert werden."
 
-#: src/lang.c:2293
+#: src/lang.c:2304
 msgid	"Mail directory"
 msgstr	"Mail Verzeichnis"
 
-#: src/lang.c:2294
+#: src/lang.c:2305
 msgid	"# (-m) directory where articles/threads are saved in mailbox format\n"
 msgstr	"# (-m) Verzeichnis für im mailbox-Format gespeicherte Artikel/Threads\n"
 
-#: src/lang.c:2299
+#: src/lang.c:2310
 msgid	"Save articles in batch mode (-S)"
 msgstr	"Speicher Artikel im Batchmode (-S)"
 
-#: src/lang.c:2300
+#: src/lang.c:2311
 msgid	"# If ON articles/threads will be saved in batch mode when save -S\n"
 	"# or mail (-M/-N) is specified on the command line\n"
-msgstr	"# Falls ON werden Artikel/Threads im Batchmode gespeichert wenn save -S,\n"
-	"# oder gemailt, wenn -M bzw. -N in der Kommandozeile angegeben wurde\n"
+msgstr	"# Falls ON werden Artikel/Threads im Batchmode gespeichert wenn -S,\n"
+	"# oder gemailt, wenn -M bzw. -N in der Kommandozeile angegeben wurde.\n"
 
-#: src/lang.c:2305
+#: src/lang.c:2316
 msgid	"The directory where you want articles/threads saved."
 msgstr	"Das Verzeichnis, in dem Artikel/Threads gespeichert werden sollen."
 
-#: src/lang.c:2306
+#: src/lang.c:2317
 msgid	"Directory to save arts/threads in"
 msgstr	"Verz. um Art/Threads zu speichern"
 
-#: src/lang.c:2307
+#: src/lang.c:2318
 msgid	"# Directory where articles/threads are saved\n"
 msgstr	"# Verzeichnis in dem Artikel/Threads gespeichert werden\n"
 
-#: src/lang.c:2311
+#: src/lang.c:2322
 msgid	"Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> sets."
 msgstr	"Autom. sp. von Art/Thread anhand Archive-name:-Header. <SPACE> wechselt & "
 	"<CR> setzt."
 
-#: src/lang.c:2312
+#: src/lang.c:2323
 msgid	"Use Archive-name: header for save"
 msgstr	"Nutze Archive-name: zum Speichern"
 
-#: src/lang.c:2313
+#: src/lang.c:2324
 msgid	"# If ON articles/threads with Archive-name: in mail header will\n"
 	"# be automatically saved with the Archive-name & part/patch no.\n"
 msgstr	"# Falls ON werden Artikel mit gesetztem Archive-name:-Header unter\n"
 	"# diesem abgespeichert\n"
 
-#: src/lang.c:2318
+#: src/lang.c:2329
 msgid	"Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Gesp. Art. gelesen markieren. <SPACE> wechselt, <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:2319
+#: src/lang.c:2330
 msgid	"Mark saved articles/threads as read"
 msgstr	"Mark. gesp. Artikel/Threads gelesen"
 
-#: src/lang.c:2320
+#: src/lang.c:2331
 msgid	"# If ON mark articles that are saved as read\n"
 msgstr	"# Falls ON werden gespeicherte Artikel als gelesen markiert\n"
 
-#: src/lang.c:2324
+#: src/lang.c:2335
 msgid	"Do post processing (eg. extract attachments) for saved articles."
 msgstr	"Bearbeite (z.B. unshar) gesp. Art/Threads. <SPACE> wechselt, <CR> setzt."
 
-#: src/lang.c:2325
+#: src/lang.c:2336
 msgid	"Post process saved articles"
 msgstr	"Nachbearbeiten gespeichert. Artikel"
 
-#: src/lang.c:2326
+#: src/lang.c:2337
 msgid	"# Perform post processing (saving binary attachments) from saved articles.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no\n"
@@ -6087,100 +6169,102 @@ msgstr	"# Nachbearbeiten gespeicherter A
 	"#   1 = ja\n"
 	"#   2 = nur Shell Archive (shar) auspacken\n"
 
-#: src/lang.c:2335
+#: src/lang.c:2346
 msgid	"Process only unread articles"
 msgstr	"Bearbeite nur ungelesene Artikel"
 
-#: src/lang.c:2336
+#: src/lang.c:2347
 msgid	"# If ON only save/print/pipe/mail unread articles (tagged articles excepted)\n"
 msgstr	"# Falls ON speichere/drucke/pipe/maile nur ungelesene Artikel\n"
 	"# (markierte Artikel ausgenommen)\n"
 
-#: src/lang.c:2341
+#: src/lang.c:2352
 msgid	"Print all or just part of header. <SPACE> toggles & <CR> sets."
 msgstr	"Drucke alles oder nur Teile des Headers <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2342
+#: src/lang.c:2353
 msgid	"Print all headers when printing"
 msgstr	"Alle Header beim Drucken ausgeben"
 
-#: src/lang.c:2343
+#: src/lang.c:2354
 msgid	"# If ON print all of article header otherwise just the important lines\n"
 msgstr	"# Falls ON drucke alle Header des Artikels aus. Ansonsten nur die "
 	"wichtigsten\n"
 
-#: src/lang.c:2347
+#: src/lang.c:2358
 msgid	"The printer program with options that is to be used to print articles/threads."
 msgstr	"Das Druckprogramm, das zum drucken von Artikeln/Threads benutzt wird."
 
-#: src/lang.c:2348
+#: src/lang.c:2359
 msgid	"Printer program with options"
 msgstr	"Druckprogramm mit Optionen"
 
-#: src/lang.c:2349
+#: src/lang.c:2360
 msgid	"# Print program with parameters used to print articles/threads\n"
 msgstr	"# Druckprogramm mit Optionen zum drucken der Artikel/Threads\n"
 
-#: src/lang.c:2355
+#: src/lang.c:2366
 msgid	"Force redraw after certain commands"
 msgstr	"Anzeigeauffrischung nach Kommandos"
 
-#: src/lang.c:2356
+#: src/lang.c:2367
 msgid	"# If ON a screen redraw will always be done after certain external commands\n"
 msgstr	"# Falls ON wird die Anzeige nach einigen externen Kommandos aufgefrischt\n"
 
-#: src/lang.c:2360
+#: src/lang.c:2371
 msgid	"Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Starte Editor mit Einrückung. <SPACE> wechselt, <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:2361
+#: src/lang.c:2372
 msgid	"Start editor with line offset"
 msgstr	"Starte Editor mit Einrückung"
 
-#: src/lang.c:2362
+#: src/lang.c:2373
 msgid	"# If ON editor will be started with cursor offset into the file\n"
 	"# otherwise the cursor will be positioned at the first line\n"
 msgstr	"# Falls ON wird der Cursor im Editor an die definierte Position gesetzt.\n"
 	"# Anderenfalls wird der Cursor in die erste Zeile gesetzt\n"
 
-#: src/lang.c:2367
+#: src/lang.c:2378
 msgid	"Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
 msgstr	"%E für Editor, %F für Dateiname, %N für Zeilennummer, <CR> setzt."
 
-#: src/lang.c:2368
+#: src/lang.c:2379
 msgid	"Invocation of your editor"
 msgstr	"Aufruf ihres Editors"
 
-#: src/lang.c:2369
+#: src/lang.c:2380
+#, c-format
 msgid	"# Format of editor line including parameters\n"
 	"# %%E Editor  %%F Filename  %%N Linenumber\n"
 msgstr	"# Format der Editorzeile mit den Parametern für den Aufruf\n"
 	"# %%E Editor  %%F Dateiname  %%N Zeilennummer\n"
 
-#: src/lang.c:2374
+#: src/lang.c:2385
 msgid	"Enter name and options for external-inews, --internal for internal inews"
 msgstr	"Name und Optionen für ext. inews, --internal für eingebaute Version"
 
-#: src/lang.c:2375
+#: src/lang.c:2386
 msgid	"External inews"
 msgstr	"Externes inews-Programm"
 
-#: src/lang.c:2376
+#: src/lang.c:2387
 msgid	"# If --internal use the built in mini inews for posting via NNTP\n"
 	"# otherwise use an external inews program\n"
 msgstr	"# Falls --internal wird das eingebaute mini inews zum posten via NNTP\n"
 	"# benutzt, sonst wird das hier angegebene Programm mit den angegebenen\n"
 	"# Optionen verwendet. z.B. 'inews -h'\n"
 
-#: src/lang.c:2380
+#: src/lang.c:2391
 msgid	"Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
 msgstr	"%M für den Mailer, %S für Subject, %T für to, %F für Dateinamen, <CR> setzt."
 
-#: src/lang.c:2381
+#: src/lang.c:2392
 msgid	"Invocation of your mail command"
 msgstr	"Aufruf ihres Mailkommandos"
 
-#: src/lang.c:2382
+#: src/lang.c:2393
+#, c-format
 msgid	"# Format of mailer line including parameters\n"
 	"# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
 	"# ie. to use elm as your mailer:    elm -s \"%%S\" \"%%T\" < %%F\n"
@@ -6190,11 +6274,11 @@ msgstr	"# Format der Mailkommandozeile m
 	"# Ein Beispiel für elm           :  elm -s \"%%S\" \"%%T\" < %%F\n"
 	"# Ein Beispiel für elm interaktiv:  elm -i %%F -s \"%%S\" \"%%T\"\n"
 
-#: src/lang.c:2390
+#: src/lang.c:2401
 msgid	"Use interactive mail reader"
 msgstr	"Benutze interaktives Mailprogramm"
 
-#: src/lang.c:2391
+#: src/lang.c:2402
 msgid	"# Interactive mailreader\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no interactive mailreader\n"
@@ -6207,57 +6291,57 @@ msgstr	"# Interaktives Mailprogramm.\n"
 	"übergeben\n"
 	"#   2 = interaktives Mailprogramm, Mailheader werden als Argumente übergeben\n"
 
-#: src/lang.c:2400
+#: src/lang.c:2411
 msgid	"Remove ~/.article after posting"
 msgstr	"Entferne ~/.article nach dem posten"
 
-#: src/lang.c:2401
+#: src/lang.c:2412
 msgid	"# If ON remove ~/.article after posting.\n"
 msgstr	"# Falls ON entferne ~/.article nach dem posten.\n"
 
-#: src/lang.c:2405
+#: src/lang.c:2416
 msgid	"Filename for all posted articles, <CR> sets, no filename=do not save."
 msgstr	"Dateiname für Kopie geposteter Artikel. <CR> setzt, kein Name=keine Kopie."
 
-#: src/lang.c:2406
+#: src/lang.c:2417
 msgid	"Filename for posted articles"
 msgstr	"Gepostete Artikel speichern in"
 
-#: src/lang.c:2407
+#: src/lang.c:2418
 msgid	"# Filename where to keep all postings (default posted)\n"
 	"# If no filename is set then postings will not be saved\n"
 msgstr	"# Dateiname für die Kopie aller Postings (Voreinstellung posted)\n"
 	"# Ist kein Name angegeben wird keine Kopie gespeichert\n"
 
-#: src/lang.c:2412
+#: src/lang.c:2423
 msgid	"Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
 msgstr	"Behalte alle Fehlschläge in ~/dead.articles. <SPACE> wechselt & <CR> setzt."
 
-#: src/lang.c:2413
+#: src/lang.c:2424
 msgid	"Keep failed arts in ~/dead.articles"
 msgstr	"Halte Fehlschl. in ~/dead.articles"
 
-#: src/lang.c:2414
+#: src/lang.c:2425
 msgid	"# If ON keep all failed postings in ~/dead.articles\n"
 msgstr	"# Falls ON werden Fehlgeschlagene Artikel in ~/dead.articles verwahrt\n"
 
-#: src/lang.c:2418
+#: src/lang.c:2429
 msgid	"Do you want to strip unsubscribed groups from .newsrc"
 msgstr	"Wollen Sie nicht-abonnierte Gruppen aus der .newsrc entfernen?"
 
-#: src/lang.c:2419
+#: src/lang.c:2430
 msgid	"No unsubscribed groups in newsrc"
 msgstr	"Nur abonnierte Gruppen in newsrc"
 
-#: src/lang.c:2420
+#: src/lang.c:2431
 msgid	"# If ON strip unsubscribed groups from newsrc\n"
 msgstr	"# Falls ON entferne nicht-abonnierte Gruppen aus der newsrc\n"
 
-#: src/lang.c:2425
+#: src/lang.c:2436
 msgid	"Remove bogus groups from newsrc"
 msgstr	"Lösche nicht vorhan. G. aus newsrc"
 
-#: src/lang.c:2426
+#: src/lang.c:2437
 msgid	"# What to do with bogus groups in newsrc file\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = keep\n"
@@ -6269,57 +6353,57 @@ msgstr	"# Was soll mit nicht mehr vorhan
 	"#   1 = entfernen\n"
 	"#   2 = Mit D in der Auswahl markieren.\n"
 
-#: src/lang.c:2434
+#: src/lang.c:2445
 msgid	"Enter number of seconds until active file will be reread. <CR> sets."
 msgstr	"Sekunden, nach denen die active-Datei wieder gelesen wird. <CR> setzt."
 
-#: src/lang.c:2435
+#: src/lang.c:2446
 msgid	"Interval in secs to reread active"
 msgstr	"Active alle ... Sekunden neu lesen"
 
-#: src/lang.c:2436
+#: src/lang.c:2447
 msgid	"# Time interval in seconds between rereading the active file (0=never)\n"
 msgstr	"# Zeitintervall in Sekunden zwischen dem Wiedereinlesen des active (0=nie)\n"
 
-#: src/lang.c:2441
+#: src/lang.c:2452
 msgid	"Reconnect to server automatically"
 msgstr	"Autom. Wiederverbindung zum Server"
 
-#: src/lang.c:2442
+#: src/lang.c:2453
 msgid	"# If ON automatically reconnect to NNTP server if the connection is broken\n"
 msgstr	"# Falls ON wird eine unterbrochene Verbindung zum NNTP Server\n"
 	"# automatisch reaktiviert\n"
 
-#: src/lang.c:2446
+#: src/lang.c:2457
 msgid	"Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
 msgstr	"Erzeuge lokale Kopien der NNTP Overview Dateien. <SPACE> wechselt & <CR> "
 	"setzt."
 
-#: src/lang.c:2447
+#: src/lang.c:2458
 msgid	"Cache NNTP overview files locally"
 msgstr	"Speichere NNTP Overview Daten lokal"
 
-#: src/lang.c:2448
+#: src/lang.c:2459
 msgid	"# If ON, create local copies of NNTP overview files.\n"
 msgstr	"# Falls ON, erzeuge lokale Kopien der NNTP Overview Dateien.\n"
 
-#: src/lang.c:2452
+#: src/lang.c:2463
 msgid	"Enter format string. <CR> sets, <ESC> cancels."
 msgstr	"Format-Zeichenkette eingeben. <CR> setzt, <ESC> bricht ab."
 
-#: src/lang.c:2453
+#: src/lang.c:2464
 msgid	"Format string for display of dates"
 msgstr	"Datums Format-Zeichenkette"
 
-#: src/lang.c:2454
+#: src/lang.c:2465
 msgid	"# Format string for date representation\n"
 msgstr	"# Zeichenkette die die Datumsanzeige beschreibt.\n"
 
-#: src/lang.c:2460
+#: src/lang.c:2471
 msgid	"Unicode normalization form"
 msgstr	"Unicode Normalisierungsart"
 
-#: src/lang.c:2461
+#: src/lang.c:2472
 msgid	"# Unicode normalization form\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = None\n"
@@ -6335,60 +6419,95 @@ msgstr	"# Unicode Normalisierungsart\n"
 	"#   3 = NFC\n"
 	"#   4 = NFD\n"
 
-#: src/lang.c:2473
+#: src/lang.c:2484
 msgid	"Render BiDi"
 msgstr	"BiDi wiedergeben"
 
-#: src/lang.c:2474
+#: src/lang.c:2485
 msgid	"# If ON, bi-directional text is rendered by tin\n"
 msgstr	"# Falls ON, wird bi-direktionaler Text von tin wiedergeben.\n"
 
-#: src/misc.c:3721
+#: src/misc.c:3728
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\") %s %s\n"
 msgstr	"Version: %s %s Ausgabe %s (\"%s\") %s %s\n"
 
-#: src/misc.c:3724
+#: src/misc.c:3731
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\")\n"
 msgstr	"Version: %s %s Ausgabe %s (\"%s\")\n"
 
-#: src/newsrc.c:432
+#: src/newsrc.c:430
 msgid	"Unreachable?\n"
 msgstr	"Unerreichbar?\n"
 
-#: src/nntplib.c:825
+#: src/nntplib.c:824
 #, c-format
 msgid	"\n"
 	"Server timed out, trying reconnect # %d\n"
 msgstr	"\n"
 	"Server reagierte nicht, Wiederholung Nummer # %d\n"
 
-#: src/nntplib.c:843
+#: src/nntplib.c:842
 msgid	"Rejoin current group\n"
 msgstr	"Betrete aktuelle Gruppe neu\n"
 
-#: src/nntplib.c:850
+#: src/nntplib.c:849
 #, c-format
 msgid	"Read (%s)\n"
 msgstr	"Lese (%s)\n"
 
-#: src/nntplib.c:852
+#: src/nntplib.c:851
 #, c-format
 msgid	"Resend last command (%s)\n"
 msgstr	"Sende letztes Kommando (%s) neu\n"
 
+# TRANSLATION MISSING
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid	"MOTD: "
+msgstr	""
+
 #: src/nrctbl.c:172
 #, c-format
 msgid	"couldn't expand %s\n"
 msgstr	"Kann %s nicht expandieren\n"
 
-#: src/post.c:1969
+#: src/post.c:1152
+#, c-format
+msgid	"Line %d is longer than 998 octets and should be folded, but\n"
+	"encoding is neither set to %s nor to %s\n"
+msgstr	"Zeile %d ist länger als 998 Oktets und sollte gefaltet werden,\n"
+	"aber die Kodierung ist weder auf %s noch auf %s gestellt\n"
+
+#: src/post.c:1157
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+	"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr	"Zeile %d ist länger als 998 Oktets und sollte gefaltet werden,\n"
+	"aber die Kodierung ist auf %s gestellt ohne MIME_BREAK_LONG_LINES\n"
+	"angeschaltet zu haben, oder der Artikel enhält keine 8Bit Zeichen\n"
+	"und wird daher nicht automatisch gefaltet wird.\n"
+
+#: src/post.c:1159
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is not set to %s\n"
+msgstr	"Zeile %d ist länger als 998 Oktets und sollte gefaltet werden,\n"
+	"aber die Kodierung ist nicht auf %s gesetzt\n"
+
+#: src/post.c:1974
 #, c-format
 msgid	"Posting: %.*s ..."
 msgstr	"Poste: %.*s ..."
 
-#. fp
 #. Check if okay to read
 #: src/read.c:214
 msgid	"Aborting read, please wait..."
@@ -6416,6 +6535,7 @@ msgstr	"[- Nicht Verfügbar -]"
 #. * TODO: -> lang.c
 #.
 #: src/rfc2047.c:1203
+#, c-format
 msgid	"This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
 	"are reading this prefix, your mail reader probably has not yet been modified\n"
 	"to understand the new format, and some of what follows may look strange.\n"
@@ -6425,7 +6545,7 @@ msgstr	"Dieser Artikel wurde im 'multipa
 	"Format zu verstehen und einiges von was folgt, kann merkwürdig aussehen.\n"
 	"\n"
 
-#: src/save.c:977
+#: src/save.c:978
 msgid	"bytes"
 msgstr	"Bytes"
 
Binary files tin-1.7.8/po/en_GB.gmo and tin-1.7.9/po/en_GB.gmo differ
diff -Nurp tin-1.7.8/po/en_GB.po tin-1.7.9/po/en_GB.po
--- tin-1.7.8/po/en_GB.po	2005-03-21 11:43:05.000000000 +0100
+++ tin-1.7.9/po/en_GB.po	2005-06-28 10:31:29.475581232 +0200
@@ -3,226 +3,277 @@
 #
 msgid	""
 msgstr	"Project-Id-Version: tin 1.7.7\n"
-	"POT-Creation-Date: 2005-03-21 11:42+0100\n"
+	"Report-Msgid-Bugs-To: \n"
+	"POT-Creation-Date: 2005-06-22 20:13+0200\n"
 	"PO-Revision-Date: 2002-11-15 20:10+0000\n"
 	"Last-Translator: Robert Brady <rwb197@zepler.org>\n"
 	"Language-Team: \n"
 	"MIME-Version: 1.0\n"
 	"Content-Type: text/plain; charset=ISO-8859-1\n"
 	"Content-Transfer-Encoding: 8bit\n"
-	"Report-Msgid-Bugs-To: \n"
 
-#: src/art.c:1455
+#: src/art.c:1553
 #, c-format
 msgid	"%d Bad overview record (%d fields) '%s'"
 msgstr	""
 
-#: src/attrib.c:604
+#: src/attrib.c:643
+#, c-format
 msgid	"# Do not edit this comment block\n"
 	"#\n"
 msgstr	""
 
-#: src/attrib.c:605
+#: src/attrib.c:644
+#, c-format
 msgid	"#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
 msgstr	""
 
-#: src/attrib.c:606
+#: src/attrib.c:645
+#, c-format
 msgid	"#  maildir=STRING (ie. ~/Mail)\n"
 msgstr	""
 
-#: src/attrib.c:607
+#: src/attrib.c:646
+#, c-format
 msgid	"#  savedir=STRING (ie. ~user/News)\n"
 msgstr	""
 
-#: src/attrib.c:608
+#: src/attrib.c:647
+#, c-format
 msgid	"#  savefile=STRING (ie. =linux)\n"
 msgstr	""
 
-#: src/attrib.c:609
+#: src/attrib.c:648
+#, c-format
 msgid	"#  sigfile=STRING (ie. $var/sig)\n"
 msgstr	""
 
-#: src/attrib.c:610
+#: src/attrib.c:649
+#, c-format
 msgid	"#  organization=STRING (if beginning with '/' read from file)\n"
 msgstr	""
 
-#: src/attrib.c:611
+#: src/attrib.c:650
+#, c-format
 msgid	"#  followup_to=STRING\n"
 msgstr	""
 
-#: src/attrib.c:612
+#: src/attrib.c:651
+#, c-format
 msgid	"#  mailing_list=STRING (ie. majordomo@example.org)\n"
 msgstr	""
 
-#: src/attrib.c:613
+#: src/attrib.c:652
+#, c-format
 msgid	"#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
 msgstr	""
 
-#: src/attrib.c:614
+#: src/attrib.c:653
+#, c-format
 msgid	"#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
 msgstr	""
 
-#: src/attrib.c:615
+#: src/attrib.c:654
+#, c-format
 msgid	"#  from=STRING (just append wanted From:-line, don't use quotes)\n"
 msgstr	""
 
-#: src/attrib.c:616
+#: src/attrib.c:655
+#, c-format
 msgid	"#  news_quote_format=STRING\n"
 msgstr	""
 
-#: src/attrib.c:617
+#: src/attrib.c:656
+#, c-format
 msgid	"#  quote_chars=STRING (%%s, %%S for initials)\n"
 msgstr	""
 
-#: src/attrib.c:618
+#: src/attrib.c:657
+#, c-format
 msgid	"#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
 msgstr	""
 
-#: src/attrib.c:620
+#: src/attrib.c:659
+#, c-format
 msgid	"#  ispell=STRING\n"
 msgstr	""
 
-#: src/attrib.c:622
+#: src/attrib.c:661
+#, c-format
 msgid	"#  auto_select=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:623
+#: src/attrib.c:662
+#, c-format
 msgid	"#  auto_save=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:624
+#: src/attrib.c:663
+#, c-format
 msgid	"#  batch_save=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:625
+#: src/attrib.c:664
+#, c-format
 msgid	"#  delete_tmp_files=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:626
+#: src/attrib.c:665
+#, c-format
 msgid	"#  show_only_unread=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:627
+#: src/attrib.c:666
+#, c-format
 msgid	"#  thread_arts=NUM"
 msgstr	""
 
-#: src/attrib.c:634
+#: src/attrib.c:673
+#, c-format
 msgid	"#  show_author=NUM\n"
 msgstr	""
 
-#: src/attrib.c:640
+#: src/attrib.c:679
+#, c-format
 msgid	"#  show_info=NUM\n"
 msgstr	""
 
-#: src/attrib.c:646
+#: src/attrib.c:685
+#, c-format
 msgid	"#  sort_art_type=NUM\n"
 msgstr	""
 
-#: src/attrib.c:664
+#: src/attrib.c:703
+#, c-format
 msgid	"#  sort_threads_type=NUM\n"
 msgstr	""
 
-#: src/attrib.c:669
+#: src/attrib.c:708
+#, c-format
 msgid	"#  post_proc_type=NUM\n"
 msgstr	""
 
-#: src/attrib.c:674
+#: src/attrib.c:713
+#, c-format
 msgid	"#  quick_kill_scope=STRING (ie. talk.*)\n"
 msgstr	""
 
-#: src/attrib.c:675
+#: src/attrib.c:714
+#, c-format
 msgid	"#  quick_kill_expire=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:676
+#: src/attrib.c:715
+#, c-format
 msgid	"#  quick_kill_case=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:677
+#: src/attrib.c:716
+#, c-format
 msgid	"#  quick_kill_header=NUM\n"
 msgstr	""
 
-#: src/attrib.c:678 src/attrib.c:685
+#: src/attrib.c:717 src/attrib.c:724
+#, c-format
 msgid	"#    0=subj (case sensitive) 1=subj (ignore case)\n"
 msgstr	""
 
-#: src/attrib.c:679 src/attrib.c:686
+#: src/attrib.c:718 src/attrib.c:725
+#, c-format
 msgid	"#    2=from (case sensitive) 3=from (ignore case)\n"
 msgstr	""
 
-#: src/attrib.c:680 src/attrib.c:687
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
 msgid	"#    4=msgid 5=lines\n"
 msgstr	""
 
-#: src/attrib.c:681
+#: src/attrib.c:720
+#, c-format
 msgid	"#  quick_select_scope=STRING\n"
 msgstr	""
 
-#: src/attrib.c:682
+#: src/attrib.c:721
+#, c-format
 msgid	"#  quick_select_expire=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:683
+#: src/attrib.c:722
+#, c-format
 msgid	"#  quick_select_case=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:684
+#: src/attrib.c:723
+#, c-format
 msgid	"#  quick_select_header=NUM\n"
 msgstr	""
 
-#: src/attrib.c:688
+#: src/attrib.c:727
+#, c-format
 msgid	"#  x_comment_to=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:689
+#: src/attrib.c:728
+#, c-format
 msgid	"#  fcc=STRING (eg. =mailbox)\n"
 msgstr	""
 
-#: src/attrib.c:690
+#: src/attrib.c:729
+#, c-format
 msgid	"#  tex2iso_conv=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:691
+#: src/attrib.c:730
+#, c-format
 msgid	"#  mime_forward=ON/OFF\n"
 msgstr	""
 
-#: src/attrib.c:693
+#: src/attrib.c:732
+#, c-format
 msgid	"#  mm_network_charset=supported_charset"
 msgstr	""
 
-#: src/attrib.c:700
+#: src/attrib.c:739
+#, c-format
 msgid	"#  undeclared_charset=STRING (default is US-ASCII)\n"
 msgstr	""
 
-#: src/attrib.c:702
+#: src/attrib.c:741
+#, c-format
 msgid	"#\n"
 	"# Note that it is best to put general (global scoping)\n"
 msgstr	""
 
-#: src/attrib.c:703
+#: src/attrib.c:742
+#, c-format
 msgid	"# entries first followed by group specific entries.\n"
 	"#\n"
 msgstr	""
 
-#: src/attrib.c:704
+#: src/attrib.c:743
+#, c-format
 msgid	"############################################################################\n"
 	"\n"
 msgstr	""
 
-#: src/attrib.c:710
+#: src/attrib.c:749
+#, c-format
 msgid	"# include extra headers\n"
 msgstr	""
 
-#: src/attrib.c:718
+#: src/attrib.c:757
+#, c-format
 msgid	"# in *sources* set post process type to shar only\n"
 msgstr	""
 
-#: src/attrib.c:722
-msgid	"# in *binaries* do full post processing, remove tmp files\n"
+#: src/attrib.c:761
+#, c-format
+msgid	"# in *binaries* do full post processing but no TeX2ISO conversion,\n"
 msgstr	""
 
-#: src/attrib.c:723
-msgid	"# and set Followup-To: poster\n"
+#: src/attrib.c:762
+#, c-format
+msgid	"# remove tmp files and set Followup-To: poster\n"
 msgstr	""
 
 #: src/cook.c:497
@@ -456,6 +507,7 @@ msgid	"*** Beginning of article ***"
 msgstr	""
 
 #: src/lang.c:97
+#, c-format
 msgid	"Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
 msgstr	""
 
@@ -579,7 +631,7 @@ msgstr	""
 msgid	"Creating newsrc file...\n"
 msgstr	""
 
-#: src/lang.c:129 src/lang.c:1150
+#: src/lang.c:129 src/lang.c:1147
 msgid	"Default"
 msgstr	""
 
@@ -1562,7 +1614,7 @@ msgstr	""
 msgid	"choose next group with unread news"
 msgstr	""
 
-#: src/lang.c:389 src/lang.c:1197
+#: src/lang.c:389 src/lang.c:1194
 msgid	"quit"
 msgstr	""
 
@@ -1817,386 +1869,381 @@ msgstr	""
 msgid	"Invalid keyname '%s'\n"
 msgstr	""
 
-#: src/lang.c:462
-#, c-format
-msgid	"Key '%s' is defined for both %s%s and %s%s\n"
-msgstr	""
-
-#: src/lang.c:464
+#: src/lang.c:461
 #, c-format
 msgid	"Keymap file was upgraded to version %s\n"
 msgstr	""
 
-#: src/lang.c:465
+#: src/lang.c:462
 #, c-format
 msgid	"Kill From:     [%s] (y/n): "
 msgstr	""
 
-#: src/lang.c:466
+#: src/lang.c:463
 msgid	"Kill Lines: (</>num): "
 msgstr	""
 
-#: src/lang.c:467
+#: src/lang.c:464
 msgid	"Kill Article Menu"
 msgstr	""
 
-#: src/lang.c:468
+#: src/lang.c:465
 #, c-format
 msgid	"Kill Msg-Id:   [%s] (f/l/o/n): "
 msgstr	""
 
-#: src/lang.c:469
+#: src/lang.c:466
 msgid	"Kill pattern scope  : "
 msgstr	""
 
-#: src/lang.c:470
+#: src/lang.c:467
 #, c-format
 msgid	"Kill Subject:  [%s] (y/n): "
 msgstr	""
 
-#: src/lang.c:471
+#: src/lang.c:468
 msgid	"Kill text pattern   : "
 msgstr	""
 
-#: src/lang.c:472
+#: src/lang.c:469
 msgid	"Kill time in days   : "
 msgstr	""
 
-#: src/lang.c:474
+#: src/lang.c:471
 msgid	"Last"
 msgstr	""
 
-#: src/lang.c:475
+#: src/lang.c:472
 msgid	"-- Last response --"
 msgstr	""
 
-#: src/lang.c:476
+#: src/lang.c:473
 #, c-format
 msgid	"Lines %s  "
 msgstr	""
 
-#: src/lang.c:478
+#: src/lang.c:475
 msgid	"Message-ID: line              "
 msgstr	""
 
-#: src/lang.c:479
+#: src/lang.c:476
 msgid	"Mail"
 msgstr	""
 
-#: src/lang.c:480
+#: src/lang.c:477
 msgid	"mailbox "
 msgstr	""
 
-#: src/lang.c:481
+#: src/lang.c:478
 #, c-format
 msgid	"Mail article(s) to [%.*s]> "
 msgstr	""
 
-#: src/lang.c:482
+#: src/lang.c:479
 #, c-format
 msgid	"Mailing log to %s\n"
 msgstr	""
 
-#: src/lang.c:483
+#: src/lang.c:480
 msgid	"Mail bug report..."
 msgstr	""
 
-#: src/lang.c:484
+#: src/lang.c:481
 #, c-format
 msgid	"Mail BUG REPORT to %s?"
 msgstr	""
 
-#: src/lang.c:485
+#: src/lang.c:482
 msgid	"Mailed"
 msgstr	""
 
-#: src/lang.c:486
+#: src/lang.c:483
 #, c-format
 msgid	"Mailing to %s..."
 msgstr	""
 
-#: src/lang.c:487
+#: src/lang.c:484
 msgid	"# [Mail/Save] active file. Format is like news active file:\n"
 	"#   groupname  max.artnum  min.artnum  /dir\n"
 	"# The 4th field is the basedir (ie. ~/Mail or ~/News)\n"
 	"#\n"
 msgstr	""
 
-#: src/lang.c:490
+#: src/lang.c:487
 #, c-format
 msgid	"%s marked as unread"
 msgstr	""
 
-#: src/lang.c:491
+#: src/lang.c:488
 #, c-format
 msgid	"Marked %d of %d tagged %s as read"
 msgstr	""
 
-#: src/lang.c:492
+#: src/lang.c:489
 #, c-format
 msgid	"Mark all articles as read%s?"
 msgstr	""
 
-#: src/lang.c:493
+#: src/lang.c:490
 #, c-format
 msgid	"Mark %s=tagged articles, %s=current article, %s=quit: "
 msgstr	""
 
-#: src/lang.c:494
+#: src/lang.c:491
 #, c-format
 msgid	"Mark group %s as read?"
 msgstr	""
 
-#: src/lang.c:495
+#: src/lang.c:492
 #, c-format
 msgid	"Mark thread as read%s?"
 msgstr	""
 
-#: src/lang.c:496
+#: src/lang.c:493
 #, c-format
 msgid	"Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
 msgstr	""
 
-#: src/lang.c:497
+#: src/lang.c:494
 #, c-format
 msgid	"Matching %s groups..."
 msgstr	""
 
-#: src/lang.c:498 src/lang.c:502
+#: src/lang.c:495 src/lang.c:499
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
 msgstr	""
 
-#: src/lang.c:499
+#: src/lang.c:496
 #, c-format
 msgid	"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %s=list "
 	"thread"
 msgstr	""
 
-#: src/lang.c:500
+#: src/lang.c:497
 #, c-format
 msgid	"%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
 msgstr	""
 
-#: src/lang.c:501
+#: src/lang.c:498
 #, c-format
 msgid	"%s=search forwards; %s=search backwards; %s=quit"
 msgstr	""
 
-#: src/lang.c:503
+#: src/lang.c:500
 #, c-format
 msgid	"%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
 msgstr	""
 
-#: src/lang.c:504
+#: src/lang.c:501
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
 msgstr	""
 
-#: src/lang.c:505
+#: src/lang.c:502
 #, c-format
 msgid	"%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
 msgstr	""
 
-#: src/lang.c:506
+#: src/lang.c:503
 #, c-format
 msgid	"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/out"
 msgstr	""
 
-#: src/lang.c:507
+#: src/lang.c:504
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
 msgstr	""
 
-#: src/lang.c:508
+#: src/lang.c:505
 #, c-format
 msgid	"%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
 msgstr	""
 
-#: src/lang.c:509
+#: src/lang.c:506
 msgid	"--More--"
 msgstr	""
 
-#: src/lang.c:510
+#: src/lang.c:507
 #, c-format
 msgid	"Moving %s..."
 msgstr	""
 
-#: src/lang.c:512
+#: src/lang.c:509
 msgid	", name: "
 msgstr	""
 
-#: src/lang.c:513
+#: src/lang.c:510
 #, c-format
 msgid	"Goto newsgroup [%s]> "
 msgstr	""
 
-#: src/lang.c:514
+#: src/lang.c:511
 msgid	"newsgroups"
 msgstr	""
 
-#: src/lang.c:515
+#: src/lang.c:512
 #, c-format
 msgid	"Position %s in group list (1,2,..,$) [%d]> "
 msgstr	""
 
-#: src/lang.c:516
+#: src/lang.c:513
 msgid	"newsgroup"
 msgstr	""
 
-#: src/lang.c:517
+#: src/lang.c:514
 msgid	"Try and save newsrc file again?"
 msgstr	""
 
-#: src/lang.c:518
+#: src/lang.c:515
 msgid	"Warning: No newsgroups were written to your newsrc file. Save aborted."
 msgstr	""
 
-#: src/lang.c:519
+#: src/lang.c:516
 msgid	"newsrc file saved successfully.\n"
 msgstr	""
 
-#: src/lang.c:520
+#: src/lang.c:517
 msgid	"-- Next response --"
 msgstr	""
 
-#: src/lang.c:521
+#: src/lang.c:518
 #, c-format
 msgid	"NNTP authorization password not found for %s"
 msgstr	"NNTP authorisation password not found for %s"
 
-#: src/lang.c:522
+#: src/lang.c:519
 msgid	"No  "
 msgstr	""
 
-#: src/lang.c:523
+#: src/lang.c:520
 msgid	"*** No articles ***"
 msgstr	""
 
-#: src/lang.c:524
+#: src/lang.c:521
 msgid	"No articles have been posted"
 msgstr	""
 
-#: src/lang.c:525
+#: src/lang.c:522
 msgid	"*** No description ***"
 msgstr	""
 
-#: src/lang.c:526
+#: src/lang.c:523
 msgid	"No filename"
 msgstr	""
 
-#: src/lang.c:527
+#: src/lang.c:524
 msgid	"No group"
 msgstr	""
 
-#: src/lang.c:528
+#: src/lang.c:525
 msgid	"*** No groups ***"
 msgstr	""
 
-#: src/lang.c:529
+#: src/lang.c:526
 msgid	"No more groups to read"
 msgstr	""
 
-#: src/lang.c:530
+#: src/lang.c:527
 msgid	"No last message"
 msgstr	""
 
-#: src/lang.c:531
+#: src/lang.c:528
 msgid	"No mail address"
 msgstr	""
 
-#: src/lang.c:532
+#: src/lang.c:529
 msgid	"No articles marked for saving"
 msgstr	""
 
-#: src/lang.c:533
+#: src/lang.c:530
 msgid	"No match"
 msgstr	""
 
-#: src/lang.c:534
+#: src/lang.c:531
 msgid	"No more groups"
 msgstr	""
 
-#: src/lang.c:535
+#: src/lang.c:532
 msgid	"No newsgroups"
 msgstr	""
 
-#: src/lang.c:536
+#: src/lang.c:533
 msgid	"No next unread article"
 msgstr	""
 
-#: src/lang.c:537
+#: src/lang.c:534
 msgid	"No previous group"
 msgstr	""
 
-#: src/lang.c:538
+#: src/lang.c:535
 msgid	"No previous unread article"
 msgstr	""
 
-#: src/lang.c:539
+#: src/lang.c:536
 msgid	"No responses"
 msgstr	""
 
-#: src/lang.c:540
+#: src/lang.c:537
 msgid	"No responses to list in current thread"
 msgstr	""
 
-#: src/lang.c:541
+#: src/lang.c:538
 msgid	"No search string"
 msgstr	""
 
-#: src/lang.c:542
+#: src/lang.c:539
 msgid	"No subject"
 msgstr	""
 
-#: src/lang.c:544
+#: src/lang.c:541
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-line (ce)\n"
 msgstr	""
 
-#: src/lang.c:545
+#: src/lang.c:542
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-screen (cd)\n"
 msgstr	""
 
-#: src/lang.c:546
+#: src/lang.c:543
 #, c-format
 msgid	"%s: Terminal must have clearscreen (cl) capability\n"
 msgstr	""
 
-#: src/lang.c:547
+#: src/lang.c:544
 #, c-format
 msgid	"%s: Terminal must have cursor motion (cm)\n"
 msgstr	""
 
-#: src/lang.c:548
+#: src/lang.c:545
 #, c-format
 msgid	"%s: TERM variable must be set to use screen capabilities\n"
 msgstr	""
 
-#: src/lang.c:550
+#: src/lang.c:547
 #, c-format
 msgid	"No viewer found for %s/%s\n"
 msgstr	""
 
-#: src/lang.c:551
+#: src/lang.c:548
 msgid	"Newsgroup does not exist on this server"
 msgstr	""
 
-#: src/lang.c:552
+#: src/lang.c:549
 #, c-format
 msgid	"Group %s not found in active file"
 msgstr	""
 
-#: src/lang.c:553
+#: src/lang.c:550
 msgid	"c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	""
 
-#: src/lang.c:554
+#: src/lang.c:551
 msgid	"use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	""
 
-#: src/lang.c:555
+#: src/lang.c:552
 #, c-format
 msgid	"# NNTP-server -> newsrc translation table and NNTP-server\n"
 	"# shortname list for %s %s\n"
@@ -2212,313 +2259,315 @@ msgid	"# NNTP-server -> newsrc translati
 	"#\n"
 msgstr	""
 
-#: src/lang.c:562
+#: src/lang.c:559
 msgid	"Only"
 msgstr	""
 
-#: src/lang.c:563
+#: src/lang.c:560
 #, c-format
 msgid	"Option not enabled. Recompile with %s."
 msgstr	""
 
-#: src/lang.c:564
+#: src/lang.c:561
 msgid	"Options Menu"
 msgstr	""
 
-#: src/lang.c:567
+#: src/lang.c:564
 #, c-format
 msgid	"Error in regex: %s at pos. %d '%s'"
 msgstr	""
 
-#: src/lang.c:568
+#: src/lang.c:565
 #, c-format
 msgid	"Error in regex: pcre internal error %d"
 msgstr	""
 
-#: src/lang.c:569
+#: src/lang.c:566
 #, c-format
 msgid	"Error in regex: study - pcre internal error %s"
 msgstr	""
 
-#: src/lang.c:570
+#: src/lang.c:567
 msgid	"Post a followup..."
 msgstr	""
 
 #. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
-#: src/lang.c:572
+#: src/lang.c:569
 msgid	"An error has occurred while posting the article. If you think that this\n"
 	"error is temporary or otherwise correctable, you can postpone the article\n"
 	"and pick it up again with ^O later.\n"
 msgstr	""
 
-#: src/lang.c:575
+#: src/lang.c:572
 msgid	"Posted articles history"
 msgstr	""
 
-#: src/lang.c:576
+#: src/lang.c:573
 #, c-format
 msgid	"Post to newsgroup(s) [%s]> "
 msgstr	""
 
-#: src/lang.c:577
+#: src/lang.c:574
 msgid	"-- post processing started --"
 msgstr	""
 
-#: src/lang.c:578
+#: src/lang.c:575
 msgid	"-- post processing completed --"
 msgstr	""
 
-#: src/lang.c:579
+#: src/lang.c:576
 #, c-format
 msgid	"Post subject [%s]> "
 msgstr	""
 
-#: src/lang.c:580
+#: src/lang.c:577
 msgid	"# Summary of mailed/posted messages viewable by 'W' command from within tin.\n"
 msgstr	""
 
-#: src/lang.c:581
+#: src/lang.c:578
 msgid	"Posting article..."
 msgstr	""
 
-#: src/lang.c:582
+#: src/lang.c:579
+#, c-format
 msgid	"Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
 msgstr	""
 
-#: src/lang.c:583
+#: src/lang.c:580
 #, c-format
 msgid	"Hot %s"
 msgstr	""
 
-#: src/lang.c:584
+#: src/lang.c:581
 #, c-format
 msgid	"Tagged %s"
 msgstr	""
 
-#: src/lang.c:585
+#: src/lang.c:582
 #, c-format
 msgid	"Untagged %s"
 msgstr	""
 
-#: src/lang.c:586
+#: src/lang.c:583
 msgid	"Processing mail messages marked for deletion."
 msgstr	""
 
-#: src/lang.c:587
+#: src/lang.c:584
 msgid	"Processing saved articles marked for deletion."
 msgstr	""
 
-#: src/lang.c:588
+#: src/lang.c:585
 #, c-format
 msgid	"Accept Followup-To? %s=post, %s=ignore, %s=quit: "
 msgstr	""
 
-#: src/lang.c:589
+#: src/lang.c:586
 msgid	"Article unchanged, abort mailing?"
 msgstr	""
 
-#: src/lang.c:590
+#: src/lang.c:587
 #, c-format
 msgid	"Do you want to see postponed articles (%d)?"
 msgstr	""
 
-#: src/lang.c:592
+#: src/lang.c:589
 msgid	"Add quick kill filter?"
 msgstr	""
 
-#: src/lang.c:593
+#: src/lang.c:590
 msgid	"Add quick selection filter?"
 msgstr	""
 
-#: src/lang.c:594
+#: src/lang.c:591
 msgid	"Do you really want to quit?"
 msgstr	""
 
-#: src/lang.c:595
+#: src/lang.c:592
+#, c-format
 msgid	"%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
 msgstr	""
 
-#: src/lang.c:596
+#: src/lang.c:593
 msgid	"You have tagged articles in this group - quit anyway?"
 msgstr	""
 
-#: src/lang.c:597
+#: src/lang.c:594
 #, c-format
 msgid	"%s=quit, %s=edit, %s=postpone: "
 msgstr	""
 
-#: src/lang.c:598
+#: src/lang.c:595
 #, c-format
 msgid	"%s=quit %s=edit %s=save kill description: "
 msgstr	""
 
-#: src/lang.c:599
+#: src/lang.c:596
 #, c-format
 msgid	"%s=quit %s=edit %s=save select description: "
 msgstr	""
 
-#: src/lang.c:600
+#: src/lang.c:597
 msgid	"Do you really want to quit without saving your configuration?"
 msgstr	""
 
-#: src/lang.c:603
+#: src/lang.c:600
 msgid	"Invalid range - valid are '0-9.$' eg. 1-$"
 msgstr	""
 
-#: src/lang.c:604
+#: src/lang.c:601
 msgid	"Do you want to abort this operation?"
 msgstr	""
 
-#: src/lang.c:605
+#: src/lang.c:602
 msgid	"Do you want to exit tin immediately?"
 msgstr	""
 
-#: src/lang.c:606
+#: src/lang.c:603
 msgid	"Read response> "
 msgstr	""
 
-#: src/lang.c:607
+#: src/lang.c:604
 msgid	"Reading ('q' to quit)..."
 msgstr	""
 
-#: src/lang.c:608
+#: src/lang.c:605
 #, c-format
 msgid	"Reading %sarticles..."
 msgstr	""
 
-#: src/lang.c:609
+#: src/lang.c:606
 #, c-format
 msgid	"Reading %sattributes file...\n"
 msgstr	""
 
-#: src/lang.c:610
+#: src/lang.c:607
 #, c-format
 msgid	"Reading %sconfig file...\n"
 msgstr	""
 
-#: src/lang.c:611
+#: src/lang.c:608
 msgid	"Reading filter file...\n"
 msgstr	""
 
-#: src/lang.c:612
+#: src/lang.c:609
 #, c-format
 msgid	"Reading %s groups..."
 msgstr	""
 
-#: src/lang.c:613
+#: src/lang.c:610
 msgid	"Reading input history file...\n"
 msgstr	""
 
-#: src/lang.c:614
+#: src/lang.c:611
 msgid	"Reading keymap file...\n"
 msgstr	""
 
-#: src/lang.c:615
+#: src/lang.c:612
 msgid	"Reading groups from active file... "
 msgstr	""
 
-#: src/lang.c:616
+#: src/lang.c:613
 msgid	"Reading groups from newsrc file... "
 msgstr	""
 
-#: src/lang.c:617
+#: src/lang.c:614
 msgid	"Reading newsgroups file... "
 msgstr	""
 
-#: src/lang.c:618
+#: src/lang.c:615
 msgid	"Reading newsrc file..."
 msgstr	""
 
-#: src/lang.c:620
+#: src/lang.c:617
 #, c-format
 msgid	"(%d:%02d remaining)"
 msgstr	""
 
-#: src/lang.c:622
+#: src/lang.c:619
 #, c-format
 msgid	"Bogus group %s removed."
 msgstr	""
 
-#: src/lang.c:623
+#: src/lang.c:620
 #, c-format
 msgid	"Error: rename %s to %s"
 msgstr	""
 
-#: src/lang.c:624
+#: src/lang.c:621
 msgid	"Reply to author..."
 msgstr	""
 
-#: src/lang.c:625
+#: src/lang.c:622
 msgid	"Repost"
 msgstr	""
 
-#: src/lang.c:626
+#: src/lang.c:623
 msgid	"Reposting article..."
 msgstr	""
 
-#: src/lang.c:627
+#: src/lang.c:624
 #, c-format
 msgid	"Repost article(s) to group(s) [%s]> "
 msgstr	""
 
-#: src/lang.c:628
+#: src/lang.c:625
 msgid	"Reset newsrc?"
 msgstr	""
 
-#: src/lang.c:629
+#: src/lang.c:626
 msgid	"Responses have been directed to the following newsgroups"
 msgstr	""
 
-#: src/lang.c:630
+#: src/lang.c:627
 #, c-format
 msgid	"Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
 msgstr	""
 
-#: src/lang.c:631
+#: src/lang.c:628
 #, c-format
 msgid	"RespNo %4d of %4d"
 msgstr	""
 
-#: src/lang.c:632
+#: src/lang.c:629
 msgid	"Press <RETURN> to continue..."
 msgstr	""
 
-#: src/lang.c:634
+#: src/lang.c:631
 #, c-format
 msgid	"Select From    [%s] (y/n): "
 msgstr	""
 
-#: src/lang.c:635
+#: src/lang.c:632
 msgid	"Select Lines: (</>num): "
 msgstr	""
 
-#: src/lang.c:636
+#: src/lang.c:633
 msgid	"Auto-select Article Menu"
 msgstr	""
 
-#: src/lang.c:637
+#: src/lang.c:634
 #, c-format
 msgid	"Select Msg-Id  [%s] (f/l/o/n): "
 msgstr	""
 
-#: src/lang.c:638
+#: src/lang.c:635
 msgid	"Select pattern scope: "
 msgstr	""
 
-#: src/lang.c:639
+#: src/lang.c:636
 #, c-format
 msgid	"Select Subject [%s] (y/n): "
 msgstr	""
 
-#: src/lang.c:640
+#: src/lang.c:637
 msgid	"Select text pattern : "
 msgstr	""
 
-#: src/lang.c:641
+#: src/lang.c:638
 msgid	"Select time in days   : "
 msgstr	""
 
-#: src/lang.c:642
+#: src/lang.c:639
 #, c-format
 msgid	"# %s server configuration file\n"
 	"# This file was automatically saved by %s %s %s (\"%s\")\n"
@@ -2530,220 +2579,221 @@ msgid	"# %s server configuration file\n"
 	"\n"
 msgstr	""
 
-#: src/lang.c:648
+#: src/lang.c:645
 msgid	"Showing unread groups only"
 msgstr	""
 
-#: src/lang.c:649
+#: src/lang.c:646
 msgid	"Subject: line (ignore case)   "
 msgstr	""
 
-#: src/lang.c:650
+#: src/lang.c:647
 msgid	"Subject: line (case sensitive)"
 msgstr	""
 
-#: src/lang.c:651
+#: src/lang.c:648
 msgid	"Save"
 msgstr	""
 
-#: src/lang.c:652
+#: src/lang.c:649
 #, c-format
 msgid	"Save '%s' (%s/%s)?"
 msgstr	""
 
-#: src/lang.c:653
+#: src/lang.c:650
 msgid	"Save configuration before continuing?"
 msgstr	""
 
-#: src/lang.c:654
+#: src/lang.c:651
 msgid	"Save filename> "
 msgstr	""
 
-#: src/lang.c:655
+#: src/lang.c:652
 msgid	"Saved"
 msgstr	""
 
-#: src/lang.c:656
+#: src/lang.c:653
 #, c-format
 msgid	"%4d unread (%4d hot) %s in %s\n"
 msgstr	""
 
-#: src/lang.c:657
+#: src/lang.c:654
 #, c-format
 msgid	"Saved %s...\n"
 msgstr	""
 
-#: src/lang.c:658
+#: src/lang.c:655
 msgid	"Nothing was saved"
 msgstr	""
 
-#: src/lang.c:659
+#: src/lang.c:656
 #, c-format
 msgid	"\n"
 	"%s %d %s from %d %s\n"
 msgstr	""
 
-#: src/lang.c:660
+#: src/lang.c:657
 #, c-format
 msgid	"-- %s saved to %s%s --"
 msgstr	""
 
-#: src/lang.c:661
+#: src/lang.c:658
 #, c-format
 msgid	"-- %s saved to %s - %s --"
 msgstr	""
 
-#: src/lang.c:662
+#: src/lang.c:659
 msgid	"Saving..."
 msgstr	""
 
-#: src/lang.c:663
+#: src/lang.c:660
 #, c-format
 msgid	"%s: Screen initialization failed"
 msgstr	"%s: Screen initialisation failed"
 
-#: src/lang.c:665
+#: src/lang.c:662
 #, c-format
 msgid	"%s: screen is too small\n"
 msgstr	""
 
-#: src/lang.c:667
+#: src/lang.c:664
 #, c-format
 msgid	"screen is too small, %s is exiting\n"
 msgstr	""
 
-#: src/lang.c:668
+#: src/lang.c:665
 #, c-format
 msgid	"Search backwards [%s]> "
 msgstr	""
 
-#: src/lang.c:669
+#: src/lang.c:666
 #, c-format
 msgid	"Search body [%s]> "
 msgstr	""
 
-#: src/lang.c:670
+#: src/lang.c:667
 #, c-format
 msgid	"Search forwards [%s]> "
 msgstr	""
 
-#: src/lang.c:671
+#: src/lang.c:668
 msgid	"Searching..."
 msgstr	""
 
-#: src/lang.c:672
+#: src/lang.c:669
 #, c-format
 msgid	"Searching article %d of %d ('q' to abort)..."
 msgstr	""
 
-#: src/lang.c:673
+#: src/lang.c:670
 msgid	"Select article> "
 msgstr	""
 
-#: src/lang.c:674
+#: src/lang.c:671
 msgid	"Select option number before text or use arrow keys and <CR>. 'q' to quit."
 msgstr	""
 
-#: src/lang.c:675
+#: src/lang.c:672
 msgid	"Select group> "
 msgstr	""
 
-#: src/lang.c:676
+#: src/lang.c:673
 #, c-format
 msgid	"Enter selection pattern [%s]> "
 msgstr	""
 
-#: src/lang.c:677
+#: src/lang.c:674
 msgid	"Select thread > "
 msgstr	""
 
-#: src/lang.c:678
+#: src/lang.c:675
 #, c-format
 msgid	"%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
 msgstr	""
 
-#: src/lang.c:679
+#: src/lang.c:676
 msgid	"servers active-file"
 msgstr	""
 
-#: src/lang.c:680
+#: src/lang.c:677
 msgid	"Cannot move into new newsgroups. Subscribe first..."
 msgstr	""
 
-#: src/lang.c:681
+#: src/lang.c:678
 msgid	"<SPACE>"
 msgstr	""
 
-#: src/lang.c:682
+#: src/lang.c:679
 #, c-format
 msgid	"Starting: (%s)"
 msgstr	""
 
-#: src/lang.c:683
+#: src/lang.c:680
 #, c-format
 msgid	"List Thread (%d of %d)"
 msgstr	""
 
-#: src/lang.c:684
+#: src/lang.c:681
 #, c-format
 msgid	"Thread (%.*s)"
 msgstr	""
 
-#: src/lang.c:685
+#: src/lang.c:682
 msgid	"Enter wildcard subscribe pattern> "
 msgstr	""
 
-#: src/lang.c:686
+#: src/lang.c:683
 #, c-format
 msgid	"subscribed to %d groups"
 msgstr	""
 
-#: src/lang.c:687
+#: src/lang.c:684
 #, c-format
 msgid	"Subscribed to %s"
 msgstr	""
 
-#: src/lang.c:688
+#: src/lang.c:685
 msgid	"Subscribing... "
 msgstr	""
 
-#: src/lang.c:689
+#: src/lang.c:686
+#, c-format
 msgid	"Repost or supersede article(s) [%%s]? (%s/%s/%s): "
 msgstr	""
 
-#: src/lang.c:690
+#: src/lang.c:687
 #, c-format
 msgid	"Supersede article(s) to group(s) [%s]> "
 msgstr	""
 
-#: src/lang.c:691
+#: src/lang.c:688
 msgid	"Superseding article ..."
 msgstr	""
 
-#: src/lang.c:692
+#: src/lang.c:689
 #, c-format
 msgid	"\n"
 	"Stopped. Type 'fg' to restart %s\n"
 msgstr	""
 
-#: src/lang.c:694
+#: src/lang.c:691
 #, c-format
 msgid	"%d days"
 msgstr	""
 
-#: src/lang.c:695
+#: src/lang.c:692
 msgid	"<TAB>"
 msgstr	""
 
-#: src/lang.c:696
+#: src/lang.c:693
 msgid	"TeX "
 msgstr	""
 
-#: src/lang.c:697
+#: src/lang.c:694
 msgid	"# Default action/prompt strings\n"
 msgstr	""
 
-#: src/lang.c:698
+#: src/lang.c:695
 msgid	"# Defaults for quick (1 key) kill & auto-selection filters\n"
 	"# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
 	"#             5=Message-ID: & last References: entry only\n"
@@ -2753,323 +2803,323 @@ msgid	"# Defaults for quick (1 key) kill
 	"# expire=ON/OFF  ON=limit to default_filter_days OFF=don't ever expire\n"
 msgstr	""
 
-#: src/lang.c:711
+#: src/lang.c:708
 msgid	"# If ON use print current subject or newsgroup description in the last line\n"
 msgstr	""
 
-#: src/lang.c:712
+#: src/lang.c:709
 msgid	"# Host & time info used for detecting new groups (don't touch)\n"
 msgstr	""
 
-#: src/lang.c:713
+#: src/lang.c:710
 msgid	"There is no news\n"
 msgstr	""
 
-#: src/lang.c:714
+#: src/lang.c:711
 msgid	"Thread"
 msgstr	""
 
-#: src/lang.c:715
+#: src/lang.c:712
 msgid	"Thread Level Commands"
 msgstr	""
 
-#: src/lang.c:716
+#: src/lang.c:713
 msgid	"Thread deselected"
 msgstr	""
 
-#: src/lang.c:717
+#: src/lang.c:714
 msgid	"Thread selected"
 msgstr	""
 
-#: src/lang.c:719
+#: src/lang.c:716
 msgid	"threads"
 msgstr	""
 
-#: src/lang.c:721
+#: src/lang.c:718
 msgid	"Thread range"
 msgstr	""
 
-#: src/lang.c:722
+#: src/lang.c:719
 msgid	"thread"
 msgstr	""
 
-#: src/lang.c:723
+#: src/lang.c:720
 #, c-format
 msgid	"Thread %4s of %4s"
 msgstr	""
 
-#: src/lang.c:724
+#: src/lang.c:721
 msgid	"Threading articles..."
 msgstr	""
 
-#: src/lang.c:725
+#: src/lang.c:722
 #, c-format
 msgid	"Toggled word highlighting %s"
 msgstr	""
 
-#: src/lang.c:726
+#: src/lang.c:723
 msgid	"Toggled rot13 encoding"
 msgstr	""
 
-#: src/lang.c:727
+#: src/lang.c:724
 #, c-format
 msgid	"Toggled german TeX encoding %s"
 msgstr	""
 
-#: src/lang.c:728
+#: src/lang.c:725
 #, c-format
 msgid	"Toggled tab-width to %d"
 msgstr	""
 
-#: src/lang.c:729
+#: src/lang.c:726
 #, c-format
 msgid	"%d Trying to dotlock %s"
 msgstr	""
 
-#: src/lang.c:730
+#: src/lang.c:727
 #, c-format
 msgid	"%d Trying to lock %s"
 msgstr	""
 
-#: src/lang.c:731
+#: src/lang.c:728
 msgid	"           h=help\n"
 msgstr	""
 
-#: src/lang.c:733
+#: src/lang.c:730
 msgid	"Unlimited"
 msgstr	""
 
-#: src/lang.c:734
+#: src/lang.c:731
 msgid	"Enter wildcard unsubscribe pattern> "
 msgstr	""
 
-#: src/lang.c:735
+#: src/lang.c:732
 #, c-format
 msgid	"Error decoding %s : %s"
 msgstr	""
 
-#: src/lang.c:736
+#: src/lang.c:733
 msgid	"No end."
 msgstr	""
 
-#: src/lang.c:737
+#: src/lang.c:734
 #, c-format
 msgid	"%s successfully decoded."
 msgstr	""
 
-#: src/lang.c:738
+#: src/lang.c:735
 #, c-format
 msgid	"%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
 	"\n"
 msgstr	""
 
-#: src/lang.c:739
+#: src/lang.c:736
 msgid	"unread "
 msgstr	""
 
-#: src/lang.c:740
+#: src/lang.c:737
 #, c-format
 msgid	"unsubscribed from %d groups"
 msgstr	""
 
-#: src/lang.c:741
+#: src/lang.c:738
 #, c-format
 msgid	"Unsubscribed from %s"
 msgstr	""
 
-#: src/lang.c:742
+#: src/lang.c:739
 msgid	"Unsubscribing... "
 msgstr	""
 
-#: src/lang.c:743
+#: src/lang.c:740
 msgid	"Unthreading articles..."
 msgstr	""
 
-#: src/lang.c:744
+#: src/lang.c:741
 msgid	"Updated"
 msgstr	""
 
-#: src/lang.c:745
+#: src/lang.c:742
 msgid	"Updating"
 msgstr	""
 
-#: src/lang.c:746
+#: src/lang.c:743
 #, c-format
 msgid	"Opening %s\n"
 msgstr	""
 
-#: src/lang.c:747
+#: src/lang.c:744
 msgid	"No more URL's in this article"
 msgstr	""
 
-#: src/lang.c:748
+#: src/lang.c:745
 msgid	"Use MIME display program for this message?"
 msgstr	""
 
-#: src/lang.c:749
+#: src/lang.c:746
 msgid	"  -c       mark all news as read in subscribed newsgroups (batch mode)"
 msgstr	""
 
-#: src/lang.c:750
+#: src/lang.c:747
 msgid	"  -Z       return status indicating if any unread news (batch mode)"
 msgstr	""
 
-#: src/lang.c:751
+#: src/lang.c:748
 msgid	"  -q       don't check for new newsgroups"
 msgstr	""
 
-#: src/lang.c:752
+#: src/lang.c:749
 msgid	"  -X       don't save any files on quit"
 msgstr	""
 
-#: src/lang.c:753
+#: src/lang.c:750
 msgid	"  -d       don't show newsgroup descriptions"
 msgstr	""
 
-#: src/lang.c:754
+#: src/lang.c:751
 msgid	"  -G limit get only limit articles/group"
 msgstr	""
 
-#: src/lang.c:755
+#: src/lang.c:752
 #, c-format
 msgid	"  -H       help information about %s"
 msgstr	""
 
-#: src/lang.c:756
+#: src/lang.c:753
 msgid	"  -h       this help message"
 msgstr	""
 
-#: src/lang.c:757
+#: src/lang.c:754
 #, c-format
 msgid	"  -I dir   news index file directory [default=%s]"
 msgstr	""
 
-#: src/lang.c:758
+#: src/lang.c:755
 msgid	"  -u       update index files (batch mode)"
 msgstr	""
 
-#: src/lang.c:759
+#: src/lang.c:756
 #, c-format
 msgid	"  -m dir   mailbox directory [default=%s]"
 msgstr	""
 
-#: src/lang.c:760
+#: src/lang.c:757
 #, c-format
 msgid	"\n"
 	"Mail bug reports/comments to %s"
 msgstr	""
 
-#: src/lang.c:761
+#: src/lang.c:758
 msgid	"  -N       mail new news to your posts (batch mode)"
 msgstr	""
 
-#: src/lang.c:762
+#: src/lang.c:759
 msgid	"  -M user  mail new news to specified user (batch mode)"
 msgstr	""
 
-#: src/lang.c:763
+#: src/lang.c:760
 #, c-format
 msgid	"  -f file  subscribed to newsgroups file [default=%s]"
 msgstr	""
 
-#: src/lang.c:764
+#: src/lang.c:761
 msgid	"  -x       no posting mode"
 msgstr	""
 
-#: src/lang.c:765
+#: src/lang.c:762
 msgid	"  -w       post an article and exit"
 msgstr	""
 
-#: src/lang.c:766
+#: src/lang.c:763
 msgid	"  -o       post all postponed articles and exit"
 msgstr	""
 
-#: src/lang.c:767
+#: src/lang.c:764
 msgid	"  -r       read news remotely from default NNTP server"
 msgstr	""
 
-#: src/lang.c:768
+#: src/lang.c:765
 msgid	"  -R       read news saved by -S option"
 msgstr	""
 
-#: src/lang.c:769
+#: src/lang.c:766
 #, c-format
 msgid	"  -s dir   save news directory [default=%s]"
 msgstr	""
 
-#: src/lang.c:770
+#: src/lang.c:767
 msgid	"  -S       save new news for later reading (batch mode)"
 msgstr	""
 
-#: src/lang.c:771
+#: src/lang.c:768
 msgid	"  -z       start if any unread news"
 msgstr	""
 
-#: src/lang.c:772
+#: src/lang.c:769
 #, c-format
 msgid	"A Usenet reader.\n"
 	"\n"
 	"Usage: %s [options] [newsgroup[,...]]"
 msgstr	""
 
-#: src/lang.c:773
+#: src/lang.c:770
 msgid	"  -v       verbose output for batch mode options"
 msgstr	""
 
-#: src/lang.c:774
+#: src/lang.c:771
 msgid	"  -V       print version & date information"
 msgstr	""
 
-#: src/lang.c:775
+#: src/lang.c:772
 #, c-format
 msgid	"%s only useful without batch mode operations\n"
 msgstr	""
 
-#: src/lang.c:776
+#: src/lang.c:773
 #, c-format
 msgid	"%s only useful for batch mode operations\n"
 msgstr	""
 
-#: src/lang.c:778
+#: src/lang.c:775
 #, c-format
 msgid	"\n"
 	"%s%d out of range (0 - %d). Reset to 0"
 msgstr	""
 
-#: src/lang.c:779
+#: src/lang.c:776
 #, c-format
 msgid	"View '%s' (%s/%s)?"
 msgstr	""
 
-#: src/lang.c:781
+#: src/lang.c:778
 #, c-format
 msgid	"\n"
 	"Warning: posting exceeds %d columns. Line %d is the first long one:\n"
 	"%-100s\n"
 msgstr	""
 
-#: src/lang.c:782
+#: src/lang.c:779
 msgid	"\n"
 	"Warning: article unchanged after editing\n"
 msgstr	""
 
-#: src/lang.c:783
+#: src/lang.c:780
 msgid	"\n"
 	"Warning: \"Subject:\" contains only whitespaces.\n"
 msgstr	""
 
-#: src/lang.c:784
+#: src/lang.c:781
 msgid	"\n"
 	"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:\".\n"
 msgstr	""
 
-#: src/lang.c:786
+#: src/lang.c:783
 msgid	"\n"
 	"Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
 	"         with \"Re: \" and does not contain \"(was:\".\n"
 msgstr	""
 
-#: src/lang.c:789
+#: src/lang.c:786
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly written by you. This will "
@@ -3082,7 +3132,7 @@ msgid	"Read carefully!\n"
 	"\n"
 msgstr	""
 
-#: src/lang.c:793
+#: src/lang.c:790
 msgid	"\n"
 	"Warning: You are using a non-plain transfer encoding (such as base64 or\n"
 	"         quoted-printable) and an external inews program to submit your\n"
@@ -3090,7 +3140,7 @@ msgid	"\n"
 	"         not be encoded properly.\n"
 msgstr	""
 
-#: src/lang.c:798
+#: src/lang.c:795
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3099,7 +3149,7 @@ msgid	"\n"
 	"Read WHATSNEW, etc...\n"
 msgstr	""
 
-#: src/lang.c:800
+#: src/lang.c:797
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3107,7 +3157,7 @@ msgid	"\n"
 	"Some values in your %s file may be ignored, others might have changed!\n"
 msgstr	""
 
-#: src/lang.c:803
+#: src/lang.c:800
 #, c-format
 msgid	"Warning: tin wrote fewer groups to your\n"
 	"\t%s\n"
@@ -3116,18 +3166,18 @@ msgid	"Warning: tin wrote fewer groups t
 	"before you start tin once again!\n"
 msgstr	""
 
-#: src/lang.c:807
+#: src/lang.c:804
 #, c-format
 msgid	"\n"
 	"Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
 msgstr	""
 
-#: src/lang.c:808
+#: src/lang.c:805
 #, c-format
 msgid	"Warning: Only %d out of %d articles were saved"
 msgstr	""
 
-#: src/lang.c:809
+#: src/lang.c:806
 #, c-format
 msgid	"\n"
 	"Warning: Your signature  is longer than %d lines.  Since signatures usually "
@@ -3137,47 +3187,47 @@ msgid	"\n"
 	"         possible.\n"
 msgstr	""
 
-#: src/lang.c:813
+#: src/lang.c:810
 #, c-format
 msgid	"Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
 msgstr	""
 
-#: src/lang.c:814
+#: src/lang.c:811
 msgid	"\n"
 	"Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
 msgstr	""
 
-#: src/lang.c:815
+#: src/lang.c:812
 msgid	"Writing attributes file..."
 msgstr	""
 
-#: src/lang.c:817
+#: src/lang.c:814
 #, c-format
 msgid	"%d Responses"
 msgstr	""
 
-#: src/lang.c:819
+#: src/lang.c:816
 #, c-format
 msgid	"Added %d %s"
 msgstr	""
 
-#: src/lang.c:820
+#: src/lang.c:817
 msgid	"No unsubscribed groups to show"
 msgstr	""
 
-#: src/lang.c:821
+#: src/lang.c:818
 msgid	"Showing subscribed to groups only"
 msgstr	""
 
-#: src/lang.c:822
+#: src/lang.c:819
 msgid	"Yes "
 msgstr	""
 
-#: src/lang.c:823
+#: src/lang.c:820
 msgid	"    You have mail\n"
 msgstr	""
 
-#: src/lang.c:828
+#: src/lang.c:825
 #, c-format
 msgid	"\n"
 	"Warning: Posting is in %s and contains characters which are not\n"
@@ -3189,16 +3239,11 @@ msgid	"\n"
 	"         M)enu option.\n"
 msgstr	""
 
-#: src/lang.c:839
-#, c-format
-msgid	"Redefined key %s '%s' -> '%s'\n"
-msgstr	""
-
-#: src/lang.c:840
+#: src/lang.c:836
 msgid	"  -D       debug mode 1=NNTP 2=ALL"
 msgstr	""
 
-#: src/lang.c:844
+#: src/lang.c:840
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly not written by you.  This "
@@ -3214,11 +3259,11 @@ msgid	"Read carefully!\n"
 	"\n"
 msgstr	""
 
-#: src/lang.c:853
+#: src/lang.c:849
 msgid	"toggle color"
 msgstr	"toggle colour"
 
-#: src/lang.c:854
+#: src/lang.c:850
 msgid	"# Changing colors of several screen parts\n"
 	"# Possible values are:\n"
 	"#  -1 = default (white for foreground and black for background)\n"
@@ -3242,339 +3287,347 @@ msgid	"# Changing colors of several scre
 	"\n"
 msgstr	""
 
-#: src/lang.c:874
+#: src/lang.c:870
 msgid	"  -a       toggle color flag"
 msgstr	"  -a       toggle colour flag"
 
-#: src/lang.c:878
+#: src/lang.c:874
 msgid	"\n"
 	"Error: Followup-To set to more than one newsgroup!\n"
 msgstr	""
 
-#: src/lang.c:879
+#: src/lang.c:875
 #, c-format
 msgid	"\n"
 	"Error: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	""
 
-#: src/lang.c:880
+#: src/lang.c:876
 #, c-format
 msgid	"\n"
 	"Error: \"%s\" is not a valid newsgroup!\n"
 msgstr	""
 
-#: src/lang.c:882
+#: src/lang.c:878
 msgid	"\n"
 	"Warning: Followup-To set to more than one newsgroup!\n"
 msgstr	""
 
-#: src/lang.c:883
+#: src/lang.c:879
 #, c-format
 msgid	"\n"
 	"Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	""
 
-#: src/lang.c:884
+#: src/lang.c:880
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
 msgstr	""
 
-#: src/lang.c:885
+#: src/lang.c:881
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not a valid newsgroup at this site!\n"
 msgstr	""
 
-#: src/lang.c:889
+#: src/lang.c:885
 #, c-format
 msgid	"%d files successfully written from %d articles. %d %s occurred."
 msgstr	""
 
-#: src/lang.c:890
+#: src/lang.c:886
 msgid	"Missing parts."
 msgstr	""
 
-#: src/lang.c:891
+#: src/lang.c:887
 msgid	"No beginning."
 msgstr	""
 
-#: src/lang.c:892
+#: src/lang.c:888
 msgid	"No data."
 msgstr	""
 
-#: src/lang.c:893
+#: src/lang.c:889
 msgid	"Unknown error."
 msgstr	""
 
-#: src/lang.c:896
+#: src/lang.c:892
 #, c-format
 msgid	"\tChecksum of %s (%ld %s)"
 msgstr	""
 
-#: src/lang.c:901
+#: src/lang.c:897
 msgid	"Reading mail active file... "
 msgstr	""
 
-#: src/lang.c:902
+#: src/lang.c:898
 msgid	"Reading mailgroups file... "
 msgstr	""
 
-#: src/lang.c:906
+#: src/lang.c:902
 msgid	"perform PGP operations on article"
 msgstr	""
 
-#: src/lang.c:907
+#: src/lang.c:903
 msgid	"Add key(s) to public keyring?"
 msgstr	""
 
-#: src/lang.c:908
+#: src/lang.c:904
 #, c-format
 msgid	"%s=encrypt, %s=sign, %s=both, %s=quit: "
 msgstr	""
 
-#: src/lang.c:909
+#: src/lang.c:905
 #, c-format
 msgid	"%s=sign, %s=sign & include public key, %s=quit: "
 msgstr	""
 
-#: src/lang.c:910
+#: src/lang.c:906
 #, c-format
 msgid	"PGP has not been set up (can't open %s)"
 msgstr	""
 
-#: src/lang.c:911
+#: src/lang.c:907
 msgid	"Article not signed and no public keys found"
 msgstr	""
 
-#: src/lang.c:913
+#: src/lang.c:909
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	""
 
-#: src/lang.c:914
+#: src/lang.c:910
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
 msgstr	""
 
-#: src/lang.c:915
+#: src/lang.c:911
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	""
 
-#: src/lang.c:917
+#: src/lang.c:913
 #, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	""
 
-#: src/lang.c:918
+#: src/lang.c:914
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
 msgstr	""
 
-#: src/lang.c:919
+#: src/lang.c:915
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	""
 
-#: src/lang.c:923
+#: src/lang.c:919
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
 msgstr	""
 
-#: src/lang.c:924
+#: src/lang.c:920
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
 msgstr	""
 
-#: src/lang.c:925
+#: src/lang.c:921
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	""
 
-#: src/lang.c:927
+#: src/lang.c:923
 #, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
 msgstr	""
 
-#: src/lang.c:928
+#: src/lang.c:924
+#, c-format
 msgid	"%s=quit, %s=edit, %s=send [%%s]: "
 msgstr	""
 
-#: src/lang.c:929
+#: src/lang.c:925
+#, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	""
 
-#: src/lang.c:938
+#: src/lang.c:934
 msgid	"Try cache_overview_files to speed up things.\n"
 msgstr	""
 
-#: src/lang.c:939
+#: src/lang.c:935
 msgid	"Tin will use local index files instead.\n"
 msgstr	""
 
-#: src/lang.c:940
+#: src/lang.c:936
 msgid	"Cannot find NNTP server name"
 msgstr	""
 
-#: src/lang.c:941
+#: src/lang.c:937
 #, c-format
 msgid	"Connecting to %s:%d..."
 msgstr	""
 
-#: src/lang.c:942
+#: src/lang.c:938
 msgid	"Disconnecting from server...\n"
 msgstr	""
 
-#: src/lang.c:943
+#: src/lang.c:939
 #, c-format
 msgid	"Wrong newsgroup name in response of GROUP command, %s for %s"
 msgstr	""
 
-#: src/lang.c:944
+#: src/lang.c:940
 #, c-format
 msgid	"Failed to connect to NNTP server %s. Exiting..."
 msgstr	""
 
-#: src/lang.c:945
+#: src/lang.c:941
 msgid	"205  Closing connection"
 msgstr	""
 
-#: src/lang.c:946
+#: src/lang.c:942
 msgid	"Your server does not support the NNTP XOVER or OVER command.\n"
 msgstr	""
 
-#: src/lang.c:947
+#: src/lang.c:943
 msgid	"Connection to news server has timed out. Reconnect?"
 msgstr	""
 
-#: src/lang.c:948
+#: src/lang.c:944
 #, c-format
 msgid	"Put the server name in the file %s,\n"
 	"or set the environment variable NNTPSERVER"
 msgstr	""
 
-#: src/lang.c:949
+#: src/lang.c:945
 msgid	"  -A       force authentication on connect"
 msgstr	""
 
-#: src/lang.c:950
+#: src/lang.c:946
 #, c-format
 msgid	"  -g serv  read news from NNTP server serv [default=%s]"
 msgstr	""
 
-#: src/lang.c:951
+#: src/lang.c:947
 #, c-format
 msgid	"  -p port  use port as NNTP port [default=%d]"
 msgstr	""
 
-#: src/lang.c:952
+#: src/lang.c:948
 msgid	"  -Q       quick start. Same as -nqd"
 msgstr	""
 
-#: src/lang.c:953
+#: src/lang.c:949
 msgid	"  -l       use only LIST instead of GROUP (-n) command"
 msgstr	""
 
-#: src/lang.c:954
+#: src/lang.c:950
 msgid	"  -n       only read subscribed .newsrc groups from NNTP server"
 msgstr	""
 
-#: src/lang.c:956
+#: src/lang.c:952
 #, c-format
 msgid	"%s/tcp: Unknown service.\n"
 msgstr	""
 
-#: src/lang.c:959
+#: src/lang.c:955
 msgid	"\n"
 	"socket or connect problem\n"
 msgstr	""
 
-#: src/lang.c:961
+#: src/lang.c:957
 #, c-format
 msgid	"\n"
 	"Connection to %s: "
 msgstr	""
 
-#: src/lang.c:962
+#: src/lang.c:958
 msgid	"Giving up...\n"
 msgstr	""
 
-#: src/lang.c:965
+#: src/lang.c:961
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 	"Tin will try to use XHDR XREF instead (slows down things a bit).\n"
 msgstr	""
 
-#: src/lang.c:968
+#: src/lang.c:964
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 msgstr	""
 
-#: src/lang.c:971
+#: src/lang.c:967
 #, c-format
 msgid	"Can't open %s. Try %s -r to read news via NNTP.\n"
 msgstr	""
 
-#: src/lang.c:974
+#: src/lang.c:970
 msgid	"  -Q       quick start. Same as -qd"
 msgstr	""
 
-#: src/lang.c:975
+#: src/lang.c:971
 msgid	"  -l       read only active file instead of scanning spool (-n) command"
 msgstr	""
 
-#: src/lang.c:976
+#: src/lang.c:972
 msgid	"  -n       only read subscribed .newsrc groups from spool"
 msgstr	""
 
-#: src/lang.c:977
+#: src/lang.c:973
 msgid	"Your server does not have Xref: in its NOV-files.\n"
 msgstr	""
 
-#: src/lang.c:981
+#: src/lang.c:977
 msgid	"Posting using external inews failed. Use built in inews instead?"
 msgstr	""
 
-#: src/lang.c:982
+#: src/lang.c:978
 msgid	"It worked! Should I always use my built in inews from now on?"
 msgstr	""
 
-#: src/lang.c:990
+#: src/lang.c:986
 #, c-format
 msgid	"%d %s printed"
 msgstr	""
 
-#: src/lang.c:991
+#: src/lang.c:987
 msgid	"output article/thread/hot/pattern/tagged articles to printer"
 msgstr	""
 
-#: src/lang.c:992
+#: src/lang.c:988
 msgid	"Print"
 msgstr	""
 
-#: src/lang.c:993
+#: src/lang.c:989
 msgid	"Printing..."
 msgstr	""
 
-#: src/lang.c:997
+#: src/lang.c:993
 msgid	"pipe article/thread/hot/pattern/tagged articles into command"
 msgstr	""
 
-#: src/lang.c:998
+#: src/lang.c:994
 msgid	"No command"
 msgstr	""
 
-#: src/lang.c:999
+#: src/lang.c:995
 msgid	"Pipe"
 msgstr	""
 
-#: src/lang.c:1000
+#: src/lang.c:996
 #, c-format
 msgid	"Pipe to command [%.*s]> "
 msgstr	""
 
-#: src/lang.c:1001
+#: src/lang.c:997
 msgid	"Piping..."
 msgstr	""
 
-#: src/lang.c:1003
+#: src/lang.c:999
 msgid	"Piping not enabled."
 msgstr	""
 
-#: src/lang.c:1007
+#: src/lang.c:1003
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line has spaces  in it that MUST be removed.\n"
@@ -3583,7 +3636,7 @@ msgid	"\n"
 	"       newsgroup names.\n"
 msgstr	""
 
-#: src/lang.c:1012
+#: src/lang.c:1008
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line is  continued in  the next line.  Since\n"
@@ -3591,7 +3644,7 @@ msgid	"\n"
 	"       Please write all newsgroups into a single line.\n"
 msgstr	""
 
-#: src/lang.c:1017
+#: src/lang.c:1013
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line is continued in the next line.\n"
@@ -3599,13 +3652,13 @@ msgid	"\n"
 	"         To avoid trouble please write all newsgroups into a single line.\n"
 msgstr	""
 
-#: src/lang.c:1021
+#: src/lang.c:1017
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
 msgstr	""
 
-#: src/lang.c:1026
+#: src/lang.c:1022
 msgid	"\n"
 	"  If your article contains quoted text  please take some time to pare it "
 	"down\n"
@@ -3626,494 +3679,498 @@ msgid	"\n"
 	"  likely to ignore it completely.  It's a crowded net out there.\n"
 msgstr	""
 
-#: src/lang.c:1039
+#: src/lang.c:1035
 msgid	"shell escape"
 msgstr	""
 
-#: src/lang.c:1040
+#: src/lang.c:1036
 #, c-format
 msgid	"Shell Command (%s)"
 msgstr	""
 
-#: src/lang.c:1041
+#: src/lang.c:1037
 #, c-format
 msgid	"Enter shell command [%s]> "
 msgstr	""
 
-#: src/lang.c:1045
+#: src/lang.c:1041
 #, c-format
 msgid	"%s: Can't get entry for TERM\n"
 msgstr	""
 
-#: src/lang.c:1049
+#: src/lang.c:1045
 #, c-format
 msgid	"Group %.*s ('q' to quit)..."
 msgstr	""
 
-#: src/lang.c:1051
+#: src/lang.c:1047
 #, c-format
 msgid	"Group %.*s..."
 msgstr	""
 
-#: src/lang.c:1055
+#: src/lang.c:1051
 msgid	"Server unavailable\n"
 msgstr	""
 
-#: src/lang.c:1061
+#: src/lang.c:1057
 #, c-format
-msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; "
-	"%s=post"
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+	"s=post"
 msgstr	""
 
-#: src/lang.c:1062
+#: src/lang.c:1058
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	""
 
-#: src/lang.c:1064
+#: src/lang.c:1060
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	""
 
-#: src/lang.c:1065
+#: src/lang.c:1061
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	""
 
-#: src/lang.c:1069
+#: src/lang.c:1065
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	""
 
-#: src/lang.c:1070
+#: src/lang.c:1066
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	""
 
-#: src/lang.c:1072
+#: src/lang.c:1068
 #, c-format
 msgid	"%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	""
 
-#: src/lang.c:1073
+#: src/lang.c:1069
 #, c-format
 msgid	"%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	""
 
-#: src/lang.c:1079
+#: src/lang.c:1075
 msgid	"Terminal does not support color"
 msgstr	"Terminal does not support colour"
 
-#: src/lang.c:1084
+#: src/lang.c:1080
 #, c-format
 msgid	"Trying %s"
 msgstr	""
 
-#: src/lang.c:1098 src/lang.c:1123 src/lang.c:1139 src/lang.c:1318 src/refs.c:296
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315 src/refs.c:296
 msgid	"None"
 msgstr	""
 
-#: src/lang.c:1099
+#: src/lang.c:1095
 msgid	"Subject"
 msgstr	""
 
-#: src/lang.c:1100
+#: src/lang.c:1096
 msgid	"References"
 msgstr	""
 
-#: src/lang.c:1101
+#: src/lang.c:1097
 msgid	"Both Subject and References"
 msgstr	""
 
-#: src/lang.c:1102
+#: src/lang.c:1098
 msgid	"Multipart Subject"
 msgstr	""
 
-#: src/lang.c:1114 src/lang.c:1225
+#: src/lang.c:1099
+msgid	"Percentage Match"
+msgstr	""
+
+#: src/lang.c:1111 src/lang.c:1222
 msgid	"No"
 msgstr	""
 
-#: src/lang.c:1115 src/lang.c:1227
+#: src/lang.c:1112 src/lang.c:1224
 msgid	"Yes"
 msgstr	""
 
-#: src/lang.c:1116
+#: src/lang.c:1113
 msgid	"Hide All"
 msgstr	""
 
-#: src/lang.c:1124
+#: src/lang.c:1121
 msgid	"Address"
 msgstr	""
 
-#: src/lang.c:1125
+#: src/lang.c:1122
 msgid	"Full Name"
 msgstr	""
 
-#: src/lang.c:1126
+#: src/lang.c:1123
 msgid	"Address and Name"
 msgstr	""
 
-#: src/lang.c:1133
+#: src/lang.c:1130
 msgid	"Max"
 msgstr	""
 
-#: src/lang.c:1134
+#: src/lang.c:1131
 msgid	"Sum"
 msgstr	""
 
-#: src/lang.c:1135
+#: src/lang.c:1132
 msgid	"Average"
 msgstr	""
 
-#: src/lang.c:1140
+#: src/lang.c:1137
 msgid	"Lines"
 msgstr	""
 
-#: src/lang.c:1141
+#: src/lang.c:1138
 msgid	"Score"
 msgstr	""
 
-#: src/lang.c:1142
+#: src/lang.c:1139
 msgid	"Lines & Score"
 msgstr	""
 
-#: src/lang.c:1151
+#: src/lang.c:1148
 msgid	"Black"
 msgstr	""
 
-#: src/lang.c:1152
+#: src/lang.c:1149
 msgid	"Red"
 msgstr	""
 
-#: src/lang.c:1153
+#: src/lang.c:1150
 msgid	"Green"
 msgstr	""
 
-#: src/lang.c:1154
+#: src/lang.c:1151
 msgid	"Brown"
 msgstr	""
 
-#: src/lang.c:1155
+#: src/lang.c:1152
 msgid	"Blue"
 msgstr	""
 
-#: src/lang.c:1156
+#: src/lang.c:1153
 msgid	"Pink"
 msgstr	""
 
-#: src/lang.c:1157
+#: src/lang.c:1154
 msgid	"Cyan"
 msgstr	""
 
-#: src/lang.c:1158
+#: src/lang.c:1155
 msgid	"White"
 msgstr	""
 
-#: src/lang.c:1159
+#: src/lang.c:1156
 msgid	"Gray"
 msgstr	"Grey"
 
-#: src/lang.c:1160
+#: src/lang.c:1157
 msgid	"Light Red"
 msgstr	""
 
-#: src/lang.c:1161
+#: src/lang.c:1158
 msgid	"Light Green"
 msgstr	""
 
-#: src/lang.c:1162
+#: src/lang.c:1159
 msgid	"Yellow"
 msgstr	""
 
-#: src/lang.c:1163
+#: src/lang.c:1160
 msgid	"Light Blue"
 msgstr	""
 
-#: src/lang.c:1164
+#: src/lang.c:1161
 msgid	"Light Pink"
 msgstr	""
 
-#: src/lang.c:1165
+#: src/lang.c:1162
 msgid	"Light Cyan"
 msgstr	""
 
-#: src/lang.c:1166
+#: src/lang.c:1163
 msgid	"Light White"
 msgstr	""
 
-#: src/lang.c:1174 src/lang.c:1231 src/lang.c:1245
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
 msgid	"Nothing"
 msgstr	""
 
-#: src/lang.c:1175
+#: src/lang.c:1172
 msgid	"Mark"
 msgstr	""
 
-#: src/lang.c:1176
+#: src/lang.c:1173
 msgid	"Space"
 msgstr	""
 
-#: src/lang.c:1183
+#: src/lang.c:1180
 msgid	"Normal"
 msgstr	""
 
-#: src/lang.c:1184
+#: src/lang.c:1181
 msgid	"Best highlighting"
 msgstr	""
 
-#: src/lang.c:1185
+#: src/lang.c:1182
 msgid	"Underline"
 msgstr	""
 
-#: src/lang.c:1186
+#: src/lang.c:1183
 msgid	"Reverse video"
 msgstr	""
 
-#: src/lang.c:1187
+#: src/lang.c:1184
 msgid	"Blinking"
 msgstr	""
 
-#: src/lang.c:1188
+#: src/lang.c:1185
 msgid	"Half bright"
 msgstr	""
 
-#: src/lang.c:1189
+#: src/lang.c:1186
 msgid	"Bold"
 msgstr	""
 
-#: src/lang.c:1194
+#: src/lang.c:1191
 msgid	"none"
 msgstr	""
 
-#: src/lang.c:1195
+#: src/lang.c:1192
 msgid	"commands"
 msgstr	""
 
-#: src/lang.c:1196
+#: src/lang.c:1193
 msgid	"select"
 msgstr	""
 
-#: src/lang.c:1198
+#: src/lang.c:1195
 msgid	"commands & quit"
 msgstr	""
 
-#: src/lang.c:1199
+#: src/lang.c:1196
 msgid	"commands & select"
 msgstr	""
 
-#: src/lang.c:1200
+#: src/lang.c:1197
 msgid	"quit & select"
 msgstr	""
 
-#: src/lang.c:1201
+#: src/lang.c:1198
 msgid	"commands & quit & select"
 msgstr	""
 
-#: src/lang.c:1226
+#: src/lang.c:1223
 msgid	"Shell archive"
 msgstr	""
 
-#: src/lang.c:1232
+#: src/lang.c:1229
 msgid	"Subject: (descending)"
 msgstr	""
 
-#: src/lang.c:1233
+#: src/lang.c:1230
 msgid	"Subject: (ascending)"
 msgstr	""
 
-#: src/lang.c:1234
+#: src/lang.c:1231
 msgid	"From: (descending)"
 msgstr	""
 
-#: src/lang.c:1235
+#: src/lang.c:1232
 msgid	"From: (ascending)"
 msgstr	""
 
-#: src/lang.c:1236
+#: src/lang.c:1233
 msgid	"Date: (descending)"
 msgstr	""
 
-#: src/lang.c:1237
+#: src/lang.c:1234
 msgid	"Date: (ascending)"
 msgstr	""
 
-#: src/lang.c:1238 src/lang.c:1246
+#: src/lang.c:1235 src/lang.c:1243
 msgid	"Score (descending)"
 msgstr	""
 
-#: src/lang.c:1239 src/lang.c:1247
+#: src/lang.c:1236 src/lang.c:1244
 msgid	"Score (ascending)"
 msgstr	""
 
-#: src/lang.c:1240
+#: src/lang.c:1237
 msgid	"Lines: (descending)"
 msgstr	""
 
-#: src/lang.c:1241
+#: src/lang.c:1238
 msgid	"Lines: (ascending)"
 msgstr	""
 
-#: src/lang.c:1252
+#: src/lang.c:1249
 msgid	"Always Keep"
 msgstr	""
 
-#: src/lang.c:1253
+#: src/lang.c:1250
 msgid	"Always Remove"
 msgstr	""
 
-#: src/lang.c:1254
+#: src/lang.c:1251
 msgid	"Mark with D on selection screen"
 msgstr	""
 
-#: src/lang.c:1259
+#: src/lang.c:1256
 msgid	"Kill only unread arts"
 msgstr	""
 
-#: src/lang.c:1260
+#: src/lang.c:1257
 msgid	"Kill all arts & show with K"
 msgstr	""
 
 #. TODO: s/K/art_marked_killed/
-#: src/lang.c:1261
+#: src/lang.c:1258
 msgid	"Kill all arts and never show"
 msgstr	""
 
-#: src/lang.c:1266
+#: src/lang.c:1263
 msgid	"Nothing special"
 msgstr	""
 
-#: src/lang.c:1267
+#: src/lang.c:1264
 msgid	"Compress quotes"
 msgstr	""
 
-#: src/lang.c:1268
+#: src/lang.c:1265
 msgid	"Quote signatures"
 msgstr	""
 
-#: src/lang.c:1269
+#: src/lang.c:1266
 msgid	"Compress quotes, quote sigs"
 msgstr	""
 
-#: src/lang.c:1270
+#: src/lang.c:1267
 msgid	"Quote empty lines"
 msgstr	""
 
-#: src/lang.c:1271
+#: src/lang.c:1268
 msgid	"Compress quotes, quote empty lines"
 msgstr	""
 
-#: src/lang.c:1272
+#: src/lang.c:1269
 msgid	"Quote sigs & empty lines"
 msgstr	""
 
-#: src/lang.c:1273
+#: src/lang.c:1270
 msgid	"Comp. q., quote sigs & empty lines"
 msgstr	""
 
-#: src/lang.c:1311
+#: src/lang.c:1308
 msgid	"no"
 msgstr	""
 
-#: src/lang.c:1312
+#: src/lang.c:1309
 msgid	"with headers"
 msgstr	""
 
-#: src/lang.c:1313
+#: src/lang.c:1310
 msgid	"without headers"
 msgstr	""
 
-#: src/lang.c:1320 src/lang.c:1326
+#: src/lang.c:1317 src/lang.c:1323
 msgid	"NFKC"
 msgstr	""
 
-#: src/lang.c:1321
+#: src/lang.c:1318
 msgid	"NFKD"
 msgstr	""
 
-#: src/lang.c:1322
+#: src/lang.c:1319
 msgid	"NFC"
 msgstr	""
 
-#: src/lang.c:1323
+#: src/lang.c:1320
 msgid	"NFD"
 msgstr	""
 
-#: src/lang.c:1334
+#: src/lang.c:1331
 msgid	"Display Options"
 msgstr	""
 
-#: src/lang.c:1341
+#: src/lang.c:1338
 msgid	"Color Options"
 msgstr	"Colour Options"
 
-#: src/lang.c:1348
+#: src/lang.c:1345
 msgid	"Article-Limiting Options"
 msgstr	""
 
-#: src/lang.c:1354
+#: src/lang.c:1351
 msgid	"Posting/Mailing Options"
 msgstr	""
 
-#: src/lang.c:1360
+#: src/lang.c:1357
 msgid	"Saving/Printing Options"
 msgstr	""
 
-#: src/lang.c:1366
+#: src/lang.c:1363
 msgid	"Expert Options"
 msgstr	""
 
-#: src/lang.c:1372
+#: src/lang.c:1369
 msgid	"Filtering Options"
 msgstr	""
 
-#: src/lang.c:1377 src/lang.c:1408 src/lang.c:1414 src/lang.c:1426 src/lang.c:1476
-#: src/lang.c:1482 src/lang.c:1492 src/lang.c:1512 src/lang.c:1587 src/lang.c:1757
-#: src/lang.c:1763 src/lang.c:1769 src/lang.c:1775 src/lang.c:1787 src/lang.c:1794
-#: src/lang.c:1848 src/lang.c:1857 src/lang.c:1863 src/lang.c:1870 src/lang.c:1877
-#: src/lang.c:1884 src/lang.c:1891 src/lang.c:1898 src/lang.c:1905 src/lang.c:1912
-#: src/lang.c:1919 src/lang.c:1926 src/lang.c:1933 src/lang.c:1940 src/lang.c:1947
-#: src/lang.c:1954 src/lang.c:1961 src/lang.c:1968 src/lang.c:1975 src/lang.c:1982
-#: src/lang.c:1989 src/lang.c:1996 src/lang.c:2003 src/lang.c:2010 src/lang.c:2017
-#: src/lang.c:2025 src/lang.c:2041 src/lang.c:2048 src/lang.c:2055 src/lang.c:2062
-#: src/lang.c:2068 src/lang.c:2074 src/lang.c:2091 src/lang.c:2103 src/lang.c:2137
-#: src/lang.c:2190 src/lang.c:2197 src/lang.c:2203 src/lang.c:2228 src/lang.c:2245
-#: src/lang.c:2298 src/lang.c:2334 src/lang.c:2354 src/lang.c:2389 src/lang.c:2399
-#: src/lang.c:2424 src/lang.c:2440 src/lang.c:2459 src/lang.c:2472
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437 src/lang.c:1487
+#: src/lang.c:1493 src/lang.c:1503 src/lang.c:1523 src/lang.c:1598 src/lang.c:1768
+#: src/lang.c:1774 src/lang.c:1780 src/lang.c:1786 src/lang.c:1798 src/lang.c:1805
+#: src/lang.c:1859 src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916 src/lang.c:1923
+#: src/lang.c:1930 src/lang.c:1937 src/lang.c:1944 src/lang.c:1951 src/lang.c:1958
+#: src/lang.c:1965 src/lang.c:1972 src/lang.c:1979 src/lang.c:1986 src/lang.c:1993
+#: src/lang.c:2000 src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066 src/lang.c:2073
+#: src/lang.c:2079 src/lang.c:2085 src/lang.c:2102 src/lang.c:2114 src/lang.c:2148
+#: src/lang.c:2201 src/lang.c:2208 src/lang.c:2214 src/lang.c:2239 src/lang.c:2256
+#: src/lang.c:2309 src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
 msgid	"<SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1378
+#: src/lang.c:1375
 msgid	"Show mini menu & posting etiquette"
 msgstr	""
 
-#: src/lang.c:1379
+#: src/lang.c:1376
 msgid	"# If ON show a mini menu of useful commands at each level\n"
 	"# and posting etiquette after composing an article\n"
 msgstr	""
 
-#: src/lang.c:1384
+#: src/lang.c:1381
 msgid	"Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1385
+#: src/lang.c:1382
 msgid	"Show description of each newsgroup"
 msgstr	""
 
-#: src/lang.c:1386
+#: src/lang.c:1383
 msgid	"# If ON show group description text after newsgroup name at\n"
 	"# group selection level\n"
 msgstr	""
 
-#: src/lang.c:1391
+#: src/lang.c:1388
 msgid	"Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
 	"sets."
 msgstr	""
 
-#: src/lang.c:1392
+#: src/lang.c:1389
 msgid	"In group menu, show author by"
 msgstr	""
 
-#: src/lang.c:1393
+#: src/lang.c:1390
 msgid	"# Part of from field to display\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = none\n"
@@ -4122,31 +4179,31 @@ msgid	"# Part of from field to display\n
 	"#   3 = both\n"
 msgstr	""
 
-#: src/lang.c:1402
+#: src/lang.c:1399
 msgid	"Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1403
+#: src/lang.c:1400
 msgid	"Draw -> instead of highlighted bar"
 msgstr	""
 
-#: src/lang.c:1404
+#: src/lang.c:1401
 msgid	"# If ON use -> otherwise highlighted bar for selection\n"
 msgstr	""
 
-#: src/lang.c:1409
+#: src/lang.c:1406
 msgid	"Use inverse video for page headers"
 msgstr	""
 
-#: src/lang.c:1410
+#: src/lang.c:1407
 msgid	"# If ON use inverse video for page headers at different levels\n"
 msgstr	""
 
-#: src/lang.c:1415
+#: src/lang.c:1412
 msgid	"Thread articles by"
 msgstr	""
 
-#: src/lang.c:1416
+#: src/lang.c:1413
 msgid	"# Thread articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4154,13 +4211,35 @@ msgid	"# Thread articles by ...\n"
 	"#   2 = References\n"
 	"# * 3 = Both (Subject and References)\n"
 	"#   4 = Multipart Subject\n"
+	"#   5 = Percentage Match\n"
+msgstr	""
+
+#: src/lang.c:1424
+msgid	"Enter percentage match required to thread together. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1425
+msgid	"Thread percentage match"
 msgstr	""
 
-#: src/lang.c:1427
+#: src/lang.c:1426
+#, c-format
+msgid	"# Thread percentage match...\n"
+	"# the percentage of characters in the subject of an article that must match\n"
+	"# a base article for both those articles to be considered to belong to the\n"
+	"# same thread. This option is an integer percentage, eg. 80, no decimals may\n"
+	"# follow. If 80 is used here, then 80%% of the characters must match "
+	"exactly,\n"
+	"# no insertion of a character, for the two articles to be put in the same\n"
+	"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+	"# 'harppy' would be threaded separately from 'happy'\n"
+msgstr	""
+
+#: src/lang.c:1438
 msgid	"Score of a thread"
 msgstr	""
 
-#: src/lang.c:1428
+#: src/lang.c:1439
 msgid	"# Thread score\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = max\n"
@@ -4168,15 +4247,15 @@ msgid	"# Thread score\n"
 	"#   2 = average\n"
 msgstr	""
 
-#: src/lang.c:1436
+#: src/lang.c:1447
 msgid	"Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1437
+#: src/lang.c:1448
 msgid	"Sort articles by"
 msgstr	""
 
-#: src/lang.c:1438
+#: src/lang.c:1449
 msgid	"# Sort articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4192,15 +4271,15 @@ msgid	"# Sort articles by ...\n"
 	"#  10 = Lines ascending\n"
 msgstr	""
 
-#: src/lang.c:1454
+#: src/lang.c:1465
 msgid	"Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1455
+#: src/lang.c:1466
 msgid	"Sort threads by"
 msgstr	""
 
-#: src/lang.c:1456
+#: src/lang.c:1467
 msgid	"# Sort thread by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4208,43 +4287,43 @@ msgid	"# Sort thread by ...\n"
 	"#   2 = Score ascending\n"
 msgstr	""
 
-#: src/lang.c:1464
+#: src/lang.c:1475
 msgid	"Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1465
+#: src/lang.c:1476
 msgid	"Goto first unread article in group"
 msgstr	""
 
-#: src/lang.c:1466
+#: src/lang.c:1477
 msgid	"# If ON put cursor at first unread art in group otherwise last art\n"
 msgstr	""
 
-#: src/lang.c:1470
+#: src/lang.c:1481
 msgid	"Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1471
+#: src/lang.c:1482
 msgid	"Show only unread articles"
 msgstr	""
 
-#: src/lang.c:1472
+#: src/lang.c:1483
 msgid	"# If ON show only new/unread articles otherwise show all.\n"
 msgstr	""
 
-#: src/lang.c:1477
+#: src/lang.c:1488
 msgid	"Show only groups with unread arts"
 msgstr	""
 
-#: src/lang.c:1478
+#: src/lang.c:1489
 msgid	"# If ON show only subscribed to groups that contain unread articles.\n"
 msgstr	""
 
-#: src/lang.c:1483
+#: src/lang.c:1494
 msgid	"Filter which articles"
 msgstr	""
 
-#: src/lang.c:1484
+#: src/lang.c:1495
 msgid	"# Filter which articles\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = only kill unread articles\n"
@@ -4252,184 +4331,184 @@ msgid	"# Filter which articles\n"
 	"#   2 = kill all articles and never show them\n"
 msgstr	""
 
-#: src/lang.c:1493
+#: src/lang.c:1504
 msgid	"Tab goes to next unread article"
 msgstr	""
 
-#: src/lang.c:1494
+#: src/lang.c:1505
 msgid	"# If ON the TAB command will go to next unread article at article viewer "
 	"level\n"
 msgstr	""
 
-#: src/lang.c:1498
+#: src/lang.c:1509
 msgid	"Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
 msgstr	""
 
-#: src/lang.c:1499
+#: src/lang.c:1510
 msgid	"Space goes to next unread article"
 msgstr	""
 
-#: src/lang.c:1500
+#: src/lang.c:1511
 msgid	"# If ON the SPACE command will go to next unread article at article viewer\n"
 	"# level when the end of the article is reached (rn-style pager)\n"
 msgstr	""
 
-#: src/lang.c:1505
+#: src/lang.c:1516
 msgid	"Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
 msgstr	""
 
-#: src/lang.c:1506
+#: src/lang.c:1517
 msgid	"PgDn goes to next unread article"
 msgstr	""
 
-#: src/lang.c:1507
+#: src/lang.c:1518
 msgid	"# If ON the PGDN or DOWN command will go to next unread article when\n"
 	"# pressed at end of message\n"
 msgstr	""
 
-#: src/lang.c:1513
+#: src/lang.c:1524
 msgid	"List thread using right arrow key"
 msgstr	""
 
-#: src/lang.c:1514
+#: src/lang.c:1525
 msgid	"# If ON automatically list thread when entering it using right arrow key.\n"
 msgstr	""
 
-#: src/lang.c:1518
+#: src/lang.c:1529
 msgid	"Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1519
+#: src/lang.c:1530
 msgid	"Character to show deleted articles"
 msgstr	""
 
-#: src/lang.c:1520
+#: src/lang.c:1531
 msgid	"# Character used to show that an art was deleted (default 'D')\n"
 	"# _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1525
+#: src/lang.c:1536
 msgid	"Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1526
+#: src/lang.c:1537
 msgid	"Character to show inrange articles"
 msgstr	""
 
-#: src/lang.c:1527
+#: src/lang.c:1538
 msgid	"# Character used to show that an art is in a range (default '#')\n"
 	"# _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1532
+#: src/lang.c:1543
 msgid	"Enter character to indicate that article will return. <CR> sets, <ESC> "
 	"cancels."
 msgstr	""
 
-#: src/lang.c:1533
+#: src/lang.c:1544
 msgid	"Character to show returning arts"
 msgstr	""
 
-#: src/lang.c:1534
+#: src/lang.c:1545
 msgid	"# Character used to show that an art will return (default '-')\n"
 	"# _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1539
+#: src/lang.c:1550
 msgid	"Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1540
+#: src/lang.c:1551
 msgid	"Character to show selected articles"
 msgstr	""
 
-#: src/lang.c:1541
+#: src/lang.c:1552
 msgid	"# Character used to show that an art was auto-selected (default '*')\n"
 	"# _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1546
+#: src/lang.c:1557
 msgid	"Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1547
+#: src/lang.c:1558
 msgid	"Character to show recent articles"
 msgstr	""
 
-#: src/lang.c:1548
+#: src/lang.c:1559
 msgid	"# Character used to show that an art is recent (default 'o')\n"
 	"# _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1553
+#: src/lang.c:1564
 msgid	"Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1554
+#: src/lang.c:1565
 msgid	"Character to show unread articles"
 msgstr	""
 
-#: src/lang.c:1555
+#: src/lang.c:1566
 msgid	"# Character used to show that an art is unread (default '+')\n"
 	"# _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1560
+#: src/lang.c:1571
 msgid	"Enter character to indicate read articles. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1561
+#: src/lang.c:1572
 msgid	"Character to show read articles"
 msgstr	""
 
-#: src/lang.c:1562
+#: src/lang.c:1573
 msgid	"# Character used to show that an art was read (default ' ')\n"
 	"# _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1567
+#: src/lang.c:1578
 msgid	"Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1568
+#: src/lang.c:1579
 msgid	"Character to show killed articles"
 msgstr	""
 
-#: src/lang.c:1569
+#: src/lang.c:1580
 msgid	"# Character used to show that an art was killed (default 'K')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1574
+#: src/lang.c:1585
 msgid	"Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1575
+#: src/lang.c:1586
 msgid	"Character to show readselected arts"
 msgstr	""
 
-#: src/lang.c:1576
+#: src/lang.c:1587
 msgid	"# Character used to show that an art was selected before read (default ':')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr	""
 
-#: src/lang.c:1581
+#: src/lang.c:1592
 msgid	"Enter maximum length of newsgroup names displayed. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1582
+#: src/lang.c:1593
 msgid	"Max. length of group names shown"
 msgstr	""
 
-#: src/lang.c:1583
+#: src/lang.c:1594
 msgid	"# Maximum length of the names of newsgroups displayed\n"
 msgstr	""
 
-#: src/lang.c:1588
+#: src/lang.c:1599
 msgid	"Show lines/score in listings"
 msgstr	""
 
-#: src/lang.c:1589
+#: src/lang.c:1600
 msgid	"# What informations should be displayed in article/thread listing\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4438,16 +4517,16 @@ msgid	"# What informations should be dis
 	"#   3 = lines & score\n"
 msgstr	""
 
-#: src/lang.c:1598
-msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, "
-	"-2 = half page"
+#: src/lang.c:1609
+msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, -"
+	"2 = half page"
 msgstr	""
 
-#: src/lang.c:1599
+#: src/lang.c:1610
 msgid	"Number of lines to scroll in pager"
 msgstr	""
 
-#: src/lang.c:1600
+#: src/lang.c:1611
 msgid	"# Number of lines that cursor-up/down will scroll in article pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#  -2 = half-page scrolling\n"
@@ -4463,27 +4542,27 @@ msgstr	"# Number of lines that cursor-up
 	"# * 1 = line-by-line\n"
 	"#   2 or greater = scroll by 2 or more lines (only in the pager)\n"
 
-#: src/lang.c:1610
+#: src/lang.c:1621
 msgid	"Display signatures. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1611
+#: src/lang.c:1622
 msgid	"Display signatures"
 msgstr	""
 
-#: src/lang.c:1612
+#: src/lang.c:1623
 msgid	"# If OFF don't show signatures when displaying articles\n"
 msgstr	""
 
-#: src/lang.c:1616
+#: src/lang.c:1627
 msgid	"Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1617
+#: src/lang.c:1628
 msgid	"Display uue data as an attachment"
 msgstr	""
 
-#: src/lang.c:1618
+#: src/lang.c:1629
 msgid	"# Handling of uuencoded data in the pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no, display raw uuencoded data\n"
@@ -4493,28 +4572,28 @@ msgid	"# Handling of uuencoded data in t
 	"#       be folded into a tag line.\n"
 msgstr	""
 
-#: src/lang.c:1628
+#: src/lang.c:1639
 msgid	"Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1629
+#: src/lang.c:1640
 msgid	"Display \"a as Umlaut-a"
 msgstr	""
 
-#: src/lang.c:1630
+#: src/lang.c:1641
 msgid	"# If ON decode German style TeX umlaut codes to ISO and\n"
 	"# show \"a as Umlaut-a, etc.\n"
 msgstr	""
 
-#: src/lang.c:1635 src/lang.c:1645
+#: src/lang.c:1646 src/lang.c:1656
 msgid	"Space separated list of header fields"
 msgstr	""
 
-#: src/lang.c:1636
+#: src/lang.c:1647
 msgid	"Display these header fields (or *)"
 msgstr	""
 
-#: src/lang.c:1637
+#: src/lang.c:1648
 msgid	"# Which news headers you wish to see. If you want to see _all_ the headers,\n"
 	"# place an '*' as this value. This is the only way a wildcard can be used.\n"
 	"# If you enter 'X-' as the value, you will see all headers beginning with\n"
@@ -4523,11 +4602,11 @@ msgid	"# Which news headers you wish to 
 	"# spaces. Not defining anything turns off this option.\n"
 msgstr	""
 
-#: src/lang.c:1646
+#: src/lang.c:1657
 msgid	"Do not display these header fields"
 msgstr	""
 
-#: src/lang.c:1647
+#: src/lang.c:1658
 msgid	"# Same as 'news_headers_to_display' except it denotes the opposite.\n"
 	"# An example of using both options might be if you thought X- headers were\n"
 	"# A Good Thing(tm), but thought Alan and Pape were miscreants...well then "
@@ -4538,579 +4617,579 @@ msgid	"# Same as 'news_headers_to_displa
 	"# Not defining anything turns off this option.\n"
 msgstr	""
 
-#: src/lang.c:1657
+#: src/lang.c:1668
 msgid	"Do you want to enable automatic handling of multipart/alternative articles?"
 msgstr	""
 
-#: src/lang.c:1658
+#: src/lang.c:1669
 msgid	"Skip multipart/alternative parts"
 msgstr	""
 
-#: src/lang.c:1659
+#: src/lang.c:1670
 msgid	"# If ON strip multipart/alternative messages automatically\n"
 msgstr	""
 
-#: src/lang.c:1664
+#: src/lang.c:1675
 msgid	"A regex used to decide which lines to show in col_quote."
 msgstr	""
 
-#: src/lang.c:1665
+#: src/lang.c:1676
 msgid	"Regex used to show quoted lines"
 msgstr	""
 
-#: src/lang.c:1666
+#: src/lang.c:1677
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1672
+#: src/lang.c:1683
 msgid	"A regex used to decide which lines to show in col_quote2."
 msgstr	""
 
-#: src/lang.c:1673
+#: src/lang.c:1684
 msgid	"Regex used to show twice quoted l."
 msgstr	""
 
-#: src/lang.c:1674
+#: src/lang.c:1685
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted twice. Twice quoted lines are shown in col_quote2.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1680
+#: src/lang.c:1691
 msgid	"A regex used to decide which lines to show in col_quote3."
 msgstr	""
 
-#: src/lang.c:1681
+#: src/lang.c:1692
 msgid	"Regex used to show >= 3 times q.l."
 msgstr	""
 
-#: src/lang.c:1682
+#: src/lang.c:1693
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1689
+#: src/lang.c:1700
 msgid	"A regex used to decide which words to show in col_markslashes."
 msgstr	""
 
-#: src/lang.c:1690
+#: src/lang.c:1701
 msgid	"Regex used to highlight /slashes/"
 msgstr	""
 
-#: src/lang.c:1691
+#: src/lang.c:1702
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '/' are to be shown in col_markslashes.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1697
+#: src/lang.c:1708
 msgid	"A regex used to decide which words to show in col_markstars."
 msgstr	""
 
-#: src/lang.c:1698
+#: src/lang.c:1709
 msgid	"Regex used to highlight *stars*"
 msgstr	""
 
-#: src/lang.c:1699
+#: src/lang.c:1710
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '*' are to be shown in col_markstars.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1705
+#: src/lang.c:1716
 msgid	"A regex used to decide which words to show in col_markstroke."
 msgstr	""
 
-#: src/lang.c:1706
+#: src/lang.c:1717
 msgid	"Regex used to highlight -strokes-"
 msgstr	""
 
-#: src/lang.c:1707
+#: src/lang.c:1718
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '-' are to be shown in col_markstroke.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1713
+#: src/lang.c:1724
 msgid	"A regex used to decide which words to show in col_markdash."
 msgstr	""
 
-#: src/lang.c:1714
+#: src/lang.c:1725
 msgid	"Regex used to highlight _underline_"
 msgstr	""
 
-#: src/lang.c:1715
+#: src/lang.c:1726
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '_' are to be shown in col_markdash.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1721
+#: src/lang.c:1732
 msgid	"A regex used to find Subject prefixes to remove.  Use '|' as separator."
 msgstr	""
 
-#: src/lang.c:1722
+#: src/lang.c:1733
 msgid	"Regex with Subject prefixes"
 msgstr	""
 
-#: src/lang.c:1723
+#: src/lang.c:1734
 msgid	"# A regular expression that tin will use to find Subject prefixes\n"
 	"# which will be removed before showing the header.\n"
 msgstr	""
 
-#: src/lang.c:1728
+#: src/lang.c:1739
 msgid	"A regex used to find Subject suffixes to remove.  Use '|' as separator."
 msgstr	""
 
-#: src/lang.c:1729
+#: src/lang.c:1740
 msgid	"Regex with Subject suffixes"
 msgstr	""
 
-#: src/lang.c:1730
+#: src/lang.c:1741
 msgid	"# A regular expression that tin will use to find Subject suffixes\n"
 	"# which will be removed when replying or posting followup.\n"
 msgstr	""
 
-#: src/lang.c:1735
+#: src/lang.c:1746
 msgid	"Enter name and options for external MIME viewer, --internal for built-in "
 	"viewer"
 msgstr	""
 
-#: src/lang.c:1736
+#: src/lang.c:1747
 msgid	"MIME binary content viewer"
 msgstr	""
 
-#: src/lang.c:1737
+#: src/lang.c:1748
 msgid	"# If --internal automatically use the built in MIME viewer for non-text\n"
 	"# parts of articles.\n"
 	"# Otherwise specify an external viewer program (eg, metamail) or leave blank\n"
 	"# for no automatic viewing\n"
 msgstr	""
 
-#: src/lang.c:1744
+#: src/lang.c:1755
 msgid	"Confirm before starting non-text viewing program"
 msgstr	""
 
-#: src/lang.c:1745
+#: src/lang.c:1756
 msgid	"Ask before using MIME viewer"
 msgstr	""
 
-#: src/lang.c:1746
+#: src/lang.c:1757
 msgid	"# If ON tin will ask before using metamail to display MIME messages\n"
 	"# this only happens if metamail_prog is set to something\n"
 msgstr	""
 
-#: src/lang.c:1751
+#: src/lang.c:1762
 msgid	"Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1752
+#: src/lang.c:1763
 msgid	"Catchup read groups when quitting"
 msgstr	""
 
-#: src/lang.c:1753
+#: src/lang.c:1764
 msgid	"# If ON ask user if read groups should all be marked read\n"
 msgstr	""
 
-#: src/lang.c:1758
+#: src/lang.c:1769
 msgid	"Catchup group using left key"
 msgstr	""
 
-#: src/lang.c:1759
+#: src/lang.c:1770
 msgid	"# If ON catchup group/thread when leaving with the left arrow key.\n"
 msgstr	""
 
-#: src/lang.c:1764
+#: src/lang.c:1775
 msgid	"Catchup thread by using left key"
 msgstr	""
 
-#: src/lang.c:1770
+#: src/lang.c:1781
 msgid	"Which actions require confirmation"
 msgstr	""
 
-#: src/lang.c:1771
+#: src/lang.c:1782
 msgid	"# What should we ask confirmation for.\n"
 msgstr	""
 
-#: src/lang.c:1776
+#: src/lang.c:1787
 msgid	"'Mark article read' ignores tags"
 msgstr	""
 
-#: src/lang.c:1777
+#: src/lang.c:1788
 msgid	"# If ON the 'Mark article read' function marks only the current article.\n"
 msgstr	""
 
-#: src/lang.c:1781
+#: src/lang.c:1792
 msgid	"Program to run to open URL's, <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:1782
+#: src/lang.c:1793
 msgid	"Program that opens URL's"
 msgstr	""
 
-#: src/lang.c:1783
+#: src/lang.c:1794
 msgid	"# The program used to open URL's. The actual URL will be appended\n"
 msgstr	""
 
-#: src/lang.c:1788
+#: src/lang.c:1799
 msgid	"Use mouse in xterm"
 msgstr	""
 
-#: src/lang.c:1789
+#: src/lang.c:1800
 msgid	"# If ON enable mouse key support on xterm terminals\n"
 msgstr	""
 
-#: src/lang.c:1795
+#: src/lang.c:1806
 msgid	"Use scroll keys on keypad"
 msgstr	""
 
-#: src/lang.c:1796
+#: src/lang.c:1807
 msgid	"# If ON enable scroll keys on terminals that support it\n"
 msgstr	""
 
-#: src/lang.c:1801
+#: src/lang.c:1812
 msgid	"Enter maximum number of article to get. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1802
+#: src/lang.c:1813
 msgid	"Number of articles to get"
 msgstr	""
 
-#: src/lang.c:1803
+#: src/lang.c:1814
 msgid	"# Number of articles to get (0=no limit), if negative sets maximum number\n"
 	"# of already read articles to be read before first unread one\n"
 msgstr	""
 
-#: src/lang.c:1808
+#: src/lang.c:1819
 msgid	"Enter number of days article is considered recent. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1809
+#: src/lang.c:1820
 msgid	"Article recentness time limit"
 msgstr	""
 
-#: src/lang.c:1810
+#: src/lang.c:1821
 msgid	"# Number of days in which article is considered recent, (0=OFF)\n"
 msgstr	""
 
-#: src/lang.c:1814
+#: src/lang.c:1825
 msgid	"WILDMAT for normal wildcards, REGEX for full regular expression matching."
 msgstr	""
 
-#: src/lang.c:1815
+#: src/lang.c:1826
 msgid	"Wildcard matching"
 msgstr	""
 
-#: src/lang.c:1816
+#: src/lang.c:1827
 msgid	"# Wildcard matching\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = wildmat\n"
 	"#   1 = regex\n"
 msgstr	""
 
-#: src/lang.c:1823
+#: src/lang.c:1834
 msgid	"Enter minimal score before an article is marked killed. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1824
+#: src/lang.c:1835
 msgid	"Score limit (kill)"
 msgstr	""
 
-#: src/lang.c:1825
+#: src/lang.c:1836
 msgid	"# Score limit before an article is marked killed\n"
 msgstr	""
 
-#: src/lang.c:1829
+#: src/lang.c:1840
 msgid	"Enter default score to kill articles. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1830
+#: src/lang.c:1841
 msgid	"Default score to kill articles"
 msgstr	""
 
-#: src/lang.c:1831
+#: src/lang.c:1842
 msgid	"# Default score to kill articles\n"
 msgstr	""
 
-#: src/lang.c:1835
+#: src/lang.c:1846
 msgid	"Enter minimal score before an article is marked hot. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1836
+#: src/lang.c:1847
 msgid	"Score limit (select)"
 msgstr	""
 
-#: src/lang.c:1837
+#: src/lang.c:1848
 msgid	"# Score limit before an article is marked hot\n"
 msgstr	""
 
-#: src/lang.c:1841
+#: src/lang.c:1852
 msgid	"Enter default score to select articles. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1842
+#: src/lang.c:1853
 msgid	"Default score to select articles"
 msgstr	""
 
-#: src/lang.c:1843
+#: src/lang.c:1854
 msgid	"# Default score to select articles\n"
 msgstr	""
 
-#: src/lang.c:1849
+#: src/lang.c:1860
 msgid	"Use slrnface to show ''X-Face:''s"
 msgstr	""
 
-#: src/lang.c:1850
+#: src/lang.c:1861
 msgid	"# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
 	"# Only useful when running in an xterm.\n"
 msgstr	""
 
-#: src/lang.c:1858
+#: src/lang.c:1869
 msgid	"Use ANSI color"
 msgstr	"Use ANSI colour"
 
-#: src/lang.c:1859
+#: src/lang.c:1870
 msgid	"# If ON using ANSI-color\n"
 msgstr	"# If ON using ANSI-colour\n"
 
-#: src/lang.c:1864
+#: src/lang.c:1875
 msgid	"Standard foreground color"
 msgstr	"Standard foreground colour"
 
-#: src/lang.c:1865
+#: src/lang.c:1876
 msgid	"# Standard foreground color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standard foreground colour\n"
 	"# Default: -1 (default colour)\n"
 
-#: src/lang.c:1871
+#: src/lang.c:1882
 msgid	"Standard background color"
 msgstr	"Standard background colour"
 
-#: src/lang.c:1872
+#: src/lang.c:1883
 msgid	"# Standard background color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standard background colour\n"
 	"# Default: -1 (default colour)\n"
 
-#: src/lang.c:1878
+#: src/lang.c:1889
 msgid	"Color for inverse text (background)"
 msgstr	"Colour for inverse text (bg)"
 
-#: src/lang.c:1879
+#: src/lang.c:1890
 msgid	"# Color of background for inverse text\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Colour of background for inverse text\n"
 	"# Default: 4 (blue)\n"
 
-#: src/lang.c:1885
+#: src/lang.c:1896
 msgid	"Color for inverse text (foreground)"
 msgstr	"Colour for inverse text (fg)"
 
-#: src/lang.c:1886
+#: src/lang.c:1897
 msgid	"# Color of foreground for inverse text\n"
 	"# Default: 7 (white)\n"
 msgstr	"# Colour of foreground for inverse text\n"
 	"# Default: 7 (white)\n"
 
-#: src/lang.c:1892
+#: src/lang.c:1903
 msgid	"Color of text lines"
 msgstr	"Colour of text lines"
 
-#: src/lang.c:1893
+#: src/lang.c:1904
 msgid	"# Color of text lines\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Colour of text lines\n"
 	"# Default: -1 (default colour\n"
 
-#: src/lang.c:1899
+#: src/lang.c:1910
 msgid	"Color of mini help menu"
 msgstr	"Colour of mini help menu"
 
-#: src/lang.c:1900
+#: src/lang.c:1911
 msgid	"# Color of mini help menu\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Colour of mini help menu\n"
 	"# Default: 3 (brown)\n"
 
-#: src/lang.c:1906
+#: src/lang.c:1917
 msgid	"Color of help text"
 msgstr	"Colour of help text"
 
-#: src/lang.c:1907
+#: src/lang.c:1918
 msgid	"# Color of help pages\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Colour of help pages\n"
 	"# Default: -1 (default colour)\n"
 
-#: src/lang.c:1913
+#: src/lang.c:1924
 msgid	"Color of status messages"
 msgstr	"Colour of status messages"
 
-#: src/lang.c:1914
+#: src/lang.c:1925
 msgid	"# Color of messages in last line\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Colour of messages in last line\n"
 	"# Default: 6 (cyan)\n"
 
-#: src/lang.c:1920
+#: src/lang.c:1931
 msgid	"Color of quoted lines"
 msgstr	"Colour of quoted lines"
 
-#: src/lang.c:1921
+#: src/lang.c:1932
 msgid	"# Color of quote-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Colour of quote-lines\n"
 	"# Default: 2 (green)\n"
 
-#: src/lang.c:1927
+#: src/lang.c:1938
 msgid	"Color of twice quoted line"
 msgstr	"Colour of twice quoted line"
 
-#: src/lang.c:1928
+#: src/lang.c:1939
 msgid	"# Color of twice quoted lines\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Colour of twice quoted lines\n"
 	"# Default: 3 (brown)\n"
 
-#: src/lang.c:1934
+#: src/lang.c:1945
 msgid	"Color of =>3 times quoted line"
 msgstr	"Colour of =>3 times quoted line"
 
-#: src/lang.c:1935
+#: src/lang.c:1946
 msgid	"# Color of >=3 times quoted lines\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Colour of >=3 times quoted lines\n"
 	"# Default: 4 (blue)\n"
 
-#: src/lang.c:1941
+#: src/lang.c:1952
 msgid	"Color of article header lines"
 msgstr	"Colour of article header lines"
 
-#: src/lang.c:1942
+#: src/lang.c:1953
 msgid	"# Color of header-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Colour of header-lines\n"
 	"# Default: 2 (green)\n"
 
-#: src/lang.c:1948
+#: src/lang.c:1959
 msgid	"Color of actual news header fields"
 msgstr	"Colour of actual news header fields"
 
-#: src/lang.c:1949
+#: src/lang.c:1960
 msgid	"# Color of actual news header fields\n"
 	"# Default: 9 (light red)\n"
 msgstr	"# Colour of actual news header fields\n"
 	"# Default: 9 (light red)\n"
 
-#: src/lang.c:1955
+#: src/lang.c:1966
 msgid	"Color of article subject lines"
 msgstr	"Colour of article subject lines"
 
-#: src/lang.c:1956
+#: src/lang.c:1967
 msgid	"# Color of article subject\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Colour of article subject\n"
 	"# Default: 6 (cyan)\n"
 
-#: src/lang.c:1962
+#: src/lang.c:1973
 msgid	"Color of response counter"
 msgstr	"Colour of response counter"
 
-#: src/lang.c:1963
+#: src/lang.c:1974
 msgid	"# Color of response counter\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Colour of response counter\n"
 	"# Default: 2 (green)\n"
 
-#: src/lang.c:1969
+#: src/lang.c:1980
 msgid	"Color of sender (From:)"
 msgstr	"Colour of sender (From:)"
 
-#: src/lang.c:1970
+#: src/lang.c:1981
 msgid	"# Color of sender (From:)\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Colour of sender (From:)\n"
 	"# Default: 2 (green)\n"
 
-#: src/lang.c:1976
+#: src/lang.c:1987
 msgid	"Color of help/mail sign"
 msgstr	"Colour of help/mail sign"
 
-#: src/lang.c:1977
+#: src/lang.c:1988
 msgid	"# Color of Help/Mail-Sign\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Colour of Help/Mail-Sign\n"
 	"# Default: 4 (blue)\n"
 
-#: src/lang.c:1983
+#: src/lang.c:1994
 msgid	"Color of signatures"
 msgstr	"Colour of signatures"
 
-#: src/lang.c:1984
+#: src/lang.c:1995
 msgid	"# Color of signature\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Colour of signature\n"
 	"# Default: 4 (blue)\n"
 
-#: src/lang.c:1990
+#: src/lang.c:2001
 msgid	"Color of highlighted URLs"
 msgstr	"Colour of highlighted URLs"
 
-#: src/lang.c:1991
+#: src/lang.c:2002
 msgid	"# Color of highlighted URLs\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Colour of highlighted URLs\n"
 	"# Default: -1 (default colour)\n"
 
-#: src/lang.c:1997
+#: src/lang.c:2008
 msgid	"Color of highlighting with *stars*"
 msgstr	"Colour of highlighting with *stars*"
 
-#: src/lang.c:1998
+#: src/lang.c:2009
 msgid	"# Color of word highlighting with *stars*\n"
 	"# Default: 11 (yellow)\n"
 msgstr	"# Colour of word highlighting with *stars*\n"
 	"# Default: 11 (yellow)\n"
 
-#: src/lang.c:2004
+#: src/lang.c:2015
 msgid	"Color of highlighting with _dash_"
 msgstr	"Colour of highlighting with _dash_"
 
-#: src/lang.c:2005
+#: src/lang.c:2016
 msgid	"# Color of word highlighting with _dash_\n"
 	"# Default: 13 (light pink)\n"
 msgstr	"# Colour of word highlighting with _dash_\n"
 	"# Default: 13 (light pink)\n"
 
-#: src/lang.c:2011
+#: src/lang.c:2022
 msgid	"Color of highlighting with /slash/"
 msgstr	"Colour of highlighting with /slash/"
 
-#: src/lang.c:2012
+#: src/lang.c:2023
 msgid	"# Color of word highlighting with /slash/\n"
 	"# Default: 14 (light cyan)\n"
 msgstr	"# Colour of word highlighting with /slash/\n"
 	"# Default: 14 (light cyan)\n"
 
-#: src/lang.c:2018
+#: src/lang.c:2029
 msgid	"Color of highlighting with -stroke-"
 msgstr	"Colour of highlighting w. -stroke-"
 
-#: src/lang.c:2019
+#: src/lang.c:2030
 msgid	"# Color of word highlighting with -stroke-\n"
 	"# Default: 12 (light blue)\n"
 msgstr	"# Colour of word highlighting with -stroke-\n"
 	"# Default: 12 (light blue)\n"
 
-#: src/lang.c:2026
+#: src/lang.c:2037
 msgid	"Attr. of highlighting with *stars*"
 msgstr	""
 
-#: src/lang.c:2027
+#: src/lang.c:2038
 msgid	"# Attributes of word highlighting on mono terminals\n"
 	"# Possible values are:\n"
 	"#   0 = Normal\n"
@@ -5125,54 +5204,54 @@ msgid	"# Attributes of word highlighting
 	"# Default: 6 (bold)\n"
 msgstr	""
 
-#: src/lang.c:2042
+#: src/lang.c:2053
 msgid	"Attr. of highlighting with _dash_"
 msgstr	""
 
-#: src/lang.c:2043
+#: src/lang.c:2054
 msgid	"# Attribute of word highlighting with _dash_\n"
 	"# Default: 2 (best highlighting)\n"
 msgstr	""
 
-#: src/lang.c:2049
+#: src/lang.c:2060
 msgid	"Attr. of highlighting with /slash/"
 msgstr	""
 
-#: src/lang.c:2050
+#: src/lang.c:2061
 msgid	"# Attribute of word highlighting with /slash/\n"
 	"# Default: 5 (half bright)\n"
 msgstr	""
 
-#: src/lang.c:2056
+#: src/lang.c:2067
 msgid	"Attr. of highlighting with -stroke-"
 msgstr	""
 
-#: src/lang.c:2057
+#: src/lang.c:2068
 msgid	"# Attribute of word highlighting with -stroke-\n"
 	"# Default: 3 (reverse video)\n"
 msgstr	""
 
-#: src/lang.c:2063
+#: src/lang.c:2074
 msgid	"URL highlighting in message body"
 msgstr	""
 
-#: src/lang.c:2064
+#: src/lang.c:2075
 msgid	"# Enable URL highlighting?\n"
 msgstr	""
 
-#: src/lang.c:2069
+#: src/lang.c:2080
 msgid	"Word highlighting in message body"
 msgstr	""
 
-#: src/lang.c:2070
+#: src/lang.c:2081
 msgid	"# Enable word highlighting?\n"
 msgstr	""
 
-#: src/lang.c:2075
+#: src/lang.c:2086
 msgid	"What to display instead of mark"
 msgstr	""
 
-#: src/lang.c:2076
+#: src/lang.c:2087
 msgid	"# Should the leading and ending stars and dashes also be displayed,\n"
 	"# even when they are highlighting marks?\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -5181,55 +5260,55 @@ msgid	"# Should the leading and ending s
 	"# * 2 = print a space instead\n"
 msgstr	""
 
-#: src/lang.c:2085
+#: src/lang.c:2096
 msgid	"Enter column number to wrap article lines to in the pager. <CR> sets."
 msgstr	""
 
-#: src/lang.c:2086
+#: src/lang.c:2097
 msgid	"Page line wrap column"
 msgstr	""
 
-#: src/lang.c:2087
+#: src/lang.c:2098
 msgid	"# Wrap article lines at column\n"
 msgstr	""
 
-#: src/lang.c:2092
+#: src/lang.c:2103
 msgid	"Wrap around threads on next unread"
 msgstr	""
 
-#: src/lang.c:2093
+#: src/lang.c:2104
 msgid	"# If ON wrap around threads on searching next unread article\n"
 msgstr	""
 
-#: src/lang.c:2097
+#: src/lang.c:2108
 msgid	"Enter default mail address (and fullname). <CR> sets."
 msgstr	""
 
-#: src/lang.c:2098
+#: src/lang.c:2109
 msgid	"Mail address (and fullname)"
 msgstr	""
 
-#: src/lang.c:2099
+#: src/lang.c:2110
 msgid	"# User's mail address (and fullname), if not username@host (fullname)\n"
 msgstr	""
 
-#: src/lang.c:2104
+#: src/lang.c:2115
 msgid	"Show empty Followup-To in editor"
 msgstr	""
 
-#: src/lang.c:2105
+#: src/lang.c:2116
 msgid	"# If ON show empty Followup-To header when editing an article\n"
 msgstr	""
 
-#: src/lang.c:2109
+#: src/lang.c:2120
 msgid	"Enter path/! command/--none to create your default signature. <CR> sets."
 msgstr	""
 
-#: src/lang.c:2110
+#: src/lang.c:2121
 msgid	"Create signature from path/command"
 msgstr	""
 
-#: src/lang.c:2111
+#: src/lang.c:2122
 msgid	"# Signature path (random sigs)/file to be used when posting/replying\n"
 	"# default_sigfile=file       appends file as signature\n"
 	"# default_sigfile=!command   executes external command to generate a "
@@ -5237,48 +5316,50 @@ msgid	"# Signature path (random sigs)/fi
 	"# default_sigfile=--none     don't append a signature\n"
 msgstr	""
 
-#: src/lang.c:2118
+#: src/lang.c:2129
 msgid	"Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2119
+#: src/lang.c:2130
 msgid	"Prepend signature with \"-- \""
 msgstr	""
 
-#: src/lang.c:2120
+#: src/lang.c:2131
 msgid	"# If ON prepend the signature with dashes '\\n-- \\n'\n"
 msgstr	""
 
-#: src/lang.c:2124
+#: src/lang.c:2135
 msgid	"Add signature when reposting articles. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2125
+#: src/lang.c:2136
 msgid	"Add signature when reposting"
 msgstr	""
 
-#: src/lang.c:2126
+#: src/lang.c:2137
 msgid	"# If ON add signature to reposted articles\n"
 msgstr	""
 
-#: src/lang.c:2130
+#: src/lang.c:2141
+#, c-format
 msgid	"Enter quotation marks, %s or %S for author's initials."
 msgstr	""
 
-#: src/lang.c:2131
+#: src/lang.c:2142
 msgid	"Characters used as quote-marks"
 msgstr	""
 
-#: src/lang.c:2132
+#: src/lang.c:2143
+#, c-format
 msgid	"# Characters used in quoting to followups and replies.\n"
 	"# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
 msgstr	""
 
-#: src/lang.c:2138
+#: src/lang.c:2149
 msgid	"Quoting behavior"
 msgstr	"Quoting behaviour"
 
-#: src/lang.c:2139
+#: src/lang.c:2150
 msgid	"# How quoting should be handled when following up or replying.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = Nothing special\n"
@@ -5291,49 +5372,50 @@ msgid	"# How quoting should be handled w
 	"#   7 = Compress quotes, quote signatures, quote empty lines\n"
 msgstr	""
 
-#: src/lang.c:2152 src/lang.c:2160 src/lang.c:2166
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
 msgid	"%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
 msgstr	""
 
-#: src/lang.c:2153
+#: src/lang.c:2164
 msgid	"Quote line when following up"
 msgstr	""
 
-#: src/lang.c:2154
+#: src/lang.c:2165
+#, c-format
 msgid	"# Format of quote line when mailing/posting/following-up an article\n"
 	"# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
 	"# %%N Full Name  %%C First Name   %%I Initials\n"
 msgstr	""
 
-#: src/lang.c:2161
+#: src/lang.c:2172
 msgid	"Quote line when cross-posting"
 msgstr	""
 
-#: src/lang.c:2167
+#: src/lang.c:2178
 msgid	"Quote line when mailing"
 msgstr	""
 
-#: src/lang.c:2172
+#: src/lang.c:2183
 msgid	"If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2173
+#: src/lang.c:2184
 msgid	"Insert 'User-Agent:'-header"
 msgstr	""
 
-#: src/lang.c:2174
+#: src/lang.c:2185
 msgid	"# If ON include advertising User-Agent: header\n"
 msgstr	""
 
-#: src/lang.c:2179
+#: src/lang.c:2190
 msgid	"Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
 msgstr	""
 
-#: src/lang.c:2180
+#: src/lang.c:2191
 msgid	"MM_CHARSET"
 msgstr	""
 
-#: src/lang.c:2181
+#: src/lang.c:2192
 msgid	"# Charset supported locally which is also used for MIME header and\n"
 	"# Content-Type header.\n"
 	"# If not set, the value of the environment variable MM_CHARSET is used.\n"
@@ -5342,27 +5424,27 @@ msgid	"# Charset supported locally which
 	"# mm_charset is considered not displayable and represented as '?'.\n"
 msgstr	""
 
-#: src/lang.c:2191
+#: src/lang.c:2202
 msgid	"MM_NETWORK_CHARSET"
 msgstr	""
 
-#: src/lang.c:2192
+#: src/lang.c:2203
 msgid	"# Charset used for MIME (Content-Type) header in postings.\n"
 msgstr	""
 
-#: src/lang.c:2198
+#: src/lang.c:2209
 msgid	"Mailbox format"
 msgstr	""
 
-#: src/lang.c:2199
+#: src/lang.c:2210
 msgid	"# Format of the mailbox.\n"
 msgstr	""
 
-#: src/lang.c:2204
+#: src/lang.c:2215
 msgid	"MIME encoding in news messages"
 msgstr	""
 
-#: src/lang.c:2205
+#: src/lang.c:2216
 msgid	"# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
 	"# for mails and posts, if necessary. QP is efficient for most European\n"
 	"# character sets (ISO-8859-X) with small fraction of non-US-ASCII chars,\n"
@@ -5370,42 +5452,42 @@ msgid	"# MIME encoding (8bit, base64, qu
 	"# Russian charsets with a lot of 8bit characters.\n"
 msgstr	""
 
-#: src/lang.c:2213 src/lang.c:2234
+#: src/lang.c:2224 src/lang.c:2245
 msgid	"Don't change unless you know what you are doing. <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:2214
+#: src/lang.c:2225
 msgid	"Use 8bit characters in news headers"
 msgstr	""
 
-#: src/lang.c:2215
+#: src/lang.c:2226
 msgid	"# If ON, 8bit characters in news headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in header are encoded regardless of the value of this\n"
 	"# parameter unless post_mime_encoding is 8bit as well.\n"
 msgstr	""
 
-#: src/lang.c:2222
+#: src/lang.c:2233
 msgid	"Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:2223
+#: src/lang.c:2234
 msgid	"View post-processed files"
 msgstr	""
 
-#: src/lang.c:2224
+#: src/lang.c:2235
 msgid	"# If set, post processed files will be opened in a viewer\n"
 msgstr	""
 
-#: src/lang.c:2229
+#: src/lang.c:2240
 msgid	"MIME encoding in mail messages"
 msgstr	""
 
-#: src/lang.c:2235
+#: src/lang.c:2246
 msgid	"Use 8bit characters in mail headers"
 msgstr	""
 
-#: src/lang.c:2236
+#: src/lang.c:2247
 msgid	"# If ON, 8bit characters in mail headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in headers are encoded regardless of the value of this "
@@ -5415,160 +5497,160 @@ msgid	"# If ON, 8bit characters in mail 
 	"# turn it ON unless you have some compelling reason.\n"
 msgstr	""
 
-#: src/lang.c:2246
+#: src/lang.c:2257
 msgid	"Strip blanks from ends of lines"
 msgstr	""
 
-#: src/lang.c:2247
+#: src/lang.c:2258
 msgid	"# If ON strip blanks from ends of lines for faster display on slow "
 	"terminals.\n"
 msgstr	""
 
-#: src/lang.c:2252
+#: src/lang.c:2263
 msgid	"If ON, use transliteration. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2253
+#: src/lang.c:2264
 msgid	"Transliteration"
 msgstr	""
 
-#: src/lang.c:2254
+#: src/lang.c:2265
 msgid	"# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
 	"# be represented in the in the target character set, it can be approximated\n"
 	"# through one or several similarly looking characters.\n"
 msgstr	""
 
-#: src/lang.c:2261
+#: src/lang.c:2272
 msgid	"Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2262
+#: src/lang.c:2273
 msgid	"Send you a cc automatically"
 msgstr	""
 
-#: src/lang.c:2263
+#: src/lang.c:2274
 msgid	"# If ON automatically put your name in the Cc: field when mailing an article\n"
 msgstr	""
 
-#: src/lang.c:2267
+#: src/lang.c:2278
 msgid	"Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2268
+#: src/lang.c:2279
 msgid	"Send you a blind cc automatically"
 msgstr	""
 
-#: src/lang.c:2269
+#: src/lang.c:2280
 msgid	"# If ON automatically put your name in the Bcc: field when mailing an "
 	"article\n"
 msgstr	""
 
-#: src/lang.c:2273
+#: src/lang.c:2284
 msgid	"Enter address elements about which you want to be warned. <CR> sets."
 msgstr	""
 
-#: src/lang.c:2274
+#: src/lang.c:2285
 msgid	"Spamtrap warning address parts"
 msgstr	""
 
-#: src/lang.c:2275
+#: src/lang.c:2286
 msgid	"# A comma-delimited list of address-parts you want to be warned\n"
 	"# about when trying to reply by email.\n"
 msgstr	""
 
-#: src/lang.c:2280
+#: src/lang.c:2291
 msgid	"Enter default number of days a filter entry will be valid. <CR> sets."
 msgstr	""
 
-#: src/lang.c:2281
+#: src/lang.c:2292
 msgid	"No. of days a filter entry is valid"
 msgstr	""
 
-#: src/lang.c:2282
+#: src/lang.c:2293
 msgid	"# Number of days a short term filter will be active\n"
 msgstr	""
 
-#: src/lang.c:2286
+#: src/lang.c:2297
 msgid	"Add posted articles to filter. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2287
+#: src/lang.c:2298
 msgid	"Add posted articles to filter"
 msgstr	""
 
-#: src/lang.c:2288
+#: src/lang.c:2299
 msgid	"# If ON add posted articles which start a new thread to filter for\n"
 	"# highlighting follow-ups\n"
 msgstr	""
 
-#: src/lang.c:2292
+#: src/lang.c:2303
 msgid	"The directory where articles/threads are to be saved in mailbox format."
 msgstr	""
 
-#: src/lang.c:2293
+#: src/lang.c:2304
 msgid	"Mail directory"
 msgstr	""
 
-#: src/lang.c:2294
+#: src/lang.c:2305
 msgid	"# (-m) directory where articles/threads are saved in mailbox format\n"
 msgstr	""
 
-#: src/lang.c:2299
+#: src/lang.c:2310
 msgid	"Save articles in batch mode (-S)"
 msgstr	""
 
-#: src/lang.c:2300
+#: src/lang.c:2311
 msgid	"# If ON articles/threads will be saved in batch mode when save -S\n"
 	"# or mail (-M/-N) is specified on the command line\n"
 msgstr	""
 
-#: src/lang.c:2305
+#: src/lang.c:2316
 msgid	"The directory where you want articles/threads saved."
 msgstr	""
 
-#: src/lang.c:2306
+#: src/lang.c:2317
 msgid	"Directory to save arts/threads in"
 msgstr	""
 
-#: src/lang.c:2307
+#: src/lang.c:2318
 msgid	"# Directory where articles/threads are saved\n"
 msgstr	""
 
-#: src/lang.c:2311
+#: src/lang.c:2322
 msgid	"Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2312
+#: src/lang.c:2323
 msgid	"Use Archive-name: header for save"
 msgstr	""
 
-#: src/lang.c:2313
+#: src/lang.c:2324
 msgid	"# If ON articles/threads with Archive-name: in mail header will\n"
 	"# be automatically saved with the Archive-name & part/patch no.\n"
 msgstr	""
 
-#: src/lang.c:2318
+#: src/lang.c:2329
 msgid	"Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
 	"cancels."
 msgstr	""
 
-#: src/lang.c:2319
+#: src/lang.c:2330
 msgid	"Mark saved articles/threads as read"
 msgstr	""
 
-#: src/lang.c:2320
+#: src/lang.c:2331
 msgid	"# If ON mark articles that are saved as read\n"
 msgstr	""
 
-#: src/lang.c:2324
+#: src/lang.c:2335
 msgid	"Do post processing (eg. extract attachments) for saved articles."
 msgstr	""
 
-#: src/lang.c:2325
+#: src/lang.c:2336
 msgid	"Post process saved articles"
 msgstr	""
 
-#: src/lang.c:2326
+#: src/lang.c:2337
 msgid	"# Perform post processing (saving binary attachments) from saved articles.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no\n"
@@ -5576,105 +5658,107 @@ msgid	"# Perform post processing (saving
 	"#   2 = yes\n"
 msgstr	""
 
-#: src/lang.c:2335
+#: src/lang.c:2346
 msgid	"Process only unread articles"
 msgstr	""
 
-#: src/lang.c:2336
+#: src/lang.c:2347
 msgid	"# If ON only save/print/pipe/mail unread articles (tagged articles excepted)\n"
 msgstr	""
 
-#: src/lang.c:2341
+#: src/lang.c:2352
 msgid	"Print all or just part of header. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2342
+#: src/lang.c:2353
 msgid	"Print all headers when printing"
 msgstr	""
 
-#: src/lang.c:2343
+#: src/lang.c:2354
 msgid	"# If ON print all of article header otherwise just the important lines\n"
 msgstr	""
 
-#: src/lang.c:2347
+#: src/lang.c:2358
 msgid	"The printer program with options that is to be used to print articles/threads."
 msgstr	""
 
-#: src/lang.c:2348
+#: src/lang.c:2359
 msgid	"Printer program with options"
 msgstr	""
 
-#: src/lang.c:2349
+#: src/lang.c:2360
 msgid	"# Print program with parameters used to print articles/threads\n"
 msgstr	""
 
-#: src/lang.c:2355
+#: src/lang.c:2366
 msgid	"Force redraw after certain commands"
 msgstr	""
 
-#: src/lang.c:2356
+#: src/lang.c:2367
 msgid	"# If ON a screen redraw will always be done after certain external commands\n"
 msgstr	""
 
-#: src/lang.c:2360
+#: src/lang.c:2371
 msgid	"Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:2361
+#: src/lang.c:2372
 msgid	"Start editor with line offset"
 msgstr	""
 
-#: src/lang.c:2362
+#: src/lang.c:2373
 msgid	"# If ON editor will be started with cursor offset into the file\n"
 	"# otherwise the cursor will be positioned at the first line\n"
 msgstr	""
 
-#: src/lang.c:2367
+#: src/lang.c:2378
 msgid	"Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
 msgstr	""
 
-#: src/lang.c:2368
+#: src/lang.c:2379
 msgid	"Invocation of your editor"
 msgstr	""
 
-#: src/lang.c:2369
+#: src/lang.c:2380
+#, c-format
 msgid	"# Format of editor line including parameters\n"
 	"# %%E Editor  %%F Filename  %%N Linenumber\n"
 msgstr	""
 
-#: src/lang.c:2374
+#: src/lang.c:2385
 msgid	"Enter name and options for external-inews, --internal for internal inews"
 msgstr	""
 
-#: src/lang.c:2375
+#: src/lang.c:2386
 msgid	"External inews"
 msgstr	""
 
-#: src/lang.c:2376
+#: src/lang.c:2387
 msgid	"# If --internal use the built in mini inews for posting via NNTP\n"
 	"# otherwise use an external inews program\n"
 msgstr	""
 
-#: src/lang.c:2380
+#: src/lang.c:2391
 msgid	"Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
 msgstr	""
 
-#: src/lang.c:2381
+#: src/lang.c:2392
 msgid	"Invocation of your mail command"
 msgstr	""
 
-#: src/lang.c:2382
+#: src/lang.c:2393
+#, c-format
 msgid	"# Format of mailer line including parameters\n"
 	"# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
 	"# ie. to use elm as your mailer:    elm -s \"%%S\" \"%%T\" < %%F\n"
 	"# ie. elm interactive          :    elm -i %%F -s \"%%S\" \"%%T\"\n"
 msgstr	""
 
-#: src/lang.c:2390
+#: src/lang.c:2401
 msgid	"Use interactive mail reader"
 msgstr	""
 
-#: src/lang.c:2391
+#: src/lang.c:2402
 msgid	"# Interactive mailreader\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no interactive mailreader\n"
@@ -5682,56 +5766,56 @@ msgid	"# Interactive mailreader\n"
 	"#   2 = use interactive mailreader without headers in file\n"
 msgstr	""
 
-#: src/lang.c:2400
+#: src/lang.c:2411
 msgid	"Remove ~/.article after posting"
 msgstr	""
 
-#: src/lang.c:2401
+#: src/lang.c:2412
 msgid	"# If ON remove ~/.article after posting.\n"
 msgstr	""
 
-#: src/lang.c:2405
+#: src/lang.c:2416
 msgid	"Filename for all posted articles, <CR> sets, no filename=do not save."
 msgstr	""
 
-#: src/lang.c:2406
+#: src/lang.c:2417
 msgid	"Filename for posted articles"
 msgstr	""
 
-#: src/lang.c:2407
+#: src/lang.c:2418
 msgid	"# Filename where to keep all postings (default posted)\n"
 	"# If no filename is set then postings will not be saved\n"
 msgstr	""
 
-#: src/lang.c:2412
+#: src/lang.c:2423
 msgid	"Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2413
+#: src/lang.c:2424
 msgid	"Keep failed arts in ~/dead.articles"
 msgstr	""
 
-#: src/lang.c:2414
+#: src/lang.c:2425
 msgid	"# If ON keep all failed postings in ~/dead.articles\n"
 msgstr	""
 
-#: src/lang.c:2418
+#: src/lang.c:2429
 msgid	"Do you want to strip unsubscribed groups from .newsrc"
 msgstr	""
 
-#: src/lang.c:2419
+#: src/lang.c:2430
 msgid	"No unsubscribed groups in newsrc"
 msgstr	""
 
-#: src/lang.c:2420
+#: src/lang.c:2431
 msgid	"# If ON strip unsubscribed groups from newsrc\n"
 msgstr	""
 
-#: src/lang.c:2425
+#: src/lang.c:2436
 msgid	"Remove bogus groups from newsrc"
 msgstr	""
 
-#: src/lang.c:2426
+#: src/lang.c:2437
 msgid	"# What to do with bogus groups in newsrc file\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = keep\n"
@@ -5739,55 +5823,55 @@ msgid	"# What to do with bogus groups in
 	"#   2 = highlight with D on selection screen\n"
 msgstr	""
 
-#: src/lang.c:2434
+#: src/lang.c:2445
 msgid	"Enter number of seconds until active file will be reread. <CR> sets."
 msgstr	""
 
-#: src/lang.c:2435
+#: src/lang.c:2446
 msgid	"Interval in secs to reread active"
 msgstr	""
 
-#: src/lang.c:2436
+#: src/lang.c:2447
 msgid	"# Time interval in seconds between rereading the active file (0=never)\n"
 msgstr	""
 
-#: src/lang.c:2441
+#: src/lang.c:2452
 msgid	"Reconnect to server automatically"
 msgstr	""
 
-#: src/lang.c:2442
+#: src/lang.c:2453
 msgid	"# If ON automatically reconnect to NNTP server if the connection is broken\n"
 msgstr	""
 
-#: src/lang.c:2446
+#: src/lang.c:2457
 msgid	"Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2447
+#: src/lang.c:2458
 msgid	"Cache NNTP overview files locally"
 msgstr	""
 
-#: src/lang.c:2448
+#: src/lang.c:2459
 msgid	"# If ON, create local copies of NNTP overview files.\n"
 msgstr	""
 
-#: src/lang.c:2452
+#: src/lang.c:2463
 msgid	"Enter format string. <CR> sets, <ESC> cancels."
 msgstr	""
 
-#: src/lang.c:2453
+#: src/lang.c:2464
 msgid	"Format string for display of dates"
 msgstr	""
 
-#: src/lang.c:2454
+#: src/lang.c:2465
 msgid	"# Format string for date representation\n"
 msgstr	""
 
-#: src/lang.c:2460
+#: src/lang.c:2471
 msgid	"Unicode normalization form"
 msgstr	"Unicode normalisation form"
 
-#: src/lang.c:2461
+#: src/lang.c:2472
 msgid	"# Unicode normalization form\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = None\n"
@@ -5803,59 +5887,88 @@ msgstr	"# Unicode normalisation form\n"
 	"#   3 = NFC\n"
 	"#   4 = NFD\n"
 
-#: src/lang.c:2473
+#: src/lang.c:2484
 msgid	"Render BiDi"
 msgstr	""
 
-#: src/lang.c:2474
+#: src/lang.c:2485
 msgid	"# If ON, bi-directional text is rendered by tin\n"
 msgstr	""
 
-#: src/misc.c:3721
+#: src/misc.c:3728
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\") %s %s\n"
 msgstr	""
 
-#: src/misc.c:3724
+#: src/misc.c:3731
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\")\n"
 msgstr	""
 
-#: src/newsrc.c:432
+#: src/newsrc.c:430
 msgid	"Unreachable?\n"
 msgstr	""
 
-#: src/nntplib.c:825
+#: src/nntplib.c:824
 #, c-format
 msgid	"\n"
 	"Server timed out, trying reconnect # %d\n"
 msgstr	""
 
-#: src/nntplib.c:843
+#: src/nntplib.c:842
 msgid	"Rejoin current group\n"
 msgstr	""
 
-#: src/nntplib.c:850
+#: src/nntplib.c:849
 #, c-format
 msgid	"Read (%s)\n"
 msgstr	""
 
-#: src/nntplib.c:852
+#: src/nntplib.c:851
 #, c-format
 msgid	"Resend last command (%s)\n"
 msgstr	""
 
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid	"MOTD: "
+msgstr	""
+
 #: src/nrctbl.c:172
 #, c-format
 msgid	"couldn't expand %s\n"
 msgstr	""
 
-#: src/post.c:1969
+#: src/post.c:1152
+#, c-format
+msgid	"Line %d is longer than 998 octets and should be folded, but\n"
+	"encoding is neither set to %s nor to %s\n"
+msgstr	""
+
+#: src/post.c:1157
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+	"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr	""
+
+#: src/post.c:1159
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is not set to %s\n"
+msgstr	""
+
+#: src/post.c:1974
 #, c-format
 msgid	"Posting: %.*s ..."
 msgstr	""
 
-#. fp
 #. Check if okay to read
 #: src/read.c:214
 msgid	"Aborting read, please wait..."
@@ -5883,13 +5996,14 @@ msgstr	""
 #. * TODO: -> lang.c
 #.
 #: src/rfc2047.c:1203
+#, c-format
 msgid	"This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
 	"are reading this prefix, your mail reader probably has not yet been modified\n"
 	"to understand the new format, and some of what follows may look strange.\n"
 	"\n"
 msgstr	""
 
-#: src/save.c:977
+#: src/save.c:978
 msgid	"bytes"
 msgstr	""
 
Binary files tin-1.7.8/po/et.gmo and tin-1.7.9/po/et.gmo differ
diff -Nurp tin-1.7.8/po/et.po tin-1.7.9/po/et.po
--- tin-1.7.8/po/et.po	2005-03-21 11:43:07.000000000 +0100
+++ tin-1.7.9/po/et.po	2005-06-28 10:31:29.534570373 +0200
@@ -4,231 +4,282 @@
 #
 msgid	""
 msgstr	"Project-Id-Version: tin 1.7.7\n"
-	"POT-Creation-Date: 2005-03-21 11:42+0100\n"
+	"Report-Msgid-Bugs-To: \n"
+	"POT-Creation-Date: 2005-06-22 20:13+0200\n"
 	"PO-Revision-Date: 2003-01-07 18:45+0300\n"
 	"Last-Translator: Toomas Soome <Toomas.Soome@microlink.ee>\n"
 	"Language-Team: Estonian <et@li.org>\n"
 	"MIME-Version: 1.0\n"
 	"Content-Type: text/plain; charset=ISO-8859-15\n"
 	"Content-Transfer-Encoding: 8bit\n"
-	"Report-Msgid-Bugs-To: \n"
 
-#: src/art.c:1455
+#: src/art.c:1553
 #, c-format
 msgid	"%d Bad overview record (%d fields) '%s'"
 msgstr	"%d Vigane overview kirje (%d välja) '%s'"
 
-#: src/attrib.c:604
+#: src/attrib.c:643
+#, c-format
 msgid	"# Do not edit this comment block\n"
 	"#\n"
 msgstr	"# Ärge seda kommentaari blokki muutke\n"
 	"#\n"
 
-#: src/attrib.c:605
+#: src/attrib.c:644
+#, c-format
 msgid	"#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
 msgstr	"#  scope=SÕNE (n. alt.*,!alt.bin*) [kohustuslik]\n"
 
-#: src/attrib.c:606
+#: src/attrib.c:645
+#, c-format
 msgid	"#  maildir=STRING (ie. ~/Mail)\n"
 msgstr	"#  maildir=SÕNE (n. ~/Mail)\n"
 
-#: src/attrib.c:607
+#: src/attrib.c:646
+#, c-format
 msgid	"#  savedir=STRING (ie. ~user/News)\n"
 msgstr	"#  savedir=SÕNE (n. ~user/News)\n"
 
-#: src/attrib.c:608
+#: src/attrib.c:647
+#, c-format
 msgid	"#  savefile=STRING (ie. =linux)\n"
 msgstr	"#  savefile=SÕNE (n. =linux)\n"
 
-#: src/attrib.c:609
+#: src/attrib.c:648
+#, c-format
 msgid	"#  sigfile=STRING (ie. $var/sig)\n"
 msgstr	"#  sigfile=SÕNE (n. $var/sig)\n"
 
-#: src/attrib.c:610
+#: src/attrib.c:649
+#, c-format
 msgid	"#  organization=STRING (if beginning with '/' read from file)\n"
 msgstr	"#  organization=SÕNE (kui algab sümboliga '/', loe failist)\n"
 
-#: src/attrib.c:611
+#: src/attrib.c:650
+#, c-format
 msgid	"#  followup_to=STRING\n"
 msgstr	"#  followup_to=SÕNE\n"
 
-#: src/attrib.c:612
+#: src/attrib.c:651
+#, c-format
 msgid	"#  mailing_list=STRING (ie. majordomo@example.org)\n"
 msgstr	"#  mailing_list=SÕNE (n. majordomo@example.org)\n"
 
-#: src/attrib.c:613
+#: src/attrib.c:652
+#, c-format
 msgid	"#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
 msgstr	"#  x_headers=SÕNE (n. ~/.tin/extra-headers)\n"
 
-#: src/attrib.c:614
+#: src/attrib.c:653
+#, c-format
 msgid	"#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
 msgstr	"#  x_body=SÕNE (n. ~/.tin/extra-body-text)\n"
 
-#: src/attrib.c:615
+#: src/attrib.c:654
+#, c-format
 msgid	"#  from=STRING (just append wanted From:-line, don't use quotes)\n"
 msgstr	"#  from=SÕNE (kirjutage soovitav From: rida, ärge kasutage jutumärke)\n"
 
-#: src/attrib.c:616
+#: src/attrib.c:655
+#, c-format
 msgid	"#  news_quote_format=STRING\n"
 msgstr	"#  news_quote_format=SÕNE\n"
 
-#: src/attrib.c:617
+#: src/attrib.c:656
+#, c-format
 msgid	"#  quote_chars=STRING (%%s, %%S for initials)\n"
 msgstr	"#  quote_chars=SÕNE (%%s, %%S annavad initsiaalid)\n"
 
-#: src/attrib.c:618
+#: src/attrib.c:657
+#, c-format
 msgid	"#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
 msgstr	"#  mime_types_to_save=SÕNE (n. image/*,!image/bmp)\n"
 
-#: src/attrib.c:620
+#: src/attrib.c:659
+#, c-format
 msgid	"#  ispell=STRING\n"
 msgstr	"#  ispell=SÕNE\n"
 
-#: src/attrib.c:622
+#: src/attrib.c:661
+#, c-format
 msgid	"#  auto_select=ON/OFF\n"
 msgstr	"#  auto_select=ON/OFF\n"
 
-#: src/attrib.c:623
+#: src/attrib.c:662
+#, c-format
 msgid	"#  auto_save=ON/OFF\n"
 msgstr	"#  auto_save=ON/OFF\n"
 
-#: src/attrib.c:624
+#: src/attrib.c:663
+#, c-format
 msgid	"#  batch_save=ON/OFF\n"
 msgstr	"#  batch_save=ON/OFF\n"
 
-#: src/attrib.c:625
+#: src/attrib.c:664
+#, c-format
 msgid	"#  delete_tmp_files=ON/OFF\n"
 msgstr	"#  delete_tmp_files=ON/OFF\n"
 
-#: src/attrib.c:626
+#: src/attrib.c:665
+#, c-format
 msgid	"#  show_only_unread=ON/OFF\n"
 msgstr	"#  show_only_unread=ON/OFF\n"
 
-#: src/attrib.c:627
+#: src/attrib.c:666
+#, c-format
 msgid	"#  thread_arts=NUM"
 msgstr	"#  thread_arts=NUM"
 
-#: src/attrib.c:634
+#: src/attrib.c:673
+#, c-format
 msgid	"#  show_author=NUM\n"
 msgstr	"#  show_author=NUM\n"
 
-#: src/attrib.c:640
+#: src/attrib.c:679
+#, c-format
 msgid	"#  show_info=NUM\n"
 msgstr	"#  show_info=NUM\n"
 
-#: src/attrib.c:646
+#: src/attrib.c:685
+#, c-format
 msgid	"#  sort_art_type=NUM\n"
 msgstr	"#  sort_art_type=NUM\n"
 
-#: src/attrib.c:664
+#: src/attrib.c:703
+#, c-format
 msgid	"#  sort_threads_type=NUM\n"
 msgstr	"#  sort_threads_type=NUM\n"
 
-#: src/attrib.c:669
+#: src/attrib.c:708
+#, c-format
 msgid	"#  post_proc_type=NUM\n"
 msgstr	"#  post_proc_type=NUM\n"
 
-#: src/attrib.c:674
+#: src/attrib.c:713
+#, c-format
 msgid	"#  quick_kill_scope=STRING (ie. talk.*)\n"
 msgstr	"#  quick_kill_scope=SÕNE (n. talk.*)\n"
 
-#: src/attrib.c:675
+#: src/attrib.c:714
+#, c-format
 msgid	"#  quick_kill_expire=ON/OFF\n"
 msgstr	"#  quick_kill_expire=ON/OFF\n"
 
-#: src/attrib.c:676
+#: src/attrib.c:715
+#, c-format
 msgid	"#  quick_kill_case=ON/OFF\n"
 msgstr	"#  quick_kill_case=ON/OFF\n"
 
-#: src/attrib.c:677
+#: src/attrib.c:716
+#, c-format
 msgid	"#  quick_kill_header=NUM\n"
 msgstr	"#  quick_kill_header=NUM\n"
 
-#: src/attrib.c:678 src/attrib.c:685
+#: src/attrib.c:717 src/attrib.c:724
+#, c-format
 msgid	"#    0=subj (case sensitive) 1=subj (ignore case)\n"
 msgstr	"#    0=teema (tõstutundlik) 1=teema (tõstutundetu)\n"
 
-#: src/attrib.c:679 src/attrib.c:686
+#: src/attrib.c:718 src/attrib.c:725
+#, c-format
 msgid	"#    2=from (case sensitive) 3=from (ignore case)\n"
 msgstr	"#    2=saatja (tõstutundlik) 3=saatja (tõstutundetu)\n"
 
-#: src/attrib.c:680 src/attrib.c:687
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
 msgid	"#    4=msgid 5=lines\n"
 msgstr	"#    4=msgid 5=read\n"
 
-#: src/attrib.c:681
+#: src/attrib.c:720
+#, c-format
 msgid	"#  quick_select_scope=STRING\n"
 msgstr	"#  quick_select_scope=SÕNE\n"
 
-#: src/attrib.c:682
+#: src/attrib.c:721
+#, c-format
 msgid	"#  quick_select_expire=ON/OFF\n"
 msgstr	"#  quick_select_expire=ON/OFF\n"
 
-#: src/attrib.c:683
+#: src/attrib.c:722
+#, c-format
 msgid	"#  quick_select_case=ON/OFF\n"
 msgstr	"#  quick_select_case=ON/OFF\n"
 
-#: src/attrib.c:684
+#: src/attrib.c:723
+#, c-format
 msgid	"#  quick_select_header=NUM\n"
 msgstr	"#  quick_select_header=NUM\n"
 
-#: src/attrib.c:688
+#: src/attrib.c:727
+#, c-format
 msgid	"#  x_comment_to=ON/OFF\n"
 msgstr	"#  x_comment_to=ON/OFF\n"
 
-#: src/attrib.c:689
+#: src/attrib.c:728
+#, c-format
 msgid	"#  fcc=STRING (eg. =mailbox)\n"
 msgstr	"#  fcc=SÕNE (n. =postkast)\n"
 
 #
-#: src/attrib.c:690
+#: src/attrib.c:729
+#, c-format
 msgid	"#  tex2iso_conv=ON/OFF\n"
 msgstr	"#  tex2iso_conv=ON/OFF\n"
 
-#: src/attrib.c:691
+#: src/attrib.c:730
+#, c-format
 msgid	"#  mime_forward=ON/OFF\n"
 msgstr	"#  mime_forward=ON/OFF\n"
 
-#: src/attrib.c:693
+#: src/attrib.c:732
+#, c-format
 msgid	"#  mm_network_charset=supported_charset"
 msgstr	"#  mm_network_charset=toetatud_koodileht"
 
-#: src/attrib.c:700
+#: src/attrib.c:739
+#, c-format
 msgid	"#  undeclared_charset=STRING (default is US-ASCII)\n"
 msgstr	"#  undeclared_charset=SÕNE (vaikimisi on US-ASCII)\n"
 
-#: src/attrib.c:702
+#: src/attrib.c:741
+#, c-format
 msgid	"#\n"
 	"# Note that it is best to put general (global scoping)\n"
 msgstr	"#\n"
 	"# Märkus: parem on kõigepealt kirjeldada üldisemad (globaalse skoobiga)\n"
 
-#: src/attrib.c:703
+#: src/attrib.c:742
+#, c-format
 msgid	"# entries first followed by group specific entries.\n"
 	"#\n"
 msgstr	"# ning seejärel konkreetsemad, grupi spetsiifilised, reeglid.\n"
 	"#\n"
 
-#: src/attrib.c:704
+#: src/attrib.c:743
+#, c-format
 msgid	"############################################################################\n"
 	"\n"
 msgstr	"############################################################################\n"
 	"\n"
 
-#: src/attrib.c:710
+#: src/attrib.c:749
+#, c-format
 msgid	"# include extra headers\n"
 msgstr	"# lisa täiendavaid päiseid\n"
 
-#: src/attrib.c:718
+#: src/attrib.c:757
+#, c-format
 msgid	"# in *sources* set post process type to shar only\n"
 msgstr	"# *tekstidel* sea järeltöötlemise tüübiks ainult shar\n"
 
-#: src/attrib.c:722
-msgid	"# in *binaries* do full post processing, remove tmp files\n"
+#: src/attrib.c:761
+#, fuzzy, c-format
+msgid	"# in *binaries* do full post processing but no TeX2ISO conversion,\n"
 msgstr	"# *binaarfailidel* sea täielik järeltöötlemine, kustuta ajutised failid\n"
 
-#: src/attrib.c:723
-msgid	"# and set Followup-To: poster\n"
+#: src/attrib.c:762
+#, fuzzy, c-format
+msgid	"# remove tmp files and set Followup-To: poster\n"
 msgstr	"# ja sea Followup-To: postitaja\n"
 
 #: src/cook.c:497
@@ -467,12 +518,13 @@ msgid	"*** Beginning of article ***"
 msgstr	"*** Artikli algus ***"
 
 #: src/lang.c:97
+#, c-format
 msgid	"Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
 msgstr	"Katkestada (kustutada) või asendada artikkel [%%s]? (%s/%s/%s): "
 
 #: src/lang.c:98
 msgid	"Cancelling article..."
-msgstr	"Katkestan artiklit...."
+msgstr	"Katkestan artiklit..."
 
 #: src/lang.c:100
 #, c-format
@@ -590,7 +642,7 @@ msgstr	"Loon salvestatud gruppidele acti
 msgid	"Creating newsrc file...\n"
 msgstr	"Loon newsrc faili...\n"
 
-#: src/lang.c:129 src/lang.c:1150
+#: src/lang.c:129 src/lang.c:1147
 msgid	"Default"
 msgstr	"Vaikimisi"
 
@@ -1070,13 +1122,13 @@ msgstr	"# Vorming:\n"
 	"#     score=SÕNE        üks kahest võtmesõnast: 'hot' või 'kill'.\n"
 	"#   subj=SÕNE         Mittekohustuslik. Subject: rida (n. Kuidas olla tark).\n"
 	"#   from=SÕNE         Mittekohustuslik. From: rida (n. *Jaan Tamm*)\n"
-	"#   msgid=SÕNE        Mittekohustuslik. Message-ID: rida (n. "
-	"<123@ether.net>)\n"
+	"#   msgid=SÕNE        Mittekohustuslik. Message-ID: rida (n. <123@ether."
+	"net>)\n"
 	"#                     koos kõikide viidetega.\n"
 	"#   msgid_last=SÕNE   Mittekohustuslik. Nagu ülal, aga ainult viimane viide.\n"
 	"#   msgid_only=SÕNE   Mittekohustuslik. Nagu ülal, aga viideteta.\n"
-	"#   refs_only=SÕNE    Mittekohustuslik. References: rida (n. "
-	"<123@ether.net>)\n"
+	"#   refs_only=SÕNE    Mittekohustuslik. References: rida (n. <123@ether."
+	"net>)\n"
 	"#                     ilma Message-ID:\n"
 	"#   lines=[<>]?NUMBER Mittekohustuslik. Lines: rida. '<' või '>' pole\n"
 	"#                     kohustuslikud.\n"
@@ -1370,7 +1422,7 @@ msgstr	"pääs käsuviibalt"
 #: src/lang.c:322
 #, fuzzy
 msgid	"edit filter file"
-msgstr	"Loen filtrite faili...\n"
+msgstr	"Loen filtrite faili"
 
 #: src/lang.c:323
 msgid	"get help"
@@ -1600,6 +1652,7 @@ msgstr	"eemalda märgistus kõikidelt märg
 msgid	"mark all articles in group as read"
 msgstr	"märgi valitud grupis kõik artiklid loetuks"
 
+# TRANSLATION TOO LONG
 #: src/lang.c:380
 msgid	"mark all articles in group as read and move to next unread group"
 msgstr	"märgi grupis kõik artiklid loetuks ja liigu järgmisele lugemata grupile"
@@ -1636,7 +1689,7 @@ msgstr	"liiguta valitud gruppi loendis"
 msgid	"choose next group with unread news"
 msgstr	"vali järgmine lugemata artiklitega grupp"
 
-#: src/lang.c:389 src/lang.c:1197
+#: src/lang.c:389 src/lang.c:1194
 msgid	"quit"
 msgstr	"välju"
 
@@ -1918,106 +1971,101 @@ msgstr	"Vigane klahvi definitsioon '%s'\
 msgid	"Invalid keyname '%s'\n"
 msgstr	"Vigane klahvi nimi '%s'\n"
 
-#: src/lang.c:462
-#, c-format
-msgid	"Key '%s' is defined for both %s%s and %s%s\n"
-msgstr	"Klahv '%s' on defineeritud nii %s%s, kui ka %s%s jaoks\n"
-
-#: src/lang.c:464
+#: src/lang.c:461
 #, c-format
 msgid	"Keymap file was upgraded to version %s\n"
 msgstr	""
 
-#: src/lang.c:465
+#: src/lang.c:462
 #, c-format
 msgid	"Kill From:     [%s] (y/n): "
 msgstr	"Surmake From:  [%s] (j/e): "
 
-#: src/lang.c:466
+#: src/lang.c:463
 msgid	"Kill Lines: (</>num): "
 msgstr	"Surmake read: (</>num) : "
 
-#: src/lang.c:467
+#: src/lang.c:464
 msgid	"Kill Article Menu"
 msgstr	"Artuklite surmamise menüü"
 
-#: src/lang.c:468
+#: src/lang.c:465
 #, c-format
 msgid	"Kill Msg-Id:   [%s] (f/l/o/n): "
 msgstr	"Surmake Msg-Id:[%s] (f/l/o/n): "
 
-#: src/lang.c:469
+#: src/lang.c:466
 msgid	"Kill pattern scope  : "
 msgstr	"Surmamise mustri ulatus: "
 
-#: src/lang.c:470
+#: src/lang.c:467
 #, c-format
 msgid	"Kill Subject:  [%s] (y/n): "
 msgstr	"Surmake teema: [%s] (j/e): "
 
-#: src/lang.c:471
+#: src/lang.c:468
 msgid	"Kill text pattern   : "
 msgstr	"Surmake tekst mustriga : "
 
-#: src/lang.c:472
+#: src/lang.c:469
 msgid	"Kill time in days   : "
 msgstr	"Surmamise aeg päevades : "
 
-#: src/lang.c:474
+#: src/lang.c:471
 msgid	"Last"
 msgstr	"Viimane"
 
-#: src/lang.c:475
+#: src/lang.c:472
 msgid	"-- Last response --"
 msgstr	"-- Viimane vastus --"
 
-#: src/lang.c:476
+#: src/lang.c:473
 #, c-format
 msgid	"Lines %s  "
 msgstr	"Rida: %s  "
 
-#: src/lang.c:478
+#: src/lang.c:475
 msgid	"Message-ID: line              "
 msgstr	"Message-ID: rida            "
 
-#: src/lang.c:479
+#: src/lang.c:476
 #, fuzzy
 msgid	"Mail"
 msgstr	"Saadetud"
 
-#: src/lang.c:480
+#: src/lang.c:477
 msgid	"mailbox "
 msgstr	"postkasti "
 
-#: src/lang.c:481
+#: src/lang.c:478
 #, c-format
 msgid	"Mail article(s) to [%.*s]> "
 msgstr	"Saada artiklid aadressil [%.*s]> "
 
-#: src/lang.c:482
+#: src/lang.c:479
 #, c-format
 msgid	"Mailing log to %s\n"
 msgstr	"Saadan logi aadressil %s\n"
 
-#: src/lang.c:483
+#: src/lang.c:480
 msgid	"Mail bug report..."
 msgstr	"Saada vearaport..."
 
-#: src/lang.c:484
+#: src/lang.c:481
 #, c-format
 msgid	"Mail BUG REPORT to %s?"
 msgstr	"Saadan VEARAPORTI aadressil %s?"
 
-#: src/lang.c:485
+#: src/lang.c:482
 msgid	"Mailed"
 msgstr	"Saadetud"
 
-#: src/lang.c:486
+#: src/lang.c:483
 #, c-format
 msgid	"Mailing to %s..."
 msgstr	"Saadan aadressil %s..."
 
-#: src/lang.c:487
+#: src/lang.c:484
 msgid	"# [Mail/Save] active file. Format is like news active file:\n"
 	"#   groupname  max.artnum  min.artnum  /dir\n"
 	"# The 4th field is the basedir (ie. ~/Mail or ~/News)\n"
@@ -2027,283 +2075,283 @@ msgstr	"# [Saada/Salvesta] fail \"active
 	"# Neljas väli on baaskataloog (näiteks ~/Mail või ~/News)\n"
 	"#\n"
 
-#: src/lang.c:490
+#: src/lang.c:487
 #, c-format
 msgid	"%s marked as unread"
 msgstr	"%s märgitud loetuks"
 
-#: src/lang.c:491
+#: src/lang.c:488
 #, c-format
 msgid	"Marked %d of %d tagged %s as read"
 msgstr	"Märkisin %d (%d) märgitud %s loetuks"
 
-#: src/lang.c:492
+#: src/lang.c:489
 #, c-format
 msgid	"Mark all articles as read%s?"
 msgstr	"Märgin kõik artiklid loetuks%s?"
 
-#: src/lang.c:493
+#: src/lang.c:490
 #, c-format
 msgid	"Mark %s=tagged articles, %s=current article, %s=quit: "
 msgstr	"Märgi %s=märgitud artiklid, %s=jooksev artikkel, %s=välju: "
 
-#: src/lang.c:494
+#: src/lang.c:491
 #, c-format
 msgid	"Mark group %s as read?"
 msgstr	"Märgin grupi %s loetuks?"
 
-#: src/lang.c:495
+#: src/lang.c:492
 #, c-format
 msgid	"Mark thread as read%s?"
 msgstr	"Märgin teema loetuks%s?"
 
-#: src/lang.c:496
+#: src/lang.c:493
 #, c-format
 msgid	"Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
 msgstr	"Märgi %s=märgitud artiklid/teemad, %s=jooksev teema, %s=välju: "
 
-#: src/lang.c:497
+#: src/lang.c:494
 #, c-format
 msgid	"Matching %s groups..."
 msgstr	"Otsin %s gruppe..."
 
-#: src/lang.c:498 src/lang.c:502
+#: src/lang.c:495 src/lang.c:499
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
 msgstr	"<n>=n jooksvaks grupiks; %s=järgmine lugemata; %s=otsi; %s=surma/vali;"
 
-#: src/lang.c:499
+#: src/lang.c:496
 #, c-format
 msgid	"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %s=list "
 	"thread"
-msgstr	"%s=autori otsing; %s=loetud; %s=rida alla; %s=rida üles; %s=märgi loetuks; "
-	"%s=teema"
+msgstr	"%s=autori otsing; %s=loetud; %s=rida alla; %s=rida üles; %s=märgi loetuks; %"
+	"s=teema"
 
-#: src/lang.c:500
+#: src/lang.c:497
 #, c-format
 msgid	"%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
 msgstr	"%s=rida üles; %s=rida alla; %s=lk. üles; %s=lk. alla; %s=üles; %s=alla"
 
-#: src/lang.c:501
+#: src/lang.c:498
 #, c-format
 msgid	"%s=search forwards; %s=search backwards; %s=quit"
 msgstr	"%s=otsi edaspidi; %s=otsi tagaspidi; %s=välju"
 
-#: src/lang.c:503
+#: src/lang.c:500
 #, c-format
 msgid	"%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
 msgstr	"%s=autori otsing; %s=otsi sisu; %s=loetud; %s=vasta; %s=märgi loetuks"
 
-#: src/lang.c:504
+#: src/lang.c:501
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
 msgstr	"<n>=n jooksvaks grupiks; %s=järgmine lugemata; %s,%s=otsi; %s=loetud"
 
-#: src/lang.c:505
+#: src/lang.c:502
 #, c-format
 msgid	"%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
 msgstr	"%s=rida alla; %s=rida üles; %s=appi; %s=tõsta; %s=välju; %s=kõik/lugemata"
 
-#: src/lang.c:506
+#: src/lang.c:503
 #, c-format
 msgid	"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/out"
 msgstr	"%s=telli; %s=telli muster; %s=loobu; %s=loobu muster; %s=kõik/tellitud"
 
-#: src/lang.c:507
+#: src/lang.c:504
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
 msgstr	"<n>=jooksev n; %s=järgmine lugemata; %s=loetud; %s=ekraani lülit"
 
-#: src/lang.c:508
+#: src/lang.c:505
 #, c-format
 msgid	"%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
 msgstr	"%s=appi; %s=rida alla; %s=rida üles; %s=välju; %s=märgi; %s=lugemata"
 
-#: src/lang.c:509
+#: src/lang.c:506
 msgid	"--More--"
 msgstr	"--Veel--"
 
-#: src/lang.c:510
+#: src/lang.c:507
 #, c-format
 msgid	"Moving %s..."
 msgstr	"Tõstan %s..."
 
-#: src/lang.c:512
+#: src/lang.c:509
 msgid	", name: "
 msgstr	", nimi: "
 
-#: src/lang.c:513
+#: src/lang.c:510
 #, c-format
 msgid	"Goto newsgroup [%s]> "
 msgstr	"Mine gruppi [%s]> "
 
-#: src/lang.c:514
+#: src/lang.c:511
 msgid	"newsgroups"
 msgstr	"gruppidesse"
 
-#: src/lang.c:515
+#: src/lang.c:512
 #, c-format
 msgid	"Position %s in group list (1,2,..,$) [%d]> "
 msgstr	"Positsioon %s gruppide nimistus (1,2,..,$) [%d]> "
 
-#: src/lang.c:516
+#: src/lang.c:513
 msgid	"newsgroup"
 msgstr	"gruppi"
 
-#: src/lang.c:517
+#: src/lang.c:514
 msgid	"Try and save newsrc file again?"
 msgstr	"Proovin newsrc faili uuesti salvestada?"
 
-#: src/lang.c:518
+#: src/lang.c:515
 msgid	"Warning: No newsgroups were written to your newsrc file. Save aborted."
 msgstr	"Hoiatus: Teie newsrc faili ei salvestatud ühtegi gruppi. Katkestasin "
 	"salvestamise."
 
-#: src/lang.c:519
+#: src/lang.c:516
 msgid	"newsrc file saved successfully.\n"
 msgstr	"newsrc fail on edukalt salvestatud.\n"
 
-#: src/lang.c:520
+#: src/lang.c:517
 msgid	"-- Next response --"
 msgstr	"- Järgmine vastus -"
 
-#: src/lang.c:521
+#: src/lang.c:518
 #, c-format
 msgid	"NNTP authorization password not found for %s"
 msgstr	"Serverile %s vastavat NNTP autoriseerimise parooli pole"
 
-#: src/lang.c:522
+#: src/lang.c:519
 msgid	"No  "
 msgstr	"Ei  "
 
-#: src/lang.c:523
+#: src/lang.c:520
 msgid	"*** No articles ***"
 msgstr	"*** Artikleid pole ***"
 
-#: src/lang.c:524
+#: src/lang.c:521
 msgid	"No articles have been posted"
 msgstr	"Postitatud artikleid pole"
 
-#: src/lang.c:525
+#: src/lang.c:522
 msgid	"*** No description ***"
 msgstr	"*** Kirjeldus puudub ***"
 
-#: src/lang.c:526
+#: src/lang.c:523
 msgid	"No filename"
 msgstr	"Failil pole nime"
 
-#: src/lang.c:527
+#: src/lang.c:524
 msgid	"No group"
 msgstr	"Gruppi pole"
 
-#: src/lang.c:528
+#: src/lang.c:525
 msgid	"*** No groups ***"
 msgstr	"*** Gruppe pole ***"
 
-#: src/lang.c:529
+#: src/lang.c:526
 msgid	"No more groups to read"
 msgstr	"Lugemiseks rohkem gruppe pole"
 
-#: src/lang.c:530
+#: src/lang.c:527
 msgid	"No last message"
 msgstr	"Viimast teadet pole"
 
-#: src/lang.c:531
+#: src/lang.c:528
 msgid	"No mail address"
 msgstr	"E-posti aadressi pole"
 
-#: src/lang.c:532
+#: src/lang.c:529
 msgid	"No articles marked for saving"
 msgstr	"Salvestamiseks märgitud artikleid pole"
 
-#: src/lang.c:533
+#: src/lang.c:530
 msgid	"No match"
 msgstr	"Ei leia"
 
-#: src/lang.c:534
+#: src/lang.c:531
 msgid	"No more groups"
 msgstr	"Rohkem gruppe pole"
 
-#: src/lang.c:535
+#: src/lang.c:532
 msgid	"No newsgroups"
 msgstr	"Gruppe pole"
 
-#: src/lang.c:536
+#: src/lang.c:533
 msgid	"No next unread article"
 msgstr	"Järgmist lugemata artiklit pole"
 
-#: src/lang.c:537
+#: src/lang.c:534
 msgid	"No previous group"
 msgstr	"Eelmist gruppi pole"
 
-#: src/lang.c:538
+#: src/lang.c:535
 msgid	"No previous unread article"
 msgstr	"Eelmist lugemata artiklit pole"
 
-#: src/lang.c:539
+#: src/lang.c:536
 msgid	"No responses"
 msgstr	"Vastuseid pole"
 
-#: src/lang.c:540
+#: src/lang.c:537
 msgid	"No responses to list in current thread"
 msgstr	"Jooksvas teemas pole vastuseid"
 
-#: src/lang.c:541
+#: src/lang.c:538
 msgid	"No search string"
 msgstr	"Otsingusõne puudub"
 
-#: src/lang.c:542
+#: src/lang.c:539
 msgid	"No subject"
 msgstr	"Teema puudub"
 
-#: src/lang.c:544
+#: src/lang.c:541
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-line (ce)\n"
 msgstr	"%s: Terminalil peab olema puhasta realõpuni (ce) omadus\n"
 
-#: src/lang.c:545
+#: src/lang.c:542
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-screen (cd)\n"
 msgstr	"%s: Terminalil peab olema puhasta ekraanilõpuni (cd) omadus\n"
 
-#: src/lang.c:546
+#: src/lang.c:543
 #, c-format
 msgid	"%s: Terminal must have clearscreen (cl) capability\n"
 msgstr	"%s: Terminalil peab olema ekraanipuhastamise (cl) omadus\n"
 
-#: src/lang.c:547
+#: src/lang.c:544
 #, c-format
 msgid	"%s: Terminal must have cursor motion (cm)\n"
 msgstr	"%s: Terminal peab toetama kursori liigutamist (cm)\n"
 
-#: src/lang.c:548
+#: src/lang.c:545
 #, c-format
 msgid	"%s: TERM variable must be set to use screen capabilities\n"
 msgstr	"%s: ekraani omaduste kasutamiseks peab olema seatud keskkonnamuutuja TERM\n"
 
-#: src/lang.c:550
+#: src/lang.c:547
 #, c-format
 msgid	"No viewer found for %s/%s\n"
 msgstr	"%s/%s jaoks puudub vaatur\n"
 
-#: src/lang.c:551
+#: src/lang.c:548
 msgid	"Newsgroup does not exist on this server"
 msgstr	"Gruppi pole sellel serveril"
 
-#: src/lang.c:552
+#: src/lang.c:549
 #, c-format
 msgid	"Group %s not found in active file"
 msgstr	"Gruppi %s pole aktiivsete gruppide failis"
 
-#: src/lang.c:553
+#: src/lang.c:550
 msgid	"c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"c=loo fail, a)lternatiivne nimi, d=vaikimisi .newsrc, q=välju: "
 
-#: src/lang.c:554
+#: src/lang.c:551
 msgid	"use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"a)lternatiivne nimi, d=vaikimisi .newsrc, q=välju: "
 
-#: src/lang.c:555
+#: src/lang.c:552
 #, c-format
 msgid	"# NNTP-server -> newsrc translation table and NNTP-server\n"
 	"# shortname list for %s %s\n"
@@ -2330,40 +2378,40 @@ msgstr	"# NNTP-server -> newsrc teisendu
 	"#   news.ka.nu    /tmp/nrc-nu      kanu    nu\n"
 	"#\n"
 
-#: src/lang.c:562
+#: src/lang.c:559
 msgid	"Only"
 msgstr	"Ainult"
 
-#: src/lang.c:563
+#: src/lang.c:560
 #, c-format
 msgid	"Option not enabled. Recompile with %s."
 msgstr	"Võti pole lubatud. Kasutage kompileerimisel %s."
 
-#: src/lang.c:564
+#: src/lang.c:561
 msgid	"Options Menu"
 msgstr	"Omaduste menüü"
 
-#: src/lang.c:567
+#: src/lang.c:564
 #, c-format
 msgid	"Error in regex: %s at pos. %d '%s'"
 msgstr	"Viga regulaaravaldises: %s positsioonil %d '%s'"
 
-#: src/lang.c:568
+#: src/lang.c:565
 #, c-format
 msgid	"Error in regex: pcre internal error %d"
 msgstr	"Viga regulaaravaldises: pcre sisemine viga %d"
 
-#: src/lang.c:569
+#: src/lang.c:566
 #, c-format
 msgid	"Error in regex: study - pcre internal error %s"
 msgstr	"Viga regulaaravaldises: uurimiseks - pcre sisemine viga %s"
 
-#: src/lang.c:570
+#: src/lang.c:567
 msgid	"Post a followup..."
 msgstr	"Postita vastus..."
 
 #. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
-#: src/lang.c:572
+#: src/lang.c:569
 msgid	"An error has occurred while posting the article. If you think that this\n"
 	"error is temporary or otherwise correctable, you can postpone the article\n"
 	"and pick it up again with ^O later.\n"
@@ -2371,274 +2419,276 @@ msgstr	"Artikli postitamisel tekkis viga
 	"või muul viisil kõrvaldatav, võite artikli salvestada hiljem postitamiseks\n"
 	"ja ^O käsuga hiljem postitada.\n"
 
-#: src/lang.c:575
+#: src/lang.c:572
 msgid	"Posted articles history"
 msgstr	"Postitatud artiklite ajalugu"
 
-#: src/lang.c:576
+#: src/lang.c:573
 #, c-format
 msgid	"Post to newsgroup(s) [%s]> "
 msgstr	"Postita gruppidesse [%s]> "
 
-#: src/lang.c:577
+#: src/lang.c:574
 msgid	"-- post processing started --"
 msgstr	"-- lõpptöötlus alustas --"
 
-#: src/lang.c:578
+#: src/lang.c:575
 msgid	"-- post processing completed --"
 msgstr	"-- lõpptöötlus lõpetas --"
 
-#: src/lang.c:579
+#: src/lang.c:576
 #, c-format
 msgid	"Post subject [%s]> "
 msgstr	"Postituse teema [%s]> "
 
-#: src/lang.c:580
+#: src/lang.c:577
 msgid	"# Summary of mailed/posted messages viewable by 'W' command from within tin.\n"
 msgstr	"# Kokkuvõtte saadetud/postitatud teadetest saate tinis 'W' käsuga.\n"
 
-#: src/lang.c:581
+#: src/lang.c:578
 msgid	"Posting article..."
 msgstr	"Postitan artiklit..."
 
-#: src/lang.c:582
+#: src/lang.c:579
+#, c-format
 msgid	"Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
 msgstr	"Postitan ootel artiklid [%%s]? (%s/%s/%s/%s/%s): "
 
-#: src/lang.c:583
+#: src/lang.c:580
 #, c-format
 msgid	"Hot %s"
 msgstr	"Kuum %s"
 
-#: src/lang.c:584
+#: src/lang.c:581
 #, c-format
 msgid	"Tagged %s"
 msgstr	"Märgitud %s"
 
-#: src/lang.c:585
+#: src/lang.c:582
 #, c-format
 msgid	"Untagged %s"
 msgstr	"Märkimata %s"
 
-#: src/lang.c:586
+#: src/lang.c:583
 msgid	"Processing mail messages marked for deletion."
 msgstr	"Töötlen kirju, mis on kustutamiseks märgitud."
 
-#: src/lang.c:587
+#: src/lang.c:584
 msgid	"Processing saved articles marked for deletion."
 msgstr	"Töötlen salvestatud ja kustutamiseks märgitud artikleid."
 
-#: src/lang.c:588
+#: src/lang.c:585
 #, c-format
 msgid	"Accept Followup-To? %s=post, %s=ignore, %s=quit: "
 msgstr	"Aktsepteerin Followup-To? %s=postita, %s=ignoreeri, %s=välju: "
 
-#: src/lang.c:589
+#: src/lang.c:586
 msgid	"Article unchanged, abort mailing?"
 msgstr	"Artiklit ei ole muudetud, katkestan saatmise?"
 
-#: src/lang.c:590
+#: src/lang.c:587
 #, c-format
 msgid	"Do you want to see postponed articles (%d)?"
 msgstr	"Kas soovite näha postitamisootel artikleid (%d)?"
 
-#: src/lang.c:592
+#: src/lang.c:589
 msgid	"Add quick kill filter?"
 msgstr	"Lisan kiirsurmamise filtri?"
 
-#: src/lang.c:593
+#: src/lang.c:590
 msgid	"Add quick selection filter?"
 msgstr	"Lisan kiirvaliku filtri?"
 
-#: src/lang.c:594
+#: src/lang.c:591
 msgid	"Do you really want to quit?"
 msgstr	"Kas te tõesti soovite väljuda?"
 
-#: src/lang.c:595
+#: src/lang.c:592
+#, c-format
 msgid	"%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
 msgstr	"%s=toimeta katkestamisteadet, %s=välju, %s=kustuta (katkesta) [%%s]: "
 
-#: src/lang.c:596
+#: src/lang.c:593
 msgid	"You have tagged articles in this group - quit anyway?"
 msgstr	"Teil on siin grupis märgitud artikleid - väljun siiski?"
 
-#: src/lang.c:597
+#: src/lang.c:594
 #, c-format
 msgid	"%s=quit, %s=edit, %s=postpone: "
 msgstr	"%s=välju, %s=toimeta, %s=ootele: "
 
-#: src/lang.c:598
+#: src/lang.c:595
 #, c-format
 msgid	"%s=quit %s=edit %s=save kill description: "
 msgstr	"%s=välju %s=toimeta %s=salvesta surmamise kirjeldus: "
 
-#: src/lang.c:599
+#: src/lang.c:596
 #, c-format
 msgid	"%s=quit %s=edit %s=save select description: "
 msgstr	"%s=välju %s=toimeta %s=salvesta valiku kirjeldus: "
 
-#: src/lang.c:600
+#: src/lang.c:597
 msgid	"Do you really want to quit without saving your configuration?"
 msgstr	"Kas te tõesti soovite seadeid salvestamata väljuda?"
 
-#: src/lang.c:603
+#: src/lang.c:600
 msgid	"Invalid range - valid are '0-9.$' eg. 1-$"
 msgstr	"Vigane vahemik - lubatud on '0-9.$' näiteks 1-$"
 
-#: src/lang.c:604
+#: src/lang.c:601
 msgid	"Do you want to abort this operation?"
 msgstr	"Kas soovite seda operatsiooni katkestada?"
 
-#: src/lang.c:605
+#: src/lang.c:602
 msgid	"Do you want to exit tin immediately?"
 msgstr	"Kas soovite viivitamata tinist väljuda?"
 
-#: src/lang.c:606
+#: src/lang.c:603
 msgid	"Read response> "
 msgstr	"Loen vastust> "
 
-#: src/lang.c:607
+#: src/lang.c:604
 msgid	"Reading ('q' to quit)..."
 msgstr	"Loen ('q' katkestamiseks)..."
 
-#: src/lang.c:608
+#: src/lang.c:605
 #, c-format
 msgid	"Reading %sarticles..."
 msgstr	"Loen %sartikleid..."
 
-#: src/lang.c:609
+#: src/lang.c:606
 #, c-format
 msgid	"Reading %sattributes file...\n"
 msgstr	"Loen %satribuutide faili...\n"
 
-#: src/lang.c:610
+#: src/lang.c:607
 #, c-format
 msgid	"Reading %sconfig file...\n"
 msgstr	"Loen %sseadete faili...\n"
 
-#: src/lang.c:611
+#: src/lang.c:608
 msgid	"Reading filter file...\n"
 msgstr	"Loen filtrite faili...\n"
 
-#: src/lang.c:612
+#: src/lang.c:609
 #, c-format
 msgid	"Reading %s groups..."
 msgstr	"Loen %s gruppe..."
 
-#: src/lang.c:613
+#: src/lang.c:610
 msgid	"Reading input history file...\n"
 msgstr	"Loen sisendi ajalugu...\n"
 
-#: src/lang.c:614
+#: src/lang.c:611
 msgid	"Reading keymap file...\n"
 msgstr	"Loen klahvitabeli faili...\n"
 
-#: src/lang.c:615
+#: src/lang.c:612
 msgid	"Reading groups from active file... "
 msgstr	"Loen aktiivseid gruppe... "
 
-#: src/lang.c:616
+#: src/lang.c:613
 msgid	"Reading groups from newsrc file... "
 msgstr	"Loen gruppe newsrc failist... "
 
-#: src/lang.c:617
+#: src/lang.c:614
 msgid	"Reading newsgroups file... "
 msgstr	"Loen gruppide kirjeldusi... "
 
-#: src/lang.c:618
+#: src/lang.c:615
 msgid	"Reading newsrc file..."
 msgstr	"Loen newsrc faili..."
 
-#: src/lang.c:620
+#: src/lang.c:617
 #, c-format
 msgid	"(%d:%02d remaining)"
 msgstr	"(%d:%02d järgneb)"
 
-#: src/lang.c:622
+#: src/lang.c:619
 #, c-format
 msgid	"Bogus group %s removed."
 msgstr	"Vigane grupp %s on eemaldatud."
 
-#: src/lang.c:623
+#: src/lang.c:620
 #, c-format
 msgid	"Error: rename %s to %s"
 msgstr	"Viga: %s uus nimi %s"
 
-#: src/lang.c:624
+#: src/lang.c:621
 msgid	"Reply to author..."
 msgstr	"Vastan autorile..."
 
-#: src/lang.c:625
+#: src/lang.c:622
 msgid	"Repost"
 msgstr	"Uuesti postitus"
 
-#: src/lang.c:626
+#: src/lang.c:623
 msgid	"Reposting article..."
 msgstr	"Postitan artikli uuesti..."
 
-#: src/lang.c:627
+#: src/lang.c:624
 #, c-format
 msgid	"Repost article(s) to group(s) [%s]> "
 msgstr	"Postitan artikli(d) gruppi(desse) [%s]> "
 
-#: src/lang.c:628
+#: src/lang.c:625
 msgid	"Reset newsrc?"
 msgstr	"Algväärtustan newsrc?"
 
-#: src/lang.c:629
+#: src/lang.c:626
 msgid	"Responses have been directed to the following newsgroups"
 msgstr	"Vastused edastatakse järgnevatesse gruppidesse"
 
-#: src/lang.c:630
+#: src/lang.c:627
 #, c-format
 msgid	"Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
 msgstr	"Vastused edastatakse postitajale. %s=kirjuta, %s=postita, %s=välju: "
 
-#: src/lang.c:631
+#: src/lang.c:628
 #, c-format
 msgid	"RespNo %4d of %4d"
 msgstr	"Vastus %4d : %4d"
 
-#: src/lang.c:632
+#: src/lang.c:629
 msgid	"Press <RETURN> to continue..."
 msgstr	"Jätkamiseks vajutage <RETURN>..."
 
-#: src/lang.c:634
+#: src/lang.c:631
 #, c-format
 msgid	"Select From    [%s] (y/n): "
 msgstr	"Valige From    [%s] (j/e): "
 
-#: src/lang.c:635
+#: src/lang.c:632
 msgid	"Select Lines: (</>num): "
 msgstr	"Valige read:  (</>num): "
 
-#: src/lang.c:636
+#: src/lang.c:633
 msgid	"Auto-select Article Menu"
 msgstr	"Automaatselt valitavate artiklite menüü"
 
-#: src/lang.c:637
+#: src/lang.c:634
 #, c-format
 msgid	"Select Msg-Id  [%s] (f/l/o/n): "
 msgstr	"Valige Msg-Id  [%s] (f/l/o/n): "
 
-#: src/lang.c:638
+#: src/lang.c:635
 msgid	"Select pattern scope: "
 msgstr	"Valige mustri ulatus: "
 
-#: src/lang.c:639
+#: src/lang.c:636
 #, c-format
 msgid	"Select Subject [%s] (y/n): "
 msgstr	"Valige teema   [%s] (j/e): "
 
-#: src/lang.c:640
+#: src/lang.c:637
 msgid	"Select text pattern : "
 msgstr	"Valige tekstimuster : "
 
-#: src/lang.c:641
+#: src/lang.c:638
 msgid	"Select time in days   : "
 msgstr	"Valige aeg päevades   : "
 
-#: src/lang.c:642
+#: src/lang.c:639
 #, c-format
 msgid	"# %s server configuration file\n"
 	"# This file was automatically saved by %s %s %s (\"%s\")\n"
@@ -2657,222 +2707,223 @@ msgstr	"# %s serveri seadete fail\n"
 	"############################################################################\n"
 	"\n"
 
-#: src/lang.c:648
+#: src/lang.c:645
 msgid	"Showing unread groups only"
 msgstr	"Näitan ainult lugemata gruppe"
 
-#: src/lang.c:649
+#: src/lang.c:646
 msgid	"Subject: line (ignore case)   "
 msgstr	"Subject: rida (tõstutundetu)"
 
-#: src/lang.c:650
+#: src/lang.c:647
 msgid	"Subject: line (case sensitive)"
 msgstr	"Subject: rida (tõstutundlik)"
 
-#: src/lang.c:651
+#: src/lang.c:648
 msgid	"Save"
 msgstr	"Salvesta"
 
-#: src/lang.c:652
+#: src/lang.c:649
 #, c-format
 msgid	"Save '%s' (%s/%s)?"
 msgstr	"Salvestan '%s' (%s/%s)?"
 
-#: src/lang.c:653
+#: src/lang.c:650
 msgid	"Save configuration before continuing?"
 msgstr	"Salvestan seaded enne jätkamist?"
 
-#: src/lang.c:654
+#: src/lang.c:651
 msgid	"Save filename> "
 msgstr	"Fail salvestamiseks> "
 
-#: src/lang.c:655
+#: src/lang.c:652
 msgid	"Saved"
 msgstr	"Salvestatud"
 
-#: src/lang.c:656
+#: src/lang.c:653
 #, c-format
 msgid	"%4d unread (%4d hot) %s in %s\n"
 msgstr	"%4d lugemata (%4d kuuma) %s grupis %s\n"
 
-#: src/lang.c:657
+#: src/lang.c:654
 #, c-format
 msgid	"Saved %s...\n"
 msgstr	"Salvestatud %s...\n"
 
-#: src/lang.c:658
+#: src/lang.c:655
 msgid	"Nothing was saved"
 msgstr	"Midagi ei salvestatud"
 
-#: src/lang.c:659
+#: src/lang.c:656
 #, c-format
 msgid	"\n"
 	"%s %d %s from %d %s\n"
 msgstr	"\n"
 	"%s %d %s %d grupist%s\n"
 
-#: src/lang.c:660
+#: src/lang.c:657
 #, c-format
 msgid	"-- %s saved to %s%s --"
 msgstr	"-- %s salvestati %s%s --"
 
-#: src/lang.c:661
+#: src/lang.c:658
 #, c-format
 msgid	"-- %s saved to %s - %s --"
 msgstr	"-- %s salvestati %s - %s --"
 
-#: src/lang.c:662
+#: src/lang.c:659
 msgid	"Saving..."
 msgstr	"Salvestan..."
 
-#: src/lang.c:663
+#: src/lang.c:660
 #, c-format
 msgid	"%s: Screen initialization failed"
 msgstr	"%s: Ekraani initsialiseerimine ebaõnnestus"
 
-#: src/lang.c:665
+#: src/lang.c:662
 #, c-format
 msgid	"%s: screen is too small\n"
 msgstr	"%s: ekraan on liiga väike\n"
 
-#: src/lang.c:667
+#: src/lang.c:664
 #, c-format
 msgid	"screen is too small, %s is exiting\n"
 msgstr	"ekraan on liiga väike, %s lõpetab töö\n"
 
-#: src/lang.c:668
+#: src/lang.c:665
 #, c-format
 msgid	"Search backwards [%s]> "
 msgstr	"Otsin tagurpidi [%s]> "
 
-#: src/lang.c:669
+#: src/lang.c:666
 #, c-format
 msgid	"Search body [%s]> "
 msgstr	"Otsi kehast [%s]> "
 
-#: src/lang.c:670
+#: src/lang.c:667
 #, c-format
 msgid	"Search forwards [%s]> "
 msgstr	"Otsi edaspidi [%s]> "
 
-#: src/lang.c:671
+#: src/lang.c:668
 msgid	"Searching..."
 msgstr	"Otsin..."
 
-#: src/lang.c:672
+#: src/lang.c:669
 #, c-format
 msgid	"Searching article %d of %d ('q' to abort)..."
 msgstr	"Otsin artiklit %d/%d ('q' katkestamiseks)..."
 
-#: src/lang.c:673
+#: src/lang.c:670
 msgid	"Select article> "
 msgstr	"Valige artikkel> "
 
-#: src/lang.c:674
+#: src/lang.c:671
 msgid	"Select option number before text or use arrow keys and <CR>. 'q' to quit."
 msgstr	"Valige teksti eest omaduse number või kasutage nooli ja <CR>. 'q' väljumiseks."
 
-#: src/lang.c:675
+#: src/lang.c:672
 msgid	"Select group> "
 msgstr	"Valige grupp> "
 
-#: src/lang.c:676
+#: src/lang.c:673
 #, c-format
 msgid	"Enter selection pattern [%s]> "
 msgstr	"Sisestage valiku muster [%s]> "
 
-#: src/lang.c:677
+#: src/lang.c:674
 msgid	"Select thread > "
 msgstr	"Valige teema > "
 
-#: src/lang.c:678
+#: src/lang.c:675
 #, c-format
 msgid	"%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
 msgstr	"%s %s %s (\"%s\") [%s]: saatke palun DETAILNE vea raport aadressil %s\n"
 
-#: src/lang.c:679
+#: src/lang.c:676
 msgid	"servers active-file"
 msgstr	"serveri aktiivsete gruppide fail"
 
-#: src/lang.c:680
+#: src/lang.c:677
 msgid	"Cannot move into new newsgroups. Subscribe first..."
 msgstr	"Uutesse gruppidesse ei saa siseneda. Tellige kõigepealt..."
 
-#: src/lang.c:681
+#: src/lang.c:678
 msgid	"<SPACE>"
 msgstr	"<TÜHIK>"
 
-#: src/lang.c:682
+#: src/lang.c:679
 #, c-format
 msgid	"Starting: (%s)"
 msgstr	"Stardin: (%s)"
 
-#: src/lang.c:683
+#: src/lang.c:680
 #, c-format
 msgid	"List Thread (%d of %d)"
 msgstr	"Teemad (%d/%d)"
 
-#: src/lang.c:684
+#: src/lang.c:681
 #, c-format
 msgid	"Thread (%.*s)"
 msgstr	"Teema (%.*s)"
 
-#: src/lang.c:685
+#: src/lang.c:682
 msgid	"Enter wildcard subscribe pattern> "
 msgstr	"Sisestage tellimise muster> "
 
-#: src/lang.c:686
+#: src/lang.c:683
 #, c-format
 msgid	"subscribed to %d groups"
 msgstr	"%d gruppi on tellitud"
 
-#: src/lang.c:687
+#: src/lang.c:684
 #, c-format
 msgid	"Subscribed to %s"
 msgstr	"%s on tellitud"
 
-#: src/lang.c:688
+#: src/lang.c:685
 msgid	"Subscribing... "
 msgstr	"Tellin... "
 
-#: src/lang.c:689
+#: src/lang.c:686
+#, c-format
 msgid	"Repost or supersede article(s) [%%s]? (%s/%s/%s): "
 msgstr	"Postitan uuesti või asendan artikli(d) [%%s]? (%s/%s/%s): "
 
-#: src/lang.c:690
+#: src/lang.c:687
 #, c-format
 msgid	"Supersede article(s) to group(s) [%s]> "
 msgstr	"Asendan artikli(d) gruppides [%s]> "
 
-#: src/lang.c:691
+#: src/lang.c:688
 msgid	"Superseding article ..."
 msgstr	"Asendan artikli ..."
 
-#: src/lang.c:692
+#: src/lang.c:689
 #, c-format
 msgid	"\n"
 	"Stopped. Type 'fg' to restart %s\n"
 msgstr	"\n"
 	"Peatatud. %s uuesti käivitamiseks kirjutage palun 'fg'\n"
 
-#: src/lang.c:694
+#: src/lang.c:691
 #, c-format
 msgid	"%d days"
 msgstr	"%d päeva"
 
-#: src/lang.c:695
+#: src/lang.c:692
 msgid	"<TAB>"
 msgstr	"<TAB>"
 
-#: src/lang.c:696
+#: src/lang.c:693
 msgid	"TeX "
 msgstr	"TeX "
 
-#: src/lang.c:697
+#: src/lang.c:694
 msgid	"# Default action/prompt strings\n"
 msgstr	"# Vaikimisi aktsioonide/viipade sõned\n"
 
-#: src/lang.c:698
+#: src/lang.c:695
 msgid	"# Defaults for quick (1 key) kill & auto-selection filters\n"
 	"# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
 	"#             5=Message-ID: & last References: entry only\n"
@@ -2889,261 +2940,261 @@ msgstr	"# Vaikeväärtused kiire (1 võtme)
 	"# case=ON/OFF    ON=filter on tõstutundlik OFF=tõstutundetu\n"
 	"# expire=ON/OFF  ON=kehtivusaeg default_filter_days OFF=ei aegu\n"
 
-#: src/lang.c:711
+#: src/lang.c:708
 msgid	"# If ON use print current subject or newsgroup description in the last line\n"
 msgstr	"# Kui on ON, trüki teema või grupikirjeldus viimasele reale\n"
 
-#: src/lang.c:712
+#: src/lang.c:709
 msgid	"# Host & time info used for detecting new groups (don't touch)\n"
 msgstr	"# Masin & aeg - kasutatakse uute gruppide leidmiseks (mitte muuta)\n"
 
-#: src/lang.c:713
+#: src/lang.c:710
 msgid	"There is no news\n"
 msgstr	"Uudiseid pole\n"
 
-#: src/lang.c:714
+#: src/lang.c:711
 msgid	"Thread"
 msgstr	"Teema"
 
-#: src/lang.c:715
+#: src/lang.c:712
 msgid	"Thread Level Commands"
 msgstr	"Teemataseme käsud"
 
-#: src/lang.c:716
+#: src/lang.c:713
 msgid	"Thread deselected"
 msgstr	"Teema pole valitud"
 
-#: src/lang.c:717
+#: src/lang.c:714
 msgid	"Thread selected"
 msgstr	"Teema on valitud"
 
-#: src/lang.c:719
+#: src/lang.c:716
 msgid	"threads"
 msgstr	"teemad"
 
-#: src/lang.c:721
+#: src/lang.c:718
 msgid	"Thread range"
 msgstr	"Teemade vahemik"
 
-#: src/lang.c:722
+#: src/lang.c:719
 msgid	"thread"
 msgstr	"teema"
 
-#: src/lang.c:723
+#: src/lang.c:720
 #, c-format
 msgid	"Thread %4s of %4s"
 msgstr	"Teema %4s : %4s"
 
-#: src/lang.c:724
+#: src/lang.c:721
 msgid	"Threading articles..."
 msgstr	"Järjestan artiklid teemade kaupa..."
 
-#: src/lang.c:725
+#: src/lang.c:722
 #, c-format
 msgid	"Toggled word highlighting %s"
 msgstr	"Sõnade esiletõstmine lülitatud %s"
 
-#: src/lang.c:726
+#: src/lang.c:723
 msgid	"Toggled rot13 encoding"
 msgstr	"Lülitatud rot13 kodeerimine"
 
-#: src/lang.c:727
+#: src/lang.c:724
 #, c-format
 msgid	"Toggled german TeX encoding %s"
 msgstr	"Lülitatud saksa TeX kodeering %s"
 
-#: src/lang.c:728
+#: src/lang.c:725
 #, c-format
 msgid	"Toggled tab-width to %d"
 msgstr	"Lülitatud tab-width väärtus %d"
 
-#: src/lang.c:729
+#: src/lang.c:726
 #, c-format
 msgid	"%d Trying to dotlock %s"
 msgstr	"%d Üritan punkt-lukustada %s"
 
-#: src/lang.c:730
+#: src/lang.c:727
 #, c-format
 msgid	"%d Trying to lock %s"
 msgstr	"%d Üritan lukustada %s"
 
-#: src/lang.c:731
+#: src/lang.c:728
 msgid	"           h=help\n"
 msgstr	"           h=appi\n"
 
-#: src/lang.c:733
+#: src/lang.c:730
 msgid	"Unlimited"
 msgstr	"Piiramata"
 
-#: src/lang.c:734
+#: src/lang.c:731
 msgid	"Enter wildcard unsubscribe pattern> "
 msgstr	"Sisestage loobumise muster> "
 
-#: src/lang.c:735
+#: src/lang.c:732
 #, c-format
 msgid	"Error decoding %s : %s"
 msgstr	"Viga %s dekodeerimisel: %s"
 
-#: src/lang.c:736
+#: src/lang.c:733
 msgid	"No end."
 msgstr	"Lõpp puudub."
 
-#: src/lang.c:737
+#: src/lang.c:734
 #, c-format
 msgid	"%s successfully decoded."
 msgstr	"%s on edukalt dekodeeritud."
 
-#: src/lang.c:738
+#: src/lang.c:735
 #, c-format
 msgid	"%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
 	"\n"
 msgstr	"%*s[-- %s/%s, %suuenkodeeritud fail, %d rida, nimi: %s --]\n"
 	"\n"
 
-#: src/lang.c:739
+#: src/lang.c:736
 msgid	"unread "
 msgstr	"lugemata "
 
-#: src/lang.c:740
+#: src/lang.c:737
 #, c-format
 msgid	"unsubscribed from %d groups"
 msgstr	"loobunud %d grupist"
 
-#: src/lang.c:741
+#: src/lang.c:738
 #, c-format
 msgid	"Unsubscribed from %s"
 msgstr	"Loobunud grupist %s"
 
-#: src/lang.c:742
+#: src/lang.c:739
 msgid	"Unsubscribing... "
 msgstr	"Loobun gruppidest... "
 
-#: src/lang.c:743
+#: src/lang.c:740
 msgid	"Unthreading articles..."
 msgstr	"Tükeldan teemad..."
 
-#: src/lang.c:744
+#: src/lang.c:741
 msgid	"Updated"
 msgstr	"Uuendatud"
 
-#: src/lang.c:745
+#: src/lang.c:742
 msgid	"Updating"
 msgstr	"Uuendan"
 
-#: src/lang.c:746
+#: src/lang.c:743
 #, c-format
 msgid	"Opening %s\n"
 msgstr	"Proovin %s\n"
 
-#: src/lang.c:747
+#: src/lang.c:744
 msgid	"No more URL's in this article"
 msgstr	"Selles artiklis pole rohkem URL'e"
 
-#: src/lang.c:748
+#: src/lang.c:745
 msgid	"Use MIME display program for this message?"
 msgstr	"Kasutan selle teate lugemiseks MIME näitamise programmi?"
 
-#: src/lang.c:749
+#: src/lang.c:746
 msgid	"  -c       mark all news as read in subscribed newsgroups (batch mode)"
 msgstr	"  -c       märgi tellitud gruppides kõik artiklid loetuks (pakettmood)"
 
-#: src/lang.c:750
+#: src/lang.c:747
 msgid	"  -Z       return status indicating if any unread news (batch mode)"
 msgstr	"  -Z       tagasta väärtus, mis näitab, kas on lugemata artikleid (pakettmood)"
 
-#: src/lang.c:751
+#: src/lang.c:748
 msgid	"  -q       don't check for new newsgroups"
 msgstr	"  -q       ära otsi uusi gruppe"
 
-#: src/lang.c:752
+#: src/lang.c:749
 msgid	"  -X       don't save any files on quit"
 msgstr	"  -X       töö lõpetamisel ära salvesta ühtegi faili"
 
-#: src/lang.c:753
+#: src/lang.c:750
 msgid	"  -d       don't show newsgroup descriptions"
 msgstr	"  -d       ära näita gruppide kirjeldusi"
 
-#: src/lang.c:754
+#: src/lang.c:751
 msgid	"  -G limit get only limit articles/group"
 msgstr	"  -G num   loe aunult num artiklit/gruppi"
 
-#: src/lang.c:755
+#: src/lang.c:752
 #, c-format
 msgid	"  -H       help information about %s"
 msgstr	"  -H       %s kasutamise abiinfo"
 
-#: src/lang.c:756
+#: src/lang.c:753
 msgid	"  -h       this help message"
 msgstr	"  -h       see abitekst"
 
-#: src/lang.c:757
+#: src/lang.c:754
 #, c-format
 msgid	"  -I dir   news index file directory [default=%s]"
 msgstr	"  -I kat   uudiste indeksfaili kataloog [vaikimisi=%s]"
 
-#: src/lang.c:758
+#: src/lang.c:755
 msgid	"  -u       update index files (batch mode)"
 msgstr	"  -u       värskenda indeksfaile (pakettmood)"
 
-#: src/lang.c:759
+#: src/lang.c:756
 #, c-format
 msgid	"  -m dir   mailbox directory [default=%s]"
 msgstr	"  -m kat   kirjakaustade kataloog [vaikimisi=%s]"
 
-#: src/lang.c:760
+#: src/lang.c:757
 #, c-format
 msgid	"\n"
 	"Mail bug reports/comments to %s"
 msgstr	"\n"
 	"Saatke palun vea raport/kommentaarid aadressil %s"
 
-#: src/lang.c:761
+#: src/lang.c:758
 msgid	"  -N       mail new news to your posts (batch mode)"
 msgstr	"  -N       saada uued vastused teie postitustele (pakettmood)"
 
-#: src/lang.c:762
+#: src/lang.c:759
 msgid	"  -M user  mail new news to specified user (batch mode)"
 msgstr	"  -M kasut saada uued artiklid näidatud kasutajale (pakettmood)"
 
-#: src/lang.c:763
+#: src/lang.c:760
 #, c-format
 msgid	"  -f file  subscribed to newsgroups file [default=%s]"
 msgstr	"  -f fail  tellitud gruppide fail [vaikimisi=%s]"
 
-#: src/lang.c:764
+#: src/lang.c:761
 msgid	"  -x       no posting mode"
 msgstr	"  -x       postitamiseta mood"
 
-#: src/lang.c:765
+#: src/lang.c:762
 msgid	"  -w       post an article and exit"
 msgstr	"  -w       postita artikkel ja lõpeta töö"
 
-#: src/lang.c:766
+#: src/lang.c:763
 msgid	"  -o       post all postponed articles and exit"
 msgstr	"  -o       postita kõik postitamisootel artiklid ja lõpeta töö"
 
-#: src/lang.c:767
+#: src/lang.c:764
 msgid	"  -r       read news remotely from default NNTP server"
 msgstr	"  -r       loe artikleid kasutades vaikimisi NNTP serverit"
 
-#: src/lang.c:768
+#: src/lang.c:765
 msgid	"  -R       read news saved by -S option"
 msgstr	"  -R       loe artikleid, mis on salvestatud -S võtmega"
 
-#: src/lang.c:769
+#: src/lang.c:766
 #, c-format
 msgid	"  -s dir   save news directory [default=%s]"
 msgstr	"  -s kat   artiklite salvestamise kataloog [vaikimisi=%s]"
 
-#: src/lang.c:770
+#: src/lang.c:767
 msgid	"  -S       save new news for later reading (batch mode)"
 msgstr	"  -S       salvesta uued artiklid hilisemaks lugemiseks (pakettmood)"
 
-#: src/lang.c:771
+#: src/lang.c:768
 msgid	"  -z       start if any unread news"
 msgstr	"  -z       alusta tööd, kui on lugemata uudiseid"
 
-#: src/lang.c:772
+#: src/lang.c:769
 #, c-format
 msgid	"A Usenet reader.\n"
 	"\n"
@@ -3152,37 +3203,37 @@ msgstr	"Usenet klient.\n"
 	"\n"
 	"Kasuta: %s [võtmed] [grupp[,...]]"
 
-#: src/lang.c:773
+#: src/lang.c:770
 msgid	"  -v       verbose output for batch mode options"
 msgstr	"  -v       esita pakettmoodi käskudega detailsemat informatsiooni"
 
-#: src/lang.c:774
+#: src/lang.c:771
 msgid	"  -V       print version & date information"
 msgstr	"  -V       esita versiooni ja kuupäeva informatsioon"
 
-#: src/lang.c:775
+#: src/lang.c:772
 #, c-format
 msgid	"%s only useful without batch mode operations\n"
 msgstr	"%s on kasutatav ainult pakettmoodi käskudeta\n"
 
-#: src/lang.c:776
+#: src/lang.c:773
 #, c-format
 msgid	"%s only useful for batch mode operations\n"
 msgstr	"%s on kasutatav ainult pakettmoodi käskudega\n"
 
-#: src/lang.c:778
+#: src/lang.c:775
 #, c-format
 msgid	"\n"
 	"%s%d out of range (0 - %d). Reset to 0"
 msgstr	"\n"
 	"%s%d piiridest väljas (0 - %d). Sean 0"
 
-#: src/lang.c:779
+#: src/lang.c:776
 #, c-format
 msgid	"View '%s' (%s/%s)?"
 msgstr	"Vaatan '%s' (%s/%s)?"
 
-#: src/lang.c:781
+#: src/lang.c:778
 #, c-format
 msgid	"\n"
 	"Warning: posting exceeds %d columns. Line %d is the first long one:\n"
@@ -3191,26 +3242,26 @@ msgstr	"\n"
 	"Hoiatus: postitus ületab %d veergu. Esimene pikk rida on rida %d:\n"
 	"%-100s\n"
 
-#: src/lang.c:782
+#: src/lang.c:779
 msgid	"\n"
 	"Warning: article unchanged after editing\n"
 msgstr	"\n"
 	"Hoiatus: artiklit ei ole toimetamise käigus muudetud\n"
 
-#: src/lang.c:783
+#: src/lang.c:780
 msgid	"\n"
 	"Warning: \"Subject:\" contains only whitespaces.\n"
 msgstr	"\n"
 	"Hoiatus: \"Subject:\" real on ainult tühikud.\n"
 
-#: src/lang.c:784
+#: src/lang.c:781
 msgid	"\n"
 	"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:\".\n"
 msgstr	"\n"
 	"Hoiatus: \"Subject:\" algab fraasiga \"Re: \", aga \"References:\" välju "
 	"pole.\n"
 
-#: src/lang.c:786
+#: src/lang.c:783
 msgid	"\n"
 	"Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
 	"         with \"Re: \" and does not contain \"(was:\".\n"
@@ -3218,7 +3269,7 @@ msgstr	"\n"
 	"Hoiatus: Artiklis on \"References:\" päis, aga \"Subject:\" ei alga fraasiga\n"
 	"         \"Re: \" ega sisalda \"(was:\".\n"
 
-#: src/lang.c:789
+#: src/lang.c:786
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly written by you. This will "
@@ -3238,7 +3289,7 @@ msgstr	"Lugege hoolikalt!\n"
 	"Siin on artikkel, mida te hakkate kustutama:\n"
 	"\n"
 
-#: src/lang.c:793
+#: src/lang.c:790
 msgid	"\n"
 	"Warning: You are using a non-plain transfer encoding (such as base64 or\n"
 	"         quoted-printable) and an external inews program to submit your\n"
@@ -3250,7 +3301,7 @@ msgstr	"\n"
 	"         lisab artiklile signatuuri, siis on võimalik,  et seda ei kodeerita\n"
 	"         korrektselt.\n"
 
-#: src/lang.c:798
+#: src/lang.c:795
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3263,7 +3314,7 @@ msgstr	"\n"
 	"Väärtused failis %s on muutunud!\n"
 	"Palun lugege faile WHATSNEW, jne...\n"
 
-#: src/lang.c:800
+#: src/lang.c:797
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3275,7 +3326,7 @@ msgstr	"\n"
 	"kasutatu!\n"
 	"Mõningaid väärtusi failis %s võidakse ignoreerida, mõningaid võidakse muuta!\n"
 
-#: src/lang.c:803
+#: src/lang.c:800
 #, c-format
 msgid	"Warning: tin wrote fewer groups to your\n"
 	"\t%s\n"
@@ -3288,7 +3339,7 @@ msgstr	"Hoiatus: tin kirjutas vähem grup
 	"grupist%s, tähendab see viga ja te peaksite varundama oma %s\n"
 	"enne, kui te tini uuesti käivitate!\n"
 
-#: src/lang.c:807
+#: src/lang.c:804
 #, c-format
 msgid	"\n"
 	"Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
@@ -3296,12 +3347,12 @@ msgstr	"\n"
 	"Hoiatus: Leidsin %d '-- \\n' rida, mis võib tekitada osades inimestes "
 	"segadust.\n"
 
-#: src/lang.c:808
+#: src/lang.c:805
 #, c-format
 msgid	"Warning: Only %d out of %d articles were saved"
 msgstr	"Hoiatus: Salvestati ainult %d artiklit %d artiklist"
 
-#: src/lang.c:809
+#: src/lang.c:806
 #, c-format
 msgid	"\n"
 	"Warning: Your signature  is longer than %d lines.  Since signatures usually "
@@ -3316,48 +3367,48 @@ msgstr	"\n"
 	"võimalikult\n"
 	"         lühikesed.\n"
 
-#: src/lang.c:813
+#: src/lang.c:810
 #, c-format
 msgid	"Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
 msgstr	"Hoiatus: see aadress võib sisaldada rämpsposti lõksu. %s=jätkan, %s=katkestan?"
 
-#: src/lang.c:814
+#: src/lang.c:811
 msgid	"\n"
 	"Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
 msgstr	"\n"
 	"Hoiatus: Signatuuride alguses peaks olema '-- \\n', mitte '--\\n'.\n"
 
-#: src/lang.c:815
+#: src/lang.c:812
 msgid	"Writing attributes file..."
 msgstr	"Kirjutan atribuutide faili..."
 
-#: src/lang.c:817
+#: src/lang.c:814
 #, c-format
 msgid	"%d Responses"
 msgstr	"%d Vastust"
 
-#: src/lang.c:819
+#: src/lang.c:816
 #, c-format
 msgid	"Added %d %s"
 msgstr	"Lisatud %d %s"
 
-#: src/lang.c:820
+#: src/lang.c:817
 msgid	"No unsubscribed groups to show"
 msgstr	"Tellimata gruppe pole"
 
-#: src/lang.c:821
+#: src/lang.c:818
 msgid	"Showing subscribed to groups only"
 msgstr	"Näitan ainult tellitud gruppe"
 
-#: src/lang.c:822
+#: src/lang.c:819
 msgid	"Yes "
 msgstr	"Jah "
 
-#: src/lang.c:823
+#: src/lang.c:820
 msgid	"    You have mail\n"
 msgstr	"    Teil on kiri\n"
 
-#: src/lang.c:828
+#: src/lang.c:825
 #, c-format
 msgid	"\n"
 	"Warning: Posting is in %s and contains characters which are not\n"
@@ -3373,19 +3424,14 @@ msgstr	"\n"
 	"         Kui te postitate selle artikli muutmata kujul, asendatakse\n"
 	"         need sümbolid sümboliga '?'. Et vältida sodi teie artiklis, palun\n"
 	"         seda kas muuta ja eemaldada need sümbolid või muuta seadet\n"
-	"         MM_NETWORK_CHARSET. Viimast saate teostada kasutades valikut "
-	"M)enüü.\n"
-
-#: src/lang.c:839
-#, c-format
-msgid	"Redefined key %s '%s' -> '%s'\n"
-msgstr	"Klahvi %s uus definitsioon '%s' -> '%s'\n"
+	"         MM_NETWORK_CHARSET. Viimast saate teostada kasutades valikut M)"
+	"enüü.\n"
 
-#: src/lang.c:840
+#: src/lang.c:836
 msgid	"  -D       debug mode 1=NNTP 2=ALL"
 msgstr	"  -D       silumismood 1=NNTP 2=KÕIK"
 
-#: src/lang.c:844
+#: src/lang.c:840
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly not written by you.  This "
@@ -3409,11 +3455,11 @@ msgstr	"Lugege hoolikalt!\n"
 	"Siin on artikkel, mida te asute kustutama:\n"
 	"\n"
 
-#: src/lang.c:853
+#: src/lang.c:849
 msgid	"toggle color"
 msgstr	"lülita värve"
 
-#: src/lang.c:854
+#: src/lang.c:850
 msgid	"# Changing colors of several screen parts\n"
 	"# Possible values are:\n"
 	"#  -1 = default (white for foreground and black for background)\n"
@@ -3457,44 +3503,44 @@ msgstr	"# Ekraaniosade värvide muutmine\
 	"#  15 = helevalge\n"
 	"\n"
 
-#: src/lang.c:874
+#: src/lang.c:870
 msgid	"  -a       toggle color flag"
 msgstr	"  -a       lülita värvide kasutamist"
 
-#: src/lang.c:878
+#: src/lang.c:874
 msgid	"\n"
 	"Error: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Viga: Followup-To real on rohkem kui üks grupp!\n"
 
-#: src/lang.c:879
+#: src/lang.c:875
 #, c-format
 msgid	"\n"
 	"Error: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Viga: ristpostitus %d gruppi ja Followup-To rida puudub!\n"
 
-#: src/lang.c:880
+#: src/lang.c:876
 #, c-format
 msgid	"\n"
 	"Error: \"%s\" is not a valid newsgroup!\n"
 msgstr	"\n"
 	"Viga: \"%s\" ei ole lubatud grupp!\n"
 
-#: src/lang.c:882
+#: src/lang.c:878
 msgid	"\n"
 	"Warning: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Hoiatus: Followup-To on seatud rohkem, kui ühele grupile!\n"
 
-#: src/lang.c:883
+#: src/lang.c:879
 #, c-format
 msgid	"\n"
 	"Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Hoiatus: ristpostitus %d uudisegruppi ja Followup-To rida puudub!\n"
 
-#: src/lang.c:884
+#: src/lang.c:880
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
@@ -3502,308 +3548,316 @@ msgstr	"\n"
 	"Hoiatus: \"%s\" puudub teie newsrc failist, see võib olla selles serveris "
 	"vigane!\n"
 
-#: src/lang.c:885
+#: src/lang.c:881
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not a valid newsgroup at this site!\n"
 msgstr	"\n"
 	"Hoiatus: \"%s\" ei ole selles serveris kehtiv grupp!\n"
 
-#: src/lang.c:889
+#: src/lang.c:885
 #, c-format
 msgid	"%d files successfully written from %d articles. %d %s occurred."
 msgstr	"Edukalt kirjutatud %d faili %d artiklist. Esines %d viga%s."
 
-#: src/lang.c:890
+#: src/lang.c:886
 msgid	"Missing parts."
 msgstr	"Osad puuduvad."
 
-#: src/lang.c:891
+#: src/lang.c:887
 msgid	"No beginning."
 msgstr	"Algus puudub."
 
-#: src/lang.c:892
+#: src/lang.c:888
 msgid	"No data."
 msgstr	"Andmeid pole."
 
-#: src/lang.c:893
+#: src/lang.c:889
 msgid	"Unknown error."
 msgstr	"Tundmatu viga."
 
-#: src/lang.c:896
+#: src/lang.c:892
 #, c-format
 msgid	"\tChecksum of %s (%ld %s)"
 msgstr	"\t%s kontrollsumma (%ld %s)"
 
-#: src/lang.c:901
+#: src/lang.c:897
 msgid	"Reading mail active file... "
 msgstr	"Loen aktiivsete kirjade kausta... "
 
-#: src/lang.c:902
+#: src/lang.c:898
 msgid	"Reading mailgroups file... "
 msgstr	"Loen kirjagruppide faili... "
 
-#: src/lang.c:906
+#: src/lang.c:902
 msgid	"perform PGP operations on article"
 msgstr	"kasuta artiklil PGP operatsioone"
 
-#: src/lang.c:907
+#: src/lang.c:903
 msgid	"Add key(s) to public keyring?"
 msgstr	"Lisan võtmed avalike võtmete hoidlasse?"
 
-#: src/lang.c:908
+#: src/lang.c:904
 #, c-format
 msgid	"%s=encrypt, %s=sign, %s=both, %s=quit: "
 msgstr	"%s=krüpti, %s=allkirjasta, %s=mõlemad, %s=välju: "
 
-#: src/lang.c:909
+#: src/lang.c:905
 #, c-format
 msgid	"%s=sign, %s=sign & include public key, %s=quit: "
 msgstr	"%s=allkirjasta, %s=allkirjasta & lisa avalik võti, %s=välju: "
 
-#: src/lang.c:910
+#: src/lang.c:906
 #, c-format
 msgid	"PGP has not been set up (can't open %s)"
 msgstr	"PGP pole seadistatud (ei saa avada %s)"
 
-#: src/lang.c:911
+#: src/lang.c:907
 msgid	"Article not signed and no public keys found"
 msgstr	"Artikkel pole allkirjastatud ja avalikke võtmeid pole"
 
-#: src/lang.c:913
+#: src/lang.c:909
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=välju, %s=toimeta, %s=ispell, %s=pgp, %s=menüü, %s=postita, %s=ootele: "
 
-#: src/lang.c:914
+#: src/lang.c:910
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=välju, %s=toimeta, %s=ispell, %s=pgp, %s=saada [%%s]: "
 
-#: src/lang.c:915
+#: src/lang.c:911
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
-msgstr	"%s=välju, %s=toimeta, %s=ispell, %s=pgp, %s=menüü, %s=postita, %s=ootele "
-	"[%%s]: "
+msgstr	"%s=välju, %s=toimeta, %s=ispell, %s=pgp, %s=menüü, %s=postita, %s=ootele [%%"
+	"s]: "
 
-#: src/lang.c:917
+#: src/lang.c:913
 #, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=välju, %s=toimeta, %s=pgp, %s=menüü, %s=postita, %s=ootele: "
 
-#: src/lang.c:918
+#: src/lang.c:914
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=välju, %s=toimeta, %s=pgp, %s=saada [%%s]: "
 
-#: src/lang.c:919
+#: src/lang.c:915
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=välju, %s=toimeta, %s=pgp, %s=menüü, %s=postita, %s=ootele [%%s]: "
 
-#: src/lang.c:923
+#: src/lang.c:919
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=välju, %s=toimeta, %s=ispell, %s=menüü, %s=postita, %s=ootele: "
 
-#: src/lang.c:924
+#: src/lang.c:920
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
 msgstr	"%s=välju, %s=toimeta, %s=ispell, %s=saada [%%s]: "
 
-#: src/lang.c:925
+#: src/lang.c:921
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=välju, %s=toimeta, %s=ispell, %s=menüü, %s=postita, %s=ootele [%%s]: "
 
-#: src/lang.c:927
+#: src/lang.c:923
 #, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=välju, %s=toimeta, %s=menüü, %s=postita, %s=ootele: "
 
-#: src/lang.c:928
+#: src/lang.c:924
+#, c-format
 msgid	"%s=quit, %s=edit, %s=send [%%s]: "
 msgstr	"%s=välju, %s=toimeta, %s=saada [%%s]: "
 
-#: src/lang.c:929
+#: src/lang.c:925
+#, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=välju, %s=toimeta, %s=menüü, %s=postita, %s=ootele [%%s]: "
 
-#: src/lang.c:938
+#: src/lang.c:934
 msgid	"Try cache_overview_files to speed up things.\n"
 msgstr	"Proovige asjade kiirendamiseks cache_overview_files.\n"
 
-#: src/lang.c:939
+#: src/lang.c:935
 msgid	"Tin will use local index files instead.\n"
 msgstr	"Tin kasutab hoopis kohalikke indeksfaile.\n"
 
-#: src/lang.c:940
+#: src/lang.c:936
 msgid	"Cannot find NNTP server name"
 msgstr	"Ei leia NNTP serveri nime"
 
-#: src/lang.c:941
+#: src/lang.c:937
 #, c-format
 msgid	"Connecting to %s:%d..."
 msgstr	"Loon ühendust serveriga %s:%d..."
 
-#: src/lang.c:942
+#: src/lang.c:938
 msgid	"Disconnecting from server...\n"
 msgstr	"Lõpetan ühenduse...\n"
 
-#: src/lang.c:943
+#: src/lang.c:939
 #, c-format
 msgid	"Wrong newsgroup name in response of GROUP command, %s for %s"
 msgstr	"Vigane vastus GROUP käsule, %s grupile %s"
 
-#: src/lang.c:944
+#: src/lang.c:940
 #, c-format
 msgid	"Failed to connect to NNTP server %s. Exiting..."
 msgstr	"NNTP serveriga %s ühenduse loomine ebaõnnestus. Lõpetan..."
 
-#: src/lang.c:945
+#: src/lang.c:941
 msgid	"205  Closing connection"
 msgstr	"205  Sulen ühendust"
 
-#: src/lang.c:946
+#: src/lang.c:942
 msgid	"Your server does not support the NNTP XOVER or OVER command.\n"
 msgstr	"Teie server ei toeta NNTP XOVER või OVER käsku.\n"
 
-#: src/lang.c:947
+#: src/lang.c:943
 msgid	"Connection to news server has timed out. Reconnect?"
 msgstr	"Ühendus uudisegruppide serveriga aegus. ühendun uuesti?"
 
-#: src/lang.c:948
+#: src/lang.c:944
 #, c-format
 msgid	"Put the server name in the file %s,\n"
 	"or set the environment variable NNTPSERVER"
 msgstr	"Kirjutage serveri nimi faili %s,\n"
 	"või seadke keskonnamuutuja NNTPSERVER"
 
-#: src/lang.c:949
+#: src/lang.c:945
 msgid	"  -A       force authentication on connect"
 msgstr	"  -A       sunni ühenduse loomisel autentima"
 
-#: src/lang.c:950
+#: src/lang.c:946
 #, c-format
 msgid	"  -g serv  read news from NNTP server serv [default=%s]"
 msgstr	"  -g serv  loe uudiseid NNTP serverist serv [vaikimisi=%s]"
 
-#: src/lang.c:951
+#: src/lang.c:947
 #, c-format
 msgid	"  -p port  use port as NNTP port [default=%d]"
 msgstr	"  -p port  kasuta NNTP porti [vaikimisi=%d]"
 
-#: src/lang.c:952
+#: src/lang.c:948
 msgid	"  -Q       quick start. Same as -nqd"
 msgstr	"  -Q       kiirstart. Sama kui -nqd"
 
-#: src/lang.c:953
+#: src/lang.c:949
 msgid	"  -l       use only LIST instead of GROUP (-n) command"
 msgstr	"  -l       kasuta LIST käsku GROUP (-n) käsu asemel"
 
-#: src/lang.c:954
+#: src/lang.c:950
 msgid	"  -n       only read subscribed .newsrc groups from NNTP server"
 msgstr	"  -n       loe NNTP serverist ainult tellitud .newsrc grupid"
 
-#: src/lang.c:956
+#: src/lang.c:952
 #, c-format
 msgid	"%s/tcp: Unknown service.\n"
 msgstr	"%s/tcp: Tundmatu teenus.\n"
 
-#: src/lang.c:959
+#: src/lang.c:955
 msgid	"\n"
 	"socket or connect problem\n"
 msgstr	"\n"
 	"Probleem pistikuga või ühendusega\n"
 
-#: src/lang.c:961
+#: src/lang.c:957
 #, c-format
 msgid	"\n"
 	"Connection to %s: "
 msgstr	"\n"
 	"Loon ühendust serveriga %s: "
 
-#: src/lang.c:962
+#: src/lang.c:958
 msgid	"Giving up...\n"
 msgstr	"Annan alla...\n"
 
-#: src/lang.c:965
+#: src/lang.c:961
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 	"Tin will try to use XHDR XREF instead (slows down things a bit).\n"
 msgstr	"Teie server ei paku Xref: päiserida XOVER informatsioonis.\n"
 	"Tin üritab kasutada XHDR XREF selle asemel (võib olla mõnevõrra "
 	"aeganõudvam).\n"
 
-#: src/lang.c:968
+#: src/lang.c:964
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 msgstr	"Teie server ei paku Xref: päiserida XOVER informatsioonis.\n"
 
-#: src/lang.c:971
+#: src/lang.c:967
 #, c-format
 msgid	"Can't open %s. Try %s -r to read news via NNTP.\n"
 msgstr	"%s ei saa avada. Proovige %s -r, et lugeda uudiseid üle NNTP.\n"
 
-#: src/lang.c:974
+#: src/lang.c:970
 msgid	"  -Q       quick start. Same as -qd"
 msgstr	"  -Q       kiirstart. Sama kui -qd"
 
-#: src/lang.c:975
+#: src/lang.c:971
 msgid	"  -l       read only active file instead of scanning spool (-n) command"
 msgstr	"  -l       loe pooli skaneerimise (-n) asemel ainult faili active"
 
-#: src/lang.c:976
+#: src/lang.c:972
 msgid	"  -n       only read subscribed .newsrc groups from spool"
 msgstr	"  -n       loe poolist ainult tellitud .newsrc gruppe"
 
-#: src/lang.c:977
+#: src/lang.c:973
 msgid	"Your server does not have Xref: in its NOV-files.\n"
 msgstr	"Teie server ei paku Xref: päiserida NOV failides.\n"
 
-#: src/lang.c:981
+#: src/lang.c:977
 msgid	"Posting using external inews failed. Use built in inews instead?"
 msgstr	"Välise inews programmiga postitamine ebaõnnestus. Proovin sisemist inewsi?"
 
-#: src/lang.c:982
+#: src/lang.c:978
 msgid	"It worked! Should I always use my built in inews from now on?"
 msgstr	"See töötas! Kas kasutan nüüd alati sisemist inews programmi?"
 
-#: src/lang.c:990
+#: src/lang.c:986
 #, c-format
 msgid	"%d %s printed"
 msgstr	"%d %s trükitud"
 
-#: src/lang.c:991
+#: src/lang.c:987
 msgid	"output article/thread/hot/pattern/tagged articles to printer"
 msgstr	"saada artikkel/teema/kuum/muster/märgitud trükkalile"
 
-#: src/lang.c:992
+#: src/lang.c:988
 msgid	"Print"
 msgstr	"Trüki"
 
-#: src/lang.c:993
+#: src/lang.c:989
 msgid	"Printing..."
 msgstr	"Trükin..."
 
-#: src/lang.c:997
+#: src/lang.c:993
 msgid	"pipe article/thread/hot/pattern/tagged articles into command"
 msgstr	"saada artikkel/teema/kuum/muster/märgitud toruga käsule"
 
-#: src/lang.c:998
+#: src/lang.c:994
 msgid	"No command"
 msgstr	"Käsku pole"
 
-#: src/lang.c:999
+#: src/lang.c:995
 msgid	"Pipe"
 msgstr	"Toru"
 
-#: src/lang.c:1000
+#: src/lang.c:996
 #, c-format
 msgid	"Pipe to command [%.*s]> "
 msgstr	"Toru käsku [%.*s]> "
 
-#: src/lang.c:1001
+#: src/lang.c:997
 msgid	"Piping..."
 msgstr	"Saadan torusse..."
 
-#: src/lang.c:1003
+#: src/lang.c:999
 msgid	"Piping not enabled."
 msgstr	"Toru kasutamine pole lubatud."
 
-#: src/lang.c:1007
+#: src/lang.c:1003
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line has spaces  in it that MUST be removed.\n"
@@ -3815,7 +3869,7 @@ msgstr	"\n"
 	"      tühik on see,  mis eraldab koolonit (:)  teistest komponentidest\n"
 	"      real. Gruppide eraldamiseks kasutage palun koma (,).\n"
 
-#: src/lang.c:1012
+#: src/lang.c:1008
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line is  continued in  the next line.  Since\n"
@@ -3826,7 +3880,7 @@ msgstr	"\n"
 	"      tühikuid, siis ei ole see lubatud.  Palun kirjutage kõik grupid\n"
 	"      ühele reale.\n"
 
-#: src/lang.c:1017
+#: src/lang.c:1013
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line is continued in the next line.\n"
@@ -3837,14 +3891,14 @@ msgstr	"\n"
 	"      See on uus omadus ja kõik serverid ei pruugi seda toetada.\n"
 	"      Probleemide vältimiseks, kirjutage palun kõik grupid ühele reale.\n"
 
-#: src/lang.c:1021
+#: src/lang.c:1017
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
 msgstr	"\n"
 	"Hoiatus: Rida \"%s:\" sisaldab tühikuid, mis TULEKS eemaldada.\n"
 
-#: src/lang.c:1026
+#: src/lang.c:1022
 msgid	"\n"
 	"  If your article contains quoted text  please take some time to pare it "
 	"down\n"
@@ -3874,498 +3928,502 @@ msgstr	"\n"
 	"  tega, siis ilmselt enamus lugejaid ignoreerib teid täiesti. Tänapäeval on\n"
 	"  võrgus palju rahvast ja infot!\n"
 
-#: src/lang.c:1039
+#: src/lang.c:1035
 msgid	"shell escape"
 msgstr	"paojada käsureale"
 
-#: src/lang.c:1040
+#: src/lang.c:1036
 #, c-format
 msgid	"Shell Command (%s)"
 msgstr	"Käsurea käsk (%s)"
 
-#: src/lang.c:1041
+#: src/lang.c:1037
 #, c-format
 msgid	"Enter shell command [%s]> "
 msgstr	"Sisestage käsurea käsk [%s]> "
 
-#: src/lang.c:1045
+#: src/lang.c:1041
 #, c-format
 msgid	"%s: Can't get entry for TERM\n"
 msgstr	"%s: Ei saa TERM kirjet\n"
 
-#: src/lang.c:1049
+#: src/lang.c:1045
 #, c-format
 msgid	"Group %.*s ('q' to quit)..."
-msgstr	"Grupp %.*s ('q' lõpetamiseks)... "
+msgstr	"Grupp %.*s ('q' lõpetamiseks)..."
 
-#: src/lang.c:1051
+#: src/lang.c:1047
 #, c-format
 msgid	"Group %.*s..."
-msgstr	"Grupp %.*s... "
+msgstr	"Grupp %.*s..."
 
-#: src/lang.c:1055
+#: src/lang.c:1051
 msgid	"Server unavailable\n"
 msgstr	"Server ei vasta\n"
 
-#: src/lang.c:1061
+#: src/lang.c:1057
 #, c-format
-msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; "
-	"%s=post"
-msgstr	"%s=toru; %s=kiri; %s=trüki; %s=välju; %s=kõik/lugem; %s=salv; %s=märgi; "
-	"%s=postita"
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+	"s=post"
+msgstr	"%s=toru; %s=kiri; %s=trüki; %s=välju; %s=kõik/lugem; %s=salv; %s=märgi; %"
+	"s=postita"
 
-#: src/lang.c:1062
+#: src/lang.c:1058
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
-msgstr	"%s=toru; %s=kiri; %s=trüki; %s=välju; %s=kirjuta; %s=salv; %s=märgi; "
-	"%s=postita"
+msgstr	"%s=toru; %s=kiri; %s=trüki; %s=välju; %s=kirjuta; %s=salv; %s=märgi; %"
+	"s=postita"
 
-#: src/lang.c:1064
+#: src/lang.c:1060
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	"%s=kiri; %s=trüki; %s=välju; %s=kõik/lugem; %s=salvesta; %s=märgi; %s=postita"
 
-#: src/lang.c:1065
+#: src/lang.c:1061
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=kiri; %s=trüki; %s=välju; %s=kirjuta; %s=salvesta; %s=märgi; %s=postita"
 
-#: src/lang.c:1069
+#: src/lang.c:1065
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	"%s=toru; %s=kiri; %s=välju; %s=kõik/lugemata; %s=salv; %s=märgi; %s=postita"
 
-#: src/lang.c:1070
+#: src/lang.c:1066
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=toru; %s=kiri; %s=välju; %s=kirjuta; %s=salvesta; %s=märgi; %s=postita"
 
-#: src/lang.c:1072
+#: src/lang.c:1068
 #, c-format
 msgid	"%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	"%s=kiri; %s=välju; %s=kõik/lugemata; %s=salvesta; %s=märgi; %s=postita"
 
-#: src/lang.c:1073
+#: src/lang.c:1069
 #, c-format
 msgid	"%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=kiri; %s=välju; %s=vasta kirjaga; %s=salvesta; %s=märgi; %s=postita"
 
-#: src/lang.c:1079
+#: src/lang.c:1075
 msgid	"Terminal does not support color"
 msgstr	"Terminal ei toeta värve"
 
-#: src/lang.c:1084
+#: src/lang.c:1080
 #, c-format
 msgid	"Trying %s"
 msgstr	"Proovin %s"
 
-#: src/lang.c:1098 src/lang.c:1123 src/lang.c:1139 src/lang.c:1318 src/refs.c:296
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315 src/refs.c:296
 msgid	"None"
 msgstr	"Pole"
 
-#: src/lang.c:1099
+#: src/lang.c:1095
 msgid	"Subject"
 msgstr	"Teema"
 
-#: src/lang.c:1100
+#: src/lang.c:1096
 msgid	"References"
 msgstr	"Viited"
 
-#: src/lang.c:1101
+#: src/lang.c:1097
 msgid	"Both Subject and References"
 msgstr	"Nii teema kui viited"
 
-#: src/lang.c:1102
+#: src/lang.c:1098
 msgid	"Multipart Subject"
 msgstr	"Mitmeosaliste teema"
 
-#: src/lang.c:1114 src/lang.c:1225
+#: src/lang.c:1099
+msgid	"Percentage Match"
+msgstr	""
+
+#: src/lang.c:1111 src/lang.c:1222
 msgid	"No"
 msgstr	"Ei"
 
-#: src/lang.c:1115 src/lang.c:1227
+#: src/lang.c:1112 src/lang.c:1224
 msgid	"Yes"
 msgstr	"Jah"
 
-#: src/lang.c:1116
+#: src/lang.c:1113
 msgid	"Hide All"
 msgstr	"Peida kõik"
 
-#: src/lang.c:1124
+#: src/lang.c:1121
 msgid	"Address"
 msgstr	"Aadress"
 
-#: src/lang.c:1125
+#: src/lang.c:1122
 msgid	"Full Name"
 msgstr	"Täisnimi"
 
-#: src/lang.c:1126
+#: src/lang.c:1123
 msgid	"Address and Name"
 msgstr	"Aadress ja nimi"
 
-#: src/lang.c:1133
+#: src/lang.c:1130
 msgid	"Max"
 msgstr	"Maksimum"
 
-#: src/lang.c:1134
+#: src/lang.c:1131
 msgid	"Sum"
 msgstr	"Summa"
 
-#: src/lang.c:1135
+#: src/lang.c:1132
 msgid	"Average"
 msgstr	"Keskmine"
 
-#: src/lang.c:1140
+#: src/lang.c:1137
 msgid	"Lines"
 msgstr	"Read"
 
-#: src/lang.c:1141
+#: src/lang.c:1138
 msgid	"Score"
 msgstr	"Kaal"
 
-#: src/lang.c:1142
+#: src/lang.c:1139
 msgid	"Lines & Score"
 msgstr	"Read & kaal"
 
-#: src/lang.c:1151
+#: src/lang.c:1148
 msgid	"Black"
 msgstr	"Must"
 
-#: src/lang.c:1152
+#: src/lang.c:1149
 msgid	"Red"
 msgstr	"Punane"
 
-#: src/lang.c:1153
+#: src/lang.c:1150
 msgid	"Green"
 msgstr	"Roheline"
 
-#: src/lang.c:1154
+#: src/lang.c:1151
 msgid	"Brown"
 msgstr	"Pruun"
 
-#: src/lang.c:1155
+#: src/lang.c:1152
 msgid	"Blue"
 msgstr	"Sinine"
 
-#: src/lang.c:1156
+#: src/lang.c:1153
 msgid	"Pink"
 msgstr	"Roosa"
 
-#: src/lang.c:1157
+#: src/lang.c:1154
 msgid	"Cyan"
 msgstr	"Lilla"
 
-#: src/lang.c:1158
+#: src/lang.c:1155
 msgid	"White"
 msgstr	"valge"
 
-#: src/lang.c:1159
+#: src/lang.c:1156
 msgid	"Gray"
 msgstr	"Hall"
 
-#: src/lang.c:1160
+#: src/lang.c:1157
 msgid	"Light Red"
 msgstr	"Helepunane"
 
-#: src/lang.c:1161
+#: src/lang.c:1158
 msgid	"Light Green"
 msgstr	"Heleroheline"
 
-#: src/lang.c:1162
+#: src/lang.c:1159
 msgid	"Yellow"
 msgstr	"Kollane"
 
-#: src/lang.c:1163
+#: src/lang.c:1160
 msgid	"Light Blue"
 msgstr	"Helesinine"
 
-#: src/lang.c:1164
+#: src/lang.c:1161
 msgid	"Light Pink"
 msgstr	"Heleroosa"
 
-#: src/lang.c:1165
+#: src/lang.c:1162
 msgid	"Light Cyan"
 msgstr	"Helelilla"
 
-#: src/lang.c:1166
+#: src/lang.c:1163
 msgid	"Light White"
 msgstr	"Helevalge"
 
-#: src/lang.c:1174 src/lang.c:1231 src/lang.c:1245
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
 msgid	"Nothing"
 msgstr	"Ei kasuta"
 
-#: src/lang.c:1175
+#: src/lang.c:1172
 msgid	"Mark"
 msgstr	"Märk"
 
-#: src/lang.c:1176
+#: src/lang.c:1173
 msgid	"Space"
 msgstr	"Tühik"
 
-#: src/lang.c:1183
+#: src/lang.c:1180
 msgid	"Normal"
 msgstr	"Tavaline"
 
-#: src/lang.c:1184
+#: src/lang.c:1181
 msgid	"Best highlighting"
 msgstr	"Parim esiletõstmine"
 
-#: src/lang.c:1185
+#: src/lang.c:1182
 msgid	"Underline"
 msgstr	"Allajoonitud"
 
-#: src/lang.c:1186
+#: src/lang.c:1183
 msgid	"Reverse video"
 msgstr	"Pööratud video"
 
-#: src/lang.c:1187
+#: src/lang.c:1184
 msgid	"Blinking"
 msgstr	"Plinkiv"
 
-#: src/lang.c:1188
+#: src/lang.c:1185
 msgid	"Half bright"
 msgstr	"Poolhele"
 
-#: src/lang.c:1189
+#: src/lang.c:1186
 msgid	"Bold"
 msgstr	"Paks"
 
-#: src/lang.c:1194
+#: src/lang.c:1191
 msgid	"none"
 msgstr	"pole"
 
-#: src/lang.c:1195
+#: src/lang.c:1192
 msgid	"commands"
 msgstr	"käsud"
 
-#: src/lang.c:1196
+#: src/lang.c:1193
 msgid	"select"
 msgstr	"valik"
 
-#: src/lang.c:1198
+#: src/lang.c:1195
 msgid	"commands & quit"
 msgstr	"käsud & välju"
 
-#: src/lang.c:1199
+#: src/lang.c:1196
 msgid	"commands & select"
 msgstr	"käsud & valik"
 
-#: src/lang.c:1200
+#: src/lang.c:1197
 msgid	"quit & select"
 msgstr	"välju & valik"
 
-#: src/lang.c:1201
+#: src/lang.c:1198
 msgid	"commands & quit & select"
 msgstr	"käsud & välju & valik"
 
-#: src/lang.c:1226
+#: src/lang.c:1223
 msgid	"Shell archive"
 msgstr	"Shelli arhiiv"
 
-#: src/lang.c:1232
+#: src/lang.c:1229
 msgid	"Subject: (descending)"
 msgstr	"Subject: (kahanevalt)"
 
-#: src/lang.c:1233
+#: src/lang.c:1230
 msgid	"Subject: (ascending)"
 msgstr	"Subject: (kasvavalt)"
 
-#: src/lang.c:1234
+#: src/lang.c:1231
 msgid	"From: (descending)"
 msgstr	"From: (kahanevalt)"
 
-#: src/lang.c:1235
+#: src/lang.c:1232
 msgid	"From: (ascending)"
 msgstr	"From: (kasvavalt)"
 
-#: src/lang.c:1236
+#: src/lang.c:1233
 msgid	"Date: (descending)"
 msgstr	"Date: (kahanevalt)"
 
-#: src/lang.c:1237
+#: src/lang.c:1234
 msgid	"Date: (ascending)"
 msgstr	"Date: (kasvavalt)"
 
-#: src/lang.c:1238 src/lang.c:1246
+#: src/lang.c:1235 src/lang.c:1243
 msgid	"Score (descending)"
 msgstr	"Kaal (kahanevalt)"
 
-#: src/lang.c:1239 src/lang.c:1247
+#: src/lang.c:1236 src/lang.c:1244
 msgid	"Score (ascending)"
 msgstr	"Kaal (kasvavalt)"
 
-#: src/lang.c:1240
+#: src/lang.c:1237
 msgid	"Lines: (descending)"
 msgstr	"Lines: (kahanevalt)"
 
-#: src/lang.c:1241
+#: src/lang.c:1238
 msgid	"Lines: (ascending)"
 msgstr	"Lines: (kasvavalt)"
 
-#: src/lang.c:1252
+#: src/lang.c:1249
 msgid	"Always Keep"
 msgstr	"Hoia alati"
 
-#: src/lang.c:1253
+#: src/lang.c:1250
 msgid	"Always Remove"
 msgstr	"Eemalda alati"
 
-#: src/lang.c:1254
+#: src/lang.c:1251
 msgid	"Mark with D on selection screen"
 msgstr	"Märgi valikuekraanil tähega D"
 
-#: src/lang.c:1259
+#: src/lang.c:1256
 msgid	"Kill only unread arts"
 msgstr	"Surma ainult lugemata artiklid"
 
-#: src/lang.c:1260
+#: src/lang.c:1257
 msgid	"Kill all arts & show with K"
 msgstr	"Surma kõik artiklid & näita K tähega"
 
 #. TODO: s/K/art_marked_killed/
-#: src/lang.c:1261
+#: src/lang.c:1258
 msgid	"Kill all arts and never show"
 msgstr	"Surma kõik artiklid ja ära näita"
 
-#: src/lang.c:1266
+#: src/lang.c:1263
 msgid	"Nothing special"
 msgstr	"Ei midagi erilist"
 
-#: src/lang.c:1267
+#: src/lang.c:1264
 msgid	"Compress quotes"
 msgstr	"Tihenda tsitaadid"
 
-#: src/lang.c:1268
+#: src/lang.c:1265
 msgid	"Quote signatures"
 msgstr	"Tsiteeri allkirju"
 
-#: src/lang.c:1269
+#: src/lang.c:1266
 msgid	"Compress quotes, quote sigs"
 msgstr	"Tihenda tsitaadid, tsiteeri allkirju"
 
-#: src/lang.c:1270
+#: src/lang.c:1267
 msgid	"Quote empty lines"
 msgstr	"Tsiteeri tühje ridu"
 
-#: src/lang.c:1271
+#: src/lang.c:1268
 msgid	"Compress quotes, quote empty lines"
 msgstr	"Tihenda tsitaadid, tsiteeri tühje ridu"
 
-#: src/lang.c:1272
+#: src/lang.c:1269
 msgid	"Quote sigs & empty lines"
 msgstr	"Tsiteeri allkirju ja tühje ridu"
 
-#: src/lang.c:1273
+#: src/lang.c:1270
 msgid	"Comp. q., quote sigs & empty lines"
 msgstr	"Tihenda tsitaate, tsiteeri allkirju ja tühje ridu"
 
-#: src/lang.c:1311
+#: src/lang.c:1308
 msgid	"no"
 msgstr	"ei"
 
-#: src/lang.c:1312
+#: src/lang.c:1309
 msgid	"with headers"
 msgstr	"päistega"
 
-#: src/lang.c:1313
+#: src/lang.c:1310
 msgid	"without headers"
 msgstr	"päisteta"
 
-#: src/lang.c:1320 src/lang.c:1326
+#: src/lang.c:1317 src/lang.c:1323
 msgid	"NFKC"
 msgstr	"NFKC"
 
-#: src/lang.c:1321
+#: src/lang.c:1318
 msgid	"NFKD"
 msgstr	"NFKD"
 
-#: src/lang.c:1322
+#: src/lang.c:1319
 msgid	"NFC"
 msgstr	"NFC"
 
-#: src/lang.c:1323
+#: src/lang.c:1320
 msgid	"NFD"
 msgstr	"NFD"
 
-#: src/lang.c:1334
+#: src/lang.c:1331
 msgid	"Display Options"
 msgstr	"Ekraani seaded"
 
-#: src/lang.c:1341
+#: src/lang.c:1338
 msgid	"Color Options"
 msgstr	"Värvide seaded"
 
-#: src/lang.c:1348
+#: src/lang.c:1345
 msgid	"Article-Limiting Options"
 msgstr	"Artikli piirangute seaded"
 
-#: src/lang.c:1354
+#: src/lang.c:1351
 msgid	"Posting/Mailing Options"
 msgstr	"Postitamise/saatmise seaded"
 
-#: src/lang.c:1360
+#: src/lang.c:1357
 msgid	"Saving/Printing Options"
 msgstr	"Salvestamise/trükkimise seaded"
 
-#: src/lang.c:1366
+#: src/lang.c:1363
 msgid	"Expert Options"
 msgstr	"Ekspertseaded"
 
-#: src/lang.c:1372
+#: src/lang.c:1369
 msgid	"Filtering Options"
 msgstr	"Filtreerimise seaded"
 
-#: src/lang.c:1377 src/lang.c:1408 src/lang.c:1414 src/lang.c:1426 src/lang.c:1476
-#: src/lang.c:1482 src/lang.c:1492 src/lang.c:1512 src/lang.c:1587 src/lang.c:1757
-#: src/lang.c:1763 src/lang.c:1769 src/lang.c:1775 src/lang.c:1787 src/lang.c:1794
-#: src/lang.c:1848 src/lang.c:1857 src/lang.c:1863 src/lang.c:1870 src/lang.c:1877
-#: src/lang.c:1884 src/lang.c:1891 src/lang.c:1898 src/lang.c:1905 src/lang.c:1912
-#: src/lang.c:1919 src/lang.c:1926 src/lang.c:1933 src/lang.c:1940 src/lang.c:1947
-#: src/lang.c:1954 src/lang.c:1961 src/lang.c:1968 src/lang.c:1975 src/lang.c:1982
-#: src/lang.c:1989 src/lang.c:1996 src/lang.c:2003 src/lang.c:2010 src/lang.c:2017
-#: src/lang.c:2025 src/lang.c:2041 src/lang.c:2048 src/lang.c:2055 src/lang.c:2062
-#: src/lang.c:2068 src/lang.c:2074 src/lang.c:2091 src/lang.c:2103 src/lang.c:2137
-#: src/lang.c:2190 src/lang.c:2197 src/lang.c:2203 src/lang.c:2228 src/lang.c:2245
-#: src/lang.c:2298 src/lang.c:2334 src/lang.c:2354 src/lang.c:2389 src/lang.c:2399
-#: src/lang.c:2424 src/lang.c:2440 src/lang.c:2459 src/lang.c:2472
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437 src/lang.c:1487
+#: src/lang.c:1493 src/lang.c:1503 src/lang.c:1523 src/lang.c:1598 src/lang.c:1768
+#: src/lang.c:1774 src/lang.c:1780 src/lang.c:1786 src/lang.c:1798 src/lang.c:1805
+#: src/lang.c:1859 src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916 src/lang.c:1923
+#: src/lang.c:1930 src/lang.c:1937 src/lang.c:1944 src/lang.c:1951 src/lang.c:1958
+#: src/lang.c:1965 src/lang.c:1972 src/lang.c:1979 src/lang.c:1986 src/lang.c:1993
+#: src/lang.c:2000 src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066 src/lang.c:2073
+#: src/lang.c:2079 src/lang.c:2085 src/lang.c:2102 src/lang.c:2114 src/lang.c:2148
+#: src/lang.c:2201 src/lang.c:2208 src/lang.c:2214 src/lang.c:2239 src/lang.c:2256
+#: src/lang.c:2309 src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
 msgid	"<SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"<TÜHIK> lülitab, <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1378
+#: src/lang.c:1375
 msgid	"Show mini menu & posting etiquette"
 msgstr	"Näita minimenüüd & post. etiketti"
 
-#: src/lang.c:1379
+#: src/lang.c:1376
 msgid	"# If ON show a mini menu of useful commands at each level\n"
 	"# and posting etiquette after composing an article\n"
 msgstr	"# Kui väärtus on ON, näita enimkasutatavate käskude minimenüüd\n"
 	"# ja peale artikli kirjutamist postitamise etiketti.\n"
 
-#: src/lang.c:1384
+#: src/lang.c:1381
 msgid	"Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
 msgstr	"Näita gruppide lühikirjeldusi. <TÜHIK> lülitab ja <CR> seab."
 
-#: src/lang.c:1385
+#: src/lang.c:1382
 msgid	"Show description of each newsgroup"
 msgstr	"Näita iga grupi lühikirjeldust"
 
-#: src/lang.c:1386
+#: src/lang.c:1383
 msgid	"# If ON show group description text after newsgroup name at\n"
 	"# group selection level\n"
 msgstr	"# Kui väärtus on ON, näita gruppide tasemel iga grupi nime\n"
 	"# järel grupi lühikirjeldust\n"
 
-#: src/lang.c:1391
+#: src/lang.c:1388
 msgid	"Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
 	"sets."
 msgstr	"Näita grupimenüüs teema ja From (autor) välju. <TÜHIK> lülitab ja <CR> seab."
 
-#: src/lang.c:1392
+#: src/lang.c:1389
 msgid	"In group menu, show author by"
 msgstr	"Näita grupimenüüs autorit"
 
-#: src/lang.c:1393
+#: src/lang.c:1390
 msgid	"# Part of from field to display\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = none\n"
@@ -4379,32 +4437,33 @@ msgstr	"# Millist saatja nime osa näidat
 	"# * 2 = täisnimi\n"
 	"#   3 = mõlemad\n"
 
-#: src/lang.c:1402
+#: src/lang.c:1399
 msgid	"Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
 msgstr	"Märgi valik -> või heleda ribaga. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:1403
+#: src/lang.c:1400
 msgid	"Draw -> instead of highlighted bar"
 msgstr	"Joonista -> heleda riba asemel"
 
-#: src/lang.c:1404
+#: src/lang.c:1401
 msgid	"# If ON use -> otherwise highlighted bar for selection\n"
 msgstr	"# Kui väärtus on on, kasuta valiku märkimiseks ->, muidu riba\n"
 
-#: src/lang.c:1409
+#: src/lang.c:1406
 msgid	"Use inverse video for page headers"
 msgstr	"Kasuta päistel pööratud videot"
 
-#: src/lang.c:1410
+#: src/lang.c:1407
 msgid	"# If ON use inverse video for page headers at different levels\n"
 msgstr	"# Kui väärtus on ON, kasuta erinevatel tasemetel päiste näitamisel\n"
 	"# pööratud videot\n"
 
-#: src/lang.c:1415
+#: src/lang.c:1412
 msgid	"Thread articles by"
 msgstr	"Artiklite teemadesse jagamine"
 
-#: src/lang.c:1416
+#: src/lang.c:1413
+#, fuzzy
 msgid	"# Thread articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4412,6 +4471,7 @@ msgid	"# Thread articles by ...\n"
 	"#   2 = References\n"
 	"# * 3 = Both (Subject and References)\n"
 	"#   4 = Multipart Subject\n"
+	"#   5 = Percentage Match\n"
 msgstr	"# Artiklite teemadesse jagamine\n"
 	"# Võimalikud väärtused on (vaikeväärtuse tähis on *):\n"
 	"#   0 = ei jaga\n"
@@ -4420,11 +4480,32 @@ msgstr	"# Artiklite teemadesse jagamine\
 	"# * 3 = Mõlemad (Teema ja Viited)\n"
 	"#   4 = Mitmeosaline teema\n"
 
-#: src/lang.c:1427
+#: src/lang.c:1424
+msgid	"Enter percentage match required to thread together. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1425
+msgid	"Thread percentage match"
+msgstr	""
+
+#: src/lang.c:1426
+#, c-format
+msgid	"# Thread percentage match...\n"
+	"# the percentage of characters in the subject of an article that must match\n"
+	"# a base article for both those articles to be considered to belong to the\n"
+	"# same thread. This option is an integer percentage, eg. 80, no decimals may\n"
+	"# follow. If 80 is used here, then 80%% of the characters must match "
+	"exactly,\n"
+	"# no insertion of a character, for the two articles to be put in the same\n"
+	"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+	"# 'harppy' would be threaded separately from 'happy'\n"
+msgstr	""
+
+#: src/lang.c:1438
 msgid	"Score of a thread"
 msgstr	"Teema kaal"
 
-#: src/lang.c:1428
+#: src/lang.c:1439
 msgid	"# Thread score\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = max\n"
@@ -4436,16 +4517,16 @@ msgstr	"# Teema kaal\n"
 	"#   1 = summa\n"
 	"#   2 = keskmine\n"
 
-#: src/lang.c:1436
+#: src/lang.c:1447
 msgid	"Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
 msgstr	"Järjesta artiklid Subject, From, Date, kaalu järgi. <TÜHIK> lülitab, <CR> "
 	"seab."
 
-#: src/lang.c:1437
+#: src/lang.c:1448
 msgid	"Sort articles by"
 msgstr	"Artiklite järjestus"
 
-#: src/lang.c:1438
+#: src/lang.c:1449
 msgid	"# Sort articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4473,15 +4554,15 @@ msgstr	"# Artiklite järjestamine\n"
 	"#   9 = Ridu kahanev\n"
 	"#  10 = Ridu kasvav\n"
 
-#: src/lang.c:1454
+#: src/lang.c:1465
 msgid	"Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
 msgstr	"Järjesta teemad mitte millegi või kaalu järgi. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:1455
+#: src/lang.c:1466
 msgid	"Sort threads by"
 msgstr	"Teemade järjestus"
 
-#: src/lang.c:1456
+#: src/lang.c:1467
 msgid	"# Sort thread by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4493,45 +4574,45 @@ msgstr	"# Teemade järjestamine\n"
 	"# * 1 = Skoor kahanev\n"
 	"#   2 = Skoor kasvav\n"
 
-#: src/lang.c:1464
+#: src/lang.c:1475
 msgid	"Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
 msgstr	"Vii kursor grupis esimesele/viimasele lugemata artiklile. <TÜHIK> lülitab, "
 	"<CR> seab."
 
-#: src/lang.c:1465
+#: src/lang.c:1476
 msgid	"Goto first unread article in group"
 msgstr	"Mine grupis esimesele lugemata art."
 
-#: src/lang.c:1466
+#: src/lang.c:1477
 msgid	"# If ON put cursor at first unread art in group otherwise last art\n"
 msgstr	"# Kui väärtus on ON, vii kursor grupi esimesele lugemata artiklile,\n"
 	"# muidu viimasele\n"
 
-#: src/lang.c:1470
+#: src/lang.c:1481
 msgid	"Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
 msgstr	"Näita kõiki või ainult lugemata artikleid. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:1471
+#: src/lang.c:1482
 msgid	"Show only unread articles"
 msgstr	"Näita ainult lugemata artikleid"
 
-#: src/lang.c:1472
+#: src/lang.c:1483
 msgid	"# If ON show only new/unread articles otherwise show all.\n"
 msgstr	"# Kui väärtus on ON, näita ainult lugemata artikleid, muidu näita kõiki.\n"
 
-#: src/lang.c:1477
+#: src/lang.c:1488
 msgid	"Show only groups with unread arts"
 msgstr	"Ainult lugemata artiklitega grupid"
 
-#: src/lang.c:1478
+#: src/lang.c:1489
 msgid	"# If ON show only subscribed to groups that contain unread articles.\n"
 msgstr	"# Näita ainult neid tellitud gruppe, kus on lugemata artikleid.\n"
 
-#: src/lang.c:1483
+#: src/lang.c:1494
 msgid	"Filter which articles"
 msgstr	"Filtreeri artikleid"
 
-#: src/lang.c:1484
+#: src/lang.c:1495
 msgid	"# Filter which articles\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = only kill unread articles\n"
@@ -4543,196 +4624,196 @@ msgstr	"# Artikklite filtreerimine\n"
 	"#   1 = Surma kõik artiklid ja näita teemades märgiga K\n"
 	"#   2 = Surma kõik artiklid ja ära näita neid\n"
 
-#: src/lang.c:1493
+#: src/lang.c:1504
 msgid	"Tab goes to next unread article"
 msgstr	"Tab viib järgmisele lugemata art."
 
-#: src/lang.c:1494
+#: src/lang.c:1505
 msgid	"# If ON the TAB command will go to next unread article at article viewer "
 	"level\n"
 msgstr	"# Kui väärtus on ON, viib Tab käsk järgmisele lugemata artiklile\n"
 
-#: src/lang.c:1498
+#: src/lang.c:1509
 msgid	"Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
 msgstr	"Tühikuga artikli lõpust edasi kerimine hüppab järgmisele lugemata artiklile."
 
-#: src/lang.c:1499
+#: src/lang.c:1510
 msgid	"Space goes to next unread article"
 msgstr	"Tühik viib järgmisele lugemata art."
 
-#: src/lang.c:1500
+#: src/lang.c:1511
 msgid	"# If ON the SPACE command will go to next unread article at article viewer\n"
 	"# level when the end of the article is reached (rn-style pager)\n"
 msgstr	"# Kui väärtus on ON, viib artikli lõpus tühiku vajutamine\n"
 	"# järgmisele lugemata artiklile (rn stiil)\n"
 
-#: src/lang.c:1505
+#: src/lang.c:1516
 msgid	"Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
 msgstr	"<PGDN>/noolega art. lõpust edasi kerimine hüppab järgmisele lugemata art."
 
-#: src/lang.c:1506
+#: src/lang.c:1517
 msgid	"PgDn goes to next unread article"
 msgstr	"PgDn viib järgmisele lugemata art."
 
-#: src/lang.c:1507
+#: src/lang.c:1518
 msgid	"# If ON the PGDN or DOWN command will go to next unread article when\n"
 	"# pressed at end of message\n"
 msgstr	"# Kui väärtus on ON, viib artikli lõpus PGDN või nool alla vajutamine\n"
 	"# järgmisele artiklile\n"
 
-#: src/lang.c:1513
+#: src/lang.c:1524
 msgid	"List thread using right arrow key"
 msgstr	"Nool paremale näitab teema loendit"
 
-#: src/lang.c:1514
+#: src/lang.c:1525
 msgid	"# If ON automatically list thread when entering it using right arrow key.\n"
 msgstr	"# Kui väärtus on ON, näita nool paremale klahvi vajutamisel teema artikleid.\n"
 
-#: src/lang.c:1518
+#: src/lang.c:1529
 msgid	"Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage sümbol kustutatud artiklite märkimiseks. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1519
+#: src/lang.c:1530
 msgid	"Character to show deleted articles"
 msgstr	"Kustutatud artiklite marker"
 
-#: src/lang.c:1520
+#: src/lang.c:1531
 msgid	"# Character used to show that an art was deleted (default 'D')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Sümbol, mis tähistab kustutatud artiklit (vaikimisi 'D')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1525
+#: src/lang.c:1536
 msgid	"Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage sümbol, mis märgib vahemikku kuuluvaid artikleid. <CR> seab, <ESC> "
 	"katkestab."
 
-#: src/lang.c:1526
+#: src/lang.c:1537
 msgid	"Character to show inrange articles"
 msgstr	"Artiklite vahemiku marker"
 
-#: src/lang.c:1527
+#: src/lang.c:1538
 msgid	"# Character used to show that an art is in a range (default '#')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Sümbol, mis märgib vahemikku kuuluvaid artikleid (vaikimisi '#')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1532
+#: src/lang.c:1543
 msgid	"Enter character to indicate that article will return. <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Sisestage tagasituleva artikli marker. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1533
+#: src/lang.c:1544
 msgid	"Character to show returning arts"
 msgstr	"Tagasi tulnud artiklite marker"
 
-#: src/lang.c:1534
+#: src/lang.c:1545
 msgid	"# Character used to show that an art will return (default '-')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Sümbol, mis näitab, et artikkel tuleb tagasi (vaikimisi '-')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1539
+#: src/lang.c:1550
 msgid	"Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage valitud artikleid märkiv sümbol. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1540
+#: src/lang.c:1551
 msgid	"Character to show selected articles"
 msgstr	"Valitud artiklite marker"
 
-#: src/lang.c:1541
+#: src/lang.c:1552
 msgid	"# Character used to show that an art was auto-selected (default '*')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Sümbol, mis näitab, et artikkel on automaatselt valitud (vaikimisi '*')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1546
+#: src/lang.c:1557
 msgid	"Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage värskeid artikleid märkiv sümbol. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1547
+#: src/lang.c:1558
 msgid	"Character to show recent articles"
 msgstr	"Värskete artiklite marker"
 
-#: src/lang.c:1548
+#: src/lang.c:1559
 msgid	"# Character used to show that an art is recent (default 'o')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Sümbol, mis näitab, et artikkel on värske (vaikimisi 'o')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1553
+#: src/lang.c:1564
 msgid	"Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage lugemata artikleid märkiv sümbol. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1554
+#: src/lang.c:1565
 msgid	"Character to show unread articles"
 msgstr	"Lugemata artiklite marker"
 
-#: src/lang.c:1555
+#: src/lang.c:1566
 msgid	"# Character used to show that an art is unread (default '+')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Sümbol, mis näitab, et artikkel on lugemata (vaikimisi '+')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1560
+#: src/lang.c:1571
 msgid	"Enter character to indicate read articles. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage loetud artikleid märkiv sümbol. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1561
+#: src/lang.c:1572
 msgid	"Character to show read articles"
 msgstr	"Loetud artiklite marker"
 
-#: src/lang.c:1562
+#: src/lang.c:1573
 msgid	"# Character used to show that an art was read (default ' ')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Sümbol, mis näitab, et artikkel on loetud (vaikimisi ' ')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1567
+#: src/lang.c:1578
 msgid	"Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage surmatud artikleid märkiv sümbol. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1568
+#: src/lang.c:1579
 msgid	"Character to show killed articles"
 msgstr	"Surmatud artiklite marker"
 
-#: src/lang.c:1569
+#: src/lang.c:1580
 msgid	"# Character used to show that an art was killed (default 'K')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr	"# Sümbol, mis näitab, et artikkel on surmatud (vaikimisi 'K')\n"
 	"# _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1574
+#: src/lang.c:1585
 msgid	"Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage valitud artikleid märkiv sümbol. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1575
+#: src/lang.c:1586
 msgid	"Character to show readselected arts"
 msgstr	"Lugemiseks valitud artiklite marker"
 
-#: src/lang.c:1576
+#: src/lang.c:1587
 msgid	"# Character used to show that an art was selected before read (default ':')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr	"# Sümbol, mis näitab, et artikkel on enne lugemist valitud (vaikimisi ':')\n"
 	"# Surmamise tase peab samuti olema määratud, _ asendatakse tühikuga ' '\n"
 
-#: src/lang.c:1581
+#: src/lang.c:1592
 msgid	"Enter maximum length of newsgroup names displayed. <CR> sets."
 msgstr	"Sisestage maksimaalne näidatav grupi nime pikkus. <CR> seab."
 
-#: src/lang.c:1582
+#: src/lang.c:1593
 msgid	"Max. length of group names shown"
 msgstr	"Maksimaalne grupinime pikkus"
 
-#: src/lang.c:1583
+#: src/lang.c:1594
 msgid	"# Maximum length of the names of newsgroups displayed\n"
 msgstr	"# Maksimaalne grupi nime pikkus, mida näidatakse ekraanil\n"
 
-#: src/lang.c:1588
+#: src/lang.c:1599
 msgid	"Show lines/score in listings"
 msgstr	"Näita loendis artikli kaalu/ridu"
 
-#: src/lang.c:1589
+#: src/lang.c:1600
 msgid	"# What informations should be displayed in article/thread listing\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4746,17 +4827,17 @@ msgstr	"# Millist informatsiooni tuleks 
 	"#   2 = kaalu\n"
 	"#   3 = ridu ja kaalu\n"
 
-#: src/lang.c:1598
-msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, "
-	"-2 = half page"
+#: src/lang.c:1609
+msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, -"
+	"2 = half page"
 msgstr	"0 = kerida kogu leht, -1 = näita eelmist rida järgmise lehe esimese reana, -2 "
 	"= pool lehte"
 
-#: src/lang.c:1599
+#: src/lang.c:1610
 msgid	"Number of lines to scroll in pager"
 msgstr	"Lehitsejas keritavate ridade arv"
 
-#: src/lang.c:1600
+#: src/lang.c:1611
 msgid	"# Number of lines that cursor-up/down will scroll in article pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#  -2 = half-page scrolling\n"
@@ -4772,27 +4853,27 @@ msgstr	"# Ridade arv, mida lehitseja ker
 	"# * 1 = rida haaval\n"
 	"#   2 või suurem = keri 2 või enama rea haaval (ainult lehitsejas)\n"
 
-#: src/lang.c:1610
+#: src/lang.c:1621
 msgid	"Display signatures. <SPACE> toggles & <CR> sets."
 msgstr	"Näita signatuure, <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:1611
+#: src/lang.c:1622
 msgid	"Display signatures"
 msgstr	"Näita signatuure"
 
-#: src/lang.c:1612
+#: src/lang.c:1623
 msgid	"# If OFF don't show signatures when displaying articles\n"
 msgstr	"# Kui väärtus on OFF, ei näita koos artiklitega signatuure\n"
 
-#: src/lang.c:1616
+#: src/lang.c:1627
 msgid	"Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
 msgstr	"Näita uuenkodeeritud andmeid märgitud lisadena. <TÜHIK> lülitab ja <CR> seab."
 
-#: src/lang.c:1617
+#: src/lang.c:1628
 msgid	"Display uue data as an attachment"
 msgstr	"Näita uuenk. andmeid lisadena"
 
-#: src/lang.c:1618
+#: src/lang.c:1629
 msgid	"# Handling of uuencoded data in the pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no, display raw uuencoded data\n"
@@ -4809,30 +4890,30 @@ msgstr	"# uuenkodeeritud andmete käsitle
 	"#       märgituna.\n"
 
 #
-#: src/lang.c:1628
+#: src/lang.c:1639
 msgid	"Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
 msgstr	"Dekodeeri saksa TeX esituses tähed ISO koodideks. <TÜHIK> lülitab, <CR> seab."
 
 #
-#: src/lang.c:1629
+#: src/lang.c:1640
 msgid	"Display \"a as Umlaut-a"
 msgstr	"Näita \"a kui Umlaut-a"
 
-#: src/lang.c:1630
+#: src/lang.c:1641
 msgid	"# If ON decode German style TeX umlaut codes to ISO and\n"
 	"# show \"a as Umlaut-a, etc.\n"
 msgstr	"# Kui väärtus on ON, teisenda saksa TeX esituses tähed ISO\n"
 	"# koodideks ja näita \"a nagu Umlaut-a, jne.\n"
 
-#: src/lang.c:1635 src/lang.c:1645
+#: src/lang.c:1646 src/lang.c:1656
 msgid	"Space separated list of header fields"
 msgstr	"Tühikuga eraldatud päised"
 
-#: src/lang.c:1636
+#: src/lang.c:1647
 msgid	"Display these header fields (or *)"
 msgstr	"Näita neid päiseid (või *)"
 
-#: src/lang.c:1637
+#: src/lang.c:1648
 msgid	"# Which news headers you wish to see. If you want to see _all_ the headers,\n"
 	"# place an '*' as this value. This is the only way a wildcard can be used.\n"
 	"# If you enter 'X-' as the value, you will see all headers beginning with\n"
@@ -4847,11 +4928,11 @@ msgstr	"# Milliseid artikli päiseid te s
 	"tühikut.\n"
 	"# Kui te väärtust ei määra, lülitatakse see omadus välja.\n"
 
-#: src/lang.c:1646
+#: src/lang.c:1657
 msgid	"Do not display these header fields"
 msgstr	"Ära näita neid päiseridu"
 
-#: src/lang.c:1647
+#: src/lang.c:1658
 msgid	"# Same as 'news_headers_to_display' except it denotes the opposite.\n"
 	"# An example of using both options might be if you thought X- headers were\n"
 	"# A Good Thing(tm), but thought Alan and Pape were miscreants...well then "
@@ -4869,28 +4950,28 @@ msgstr	"# Sama kui 'news_headers_to_disp
 	"#\n"
 	"# Kui te väärtust ei määra, lülitatakse see omadus välja.\n"
 
-#: src/lang.c:1657
+#: src/lang.c:1668
 msgid	"Do you want to enable automatic handling of multipart/alternative articles?"
 msgstr	"Kas te soovite multipart/alternative artiklite automaatset käsitlemist?"
 
-#: src/lang.c:1658
+#: src/lang.c:1669
 msgid	"Skip multipart/alternative parts"
 msgstr	"Jäta multipart/alternative osad"
 
-#: src/lang.c:1659
+#: src/lang.c:1670
 msgid	"# If ON strip multipart/alternative messages automatically\n"
 msgstr	"# Kui väärtus on ON, loobu automaatselt multipart/alternative teadete "
 	"lisadest\n"
 
-#: src/lang.c:1664
+#: src/lang.c:1675
 msgid	"A regex used to decide which lines to show in col_quote."
 msgstr	"Regulaaravaldis otsustamaks, milliseid ridu tsitaatides näidata."
 
-#: src/lang.c:1665
+#: src/lang.c:1676
 msgid	"Regex used to show quoted lines"
 msgstr	"Tsiteeritud ridade näitamise regex"
 
-#: src/lang.c:1666
+#: src/lang.c:1677
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4898,15 +4979,15 @@ msgstr	"# Regulaaravaldis, mida tin kasu
 	"# milliseid read on tsiteeritud. Tsiteeritud ridu näidatakse col_quote.\n"
 	"# Kui te jätate selle tühjaks, kasutab tin sisseehitatud väärtust.\n"
 
-#: src/lang.c:1672
+#: src/lang.c:1683
 msgid	"A regex used to decide which lines to show in col_quote2."
 msgstr	"Regulaaravaldis otsustamaks, milliseid ridu näidata col_quote2."
 
-#: src/lang.c:1673
+#: src/lang.c:1684
 msgid	"Regex used to show twice quoted l."
 msgstr	"Topelt tsiteeritud ridu näitav reg"
 
-#: src/lang.c:1674
+#: src/lang.c:1685
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted twice. Twice quoted lines are shown in col_quote2.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4915,15 +4996,15 @@ msgstr	"# Regulaaravaldis, mida tin kasu
 	"# näidatakse col_quote2.\n"
 	"# Kui te jätate selle tühjaks, kasutab tin sisseehitatud väärtust.\n"
 
-#: src/lang.c:1680
+#: src/lang.c:1691
 msgid	"A regex used to decide which lines to show in col_quote3."
 msgstr	"Regulaaravaldis otsustamaks, milliseid ridu näidata col_quote3."
 
-#: src/lang.c:1681
+#: src/lang.c:1692
 msgid	"Regex used to show >= 3 times q.l."
 msgstr	">= 3 tsiteeritud ridu näitav reg"
 
-#: src/lang.c:1682
+#: src/lang.c:1693
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4932,15 +5013,15 @@ msgstr	"# Regulaaravaldis, mida tin kasu
 	"# näidatakse col_quote3.\n"
 	"# Kui te jätate selle tühjaks, kasutab tin sisseehitatud väärtust.\n"
 
-#: src/lang.c:1689
+#: src/lang.c:1700
 msgid	"A regex used to decide which words to show in col_markslashes."
 msgstr	"Regex et otsustada, milliseid sõnu näidata col_markslashes abil."
 
-#: src/lang.c:1690
+#: src/lang.c:1701
 msgid	"Regex used to highlight /slashes/"
 msgstr	"Regex et esile tõsta /kaldkriipse/"
 
-#: src/lang.c:1691
+#: src/lang.c:1702
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '/' are to be shown in col_markslashes.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4948,15 +5029,15 @@ msgstr	"# Regulaaravaldis mida tin kasut
 	"# sõnu näidata col_markslashes abil. Kui jätate selle tühjaks, kasutab\n"
 	"# tin sisse ehitatud vaikeväärtust.\n"
 
-#: src/lang.c:1697
+#: src/lang.c:1708
 msgid	"A regex used to decide which words to show in col_markstars."
 msgstr	"Regex et otsustada, milliseid sõnu näidata col_markstars abil."
 
-#: src/lang.c:1698
+#: src/lang.c:1709
 msgid	"Regex used to highlight *stars*"
 msgstr	"Regex et esile tõsta *tärne*"
 
-#: src/lang.c:1699
+#: src/lang.c:1710
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '*' are to be shown in col_markstars.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4964,15 +5045,15 @@ msgstr	"# Regulaaravaldis mida tin kasut
 	"# sõnu näidata col_markstars abil. Kui jätate selle tühjaks, kasutab\n"
 	"# tin sisse ehitatud vaikeväärtust.\n"
 
-#: src/lang.c:1705
+#: src/lang.c:1716
 msgid	"A regex used to decide which words to show in col_markstroke."
 msgstr	"Regex et otsustada, milliseid sõnu näidata col_markstroke abil."
 
-#: src/lang.c:1706
+#: src/lang.c:1717
 msgid	"Regex used to highlight -strokes-"
 msgstr	"Regex et esile tõsta -kriipse-"
 
-#: src/lang.c:1707
+#: src/lang.c:1718
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '-' are to be shown in col_markstroke.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4980,15 +5061,15 @@ msgstr	"# Regulaaravaldis mida tin kasut
 	"# sõnu näidata col_markstroke abil. Kui jätate selle tühjaks, kasutab\n"
 	"# tin sisse ehitatud vaikeväärtust.\n"
 
-#: src/lang.c:1713
+#: src/lang.c:1724
 msgid	"A regex used to decide which words to show in col_markdash."
 msgstr	"Regex et otsustada, milliseid sõnu näidata col_markdash abil."
 
-#: src/lang.c:1714
+#: src/lang.c:1725
 msgid	"Regex used to highlight _underline_"
 msgstr	"Regex et esile tõsta _alakriipse_"
 
-#: src/lang.c:1715
+#: src/lang.c:1726
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '_' are to be shown in col_markdash.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4996,44 +5077,44 @@ msgstr	"# Regulaaravaldis mida tin kasut
 	"# sõnu näidata col_markdash abil. Kui jätate selle tühjaks, kasutab\n"
 	"# tin sisse ehitatud vaikeväärtust.\n"
 
-#: src/lang.c:1721
+#: src/lang.c:1732
 msgid	"A regex used to find Subject prefixes to remove.  Use '|' as separator."
 msgstr	"Regulaaravaldis eemaldatava teema prefiksi leidmiseks. Eraldajaks on '|'."
 
-#: src/lang.c:1722
+#: src/lang.c:1733
 msgid	"Regex with Subject prefixes"
 msgstr	"Regex teema prefiksi leidmiseks"
 
-#: src/lang.c:1723
+#: src/lang.c:1734
 msgid	"# A regular expression that tin will use to find Subject prefixes\n"
 	"# which will be removed before showing the header.\n"
 msgstr	"# Regulaaravaldis, mida tin kasutab, et leida teema prefiksit, mida\n"
 	"# enne päise näitamist eemaldada.\n"
 
-#: src/lang.c:1728
+#: src/lang.c:1739
 msgid	"A regex used to find Subject suffixes to remove.  Use '|' as separator."
 msgstr	"Regulaaravaldis eemaldatava teema sufiksi leidmiseks. Eraldajaks on '|'."
 
-#: src/lang.c:1729
+#: src/lang.c:1740
 msgid	"Regex with Subject suffixes"
 msgstr	"Regex teema sufiksi leidmiseks"
 
-#: src/lang.c:1730
+#: src/lang.c:1741
 msgid	"# A regular expression that tin will use to find Subject suffixes\n"
 	"# which will be removed when replying or posting followup.\n"
 msgstr	"# Regulaaravaldis, mida tin kasutab teema sufiksi leidmiseks,\n"
 	"# mis eemaldatakse vastuse saatmisel või postitamisel.\n"
 
-#: src/lang.c:1735
+#: src/lang.c:1746
 msgid	"Enter name and options for external MIME viewer, --internal for built-in "
 	"viewer"
 msgstr	"Sisestage välise MIME lehitseja nimi ja võtmed, sisemise valib --internal"
 
-#: src/lang.c:1736
+#: src/lang.c:1747
 msgid	"MIME binary content viewer"
 msgstr	"MIME kahendsisu lehitseja"
 
-#: src/lang.c:1737
+#: src/lang.c:1748
 msgid	"# If --internal automatically use the built in MIME viewer for non-text\n"
 	"# parts of articles.\n"
 	"# Otherwise specify an external viewer program (eg, metamail) or leave blank\n"
@@ -5043,127 +5124,127 @@ msgstr	"# --internal korral kasuta artik
 	"# Muidu määra automaatseks vaatamiseks väline programm (nt. metamail) või\n"
 	"# jäta tühjaks\n"
 
-#: src/lang.c:1744
+#: src/lang.c:1755
 msgid	"Confirm before starting non-text viewing program"
 msgstr	"Küsi enne mitte-tekstiliste osade vaatamist kinnitust"
 
-#: src/lang.c:1745
+#: src/lang.c:1756
 msgid	"Ask before using MIME viewer"
 msgstr	"Küsi MIME lehitseja kasutamise luba"
 
-#: src/lang.c:1746
+#: src/lang.c:1757
 msgid	"# If ON tin will ask before using metamail to display MIME messages\n"
 	"# this only happens if metamail_prog is set to something\n"
 msgstr	"# Kui väärtus on ON, küsi metamaili kasutamise luba\n"
 	"# see juhtub ainult siis, kui metamail_prog on väärtustatud\n"
 
-#: src/lang.c:1751
+#: src/lang.c:1762
 msgid	"Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
 msgstr	"Küsi, kas märkida väljumisel grupid loetuks. <TÜHIK> lülitab ja <CR> seab."
 
-#: src/lang.c:1752
+#: src/lang.c:1763
 msgid	"Catchup read groups when quitting"
 msgstr	"Väljumisel märkida grupid loetuks"
 
-#: src/lang.c:1753
+#: src/lang.c:1764
 msgid	"# If ON ask user if read groups should all be marked read\n"
 msgstr	"# Kui väärtus on ON, küsi kasutajalt, kas märkida loetud gruppides kõik\n"
 	"# artiklid loetuks\n"
 
-#: src/lang.c:1758
+#: src/lang.c:1769
 msgid	"Catchup group using left key"
 msgstr	"Nool vasakule märgib grupi loetuks"
 
-#: src/lang.c:1759
+#: src/lang.c:1770
 msgid	"# If ON catchup group/thread when leaving with the left arrow key.\n"
 msgstr	"# Kui väärtus on ON, märgi grupp/teema loetuks, kui sellest väljutakse\n"
 	"# nool vasakule klahviga.\n"
 
-#: src/lang.c:1764
+#: src/lang.c:1775
 msgid	"Catchup thread by using left key"
 msgstr	"Nool vasakule märgib teema loetuks"
 
-#: src/lang.c:1770
+#: src/lang.c:1781
 msgid	"Which actions require confirmation"
 msgstr	"Tegevused mis nõuavad kinnitust"
 
-#: src/lang.c:1771
+#: src/lang.c:1782
 msgid	"# What should we ask confirmation for.\n"
 msgstr	"# Millele me peaksime küsima kinnitust.\n"
 
-#: src/lang.c:1776
+#: src/lang.c:1787
 msgid	"'Mark article read' ignores tags"
 msgstr	"'Märgi art. loetuks' eirab märke"
 
-#: src/lang.c:1777
+#: src/lang.c:1788
 msgid	"# If ON the 'Mark article read' function marks only the current article.\n"
 msgstr	"# Kui väärtus on ON märgib 'Märgi artikkel loetuks' funktsioon ainult\n"
 	"# jooksva artikli.\n"
 
-#: src/lang.c:1781
+#: src/lang.c:1792
 msgid	"Program to run to open URL's, <CR> sets, <ESC> cancels."
 msgstr	"Programm URLide avamiseks, <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:1782
+#: src/lang.c:1793
 msgid	"Program that opens URL's"
 msgstr	"Programm URLide avamiseks"
 
-#: src/lang.c:1783
+#: src/lang.c:1794
 msgid	"# The program used to open URL's. The actual URL will be appended\n"
 msgstr	"# Programm URLide avamiseks. URL lisatakse argumendiks\n"
 
-#: src/lang.c:1788
+#: src/lang.c:1799
 msgid	"Use mouse in xterm"
 msgstr	"Kasuta xterm aknas hiirt"
 
-#: src/lang.c:1789
+#: src/lang.c:1800
 msgid	"# If ON enable mouse key support on xterm terminals\n"
 msgstr	"# Kui väärtus on ON, luba xterm aknas hiire tugi\n"
 
-#: src/lang.c:1795
+#: src/lang.c:1806
 msgid	"Use scroll keys on keypad"
 msgstr	"Kasuta kerimisnuppe"
 
-#: src/lang.c:1796
+#: src/lang.c:1807
 msgid	"# If ON enable scroll keys on terminals that support it\n"
 msgstr	"# Kui väärtus on ON, luba kerimisnuppude kasutamist terminalidel, millel need "
 	"on olemas\n"
 
-#: src/lang.c:1801
+#: src/lang.c:1812
 msgid	"Enter maximum number of article to get. <CR> sets."
 msgstr	"Sisestage suurim laetavate artiklite arv. <CR> seab."
 
-#: src/lang.c:1802
+#: src/lang.c:1813
 msgid	"Number of articles to get"
 msgstr	"Laetavate artiklite arv"
 
-#: src/lang.c:1803
+#: src/lang.c:1814
 msgid	"# Number of articles to get (0=no limit), if negative sets maximum number\n"
 	"# of already read articles to be read before first unread one\n"
 msgstr	"# Laetavate artiklite arv (0=limiit puudub), negatiivne väärtus seab\n"
 	"# maksimaalse arvu loetud artikleid, mida lugeda enne lugemata artiklit\n"
 
-#: src/lang.c:1808
+#: src/lang.c:1819
 msgid	"Enter number of days article is considered recent. <CR> sets."
 msgstr	"Sisestage artikli värskuse kestus. <CR> seab."
 
-#: src/lang.c:1809
+#: src/lang.c:1820
 msgid	"Article recentness time limit"
 msgstr	"Artikli värskuse ajapiir"
 
-#: src/lang.c:1810
+#: src/lang.c:1821
 msgid	"# Number of days in which article is considered recent, (0=OFF)\n"
 msgstr	"# Päevad, mille jooksul loetakse artiklit värskeks, (0=OFF)\n"
 
-#: src/lang.c:1814
+#: src/lang.c:1825
 msgid	"WILDMAT for normal wildcards, REGEX for full regular expression matching."
 msgstr	"WILDMAT tavalistele jokkeritele, REGEX täisregulaaravaldistega otsimisele."
 
-#: src/lang.c:1815
+#: src/lang.c:1826
 msgid	"Wildcard matching"
 msgstr	"Jokkeritega otsimine"
 
-#: src/lang.c:1816
+#: src/lang.c:1827
 msgid	"# Wildcard matching\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = wildmat\n"
@@ -5173,307 +5254,307 @@ msgstr	"# Jokkeritega otsimine\n"
 	"# * 0 = wildmat\n"
 	"#   1 = regex\n"
 
-#: src/lang.c:1823
+#: src/lang.c:1834
 msgid	"Enter minimal score before an article is marked killed. <CR> sets."
 msgstr	"Sisestage minimaalne kaal artikli surmamiseks. <CR> seab."
 
-#: src/lang.c:1824
+#: src/lang.c:1835
 msgid	"Score limit (kill)"
 msgstr	"Kaalu alampiir (surmamine)"
 
-#: src/lang.c:1825
+#: src/lang.c:1836
 msgid	"# Score limit before an article is marked killed\n"
 msgstr	"# Kaalu alampiir, enne kui artikkel märgitakse surmatuks\n"
 
-#: src/lang.c:1829
+#: src/lang.c:1840
 msgid	"Enter default score to kill articles. <CR> sets."
 msgstr	"Sisestage vaikimisi kaal artiklite surmamiseks. <CR> seab."
 
-#: src/lang.c:1830
+#: src/lang.c:1841
 msgid	"Default score to kill articles"
 msgstr	"Artiklite surmamise vaikimisi kaal"
 
-#: src/lang.c:1831
+#: src/lang.c:1842
 msgid	"# Default score to kill articles\n"
 msgstr	"# Vaikimisi kaal artiklite surmamiseks\n"
 
-#: src/lang.c:1835
+#: src/lang.c:1846
 msgid	"Enter minimal score before an article is marked hot. <CR> sets."
 msgstr	"Sisestage minimaalne kaal, enne kui artikkel märgitakse kuumaks. <CR> seab."
 
-#: src/lang.c:1836
+#: src/lang.c:1847
 msgid	"Score limit (select)"
 msgstr	"Kaalu alampiir (valik)"
 
-#: src/lang.c:1837
+#: src/lang.c:1848
 msgid	"# Score limit before an article is marked hot\n"
 msgstr	"# Kaalu alampiir, enne kui artikkel märgitakse muumaks\n"
 
-#: src/lang.c:1841
+#: src/lang.c:1852
 msgid	"Enter default score to select articles. <CR> sets."
 msgstr	"Sisestage vaikimisi kaal artiklite valimiseks. <CR> seab."
 
-#: src/lang.c:1842
+#: src/lang.c:1853
 msgid	"Default score to select articles"
 msgstr	"Vaikimisi kaal artiklite valimiseks"
 
-#: src/lang.c:1843
+#: src/lang.c:1854
 msgid	"# Default score to select articles\n"
 msgstr	"# Vaikimisi kaal artiklite valimiseks\n"
 
-#: src/lang.c:1849
+#: src/lang.c:1860
 msgid	"Use slrnface to show ''X-Face:''s"
 msgstr	"''X-Face:'' näitamiseks slrnface"
 
-#: src/lang.c:1850
+#: src/lang.c:1861
 msgid	"# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
 	"# Only useful when running in an xterm.\n"
 msgstr	"# Kui väärtus on ON, kasutan ''X-Face:'' päiste käsitlemiseks slrnface(1).\n"
 	"# Kasulik ainult xterm aknas.\n"
 
-#: src/lang.c:1858
+#: src/lang.c:1869
 msgid	"Use ANSI color"
 msgstr	"Kasuta ANSI värve"
 
-#: src/lang.c:1859
+#: src/lang.c:1870
 msgid	"# If ON using ANSI-color\n"
 msgstr	"# Kui väärtus on ON, kasuta ANSI värve\n"
 
-#: src/lang.c:1864
+#: src/lang.c:1875
 msgid	"Standard foreground color"
 msgstr	"Standardne esiplaani värv"
 
-#: src/lang.c:1865
+#: src/lang.c:1876
 msgid	"# Standard foreground color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standardne esiplaani värv\n"
 	"# Vaikimisi: -1 (vaikimisi värv)\n"
 
-#: src/lang.c:1871
+#: src/lang.c:1882
 msgid	"Standard background color"
 msgstr	"Standardne tagaplaani värv"
 
-#: src/lang.c:1872
+#: src/lang.c:1883
 msgid	"# Standard background color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standardne tagaplaani värv\n"
 	"# Vaikimisi: -1 (vaikimisi värv)\n"
 
-#: src/lang.c:1878
+#: src/lang.c:1889
 msgid	"Color for inverse text (background)"
 msgstr	"Pööratud teksti värv (tagaplaan)"
 
-#: src/lang.c:1879
+#: src/lang.c:1890
 msgid	"# Color of background for inverse text\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Pööratud teksti tagaplaani värv\n"
 	"# Vaikimisi: 4 (sinine)\n"
 
-#: src/lang.c:1885
+#: src/lang.c:1896
 msgid	"Color for inverse text (foreground)"
 msgstr	"Pööratud teksti värv (esiplaan)"
 
-#: src/lang.c:1886
+#: src/lang.c:1897
 msgid	"# Color of foreground for inverse text\n"
 	"# Default: 7 (white)\n"
 msgstr	"# Pööratud teksti esiplaani värv\n"
 	"# Vaikimisi: 7 (valge)\n"
 
-#: src/lang.c:1892
+#: src/lang.c:1903
 msgid	"Color of text lines"
 msgstr	"Tekstiridade värv"
 
-#: src/lang.c:1893
+#: src/lang.c:1904
 msgid	"# Color of text lines\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Tekstiridade värv\n"
 	"# Vaikimisi: -1 (vaikimisi värv)\n"
 
-#: src/lang.c:1899
+#: src/lang.c:1910
 msgid	"Color of mini help menu"
 msgstr	"Miniabiinfo värv"
 
-#: src/lang.c:1900
+#: src/lang.c:1911
 msgid	"# Color of mini help menu\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Miniabiinfo värv\n"
 	"# Vaikimisi: 3 (pruun)\n"
 
-#: src/lang.c:1906
+#: src/lang.c:1917
 msgid	"Color of help text"
 msgstr	"Abiinfo värv"
 
-#: src/lang.c:1907
+#: src/lang.c:1918
 msgid	"# Color of help pages\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Abiinfo värv\n"
 	"# Vaikimisi: -1 (vaikimisi värv)\n"
 
-#: src/lang.c:1913
+#: src/lang.c:1924
 msgid	"Color of status messages"
 msgstr	"Olekuteadete värv"
 
-#: src/lang.c:1914
+#: src/lang.c:1925
 msgid	"# Color of messages in last line\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Viimasel real olevate teadete värv\n"
 	"# Default: 6 (lilla)\n"
 
-#: src/lang.c:1920
+#: src/lang.c:1931
 msgid	"Color of quoted lines"
 msgstr	"Tsitaadi värv"
 
-#: src/lang.c:1921
+#: src/lang.c:1932
 msgid	"# Color of quote-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Tsitaadi värv\n"
 	"# Vaikimisi: 2 (roheline)\n"
 
-#: src/lang.c:1927
+#: src/lang.c:1938
 msgid	"Color of twice quoted line"
 msgstr	"Topelt tsiteeritud rea värv"
 
-#: src/lang.c:1928
+#: src/lang.c:1939
 msgid	"# Color of twice quoted lines\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Topelt tsiteeritud rea värv\n"
 	"# Vaikimisi: 3 (pruun)\n"
 
-#: src/lang.c:1934
+#: src/lang.c:1945
 msgid	"Color of =>3 times quoted line"
 msgstr	"=>3 korda tsiteeritud rea värv"
 
-#: src/lang.c:1935
+#: src/lang.c:1946
 msgid	"# Color of >=3 times quoted lines\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# =>3 korda tsiteeritud rea värv\n"
 	"# Vaikimisi: 4 (sinine)\n"
 
-#: src/lang.c:1941
+#: src/lang.c:1952
 msgid	"Color of article header lines"
 msgstr	"Artikli päiseridade värv"
 
-#: src/lang.c:1942
+#: src/lang.c:1953
 msgid	"# Color of header-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Päiseridade värv\n"
 	"# Vaikimisi: 2 (roheline)\n"
 
-#: src/lang.c:1948
+#: src/lang.c:1959
 msgid	"Color of actual news header fields"
 msgstr	"Artikli tegelike päiseridade värv"
 
-#: src/lang.c:1949
+#: src/lang.c:1960
 msgid	"# Color of actual news header fields\n"
 	"# Default: 9 (light red)\n"
 msgstr	"# Artikli tegelike päiseridade värv\n"
 	"# Vaikimisi: 9 (helepunane)\n"
 
-#: src/lang.c:1955
+#: src/lang.c:1966
 msgid	"Color of article subject lines"
 msgstr	"Artikli teemarea värv"
 
-#: src/lang.c:1956
+#: src/lang.c:1967
 msgid	"# Color of article subject\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Artikli teema värv\n"
 	"# Vaikimisi: 6 (lilla)\n"
 
-#: src/lang.c:1962
+#: src/lang.c:1973
 msgid	"Color of response counter"
 msgstr	"Vastuste arvu loenduri värv"
 
-#: src/lang.c:1963
+#: src/lang.c:1974
 msgid	"# Color of response counter\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Vastuste arvu loenduri värv\n"
 	"# Vaikimisi: 2 (roheline)\n"
 
-#: src/lang.c:1969
+#: src/lang.c:1980
 msgid	"Color of sender (From:)"
 msgstr	"Saatja värv (From:)"
 
-#: src/lang.c:1970
+#: src/lang.c:1981
 msgid	"# Color of sender (From:)\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Saatja värv (From:)\n"
 	"# Vaikimisi: 2 (roheline)\n"
 
-#: src/lang.c:1976
+#: src/lang.c:1987
 msgid	"Color of help/mail sign"
 msgstr	"Abiinfo/kirja teate värv"
 
-#: src/lang.c:1977
+#: src/lang.c:1988
 msgid	"# Color of Help/Mail-Sign\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Abiinfo/kirja teate värv\n"
 	"# Vaikimisi: 4 (sinine)\n"
 
-#: src/lang.c:1983
+#: src/lang.c:1994
 msgid	"Color of signatures"
 msgstr	"Signatuuri värv"
 
-#: src/lang.c:1984
+#: src/lang.c:1995
 msgid	"# Color of signature\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Signatuuri värv\n"
 	"# Vaikimisi: 4 (sinine)\n"
 
-#: src/lang.c:1990
+#: src/lang.c:2001
 msgid	"Color of highlighted URLs"
 msgstr	"Esiletõstetud URLide värv"
 
-#: src/lang.c:1991
+#: src/lang.c:2002
 msgid	"# Color of highlighted URLs\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Esiletõstetud URLide värv\n"
 	"# Vaikimisi: -1 (vaikimisi värv)\n"
 
-#: src/lang.c:1997
+#: src/lang.c:2008
 msgid	"Color of highlighting with *stars*"
 msgstr	"*tärnidega* esiletõstmise värv"
 
-#: src/lang.c:1998
+#: src/lang.c:2009
 msgid	"# Color of word highlighting with *stars*\n"
 	"# Default: 11 (yellow)\n"
 msgstr	"# *tärnidega* esiletõstmise värv\n"
 	"# Vaikimisi: 11 (kollane)\n"
 
-#: src/lang.c:2004
+#: src/lang.c:2015
 msgid	"Color of highlighting with _dash_"
 msgstr	"_alakriipsudega_ esiletõstmise värv"
 
-#: src/lang.c:2005
+#: src/lang.c:2016
 msgid	"# Color of word highlighting with _dash_\n"
 	"# Default: 13 (light pink)\n"
 msgstr	"# _alakriipsudega_ esiletõstmise värv\n"
 	"# Vaikimisi: 13 (heleroosa)\n"
 
-#: src/lang.c:2011
+#: src/lang.c:2022
 msgid	"Color of highlighting with /slash/"
 msgstr	"/Kaldkriipsude/ esiletõstmise värv"
 
-#: src/lang.c:2012
+#: src/lang.c:2023
 msgid	"# Color of word highlighting with /slash/\n"
 	"# Default: 14 (light cyan)\n"
 msgstr	"# /Kaldkriipsude/ esiletõstmise värv\n"
 	"# Vaikimisi: 14 (helelilla)\n"
 
-#: src/lang.c:2018
+#: src/lang.c:2029
 msgid	"Color of highlighting with -stroke-"
 msgstr	"-Kriipsudega- esiletõstmise värv"
 
-#: src/lang.c:2019
+#: src/lang.c:2030
 msgid	"# Color of word highlighting with -stroke-\n"
 	"# Default: 12 (light blue)\n"
 msgstr	"# -Kriipsudega- esiletõstmise värv\n"
 	"# Vaikimisi: 12 (helesinine)\n"
 
-#: src/lang.c:2026
+#: src/lang.c:2037
 msgid	"Attr. of highlighting with *stars*"
 msgstr	"*tärnidega* esiletõstmise atribuut"
 
-#: src/lang.c:2027
+#: src/lang.c:2038
 msgid	"# Attributes of word highlighting on mono terminals\n"
 	"# Possible values are:\n"
 	"#   0 = Normal\n"
@@ -5499,56 +5580,56 @@ msgstr	"# Sõnade esiletõstmise atribuut 
 	"# *tärnidega* esiletõstmise atribuut\n"
 	"# Vaikimisi: 6 (paks)\n"
 
-#: src/lang.c:2042
+#: src/lang.c:2053
 msgid	"Attr. of highlighting with _dash_"
 msgstr	"_alakriipsudega_ esiletõstmise atr."
 
-#: src/lang.c:2043
+#: src/lang.c:2054
 msgid	"# Attribute of word highlighting with _dash_\n"
 	"# Default: 2 (best highlighting)\n"
 msgstr	"# _alakriipsudega_ esiletõstmise atribuut\n"
 	"# Vaikimisi: 2 (parim esiletõstmine)\n"
 
-#: src/lang.c:2049
+#: src/lang.c:2060
 msgid	"Attr. of highlighting with /slash/"
 msgstr	"/Kaldkriipsude/ esiletõstmise atr."
 
-#: src/lang.c:2050
+#: src/lang.c:2061
 msgid	"# Attribute of word highlighting with /slash/\n"
 	"# Default: 5 (half bright)\n"
 msgstr	"# /Kaldkriipsude/ esiletõstmise atribuut\n"
 	"# Vaikimisi: 5 (poolhele)\n"
 
-#: src/lang.c:2056
+#: src/lang.c:2067
 msgid	"Attr. of highlighting with -stroke-"
 msgstr	"-Kriipsudega- esiletõstmise atr."
 
-#: src/lang.c:2057
+#: src/lang.c:2068
 msgid	"# Attribute of word highlighting with -stroke-\n"
 	"# Default: 3 (reverse video)\n"
 msgstr	"# Vaikimisi: 3 (pööratud video)\n"
 
-#: src/lang.c:2063
+#: src/lang.c:2074
 msgid	"URL highlighting in message body"
 msgstr	"Teate kehas URL esiletõstmine"
 
-#: src/lang.c:2064
+#: src/lang.c:2075
 msgid	"# Enable URL highlighting?\n"
 msgstr	"# Luba URLide esiletõstmine?\n"
 
-#: src/lang.c:2069
+#: src/lang.c:2080
 msgid	"Word highlighting in message body"
 msgstr	"Sõnade esiletõstmine teate kehas"
 
-#: src/lang.c:2070
+#: src/lang.c:2081
 msgid	"# Enable word highlighting?\n"
 msgstr	"# Lubada sõnade esiletõstmine?\n"
 
-#: src/lang.c:2075
+#: src/lang.c:2086
 msgid	"What to display instead of mark"
 msgstr	"Mida näidata märgi asemel"
 
-#: src/lang.c:2076
+#: src/lang.c:2087
 msgid	"# Should the leading and ending stars and dashes also be displayed,\n"
 	"# even when they are highlighting marks?\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -5562,55 +5643,55 @@ msgstr	"# Kas näidata algavaid ja lõppev
 	"#   1 - jah, näita märki\n"
 	"# * 2 - trüki hoopis tühik\n"
 
-#: src/lang.c:2085
+#: src/lang.c:2096
 msgid	"Enter column number to wrap article lines to in the pager. <CR> sets."
 msgstr	"Sisestage veerg, millelt lehitseja hakkab ridu murdma. <CR> seab."
 
-#: src/lang.c:2086
+#: src/lang.c:2097
 msgid	"Page line wrap column"
 msgstr	"Rea murdmise veerg lehitsejas"
 
-#: src/lang.c:2087
+#: src/lang.c:2098
 msgid	"# Wrap article lines at column\n"
 msgstr	"# Murra artikli read antud veerus\n"
 
-#: src/lang.c:2092
+#: src/lang.c:2103
 msgid	"Wrap around threads on next unread"
 msgstr	"Liigu lugemata art-le ümber teemade"
 
-#: src/lang.c:2093
+#: src/lang.c:2104
 msgid	"# If ON wrap around threads on searching next unread article\n"
 msgstr	"# Kui väärtus on ON, liigu lugemata artiklite otsingul ümber teemade\n"
 
-#: src/lang.c:2097
+#: src/lang.c:2108
 msgid	"Enter default mail address (and fullname). <CR> sets."
 msgstr	"Sisestage oma e-posti aadress (ja oma nimi). <CR> seab."
 
-#: src/lang.c:2098
+#: src/lang.c:2109
 msgid	"Mail address (and fullname)"
 msgstr	"E-posti aadress (ja teie nimi)"
 
-#: src/lang.c:2099
+#: src/lang.c:2110
 msgid	"# User's mail address (and fullname), if not username@host (fullname)\n"
 msgstr	"# Kasutaja e-posti aadress (ja nimi), kui ei ole kasutaja@host (nimi)\n"
 
-#: src/lang.c:2104
+#: src/lang.c:2115
 msgid	"Show empty Followup-To in editor"
 msgstr	"Näita toimetis tühja Followup-To"
 
-#: src/lang.c:2105
+#: src/lang.c:2116
 msgid	"# If ON show empty Followup-To header when editing an article\n"
 msgstr	"# Kui väärtus on ON, näita artikli toimetamisel tühja Followup-To rida\n"
 
-#: src/lang.c:2109
+#: src/lang.c:2120
 msgid	"Enter path/! command/--none to create your default signature. <CR> sets."
 msgstr	"Sisestage tee/! käsk/--none, et luua oma vaikimisi signatuur. <CR> seab."
 
-#: src/lang.c:2110
+#: src/lang.c:2121
 msgid	"Create signature from path/command"
 msgstr	"Signatuuri loomiseks tee/käsk"
 
-#: src/lang.c:2111
+#: src/lang.c:2122
 msgid	"# Signature path (random sigs)/file to be used when posting/replying\n"
 	"# default_sigfile=file       appends file as signature\n"
 	"# default_sigfile=!command   executes external command to generate a "
@@ -5621,49 +5702,51 @@ msgstr	"# Postitamisel/vastamisel kasuta
 	"# default_sigfile=!käsk      käivitab käsu, mis genereerib signatuuri\n"
 	"# default_sigfile=--none     ära lisa signatuuri\n"
 
-#: src/lang.c:2118
+#: src/lang.c:2129
 msgid	"Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
 msgstr	"Signatuurile eelnevale reale \"-- \". <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2119
+#: src/lang.c:2130
 msgid	"Prepend signature with \"-- \""
 msgstr	"Lisa signatuuri ette \"-- \""
 
-#: src/lang.c:2120
+#: src/lang.c:2131
 msgid	"# If ON prepend the signature with dashes '\\n-- \\n'\n"
 msgstr	"# Kui väärtus on ON, lisa signatuuri ette '\\n-- \\n'\n"
 
-#: src/lang.c:2124
+#: src/lang.c:2135
 msgid	"Add signature when reposting articles. <SPACE> toggles & <CR> sets."
 msgstr	"Lisa artikli uuestipostitamisel signatuur. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2125
+#: src/lang.c:2136
 msgid	"Add signature when reposting"
 msgstr	"Lisa uuestipostitusel signatuur"
 
-#: src/lang.c:2126
+#: src/lang.c:2137
 msgid	"# If ON add signature to reposted articles\n"
 msgstr	"# Kui väärtus on ON, lisa uuestipostitatud artiklile signatuur\n"
 
-#: src/lang.c:2130
+#: src/lang.c:2141
+#, c-format
 msgid	"Enter quotation marks, %s or %S for author's initials."
 msgstr	"Sisestage tsitaadimärgid, %s või %S annab autori initsiaalid."
 
-#: src/lang.c:2131
+#: src/lang.c:2142
 msgid	"Characters used as quote-marks"
 msgstr	"Tsiteerimise märgid"
 
-#: src/lang.c:2132
+#: src/lang.c:2143
+#, c-format
 msgid	"# Characters used in quoting to followups and replies.\n"
 	"# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
 msgstr	"# Sümbolid, mida kasutada tsiteerimisel vastustes.\n"
 	"# '_' asendatakse tühikuga ' ', %%s, %%S asendatakse autori initsiaalidega.\n"
 
-#: src/lang.c:2138
+#: src/lang.c:2149
 msgid	"Quoting behavior"
 msgstr	"Käitumine tsiteerimisel"
 
-#: src/lang.c:2139
+#: src/lang.c:2150
 msgid	"# How quoting should be handled when following up or replying.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = Nothing special\n"
@@ -5685,15 +5768,16 @@ msgstr	"# Kuidas käsitleda vastamisel ts
 	"#   6 = Tsiteeri allkirju, tsiteeri tühje ridu\n"
 	"#   7 = Tihenda tsitaadid, tsiteeri allkirju, tsiteeri tühje ridu\n"
 
-#: src/lang.c:2152 src/lang.c:2160 src/lang.c:2166
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
 msgid	"%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
 msgstr	"%A Aadr. %D Kuup. %F Aadr.+Nimi %G Grupp %M Message-ID %N Nimi %C Eesnimi"
 
-#: src/lang.c:2153
+#: src/lang.c:2164
 msgid	"Quote line when following up"
 msgstr	"Tsiteerimise rida vastamisel"
 
-#: src/lang.c:2154
+#: src/lang.c:2165
+#, c-format
 msgid	"# Format of quote line when mailing/posting/following-up an article\n"
 	"# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
 	"# %%N Full Name  %%C First Name   %%I Initials\n"
@@ -5701,35 +5785,35 @@ msgstr	"# Tsiteeriva rea vorming artikli
 	"# %%A Aadress    %%D Kuup   %%F Aadr+Nimi   %%G Grupp   %%M Message-ID\n"
 	"# %%N Täielik nimi  %%C Eesnimi   %%I Initsiaalid\n"
 
-#: src/lang.c:2161
+#: src/lang.c:2172
 msgid	"Quote line when cross-posting"
 msgstr	"Tsiteerimise rida ristpostitusel"
 
-#: src/lang.c:2167
+#: src/lang.c:2178
 msgid	"Quote line when mailing"
 msgstr	"Tsiteerimise rida kirjutamisel"
 
-#: src/lang.c:2172
+#: src/lang.c:2183
 msgid	"If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
 msgstr	"Kasuta User-Agent: päiserida. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2173
+#: src/lang.c:2184
 msgid	"Insert 'User-Agent:'-header"
 msgstr	"Sisestage 'User-Agent:'-päis"
 
-#: src/lang.c:2174
+#: src/lang.c:2185
 msgid	"# If ON include advertising User-Agent: header\n"
 msgstr	"# Kui väärtus on ON, lisa artikli päisesse User-Agent: rida\n"
 
-#: src/lang.c:2179
+#: src/lang.c:2190
 msgid	"Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
 msgstr	"Sisestage MIME kooditabeli nimi (n. US-ASCII, ISO-8859-15, EUC-KR), <CR> seab."
 
-#: src/lang.c:2180
+#: src/lang.c:2191
 msgid	"MM_CHARSET"
 msgstr	"MM_CHARSET"
 
-#: src/lang.c:2181
+#: src/lang.c:2192
 msgid	"# Charset supported locally which is also used for MIME header and\n"
 	"# Content-Type header.\n"
 	"# If not set, the value of the environment variable MM_CHARSET is used.\n"
@@ -5745,27 +5829,27 @@ msgstr	"# Lokaalselt toetatud kooditabel
 	"# loetakse mm_charset väärtusest erinev kooditabel mitte-näidatavaks\n"
 	"# ja näitamisel kasutatakse '?'.\n"
 
-#: src/lang.c:2191
+#: src/lang.c:2202
 msgid	"MM_NETWORK_CHARSET"
 msgstr	"MM_NETWORK_CHARSET"
 
-#: src/lang.c:2192
+#: src/lang.c:2203
 msgid	"# Charset used for MIME (Content-Type) header in postings.\n"
 msgstr	"# Postituste MIME (Content-Type) päises kasutatav kooditabel.\n"
 
-#: src/lang.c:2198
+#: src/lang.c:2209
 msgid	"Mailbox format"
 msgstr	"Kirjade kataloog"
 
-#: src/lang.c:2199
+#: src/lang.c:2210
 msgid	"# Format of the mailbox.\n"
 msgstr	"# Kirjade kataloog.\n"
 
-#: src/lang.c:2204
+#: src/lang.c:2215
 msgid	"MIME encoding in news messages"
 msgstr	"Kasuta artiklites MIME kodeerimist"
 
-#: src/lang.c:2205
+#: src/lang.c:2216
 msgid	"# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
 	"# for mails and posts, if necessary. QP is efficient for most European\n"
 	"# character sets (ISO-8859-X) with small fraction of non-US-ASCII chars,\n"
@@ -5777,15 +5861,15 @@ msgstr	"# Vajadusel kirjade ja artiklite
 	"# Base64 on kasulik enamuse 8 bitistele ida-aasia, kreeka ja vene\n"
 	"# kooditabelitele, kus kasutatakse palju 8 bitiseid sümboleid.\n"
 
-#: src/lang.c:2213 src/lang.c:2234
+#: src/lang.c:2224 src/lang.c:2245
 msgid	"Don't change unless you know what you are doing. <ESC> cancels."
 msgstr	"Ärge muutke, kui te ei tea, mida teete. <ESC> katkestab."
 
-#: src/lang.c:2214
+#: src/lang.c:2225
 msgid	"Use 8bit characters in news headers"
 msgstr	"Kasuta artikli päises 8bit tähti"
 
-#: src/lang.c:2215
+#: src/lang.c:2226
 msgid	"# If ON, 8bit characters in news headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in header are encoded regardless of the value of this\n"
@@ -5795,28 +5879,28 @@ msgstr	"# Kui väärtus on ON, 8bit sümbol
 	"# 8bit sümbolid päistes kodeeritakse sõltumata selle parameetri väärtusest,\n"
 	"# v.a. juhul, kui post_mime_encoding väärtus on samuti 8bit.\n"
 
-#: src/lang.c:2222
+#: src/lang.c:2233
 msgid	"Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Vaata töödeldud faile automaatselt <TÜHIK> lülitab, <CR> seab, <ESC> "
 	"katkestab."
 
-#: src/lang.c:2223
+#: src/lang.c:2234
 msgid	"View post-processed files"
 msgstr	"Vaata töödeldud faile"
 
-#: src/lang.c:2224
+#: src/lang.c:2235
 msgid	"# If set, post processed files will be opened in a viewer\n"
 msgstr	"# Kui on seatud, avatakse töödeldud fail vaatamiseks\n"
 
-#: src/lang.c:2229
+#: src/lang.c:2240
 msgid	"MIME encoding in mail messages"
 msgstr	"Kasuta kirjades MIME kodeerimist"
 
-#: src/lang.c:2235
+#: src/lang.c:2246
 msgid	"Use 8bit characters in mail headers"
 msgstr	"Kasuta kirja päises 8bit tähti"
 
-#: src/lang.c:2236
+#: src/lang.c:2247
 msgid	"# If ON, 8bit characters in mail headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in headers are encoded regardless of the value of this "
@@ -5831,171 +5915,171 @@ msgstr	"# Kui väärtus on ON, 8bit sümbol
 	"# et RFC 2822 keelab 8bit sümbolid kirjade päistes, seega selle\n"
 	"# parameetri väärtus ON ei ole soovitatav kasutada.\n"
 
-#: src/lang.c:2246
+#: src/lang.c:2257
 msgid	"Strip blanks from ends of lines"
 msgstr	"Eemalda tühikud realõppudest"
 
-#: src/lang.c:2247
+#: src/lang.c:2258
 msgid	"# If ON strip blanks from ends of lines for faster display on slow "
 	"terminals.\n"
 msgstr	"# Kui väärtus on ON, eemalda aeglaste terminalise töö kiirendamiseks\n"
 	"# realõppudest tühikud.\n"
 
-#: src/lang.c:2252
+#: src/lang.c:2263
 msgid	"If ON, use transliteration. <SPACE> toggles & <CR> sets."
 msgstr	"Kui väärtus on ON, kasuta transliteratsiooni. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2253
+#: src/lang.c:2264
 msgid	"Transliteration"
 msgstr	"Transliteratsioon"
 
-#: src/lang.c:2254
+#: src/lang.c:2265
 msgid	"# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
 	"# be represented in the in the target character set, it can be approximated\n"
 	"# through one or several similarly looking characters.\n"
 msgstr	"# Kui väärtus on ON, kasuta //TRANSLIT laiendust. See tähendab, et kui "
-	"sümbolit# ei saa esitada soovitavas kooditabelis, võib seda esitada "
-	"kasutades\n"
+	"sümbolit\n"
+	"# ei saa esitada soovitavas kooditabelis, võib seda esitada kasutades\n"
 	"# üht või enamat sarnast sümbolit.\n"
 
-#: src/lang.c:2261
+#: src/lang.c:2272
 msgid	"Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Saada kasutajale automaatselt koopia. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2262
+#: src/lang.c:2273
 msgid	"Send you a cc automatically"
 msgstr	"Saada automaatselt koopia"
 
-#: src/lang.c:2263
+#: src/lang.c:2274
 msgid	"# If ON automatically put your name in the Cc: field when mailing an article\n"
 msgstr	"# Kui väärtus on ON, pane kasutaja nimi artikli saatmisel automaatselt\n"
 	"# Cc: reale\n"
 
-#: src/lang.c:2267
+#: src/lang.c:2278
 msgid	"Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Saada automaatselt pimekoopia. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2268
+#: src/lang.c:2279
 msgid	"Send you a blind cc automatically"
 msgstr	"Saada automaatselt pimekoopia"
 
-#: src/lang.c:2269
+#: src/lang.c:2280
 msgid	"# If ON automatically put your name in the Bcc: field when mailing an "
 	"article\n"
 msgstr	"# Kui väärtus on ON, pane kasutaja nimi artikli saatmisel automaatselt\n"
 	"# Bcc: väljale\n"
 
-#: src/lang.c:2273
+#: src/lang.c:2284
 msgid	"Enter address elements about which you want to be warned. <CR> sets."
 msgstr	"Sisestage aadressi komponendid, mille eest peaks hoiatama. <CR> seab."
 
-#: src/lang.c:2274
+#: src/lang.c:2285
 msgid	"Spamtrap warning address parts"
 msgstr	"Rämpsposti hoiatus aadressi osadele"
 
-#: src/lang.c:2275
+#: src/lang.c:2286
 msgid	"# A comma-delimited list of address-parts you want to be warned\n"
 	"# about when trying to reply by email.\n"
 msgstr	"# Komaga eraldatud aadresside komponentide loend, mille kasutamisel\n"
 	"# tuleks kasutajat hoiatada.\n"
 
-#: src/lang.c:2280
+#: src/lang.c:2291
 msgid	"Enter default number of days a filter entry will be valid. <CR> sets."
 msgstr	"Sisestage kirje kehtivuse aeg päevades. <CR> seab."
 
-#: src/lang.c:2281
+#: src/lang.c:2292
 msgid	"No. of days a filter entry is valid"
 msgstr	"Filtri kehtivus päevades"
 
-#: src/lang.c:2282
+#: src/lang.c:2293
 msgid	"# Number of days a short term filter will be active\n"
 msgstr	"# lühiajalise filtri kehtivus päevades\n"
 
-#: src/lang.c:2286
+#: src/lang.c:2297
 msgid	"Add posted articles to filter. <SPACE> toggles & <CR> sets."
 msgstr	"Lisage postitatud artikkel filtrisse. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2287
+#: src/lang.c:2298
 msgid	"Add posted articles to filter"
 msgstr	"Lisage postitatud artikkel filtrile"
 
-#: src/lang.c:2288
+#: src/lang.c:2299
 msgid	"# If ON add posted articles which start a new thread to filter for\n"
 	"# highlighting follow-ups\n"
 msgstr	"# Kui väärtus on ON, lisa postitatud artiklid, mis alustavad uut teemat,\n"
 	"# filtrile, mis märgistab vastuseid\n"
 
-#: src/lang.c:2292
+#: src/lang.c:2303
 msgid	"The directory where articles/threads are to be saved in mailbox format."
 msgstr	"Kataloog, kuhu artikleid/teemasid salvestatakse kirjaformaadis."
 
-#: src/lang.c:2293
+#: src/lang.c:2304
 msgid	"Mail directory"
 msgstr	"Kirjade kataloog"
 
-#: src/lang.c:2294
+#: src/lang.c:2305
 msgid	"# (-m) directory where articles/threads are saved in mailbox format\n"
 msgstr	"# (-m) kataloog, kuhu artikleid/teemasid salvestatakse kirjaformaadis\n"
 
-#: src/lang.c:2299
+#: src/lang.c:2310
 msgid	"Save articles in batch mode (-S)"
 msgstr	"Salvesta artiklid pakettmoodis (-S)"
 
-#: src/lang.c:2300
+#: src/lang.c:2311
 msgid	"# If ON articles/threads will be saved in batch mode when save -S\n"
 	"# or mail (-M/-N) is specified on the command line\n"
 msgstr	"# Kui väärtus on ON, artiklid salvestatakse pakettmoodis, kui käsureal\n"
 	"# on kasutatud võtmeid salvestamiseks -S või saatmiseks -M, -N\n"
 
-#: src/lang.c:2305
+#: src/lang.c:2316
 msgid	"The directory where you want articles/threads saved."
 msgstr	"Kataloog, kuhu te soovite artikleid salvestada."
 
-#: src/lang.c:2306
+#: src/lang.c:2317
 msgid	"Directory to save arts/threads in"
 msgstr	"Kataloog artiklite salvestamiseks"
 
-#: src/lang.c:2307
+#: src/lang.c:2318
 msgid	"# Directory where articles/threads are saved\n"
 msgstr	"# Kataloog, kuhu salvestatakse artiklid/teemad\n"
 
-#: src/lang.c:2311
+#: src/lang.c:2322
 msgid	"Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> sets."
 msgstr	"Salvesta artiklid Archive-name: päiserea järgi. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2312
+#: src/lang.c:2323
 msgid	"Use Archive-name: header for save"
 msgstr	"Kasuta salvestamisel Archive-name:"
 
-#: src/lang.c:2313
+#: src/lang.c:2324
 msgid	"# If ON articles/threads with Archive-name: in mail header will\n"
 	"# be automatically saved with the Archive-name & part/patch no.\n"
 msgstr	"# Kui väärtus on ON, salvestatakse artiklid/teemad, mis omavad päiserida\n"
 	"# Archive-name:, automaatselt selle reaga määratud nime ja osa numbriga.\n"
 
-#: src/lang.c:2318
+#: src/lang.c:2329
 msgid	"Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Märgi salvestatud artiklid loetuks. <TÜHIK> lülitab, <CR> seab, <ESC> "
 	"katkestab."
 
-#: src/lang.c:2319
+#: src/lang.c:2330
 msgid	"Mark saved articles/threads as read"
 msgstr	"Märgi salvestatud artiklid loetuks"
 
-#: src/lang.c:2320
+#: src/lang.c:2331
 msgid	"# If ON mark articles that are saved as read\n"
 msgstr	"# Kui väärtus on ON, märgi salvestatud artiklid loetuks\n"
 
-#: src/lang.c:2324
+#: src/lang.c:2335
 msgid	"Do post processing (eg. extract attachments) for saved articles."
 msgstr	"Teosta salvestatud artiklitel järeltöötlemist (nt. lisade eraldamist)."
 
-#: src/lang.c:2325
+#: src/lang.c:2336
 msgid	"Post process saved articles"
 msgstr	"Salvestatud artikl. järeltöötlemine"
 
-#: src/lang.c:2326
+#: src/lang.c:2337
 msgid	"# Perform post processing (saving binary attachments) from saved articles.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no\n"
@@ -6007,102 +6091,104 @@ msgstr	"# Teosta salvestatud artiklite j
 	"#   1 = jah\n"
 	"#   2 = eralda ainult shelli arhiivid (shar)\n"
 
-#: src/lang.c:2335
+#: src/lang.c:2346
 msgid	"Process only unread articles"
 msgstr	"Töötle ainult lugemata artikleid"
 
-#: src/lang.c:2336
+#: src/lang.c:2347
 msgid	"# If ON only save/print/pipe/mail unread articles (tagged articles excepted)\n"
 msgstr	"# Kui väärtus on ON, salvesta/trüki/torusse/saada lugemata artikleid\n"
 	"# (eeldatakse märgitud artikleid).\n"
 
-#: src/lang.c:2341
+#: src/lang.c:2352
 msgid	"Print all or just part of header. <SPACE> toggles & <CR> sets."
 msgstr	"Trüki kõik või ainult osa päisest. <TÜHIK> lülitab, <CR> seab."
 
-#: src/lang.c:2342
+#: src/lang.c:2353
 msgid	"Print all headers when printing"
 msgstr	"Trükkimisel trüki kõik päised"
 
-#: src/lang.c:2343
+#: src/lang.c:2354
 msgid	"# If ON print all of article header otherwise just the important lines\n"
 msgstr	"# Kui väärtus on ON, trüki kogu artikli päis, muidu ainult tähtsamad read\n"
 
-#: src/lang.c:2347
+#: src/lang.c:2358
 msgid	"The printer program with options that is to be used to print articles/threads."
 msgstr	"Programm koos argumentidega, mida kasutatakse artiklite/teemade trükkimiseks."
 
-#: src/lang.c:2348
+#: src/lang.c:2359
 msgid	"Printer program with options"
 msgstr	"Trükikäsk koos võtmetega"
 
-#: src/lang.c:2349
+#: src/lang.c:2360
 msgid	"# Print program with parameters used to print articles/threads\n"
 msgstr	"# Programm koos argumentidega, mida kasutatakse artiklite/teemade "
 	"trükkimiseks\n"
 
-#: src/lang.c:2355
+#: src/lang.c:2366
 msgid	"Force redraw after certain commands"
 msgstr	"Värskenda ekraani peale käske"
 
-#: src/lang.c:2356
+#: src/lang.c:2367
 msgid	"# If ON a screen redraw will always be done after certain external commands\n"
 msgstr	"# Kui väärtus on ON, värskendatakse alati peale teatud väliseid käske "
 	"ekraani\n"
 
-#: src/lang.c:2360
+#: src/lang.c:2371
 msgid	"Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Käivita tekstitoimeti etteantud real. <TÜHIK> lülitab, <CR> seab, <ESC> "
 	"katkestab."
 
-#: src/lang.c:2361
+#: src/lang.c:2372
 msgid	"Start editor with line offset"
 msgstr	"Käivita tekstitoimeti reanumbril"
 
-#: src/lang.c:2362
+#: src/lang.c:2373
 msgid	"# If ON editor will be started with cursor offset into the file\n"
 	"# otherwise the cursor will be positioned at the first line\n"
 msgstr	"# Kui väärtus on ON, käivitatakse tekstitoimeti kursori paigutamisega\n"
 	"# vastavale reale. Vastasel korral positsioneeritakse kursor esimesele reale\n"
 
-#: src/lang.c:2367
+#: src/lang.c:2378
 msgid	"Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
 msgstr	"Kasutage %E toimeti kohal, %F failinime kohal, %N reanumbrina, <CR> seab."
 
-#: src/lang.c:2368
+#: src/lang.c:2379
 msgid	"Invocation of your editor"
 msgstr	"Teie tekstitoimeti"
 
-#: src/lang.c:2369
+#: src/lang.c:2380
+#, c-format
 msgid	"# Format of editor line including parameters\n"
 	"# %%E Editor  %%F Filename  %%N Linenumber\n"
 msgstr	"# Tekstitoimeti rea formaat koos parameetritega\n"
 	"# %%E Toimeti  %%F Failinimi  %%N Reanumber\n"
 
-#: src/lang.c:2374
+#: src/lang.c:2385
 msgid	"Enter name and options for external-inews, --internal for internal inews"
 msgstr	"Sisestage välise inews käsu nimi ja võtmed, sisemise valib --internal"
 
-#: src/lang.c:2375
+#: src/lang.c:2386
 msgid	"External inews"
 msgstr	"Väline inews"
 
-#: src/lang.c:2376
+#: src/lang.c:2387
 msgid	"# If --internal use the built in mini inews for posting via NNTP\n"
 	"# otherwise use an external inews program\n"
 msgstr	"# Kui on --internal, kasuta NNTP postitustel sisseehitatud inews käsku\n"
 	"# muidu kasuta välist inews programmi\n"
 
-#: src/lang.c:2380
+#: src/lang.c:2391
 msgid	"Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
 msgstr	"Kasutage %M programmi kohal, %S teema kohal, %T saaja kohal, %F failinime "
 	"kohal, <CR> seab."
 
-#: src/lang.c:2381
+#: src/lang.c:2392
 msgid	"Invocation of your mail command"
 msgstr	"Teie e-posti käsk"
 
-#: src/lang.c:2382
+#: src/lang.c:2393
+#, c-format
 msgid	"# Format of mailer line including parameters\n"
 	"# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
 	"# ie. to use elm as your mailer:    elm -s \"%%S\" \"%%T\" < %%F\n"
@@ -6112,11 +6198,11 @@ msgstr	"# e-posti saatja käsurea formaat
 	"# näiteks. kasutada saatjana elm programmi:    elm -s \"%%S\" \"%%T\" < %%F\n"
 	"# näiteks. elm interaktiivses moodis      :    elm -i %%F -s \"%%S\" \"%%T\"\n"
 
-#: src/lang.c:2390
+#: src/lang.c:2401
 msgid	"Use interactive mail reader"
 msgstr	"Kasuta interaktiivset e-posti"
 
-#: src/lang.c:2391
+#: src/lang.c:2402
 msgid	"# Interactive mailreader\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no interactive mailreader\n"
@@ -6128,58 +6214,59 @@ msgstr	"# Interaktiivne e-posti programm
 	"#   1 = kasuta interaktiivset e-posti programmi koos päistega\n"
 	"#   2 = kasuta interaktiivset e-posti programmi päisteta\n"
 
-#: src/lang.c:2400
+#: src/lang.c:2411
 msgid	"Remove ~/.article after posting"
 msgstr	"Eemalda ~/.article peale postitust"
 
-#: src/lang.c:2401
+#: src/lang.c:2412
 msgid	"# If ON remove ~/.article after posting.\n"
 msgstr	"# Kui väärtus on ON, kustuta  ~/.article peale postitust.\n"
 
-#: src/lang.c:2405
+#: src/lang.c:2416
 msgid	"Filename for all posted articles, <CR> sets, no filename=do not save."
 msgstr	"Failinimi postitatud artiklitele. <CR> seab. Nime puudumisel ei salvestata."
 
-#: src/lang.c:2406
+#: src/lang.c:2417
 msgid	"Filename for posted articles"
 msgstr	"Failinimi postitatud artiklitele"
 
-#: src/lang.c:2407
+#: src/lang.c:2418
 msgid	"# Filename where to keep all postings (default posted)\n"
 	"# If no filename is set then postings will not be saved\n"
 msgstr	"# Failinimi, kus hoida kõiki postitusi (vaikimisi posted)\n"
 	"# Kui nime pole, siis postitusi ei salvestata\n"
 
-#: src/lang.c:2412
+#: src/lang.c:2423
 msgid	"Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
 msgstr	"Hoia ebaõnnestunud postitused failis ~/dead.articles. <TÜHIK> lülitab ja <CR> "
 	"seab."
 
-#: src/lang.c:2413
+#: src/lang.c:2424
 msgid	"Keep failed arts in ~/dead.articles"
 msgstr	"Vigased artiklid ~/dead.articles"
 
-#: src/lang.c:2414
+#: src/lang.c:2425
 msgid	"# If ON keep all failed postings in ~/dead.articles\n"
 msgstr	"# Kui väärtus on ON, hoia ebaõnnestunud postitused failis ~/dead.articles\n"
 
-#: src/lang.c:2418
+#: src/lang.c:2429
 msgid	"Do you want to strip unsubscribed groups from .newsrc"
 msgstr	"Kas te soovite eemaldada tellimata grupid .newsrc failist"
 
-#: src/lang.c:2419
+#: src/lang.c:2430
 msgid	"No unsubscribed groups in newsrc"
 msgstr	"newsrcs ainult tellitud grupid"
 
-#: src/lang.c:2420
+#: src/lang.c:2431
 msgid	"# If ON strip unsubscribed groups from newsrc\n"
 msgstr	"# Kui väärtus on ON, eemalda tellimata grupid newsrc failist\n"
 
-#: src/lang.c:2425
+# TRANSLATION TOO LONG
+#: src/lang.c:2436
 msgid	"Remove bogus groups from newsrc"
 msgstr	"Eemalda olematud grupid newsrc failist"
 
-#: src/lang.c:2426
+#: src/lang.c:2437
 msgid	"# What to do with bogus groups in newsrc file\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = keep\n"
@@ -6191,56 +6278,56 @@ msgstr	"# Mida teha olematute gruppidega
 	"#   1 = Eemalda\n"
 	"#   2 = Märgi valikuekraanil lipuga D\n"
 
-#: src/lang.c:2434
+#: src/lang.c:2445
 msgid	"Enter number of seconds until active file will be reread. <CR> sets."
 msgstr	"Sisestage aktiivsete faili lugemise intervall sekundites. <CR> seab."
 
-#: src/lang.c:2435
+#: src/lang.c:2446
 msgid	"Interval in secs to reread active"
 msgstr	"Aktiivsete faili lugemise intervall"
 
-#: src/lang.c:2436
+#: src/lang.c:2447
 msgid	"# Time interval in seconds between rereading the active file (0=never)\n"
 msgstr	"# Aktiivsete faili lugemise intervall (0 = ei loe)\n"
 
-#: src/lang.c:2441
+#: src/lang.c:2452
 msgid	"Reconnect to server automatically"
 msgstr	"Taasta automaatselt NNTP ühendus"
 
-#: src/lang.c:2442
+#: src/lang.c:2453
 msgid	"# If ON automatically reconnect to NNTP server if the connection is broken\n"
 msgstr	"# Kui väärtus on ON, ürita NNTP serveriga ühenduse katkemisel ühendust\n"
 	"# automaatselt taastada\n"
 
-#: src/lang.c:2446
+#: src/lang.c:2457
 msgid	"Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
 msgstr	"Loo NNTP overview failidest lokaalne koopia. <TÜHIK> lülitab ja <CR> seab."
 
-#: src/lang.c:2447
+#: src/lang.c:2458
 msgid	"Cache NNTP overview files locally"
 msgstr	"Puhverda NNTP overview lokaalselt"
 
-#: src/lang.c:2448
+#: src/lang.c:2459
 msgid	"# If ON, create local copies of NNTP overview files.\n"
 msgstr	"# Kui väärtus on ON, loo NNTP overview failidest lokaalsed koopiad.\n"
 
-#: src/lang.c:2452
+#: src/lang.c:2463
 msgid	"Enter format string. <CR> sets, <ESC> cancels."
 msgstr	"Sisestage vormingusõne. <CR> seab, <ESC> katkestab."
 
-#: src/lang.c:2453
+#: src/lang.c:2464
 msgid	"Format string for display of dates"
 msgstr	"Kuupäevade esitamise vormingusõne"
 
-#: src/lang.c:2454
+#: src/lang.c:2465
 msgid	"# Format string for date representation\n"
 msgstr	"# Vormingusõne kuupäevade esitamiseks\n"
 
-#: src/lang.c:2460
+#: src/lang.c:2471
 msgid	"Unicode normalization form"
 msgstr	"Unikoodi normaliseerimise kuju"
 
-#: src/lang.c:2461
+#: src/lang.c:2472
 msgid	"# Unicode normalization form\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = None\n"
@@ -6256,60 +6343,89 @@ msgstr	"# Unikoodi normaliseerimine\n"
 	"#   3 = NFC\n"
 	"#   4 = NFD\n"
 
-#: src/lang.c:2473
+#: src/lang.c:2484
 msgid	"Render BiDi"
 msgstr	"Renderda BiDi"
 
-#: src/lang.c:2474
+#: src/lang.c:2485
 msgid	"# If ON, bi-directional text is rendered by tin\n"
 msgstr	"# Kui väärtus on ON, renderdab tin mitmesuunalist (BiDi) teksti\n"
 
-#: src/misc.c:3721
+#: src/misc.c:3728
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\") %s %s\n"
 msgstr	"Versioon: %s %s väljalase %s (\"%s\") %s %s\n"
 
-#: src/misc.c:3724
+#: src/misc.c:3731
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\")\n"
 msgstr	"Versioon: %s %s väljalase %s (\"%s\")\n"
 
-#: src/newsrc.c:432
+#: src/newsrc.c:430
 msgid	"Unreachable?\n"
 msgstr	"Kättesaamatu?\n"
 
-#: src/nntplib.c:825
+#: src/nntplib.c:824
 #, c-format
 msgid	"\n"
 	"Server timed out, trying reconnect # %d\n"
 msgstr	"\n"
 	"Ühendus serveriga aegus, proovin taastada, katse %d\n"
 
-#: src/nntplib.c:843
+#: src/nntplib.c:842
 msgid	"Rejoin current group\n"
 msgstr	"Taasühinen jooksva grupiga\n"
 
-#: src/nntplib.c:850
+#: src/nntplib.c:849
 #, c-format
 msgid	"Read (%s)\n"
 msgstr	"Lugesin (%s)\n"
 
-#: src/nntplib.c:852
+#: src/nntplib.c:851
 #, c-format
 msgid	"Resend last command (%s)\n"
 msgstr	"Saada viimane käsk uuesti (%s)\n"
 
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid	"MOTD: "
+msgstr	""
+
 #: src/nrctbl.c:172
 #, c-format
 msgid	"couldn't expand %s\n"
 msgstr	"ei saa laiendada %s\n"
 
-#: src/post.c:1969
+#: src/post.c:1152
+#, c-format
+msgid	"Line %d is longer than 998 octets and should be folded, but\n"
+	"encoding is neither set to %s nor to %s\n"
+msgstr	""
+
+#: src/post.c:1157
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+	"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr	""
+
+#: src/post.c:1159
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is not set to %s\n"
+msgstr	""
+
+#: src/post.c:1974
 #, c-format
 msgid	"Posting: %.*s ..."
 msgstr	"Postitan: %.*s ..."
 
-#. fp
 #. Check if okay to read
 #: src/read.c:214
 msgid	"Aborting read, please wait..."
@@ -6337,6 +6453,7 @@ msgstr	"[- Pole kasutatav -]"
 #. * TODO: -> lang.c
 #.
 #: src/rfc2047.c:1203
+#, c-format
 msgid	"This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
 	"are reading this prefix, your mail reader probably has not yet been modified\n"
 	"to understand the new format, and some of what follows may look strange.\n"
@@ -6346,7 +6463,7 @@ msgstr	"See teade on koostatud kasutades
 	"vormingut kasutama ja järgnev tekst võib olla kummaline.\n"
 	"\n"
 
-#: src/save.c:977
+#: src/save.c:978
 msgid	"bytes"
 msgstr	"baiti"
 
Binary files tin-1.7.8/po/fr.gmo and tin-1.7.9/po/fr.gmo differ
diff -Nurp tin-1.7.8/po/fr.po tin-1.7.9/po/fr.po
--- tin-1.7.8/po/fr.po	2005-03-21 11:43:09.000000000 +0100
+++ tin-1.7.9/po/fr.po	2005-06-28 10:31:29.623553993 +0200
@@ -2,232 +2,283 @@
 # Matt Anton <tin@syrius.org>, 2003-2004
 #
 msgid	""
-msgstr	"Project-Id-Version: 1.7.7\n"
-	"POT-Creation-Date: 2005-03-21 11:42+0100\n"
+msgstr	"Project-Id-Version: 1.7.8\n"
+	"Report-Msgid-Bugs-To: \n"
+	"POT-Creation-Date: 2005-06-22 20:13+0200\n"
 	"PO-Revision-Date: 2004-11-17 00:50+0100\n"
 	"Last-Translator: Matt Anton <tin@syrius.org\n"
 	"Language-Team: French <tin@syrius.org>\n"
 	"MIME-Version: 1.0\n"
 	"Content-Type: text/plain; charset=ISO-8859-15\n"
 	"Content-Transfer-Encoding: 8bit\n"
-	"Report-Msgid-Bugs-To: \n"
 
-#: src/art.c:1455
+#: src/art.c:1553
 #, c-format
 msgid	"%d Bad overview record (%d fields) '%s'"
 msgstr	"%d Mauvais overview (%d champs) '%s'"
 
-#: src/attrib.c:604
+#: src/attrib.c:643
+#, c-format
 msgid	"# Do not edit this comment block\n"
 	"#\n"
 msgstr	"# Ne pas éditer ce commentaire\n"
 	"#\n"
 
-#: src/attrib.c:605
+#: src/attrib.c:644
+#, c-format
 msgid	"#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
 msgstr	"#  scope=TERME (pe. alt.*,!alt.bin*) [obligatoire]\n"
 
-#: src/attrib.c:606
+#: src/attrib.c:645
+#, c-format
 msgid	"#  maildir=STRING (ie. ~/Mail)\n"
 msgstr	"#  maildir=TERME (pe. ~/Mail)\n"
 
-#: src/attrib.c:607
+#: src/attrib.c:646
+#, c-format
 msgid	"#  savedir=STRING (ie. ~user/News)\n"
 msgstr	"#  savedir=TERME (pe. ~user/News)\n"
 
-#: src/attrib.c:608
+#: src/attrib.c:647
+#, c-format
 msgid	"#  savefile=STRING (ie. =linux)\n"
 msgstr	"#  savefile=TERME (pe. =linux)\n"
 
-#: src/attrib.c:609
+#: src/attrib.c:648
+#, c-format
 msgid	"#  sigfile=STRING (ie. $var/sig)\n"
 msgstr	"#  sigfile=TERME (pe. $var/sig)\n"
 
-#: src/attrib.c:610
+#: src/attrib.c:649
+#, c-format
 msgid	"#  organization=STRING (if beginning with '/' read from file)\n"
 msgstr	"#  organization=TERME (si commence par '/' lire dans fichier)\n"
 
-#: src/attrib.c:611
+#: src/attrib.c:650
+#, c-format
 msgid	"#  followup_to=STRING\n"
 msgstr	"#  followup_to=TERME\n"
 
-#: src/attrib.c:612
+#: src/attrib.c:651
+#, c-format
 msgid	"#  mailing_list=STRING (ie. majordomo@example.org)\n"
 msgstr	"#  mailing_list=TERME (pe. majordomo@example.org)\n"
 
-#: src/attrib.c:613
+#: src/attrib.c:652
+#, c-format
 msgid	"#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
 msgstr	"#  x_headers=TERME (pe. ~/.tin/extra-headers)\n"
 
-#: src/attrib.c:614
+#: src/attrib.c:653
+#, c-format
 msgid	"#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
 msgstr	"#  x_body=TERME (pe. ~/.tin/extra-body-text)\n"
 
-#: src/attrib.c:615
+#: src/attrib.c:654
+#, c-format
 msgid	"#  from=STRING (just append wanted From:-line, don't use quotes)\n"
 msgstr	"#  from=TERME (choix du 'From:', ne pas utiliser celui cité)\n"
 
-#: src/attrib.c:616
+#: src/attrib.c:655
+#, c-format
 msgid	"#  news_quote_format=STRING\n"
 msgstr	"#  news_quote_format=TERME\n"
 
-#: src/attrib.c:617
+#: src/attrib.c:656
+#, c-format
 msgid	"#  quote_chars=STRING (%%s, %%S for initials)\n"
 msgstr	"#  quote_chars=TERME (%%s, %%S pour les initiales)\n"
 
-#: src/attrib.c:618
+#: src/attrib.c:657
+#, c-format
 msgid	"#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
 msgstr	"#  mime_types_to_save=TERME (pe. image/*,!image/bmp)\n"
 
-#: src/attrib.c:620
+#: src/attrib.c:659
+#, c-format
 msgid	"#  ispell=STRING\n"
 msgstr	"#  ispell=TERME\n"
 
-#: src/attrib.c:622
+#: src/attrib.c:661
+#, c-format
 msgid	"#  auto_select=ON/OFF\n"
 msgstr	"#  auto_select=ON/OFF\n"
 
-#: src/attrib.c:623
+#: src/attrib.c:662
+#, c-format
 msgid	"#  auto_save=ON/OFF\n"
 msgstr	"#  auto_save=ON/OFF\n"
 
-#: src/attrib.c:624
+#: src/attrib.c:663
+#, c-format
 msgid	"#  batch_save=ON/OFF\n"
 msgstr	"#  batch_save=ON/OFF\n"
 
-#: src/attrib.c:625
+#: src/attrib.c:664
+#, c-format
 msgid	"#  delete_tmp_files=ON/OFF\n"
 msgstr	"#  delete_tmp_files=ON/OFF\n"
 
-#: src/attrib.c:626
+#: src/attrib.c:665
+#, c-format
 msgid	"#  show_only_unread=ON/OFF\n"
 msgstr	"#  show_only_unread=ON/OFF\n"
 
-#: src/attrib.c:627
+#: src/attrib.c:666
+#, c-format
 msgid	"#  thread_arts=NUM"
 msgstr	"#  thread_arts=NUM"
 
-#: src/attrib.c:634
+#: src/attrib.c:673
+#, c-format
 msgid	"#  show_author=NUM\n"
 msgstr	"#  show_author=NUM\n"
 
-#: src/attrib.c:640
+#: src/attrib.c:679
+#, c-format
 msgid	"#  show_info=NUM\n"
 msgstr	"#  show_info=NUM\n"
 
-#: src/attrib.c:646
+#: src/attrib.c:685
+#, c-format
 msgid	"#  sort_art_type=NUM\n"
 msgstr	"#  sort_art_type=NUM\n"
 
-#: src/attrib.c:664
+#: src/attrib.c:703
+#, c-format
 msgid	"#  sort_threads_type=NUM\n"
 msgstr	"#  sort_threads_type=NUM\n"
 
-#: src/attrib.c:669
+#: src/attrib.c:708
+#, c-format
 msgid	"#  post_proc_type=NUM\n"
 msgstr	"#  post_proc_type=NUM\n"
 
-#: src/attrib.c:674
+#: src/attrib.c:713
+#, c-format
 msgid	"#  quick_kill_scope=STRING (ie. talk.*)\n"
 msgstr	"#  quick_kill_scope=TERME (pe. talk.*)\n"
 
-#: src/attrib.c:675
+#: src/attrib.c:714
+#, c-format
 msgid	"#  quick_kill_expire=ON/OFF\n"
 msgstr	"#  quick_kill_expire=ON/OFF\n"
 
-#: src/attrib.c:676
+#: src/attrib.c:715
+#, c-format
 msgid	"#  quick_kill_case=ON/OFF\n"
 msgstr	"#  quick_kill_case=ON/OFF\n"
 
-#: src/attrib.c:677
+#: src/attrib.c:716
+#, c-format
 msgid	"#  quick_kill_header=NUM\n"
 msgstr	"#  quick_kill_header=NUM\n"
 
-#: src/attrib.c:678 src/attrib.c:685
+#: src/attrib.c:717 src/attrib.c:724
+#, c-format
 msgid	"#    0=subj (case sensitive) 1=subj (ignore case)\n"
 msgstr	"#    0=subject (casse sensible) 1=subject (ignore la casse)\n"
 
-#: src/attrib.c:679 src/attrib.c:686
+#: src/attrib.c:718 src/attrib.c:725
+#, c-format
 msgid	"#    2=from (case sensitive) 3=from (ignore case)\n"
 msgstr	"#    2=from (casse sensible) 3=from (ignore la casse)\n"
 
-#: src/attrib.c:680 src/attrib.c:687
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
 msgid	"#    4=msgid 5=lines\n"
 msgstr	"#    4=msgid 5=lines\n"
 
-#: src/attrib.c:681
+#: src/attrib.c:720
+#, c-format
 msgid	"#  quick_select_scope=STRING\n"
 msgstr	"#  quick_select_scope=TERME\n"
 
-#: src/attrib.c:682
+#: src/attrib.c:721
+#, c-format
 msgid	"#  quick_select_expire=ON/OFF\n"
 msgstr	"#  quick_select_expire=ON/OFF\n"
 
-#: src/attrib.c:683
+#: src/attrib.c:722
+#, c-format
 msgid	"#  quick_select_case=ON/OFF\n"
 msgstr	"#  quick_select_case=ON/OFF\n"
 
-#: src/attrib.c:684
+#: src/attrib.c:723
+#, c-format
 msgid	"#  quick_select_header=NUM\n"
 msgstr	"#  quick_select_header=NUM\n"
 
-#: src/attrib.c:688
+#: src/attrib.c:727
+#, c-format
 msgid	"#  x_comment_to=ON/OFF\n"
 msgstr	"#  x_comment_to=ON/OFF\n"
 
-#: src/attrib.c:689
+#: src/attrib.c:728
+#, c-format
 msgid	"#  fcc=STRING (eg. =mailbox)\n"
 msgstr	"#  fcc=TERME (pe. =mailbox)\n"
 
-#: src/attrib.c:690
+#: src/attrib.c:729
+#, c-format
 msgid	"#  tex2iso_conv=ON/OFF\n"
 msgstr	"#  tex2iso_conv=ON/OFF\n"
 
-#: src/attrib.c:691
+#: src/attrib.c:730
+#, c-format
 msgid	"#  mime_forward=ON/OFF\n"
 msgstr	"#  mime_forward=ON/OFF\n"
 
-#: src/attrib.c:693
+#: src/attrib.c:732
+#, c-format
 msgid	"#  mm_network_charset=supported_charset"
 msgstr	"#  mm_network_charset=encodage_supporté"
 
-#: src/attrib.c:700
+#: src/attrib.c:739
+#, c-format
 msgid	"#  undeclared_charset=STRING (default is US-ASCII)\n"
 msgstr	"#  undeclared_charset=TERME (défaut est US-ASCII)\n"
 
-#: src/attrib.c:702
+#: src/attrib.c:741
+#, c-format
 msgid	"#\n"
 	"# Note that it is best to put general (global scoping)\n"
 msgstr	"#\n"
 	"# Notez que placer les entrées générales (portée globale) en premier\n"
 
-#: src/attrib.c:703
+#: src/attrib.c:742
+#, c-format
 msgid	"# entries first followed by group specific entries.\n"
 	"#\n"
 msgstr	"# est préférable, suivies des entrées spécifiques aux groupes.\n"
 	"#\n"
 
-#: src/attrib.c:704
+#: src/attrib.c:743
+#, c-format
 msgid	"############################################################################\n"
 	"\n"
 msgstr	"############################################################################\n"
 	"\n"
 
-#: src/attrib.c:710
+#: src/attrib.c:749
+#, c-format
 msgid	"# include extra headers\n"
 msgstr	"# inclure des en-têtes supplémentaires\n"
 
-#: src/attrib.c:718
+#: src/attrib.c:757
+#, c-format
 msgid	"# in *sources* set post process type to shar only\n"
 msgstr	"# dans *sources* choisir le type shar en post-traitement\n"
 
-#: src/attrib.c:722
-msgid	"# in *binaries* do full post processing, remove tmp files\n"
+#: src/attrib.c:761
+#, fuzzy, c-format
+msgid	"# in *binaries* do full post processing but no TeX2ISO conversion,\n"
 msgstr	"# dans *binaries* faire traitement complet, effaçant les fichiers "
 	"temporaires\n"
 
-#: src/attrib.c:723
-msgid	"# and set Followup-To: poster\n"
+#: src/attrib.c:762
+#, fuzzy, c-format
+msgid	"# remove tmp files and set Followup-To: poster\n"
 msgstr	"# et utiliser Followup-To: poster\n"
 
 #: src/cook.c:497
@@ -466,6 +517,7 @@ msgid	"*** Beginning of article ***"
 msgstr	"*** Début de l'article ***"
 
 #: src/lang.c:97
+#, c-format
 msgid	"Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
 msgstr	"Annuler (effacer) ou remplacer (écraser) l'article [%%s]? (%s/%s/%s) : "
 
@@ -544,7 +596,7 @@ msgstr	"Vérification de l'article prépar
 
 #: src/lang.c:115
 msgid	"Checking for new groups... "
-msgstr	"Vérification de nouveaux groupes..."
+msgstr	"Vérification de nouveaux groupes... "
 
 #: src/lang.c:116
 msgid	"Checking for news..."
@@ -589,7 +641,7 @@ msgstr	"Création du fichier active des g
 msgid	"Creating newsrc file...\n"
 msgstr	"Création du fichier newsrc...\n"
 
-#: src/lang.c:129 src/lang.c:1150
+#: src/lang.c:129 src/lang.c:1147
 msgid	"Default"
 msgstr	"Défaut"
 
@@ -863,8 +915,8 @@ msgid	"\n"
 	"Error: Header on line %d does not have a colon after the header name:\n"
 	"%s\n"
 msgstr	"\n"
-	"Erreur : L'en-tête de la ligne %d n'a pas de séparateur après l'en-tête nom "
-	":\n"
+	"Erreur : L'en-tête de la ligne %d n'a pas de séparateur après l'en-tête "
+	"nom :\n"
 	"%s\n"
 
 #: src/lang.c:196
@@ -1645,7 +1697,7 @@ msgstr	"déplacer le groupe sélectionné"
 msgid	"choose next group with unread news"
 msgstr	"choisir le groupe suivant ayant articles non lus"
 
-#: src/lang.c:389 src/lang.c:1197
+#: src/lang.c:389 src/lang.c:1194
 msgid	"quit"
 msgstr	"quitter"
 
@@ -1875,32 +1927,34 @@ msgid	"\n"
 	"files.\n"
 	"Please send bug-reports/comments to %s with the 'R' command.\n"
 msgstr	"\n"
-	"Bienvenue dans %s, un lecteur de groupes UseNet. Pouvant également lire un "
-	"spool local\n"
-	"(p.e. <spool>/news) ou depuis un serveur NNTP (Network News Transport "
-	"Protocol) distant (avec l'option -r). L'option -h liste les options "
+	"Bienvenue dans %s, un lecteur de groupes UseNet. Pouvant également lire un\n"
+	"spool local (p.e. <spool>/news) ou depuis un serveur NNTP (Network News\n"
+	"Transport Protocol) distant (avec l'option -r). L'option -h liste les "
+	"options\n"
 	"principales de la ligne de commande.\n"
 	"\n"
-	"%s a quatre niveaux, la liste des groupes, l'index du groupe, le contenu du "
-	"fil de discussion, la visualisation de l'article. Une aide est visible depuis "
+	"%s a quatre niveaux, la liste des groupes, l'index du groupe, le contenu du\n"
+	"fil de discussion, la visualisation de l'article. Une aide est visible "
+	"depuis\n"
 	"chaque niveaux en appuyant simplement sur 'h'.\n"
 	"\n"
-	"Déplacez-vous en utilisant les touches fléchées ou bien 'j' et 'k'. Utilisez "
-	"PgUp/PgDn ou Ctrl-U et Ctrl-D pour faire défiler la page de haut en bas. "
+	"Déplacez-vous en utilisant les touches fléchées ou bien 'j' et 'k'. Utilisez\n"
+	"PgUp/PgDn ou Ctrl-U et Ctrl-D pour faire défiler la page de haut en bas.\n"
 	"Entrez dans un groupe en appuyant sur RETOUR/TAB.\n"
 	"\n"
-	"Les articles, fils, articles marqués ou articles correspondant à un critère "
-	"peuvent être envoyés par mail\n"
-	"(commande 'm'), imprimés (commande 'o'), enregistrés (commande 's'), passés "
-	"dans un tuyau (commande '|').\n"
-	"Utilisez la commande 'w' pour poster un nouvel article, les commandes 'f'/'F' "
+	"Les articles, fils, articles marqués ou articles correspondant à un critère\n"
+	"peuvent être envoyés par mail (commande 'm'), imprimés (commande 'o'),\n"
+	"enregistrés (commande 's'), passés dans un tuyau (commande '|').\n"
+	"Utilisez la commande 'w' pour poster un nouvel article, les commandes "
+	"'f'/'F'\n"
 	"pour poster un suivi en réponse à un article existant et les commandes "
-	"'r'/'R' pour répondre par mail à l'auteur de l'article auquel vous répondez. "
+	"'r'/'R'\n"
+	"pour répondre par mail à l'auteur de l'article auquel vous répondez.\n"
 	"La commande 'M' permet de configurer %s via un menu.\n"
 	"\n"
-	"Pour plus d'informations, lisez les pages de manuel, ainsi que les fichiers  "
+	"Pour plus d'informations, lisez les pages de manuel, ainsi que les fichiers\n"
 	"README, INSTALL, TODO et FTP.\n"
-	"Si vous constatez des bogues ou tout autre problème, envoyez s'il vous plaît "
+	"Si vous constatez des bogues ou tout autre problème, envoyez s'il vous plaît\n"
 	"un rapport de bogue/commentaires à %s via la touche 'R'.\n"
 
 #: src/lang.c:453
@@ -1936,105 +1990,100 @@ msgstr	"Définition de clé invalide '%s'\
 msgid	"Invalid keyname '%s'\n"
 msgstr	"Nom de clé invalide '%s'\n"
 
-#: src/lang.c:462
-#, c-format
-msgid	"Key '%s' is defined for both %s%s and %s%s\n"
-msgstr	"Clé '%s' est définie pour %s%s et %s%s\n"
-
-#: src/lang.c:464
+#: src/lang.c:461
 #, c-format
 msgid	"Keymap file was upgraded to version %s\n"
 msgstr	"Le fichier keymap a été mis à jour en version %s\n"
 
-#: src/lang.c:465
+#: src/lang.c:462
 #, c-format
 msgid	"Kill From:     [%s] (y/n): "
 msgstr	"   De : [%s] (o/n) : "
 
-#: src/lang.c:466
+#: src/lang.c:463
 msgid	"Kill Lines: (</>num): "
 msgstr	"Nombre de lignes (</>num)    : "
 
-#: src/lang.c:467
+#: src/lang.c:464
 msgid	"Kill Article Menu"
 msgstr	"Créer un filtre"
 
-#: src/lang.c:468
+#: src/lang.c:465
 #, c-format
 msgid	"Kill Msg-Id:   [%s] (f/l/o/n): "
 msgstr	"  MID : [%s] (t/d/a/n) : "
 
-#: src/lang.c:469
+#: src/lang.c:466
 msgid	"Kill pattern scope  : "
 msgstr	"Filtre s'appliquant à : "
 
-#: src/lang.c:470
+#: src/lang.c:467
 #, c-format
 msgid	"Kill Subject:  [%s] (y/n): "
 msgstr	"Sujet : [%s] (o/n) : "
 
-#: src/lang.c:471
+#: src/lang.c:468
 msgid	"Kill text pattern   : "
 msgstr	"Texte à filtrer : "
 
-#: src/lang.c:472
+#: src/lang.c:469
 msgid	"Kill time in days   : "
 msgstr	"Durée du filtre              : "
 
-#: src/lang.c:474
+#: src/lang.c:471
 msgid	"Last"
 msgstr	"Dernier"
 
-#: src/lang.c:475
+#: src/lang.c:472
 msgid	"-- Last response --"
 msgstr	"-- Dernière réponse --"
 
-#: src/lang.c:476
+#: src/lang.c:473
 #, c-format
 msgid	"Lines %s  "
 msgstr	"%s lignes "
 
-#: src/lang.c:478
+#: src/lang.c:475
 msgid	"Message-ID: line              "
 msgstr	"l'en-tête 'Message-ID:'"
 
-#: src/lang.c:479
+#: src/lang.c:476
 msgid	"Mail"
 msgstr	"Envoyer"
 
-#: src/lang.c:480
+#: src/lang.c:477
 msgid	"mailbox "
 msgstr	"bàl"
 
-#: src/lang.c:481
+#: src/lang.c:478
 #, c-format
 msgid	"Mail article(s) to [%.*s]> "
 msgstr	"Envoyer article(s) à [%.*s] > "
 
-#: src/lang.c:482
+#: src/lang.c:479
 #, c-format
 msgid	"Mailing log to %s\n"
 msgstr	"Envoi de l'historique à %s\n"
 
-#: src/lang.c:483
+#: src/lang.c:480
 msgid	"Mail bug report..."
 msgstr	"Envoi d'un rapport de bug..."
 
-#: src/lang.c:484
+#: src/lang.c:481
 #, c-format
 msgid	"Mail BUG REPORT to %s?"
 msgstr	"Signaler LE BUG à %s ?"
 
-#: src/lang.c:485
+#: src/lang.c:482
 msgid	"Mailed"
 msgstr	"Envoyé"
 
-#: src/lang.c:486
+#: src/lang.c:483
 #, c-format
 msgid	"Mailing to %s..."
 msgstr	"Envoi à %s..."
 
-#: src/lang.c:487
+#: src/lang.c:484
 msgid	"# [Mail/Save] active file. Format is like news active file:\n"
 	"#   groupname  max.artnum  min.artnum  /dir\n"
 	"# The 4th field is the basedir (ie. ~/Mail or ~/News)\n"
@@ -2045,282 +2094,282 @@ msgstr	"# [Envoyer/Enregistrer] fichier 
 	"# Le 4ème champ est le répertoire racine utilisé\n"
 	"# (p.e. ~/Mail ou ~/News)\n"
 
-#: src/lang.c:490
+#: src/lang.c:487
 #, c-format
 msgid	"%s marked as unread"
 msgstr	"%s marqué comme non lu"
 
-#: src/lang.c:491
+#: src/lang.c:488
 #, c-format
 msgid	"Marked %d of %d tagged %s as read"
 msgstr	"%d marqué(s) sur %d sélectionné(s) %s comme lu(s)"
 
-#: src/lang.c:492
+#: src/lang.c:489
 #, c-format
 msgid	"Mark all articles as read%s?"
 msgstr	"Marquer tous les articles comme lus%s ?"
 
-#: src/lang.c:493
+#: src/lang.c:490
 #, c-format
 msgid	"Mark %s=tagged articles, %s=current article, %s=quit: "
 msgstr	"Marquer %s=art. marqués, %s=article actuel, %s=quitter : "
 
-#: src/lang.c:494
+#: src/lang.c:491
 #, c-format
 msgid	"Mark group %s as read?"
 msgstr	"Marquer le groupe %s comme lu ?"
 
-#: src/lang.c:495
+#: src/lang.c:492
 #, c-format
 msgid	"Mark thread as read%s?"
 msgstr	"Marquer le fil comme lu%s ?"
 
-#: src/lang.c:496
+#: src/lang.c:493
 #, c-format
 msgid	"Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
 msgstr	"Marquer %s=art./fils marqués, %s=fil actuel, %s=quitter : "
 
-#: src/lang.c:497
+#: src/lang.c:494
 #, c-format
 msgid	"Matching %s groups..."
 msgstr	"%s groupes correspondants..."
 
-#: src/lang.c:498 src/lang.c:502
+#: src/lang.c:495 src/lang.c:499
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
 msgstr	"<n>=voir 'n'; %s=non lu suivant; %s=rechercher; %s=filtrer/sél."
 
-#: src/lang.c:499
+#: src/lang.c:496
 #, c-format
 msgid	"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %s=list "
 	"thread"
 msgstr	"%s=rech. auteur; %s=tout lu; %s=bas; %s=haut; %s=marquer lu; %s=voir fil"
 
-#: src/lang.c:500
+#: src/lang.c:497
 #, c-format
 msgid	"%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
 msgstr	"%s=haut; %s=bas; %s=haut de page; %s=bas de page; %s=haut; %s=bas"
 
-#: src/lang.c:501
+#: src/lang.c:498
 #, c-format
 msgid	"%s=search forwards; %s=search backwards; %s=quit"
 msgstr	"%s=recherche avant; %s=recherche arrière; %s=quitter"
 
-#: src/lang.c:503
+#: src/lang.c:500
 #, c-format
 msgid	"%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
 msgstr	"%s=rech. auteur; %s=rech. corps; %s=tout marquer lu; %s=suivi; %s=marquer lu"
 
-#: src/lang.c:504
+#: src/lang.c:501
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
 msgstr	"<n>=voir 'n'; %s=non lu suivant; %s,%s=rechercher; %s=tout lu"
 
-#: src/lang.c:505
+#: src/lang.c:502
 #, c-format
 msgid	"%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
 msgstr	"%s=bas; %s=haut; %s=aide; %s=déplacer; %s=quitter; %s=voir lu/non lu"
 
-#: src/lang.c:506
+#: src/lang.c:503
 #, c-format
 msgid	"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/out"
 msgstr	"%s=abonner; %s=sous-critère; %s=désabonner; %s=critère; %s=liste des groupes"
 
-#: src/lang.c:507
+#: src/lang.c:504
 #, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
 msgstr	"<n>=voir 'n'; %s=non lu suivant; %s=tout lu; %s=basculer l'affichage"
 
-#: src/lang.c:508
+#: src/lang.c:505
 #, c-format
 msgid	"%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
 msgstr	"%s=aide; %s=bas; %s=haut; %s=quitter; %s=marquer; %s=marquer non lu"
 
-#: src/lang.c:509
+#: src/lang.c:506
 msgid	"--More--"
 msgstr	"-- Suite --"
 
-#: src/lang.c:510
+#: src/lang.c:507
 #, c-format
 msgid	"Moving %s..."
 msgstr	"Déplacement de %s..."
 
-#: src/lang.c:512
+#: src/lang.c:509
 msgid	", name: "
 msgstr	", nom : "
 
-#: src/lang.c:513
+#: src/lang.c:510
 #, c-format
 msgid	"Goto newsgroup [%s]> "
 msgstr	"Aller dans le groupe [%s]> "
 
-#: src/lang.c:514
+#: src/lang.c:511
 msgid	"newsgroups"
 msgstr	"groupes"
 
-#: src/lang.c:515
+#: src/lang.c:512
 #, c-format
 msgid	"Position %s in group list (1,2,..,$) [%d]> "
 msgstr	"Placer %s dans la liste des groupes (1,2,..,$) [%d]> "
 
-#: src/lang.c:516
+#: src/lang.c:513
 msgid	"newsgroup"
 msgstr	"groupe"
 
-#: src/lang.c:517
+#: src/lang.c:514
 msgid	"Try and save newsrc file again?"
 msgstr	"Encore essayer et enregistrer le newsrc ?"
 
-#: src/lang.c:518
+#: src/lang.c:515
 msgid	"Warning: No newsgroups were written to your newsrc file. Save aborted."
 msgstr	"Attention : Aucuns groupes n'a été écrits dans le newsrc. Enregistrement "
 	"annulé."
 
-#: src/lang.c:519
+#: src/lang.c:516
 msgid	"newsrc file saved successfully.\n"
 msgstr	"le newsrc a été enregistré avec succès.\n"
 
-#: src/lang.c:520
+#: src/lang.c:517
 msgid	"-- Next response --"
 msgstr	"-- Réponse suivante --"
 
-#: src/lang.c:521
+#: src/lang.c:518
 #, c-format
 msgid	"NNTP authorization password not found for %s"
 msgstr	"Mot de passe NNTP introuvable pour %s"
 
-#: src/lang.c:522
+#: src/lang.c:519
 msgid	"No  "
 msgstr	"Non "
 
-#: src/lang.c:523
+#: src/lang.c:520
 msgid	"*** No articles ***"
 msgstr	"*** Aucun article ***"
 
-#: src/lang.c:524
+#: src/lang.c:521
 msgid	"No articles have been posted"
 msgstr	"Aucun article n'a été posté"
 
-#: src/lang.c:525
+#: src/lang.c:522
 msgid	"*** No description ***"
 msgstr	"*** Aucune description ***"
 
-#: src/lang.c:526
+#: src/lang.c:523
 msgid	"No filename"
 msgstr	"Pas de nom de fichier"
 
-#: src/lang.c:527
+#: src/lang.c:524
 msgid	"No group"
 msgstr	"Pas de groupe"
 
-#: src/lang.c:528
+#: src/lang.c:525
 msgid	"*** No groups ***"
 msgstr	"*** Aucun groupe ***"
 
-#: src/lang.c:529
+#: src/lang.c:526
 msgid	"No more groups to read"
 msgstr	"Plus de groupes à lire"
 
-#: src/lang.c:530
+#: src/lang.c:527
 msgid	"No last message"
 msgstr	"Aucun dernier message"
 
-#: src/lang.c:531
+#: src/lang.c:528
 msgid	"No mail address"
 msgstr	"Aucune adresse email"
 
-#: src/lang.c:532
+#: src/lang.c:529
 msgid	"No articles marked for saving"
 msgstr	"Aucun article marqué à enregistrer"
 
-#: src/lang.c:533
+#: src/lang.c:530
 msgid	"No match"
 msgstr	"Aucun résultat"
 
-#: src/lang.c:534
+#: src/lang.c:531
 msgid	"No more groups"
 msgstr	"Plus de groupes"
 
-#: src/lang.c:535
+#: src/lang.c:532
 msgid	"No newsgroups"
 msgstr	"Aucun groupe"
 
-#: src/lang.c:536
+#: src/lang.c:533
 msgid	"No next unread article"
 msgstr	"Aucun article non lu suivant"
 
-#: src/lang.c:537
+#: src/lang.c:534
 msgid	"No previous group"
 msgstr	"Aucun groupe précédent"
 
-#: src/lang.c:538
+#: src/lang.c:535
 msgid	"No previous unread article"
 msgstr	"Aucun article non lu précédent"
 
-#: src/lang.c:539
+#: src/lang.c:536
 msgid	"No responses"
 msgstr	"Aucune réponse"
 
-#: src/lang.c:540
+#: src/lang.c:537
 msgid	"No responses to list in current thread"
 msgstr	"Aucune réponse à afficher dans le fil actuel"
 
-#: src/lang.c:541
+#: src/lang.c:538
 msgid	"No search string"
 msgstr	"Aucun terme à rechercher"
 
-#: src/lang.c:542
+#: src/lang.c:539
 msgid	"No subject"
 msgstr	"Aucun sujet"
 
-#: src/lang.c:544
+#: src/lang.c:541
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-line (ce)\n"
 msgstr	"%s: Terminal doit avoir la fonction clear to end-of-line (ce)\n"
 
-#: src/lang.c:545
+#: src/lang.c:542
 #, c-format
 msgid	"%s: Terminal must have clear to end-of-screen (cd)\n"
 msgstr	"%s: Terminal doit avoir la fonction clear to end-of-screen (cd)\n"
 
-#: src/lang.c:546
+#: src/lang.c:543
 #, c-format
 msgid	"%s: Terminal must have clearscreen (cl) capability\n"
 msgstr	"%s: Terminal doit avoir la fonction clearscreen (cl)\n"
 
-#: src/lang.c:547
+#: src/lang.c:544
 #, c-format
 msgid	"%s: Terminal must have cursor motion (cm)\n"
 msgstr	"%s: Terminal doit avoir la fonction cursor motion (cm)\n"
 
-#: src/lang.c:548
+#: src/lang.c:545
 #, c-format
 msgid	"%s: TERM variable must be set to use screen capabilities\n"
 msgstr	"%s: la variable TERM doit être utilisée pour utiliser les fonctions\n"
 
-#: src/lang.c:550
+#: src/lang.c:547
 #, c-format
 msgid	"No viewer found for %s/%s\n"
 msgstr	"Visualiseur introuvable pour %s/%s\n"
 
-#: src/lang.c:551
+#: src/lang.c:548
 msgid	"Newsgroup does not exist on this server"
 msgstr	"Groupe inexistant sur ce serveur"
 
-#: src/lang.c:552
+#: src/lang.c:549
 #, c-format
 msgid	"Group %s not found in active file"
 msgstr	"Groupe %s introuvable dans le fichier active"
 
-#: src/lang.c:553
+#: src/lang.c:550
 msgid	"c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"c)réer, utiliser a)utre nom, utiliser .newsrc par d)éfaut, q)uitter tin : "
 
-#: src/lang.c:554
+#: src/lang.c:551
 msgid	"use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"utiliser a)utre nom, utiliser .newsrc par d)éfaut, q)uitter tin : "
 
-#: src/lang.c:555
+#: src/lang.c:552
 #, c-format
 msgid	"# NNTP-server -> newsrc translation table and NNTP-server\n"
 	"# shortname list for %s %s\n"
@@ -2348,40 +2397,40 @@ msgstr	"# Serveur NNTP -> tableau de cor
 	"#   news.ka.nu    /tmp/nrc-nu      kanu    nu\n"
 	"#\n"
 
-#: src/lang.c:562
+#: src/lang.c:559
 msgid	"Only"
 msgstr	"Actuel"
 
-#: src/lang.c:563
+#: src/lang.c:560
 #, c-format
 msgid	"Option not enabled. Recompile with %s."
 msgstr	"Option non activée. Recompilez avec %s."
 
-#: src/lang.c:564
+#: src/lang.c:561
 msgid	"Options Menu"
 msgstr	"Menu Options"
 
-#: src/lang.c:567
+#: src/lang.c:564
 #, c-format
 msgid	"Error in regex: %s at pos. %d '%s'"
 msgstr	"Erreur dans la regex : %s à %d '%s'"
 
-#: src/lang.c:568
+#: src/lang.c:565
 #, c-format
 msgid	"Error in regex: pcre internal error %d"
 msgstr	"Erreur dans la regex : erreur pcre interne %d"
 
-#: src/lang.c:569
+#: src/lang.c:566
 #, c-format
 msgid	"Error in regex: study - pcre internal error %s"
 msgstr	"Erreur dans la regex : study - erreur pcre interne %s"
 
-#: src/lang.c:570
+#: src/lang.c:567
 msgid	"Post a followup..."
 msgstr	"Postage du suivi..."
 
 #. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
-#: src/lang.c:572
+#: src/lang.c:569
 msgid	"An error has occurred while posting the article. If you think that this\n"
 	"error is temporary or otherwise correctable, you can postpone the article\n"
 	"and pick it up again with ^O later.\n"
@@ -2389,275 +2438,277 @@ msgstr	"Une erreur est survenue lors du 
 	"cette erreur est temporaire ou alors corrigeable, vous pouvez enregistrer\n"
 	"l'article comme brouillon et le réutiliser plus tard grâce à la commande ^O.\n"
 
-#: src/lang.c:575
+#: src/lang.c:572
 msgid	"Posted articles history"
 msgstr	"Historique des articles postés"
 
-#: src/lang.c:576
+#: src/lang.c:573
 #, c-format
 msgid	"Post to newsgroup(s) [%s]> "
 msgstr	"Poster dans groupe(s) [%s]> "
 
-#: src/lang.c:577
+#: src/lang.c:574
 msgid	"-- post processing started --"
 msgstr	"-- post-traitement lancé --"
 
-#: src/lang.c:578
+#: src/lang.c:575
 msgid	"-- post processing completed --"
 msgstr	"-- post-traitement terminé --"
 
-#: src/lang.c:579
+#: src/lang.c:576
 #, c-format
 msgid	"Post subject [%s]> "
 msgstr	"Poster le sujet [%s] > "
 
-#: src/lang.c:580
+#: src/lang.c:577
 msgid	"# Summary of mailed/posted messages viewable by 'W' command from within tin.\n"
 msgstr	"# Sommaire des messages envoyés/postés visible par la commande 'W' depuis "
 	"tin.\n"
 
-#: src/lang.c:581
+#: src/lang.c:578
 msgid	"Posting article..."
 msgstr	"Postage de l'article..."
 
-#: src/lang.c:582
+#: src/lang.c:579
+#, c-format
 msgid	"Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
 msgstr	"Poster les brouillons [%%s] ? (%s/%s/%s/%s/%s) : "
 
-#: src/lang.c:583
+#: src/lang.c:580
 #, c-format
 msgid	"Hot %s"
 msgstr	"%s sélectionné"
 
-#: src/lang.c:584
+#: src/lang.c:581
 #, c-format
 msgid	"Tagged %s"
 msgstr	"%s marqué"
 
-#: src/lang.c:585
+#: src/lang.c:582
 #, c-format
 msgid	"Untagged %s"
 msgstr	"%s non marqué"
 
-#: src/lang.c:586
+#: src/lang.c:583
 msgid	"Processing mail messages marked for deletion."
 msgstr	"Traitement des emails enregistrés marqués pour effacement."
 
-#: src/lang.c:587
+#: src/lang.c:584
 msgid	"Processing saved articles marked for deletion."
 msgstr	"Traitement des articles enregistrés marqués pour effacement."
 
-#: src/lang.c:588
+#: src/lang.c:585
 #, c-format
 msgid	"Accept Followup-To? %s=post, %s=ignore, %s=quit: "
 msgstr	"Accepter le Suivi ? %s=poster, %s=ignorer, %s=quitter : "
 
-#: src/lang.c:589
+#: src/lang.c:586
 msgid	"Article unchanged, abort mailing?"
 msgstr	"Article inchangé, annuler l'envoi ?"
 
-#: src/lang.c:590
+#: src/lang.c:587
 #, c-format
 msgid	"Do you want to see postponed articles (%d)?"
 msgstr	"Voulez-vous voir les brouillons (%d) ?"
 
-#: src/lang.c:592
+#: src/lang.c:589
 msgid	"Add quick kill filter?"
 msgstr	"Ajouter rapidement un filtre ?"
 
-#: src/lang.c:593
+#: src/lang.c:590
 msgid	"Add quick selection filter?"
 msgstr	"Ajouter rapidement une règle ?"
 
-#: src/lang.c:594
+#: src/lang.c:591
 msgid	"Do you really want to quit?"
 msgstr	"Voulez-vous réellement quitter ?"
 
-#: src/lang.c:595
+#: src/lang.c:592
+#, c-format
 msgid	"%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
 msgstr	"%s=éditer message d'annulation, %s=quitter, %s=effacer (annuler) [%%s] : "
 
-#: src/lang.c:596
+#: src/lang.c:593
 msgid	"You have tagged articles in this group - quit anyway?"
 msgstr	"Vous avez des articles marqués dans ce groupe - quitter quand même ?"
 
-#: src/lang.c:597
+#: src/lang.c:594
 #, c-format
 msgid	"%s=quit, %s=edit, %s=postpone: "
 msgstr	"%s=quitter, %s=éditer, %s=brouillon : "
 
-#: src/lang.c:598
+#: src/lang.c:595
 #, c-format
 msgid	"%s=quit %s=edit %s=save kill description: "
 msgstr	"%s=quitter, %s=éditer, %s=enregistrer le filtre : "
 
-#: src/lang.c:599
+#: src/lang.c:596
 #, c-format
 msgid	"%s=quit %s=edit %s=save select description: "
 msgstr	"%s=quitter %s=éditer %s=enregistrer la règle : "
 
-#: src/lang.c:600
+#: src/lang.c:597
 msgid	"Do you really want to quit without saving your configuration?"
 msgstr	"Voulez-vous réellement quitter sans enregistrer votre configuration ?"
 
-#: src/lang.c:603
+#: src/lang.c:600
 msgid	"Invalid range - valid are '0-9.$' eg. 1-$"
 msgstr	"Champ invalide - '0-9.$' pe. 1-$ est valide"
 
-#: src/lang.c:604
+#: src/lang.c:601
 msgid	"Do you want to abort this operation?"
 msgstr	"Voulez-vous annuler cette opération ?"
 
-#: src/lang.c:605
+#: src/lang.c:602
 msgid	"Do you want to exit tin immediately?"
 msgstr	"Voulez-vous quitter tin immédiatement ?"
 
-#: src/lang.c:606
+#: src/lang.c:603
 msgid	"Read response> "
 msgstr	"Lire la réponse> "
 
-#: src/lang.c:607
+#: src/lang.c:604
 msgid	"Reading ('q' to quit)..."
 msgstr	"Lecture ('q' pour quitter)..."
 
-#: src/lang.c:608
+#: src/lang.c:605
 #, c-format
 msgid	"Reading %sarticles..."
 msgstr	"Lecture de %sarticles..."
 
-#: src/lang.c:609
+#: src/lang.c:606
 #, c-format
 msgid	"Reading %sattributes file...\n"
 msgstr	"Lecture du fichier %sattributes...\n"
 
-#: src/lang.c:610
+#: src/lang.c:607
 #, c-format
 msgid	"Reading %sconfig file...\n"
 msgstr	"Lecture du fichier %sconfig...\n"
 
-#: src/lang.c:611
+#: src/lang.c:608
 msgid	"Reading filter file...\n"
 msgstr	"Lecture du fichier filter...\n"
 
-#: src/lang.c:612
+#: src/lang.c:609
 #, c-format
 msgid	"Reading %s groups..."
 msgstr	"Lecture de %s groupes..."
 
-#: src/lang.c:613
+#: src/lang.c:610
 msgid	"Reading input history file...\n"
 msgstr	"Lecture du fichier d'historique...\n"
 
-#: src/lang.c:614
+#: src/lang.c:611
 msgid	"Reading keymap file...\n"
 msgstr	"Lecture du fichier keymap...\n"
 
-#: src/lang.c:615
+#: src/lang.c:612
 msgid	"Reading groups from active file... "
 msgstr	"Lecture des groupes depuis le fichier active... "
 
-#: src/lang.c:616
+#: src/lang.c:613
 msgid	"Reading groups from newsrc file... "
 msgstr	"Lecture des groupes depuis le fichier newsrc... "
 
-#: src/lang.c:617
+#: src/lang.c:614
 msgid	"Reading newsgroups file... "
 msgstr	"Lecture du fichier newsgroups... "
 
-#: src/lang.c:618
+#: src/lang.c:615
 msgid	"Reading newsrc file..."
 msgstr	"Lecture du fichier newsrc..."
 
-#: src/lang.c:620
+#: src/lang.c:617
 #, c-format
 msgid	"(%d:%02d remaining)"
 msgstr	"(%d:%02d restant)"
 
-#: src/lang.c:622
+#: src/lang.c:619
 #, c-format
 msgid	"Bogus group %s removed."
 msgstr	"Effacement du groupe corrompu %s."
 
-#: src/lang.c:623
+#: src/lang.c:620
 #, c-format
 msgid	"Error: rename %s to %s"
 msgstr	"Erreur : renommer %s à %s"
 
-#: src/lang.c:624
+#: src/lang.c:621
 msgid	"Reply to author..."
 msgstr	"Répondre à l'auteur..."
 
-#: src/lang.c:625
+#: src/lang.c:622
 msgid	"Repost"
 msgstr	"Reposter"
 
-#: src/lang.c:626
+#: src/lang.c:623
 msgid	"Reposting article..."
 msgstr	"Repostage de l'article..."
 
-#: src/lang.c:627
+#: src/lang.c:624
 #, c-format
 msgid	"Repost article(s) to group(s) [%s]> "
 msgstr	"Reposter article(s) dans groupe(s) [%s]> "
 
-#: src/lang.c:628
+#: src/lang.c:625
 msgid	"Reset newsrc?"
 msgstr	"Réinitialiser newsrc ?"
 
-#: src/lang.c:629
+#: src/lang.c:626
 msgid	"Responses have been directed to the following newsgroups"
 msgstr	"Les réponses ont été redirigées vers les groupes suivants"
 
-#: src/lang.c:630
+#: src/lang.c:627
 #, c-format
 msgid	"Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
 msgstr	"Les réponses ont été redirigées à l'auteur. %s=mail, %s=poster, %s=quitter : "
 
-#: src/lang.c:631
+#: src/lang.c:628
 #, c-format
 msgid	"RespNo %4d of %4d"
 msgstr	"Réponse %4d sur %4d"
 
-#: src/lang.c:632
+#: src/lang.c:629
 msgid	"Press <RETURN> to continue..."
 msgstr	"Appuyez sur <RETOUR> pour continuer..."
 
-#: src/lang.c:634
+#: src/lang.c:631
 #, c-format
 msgid	"Select From    [%s] (y/n): "
 msgstr	"   De : [%s] (o/n) : "
 
-#: src/lang.c:635
+#: src/lang.c:632
 msgid	"Select Lines: (</>num): "
 msgstr	"Nombre de lignes (</>num)    : "
 
-#: src/lang.c:636
+#: src/lang.c:633
 msgid	"Auto-select Article Menu"
 msgstr	"Créer une règle"
 
-#: src/lang.c:637
+#: src/lang.c:634
 #, c-format
 msgid	"Select Msg-Id  [%s] (f/l/o/n): "
 msgstr	"  MID : [%s] (t/d/a/n) : "
 
-#: src/lang.c:638
+#: src/lang.c:635
 msgid	"Select pattern scope: "
 msgstr	"Règle s'appliquant à : "
 
-#: src/lang.c:639
+#: src/lang.c:636
 #, c-format
 msgid	"Select Subject [%s] (y/n): "
 msgstr	"Sujet : [%s] (o/n) : "
 
-#: src/lang.c:640
+#: src/lang.c:637
 msgid	"Select text pattern : "
 msgstr	"Texte ou terme  : "
 
-#: src/lang.c:641
+#: src/lang.c:638
 msgid	"Select time in days   : "
 msgstr	"Durée de la règle            : "
 
-#: src/lang.c:642
+#: src/lang.c:639
 #, c-format
 msgid	"# %s server configuration file\n"
 	"# This file was automatically saved by %s %s %s (\"%s\")\n"
@@ -2675,222 +2726,223 @@ msgstr	"# Fichier de configuration serve
 	"# Enfin, ne touchez pas à ce fichier si vous ne savez pas quoi y faire.\n"
 	"############################################################################\n"
 
-#: src/lang.c:648
+#: src/lang.c:645
 msgid	"Showing unread groups only"
 msgstr	"Afficher uniquement les groupes non lus"
 
-#: src/lang.c:649
+#: src/lang.c:646
 msgid	"Subject: line (ignore case)   "
 msgstr	"l'en-tête 'Subject:' (ignorer la casse)"
 
-#: src/lang.c:650
+#: src/lang.c:647
 msgid	"Subject: line (case sensitive)"
 msgstr	"l'en-tête 'Subject:' (casse sensible)"
 
-#: src/lang.c:651
+#: src/lang.c:648
 msgid	"Save"
 msgstr	"Enregistrer"
 
-#: src/lang.c:652
+#: src/lang.c:649
 #, c-format
 msgid	"Save '%s' (%s/%s)?"
 msgstr	"Enregistrer '%s' (%s/%s) ?"
 
-#: src/lang.c:653
+#: src/lang.c:650
 msgid	"Save configuration before continuing?"
 msgstr	"Enregistrer la configuration avant de continuer ?"
 
-#: src/lang.c:654
+#: src/lang.c:651
 msgid	"Save filename> "
 msgstr	"Enregistrer sous le nom de fichier > "
 
-#: src/lang.c:655
+#: src/lang.c:652
 msgid	"Saved"
 msgstr	"Enregistré"
 
-#: src/lang.c:656
+#: src/lang.c:653
 #, c-format
 msgid	"%4d unread (%4d hot) %s in %s\n"
 msgstr	"%4d non lu (%4d sél.) %s dans %s\n"
 
-#: src/lang.c:657
+#: src/lang.c:654
 #, c-format
 msgid	"Saved %s...\n"
 msgstr	"Enregistrement de %s...\n"
 
-#: src/lang.c:658
+#: src/lang.c:655
 msgid	"Nothing was saved"
 msgstr	"Rien n'a été enregistré"
 
-#: src/lang.c:659
+#: src/lang.c:656
 #, c-format
 msgid	"\n"
 	"%s %d %s from %d %s\n"
 msgstr	"\n"
 	"%s %d %s de %d %s\n"
 
-#: src/lang.c:660
+#: src/lang.c:657
 #, c-format
 msgid	"-- %s saved to %s%s --"
 msgstr	"-- %s enregistré sous %s%s --"
 
-#: src/lang.c:661
+#: src/lang.c:658
 #, c-format
 msgid	"-- %s saved to %s - %s --"
 msgstr	"-- %s enregistré sous %s - %s --"
 
-#: src/lang.c:662
+#: src/lang.c:659
 msgid	"Saving..."
 msgstr	"Enregistrement..."
 
-#: src/lang.c:663
+#: src/lang.c:660
 #, c-format
 msgid	"%s: Screen initialization failed"
 msgstr	"%s : Échec de l'initialisation de l'écran"
 
-#: src/lang.c:665
+#: src/lang.c:662
 #, c-format
 msgid	"%s: screen is too small\n"
 msgstr	"%s : l'écran est trop petit\n"
 
-#: src/lang.c:667
+#: src/lang.c:664
 #, c-format
 msgid	"screen is too small, %s is exiting\n"
 msgstr	"l'écran est trop petit, %s quitte\n"
 
-#: src/lang.c:668
+#: src/lang.c:665
 #, c-format
 msgid	"Search backwards [%s]> "
 msgstr	"Recherche arrière [%s] > "
 
-#: src/lang.c:669
+#: src/lang.c:666
 #, c-format
 msgid	"Search body [%s]> "
 msgstr	"Rechercher dans le corps [%s] > "
 
-#: src/lang.c:670
+#: src/lang.c:667
 #, c-format
 msgid	"Search forwards [%s]> "
 msgstr	"Recherche avant [%s] > "
 
-#: src/lang.c:671
+#: src/lang.c:668
 msgid	"Searching..."
 msgstr	"Recherche..."
 
-#: src/lang.c:672
+#: src/lang.c:669
 #, c-format
 msgid	"Searching article %d of %d ('q' to abort)..."
 msgstr	"Recherche article %d sur %d ('q' pour annuler)..."
 
-#: src/lang.c:673
+#: src/lang.c:670
 msgid	"Select article> "
 msgstr	"Sélectionner l'article > "
 
-#: src/lang.c:674
+#: src/lang.c:671
 msgid	"Select option number before text or use arrow keys and <CR>. 'q' to quit."
 msgstr	"Choisir un numéro ou utiliser les flèches puis <RETOUR>. 'q' pour quitter."
 
-#: src/lang.c:675
+#: src/lang.c:672
 msgid	"Select group> "
 msgstr	"Sélectionner le groupe > "
 
-#: src/lang.c:676
+#: src/lang.c:673
 #, c-format
 msgid	"Enter selection pattern [%s]> "
 msgstr	"Entrez le critère de sélection [%s] > "
 
-#: src/lang.c:677
+#: src/lang.c:674
 msgid	"Select thread > "
 msgstr	"Sélectionner le fil > "
 
-#: src/lang.c:678
+#: src/lang.c:675
 #, c-format
 msgid	"%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
 msgstr	"%s %s %s (\"%s\") [%s]: envoi d'un rapport de bug DÉTAILLÉ à %s\n"
 
-#: src/lang.c:679
+#: src/lang.c:676
 msgid	"servers active-file"
 msgstr	"fichier active des serveurs"
 
-#: src/lang.c:680
+#: src/lang.c:677
 msgid	"Cannot move into new newsgroups. Subscribe first..."
 msgstr	"Déplacement dans nouveaux groupes impossible. Abonnez-vous d'abord..."
 
-#: src/lang.c:681
+#: src/lang.c:678
 msgid	"<SPACE>"
 msgstr	"<ESPACE>"
 
-#: src/lang.c:682
+#: src/lang.c:679
 #, c-format
 msgid	"Starting: (%s)"
 msgstr	"Démarrage : (%s)"
 
-#: src/lang.c:683
+#: src/lang.c:680
 #, c-format
 msgid	"List Thread (%d of %d)"
 msgstr	"Visualisation du fil (%d sur %d)"
 
-#: src/lang.c:684
+#: src/lang.c:681
 #, c-format
 msgid	"Thread (%.*s)"
 msgstr	"Fil (%.*s)"
 
-#: src/lang.c:685
+#: src/lang.c:682
 msgid	"Enter wildcard subscribe pattern> "
 msgstr	"Entrer un caractère joker comme critère > "
 
-#: src/lang.c:686
+#: src/lang.c:683
 #, c-format
 msgid	"subscribed to %d groups"
 msgstr	"Abonné à %d groupes"
 
-#: src/lang.c:687
+#: src/lang.c:684
 #, c-format
 msgid	"Subscribed to %s"
 msgstr	"Abonné à %s"
 
-#: src/lang.c:688
+#: src/lang.c:685
 msgid	"Subscribing... "
-msgstr	"Abonnement..."
+msgstr	"Abonnement... "
 
-#: src/lang.c:689
+#: src/lang.c:686
+#, c-format
 msgid	"Repost or supersede article(s) [%%s]? (%s/%s/%s): "
 msgstr	"Reposter ou remplacer le(s) article(s) [%%s]? (%s/%s/%s) : "
 
-#: src/lang.c:690
+#: src/lang.c:687
 #, c-format
 msgid	"Supersede article(s) to group(s) [%s]> "
 msgstr	"Remplacer le(s) article(s) du(es) groupe(s) [%s] > "
 
-#: src/lang.c:691
+#: src/lang.c:688
 msgid	"Superseding article ..."
 msgstr	"Remplacement de l'article..."
 
-#: src/lang.c:692
+#: src/lang.c:689
 #, c-format
 msgid	"\n"
 	"Stopped. Type 'fg' to restart %s\n"
 msgstr	"\n"
 	"Arrêté. Tapez 'fg' pour relancer %s\n"
 
-#: src/lang.c:694
+#: src/lang.c:691
 #, c-format
 msgid	"%d days"
 msgstr	"%d jours"
 
-#: src/lang.c:695
+#: src/lang.c:692
 msgid	"<TAB>"
 msgstr	"<TAB>"
 
-#: src/lang.c:696
+#: src/lang.c:693
 msgid	"TeX "
 msgstr	"TeX "
 
-#: src/lang.c:697
+#: src/lang.c:694
 msgid	"# Default action/prompt strings\n"
 msgstr	"# Termes action/prompt par défaut\n"
 
-#: src/lang.c:698
+#: src/lang.c:695
 msgid	"# Defaults for quick (1 key) kill & auto-selection filters\n"
 	"# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
 	"#             5=Message-ID: & last References: entry only\n"
@@ -2908,267 +2960,267 @@ msgstr	"# Réglages par défaut pour les f
 	"# case=ON/OFF    ON=filtre sensible à la casse OFF=filtre insensible\n"
 	"# expire=ON/OFF  ON=durée d'après default_filter_days OFF=n'expire jamais\n"
 
-#: src/lang.c:711
+#: src/lang.c:708
 msgid	"# If ON use print current subject or newsgroup description in the last line\n"
 msgstr	"# Si ON, affiche le sujet actuel ou la description du groupe dans la "
 	"dernière\n"
 	"# ligne\n"
 
-#: src/lang.c:712
+#: src/lang.c:709
 msgid	"# Host & time info used for detecting new groups (don't touch)\n"
 msgstr	"# Info sur l'hôte & l'heure utilisées pour détecter les nouveaux groupes (ne "
 	"pas toucher)\n"
 
-#: src/lang.c:713
+#: src/lang.c:710
 msgid	"There is no news\n"
 msgstr	"Rien de neuf\n"
 
-#: src/lang.c:714
+#: src/lang.c:711
 msgid	"Thread"
 msgstr	"Fil"
 
-#: src/lang.c:715
+#: src/lang.c:712
 msgid	"Thread Level Commands"
 msgstr	"Commandes pour fil"
 
-#: src/lang.c:716
+#: src/lang.c:713
 msgid	"Thread deselected"
 msgstr	"Fil désélectionné"
 
-#: src/lang.c:717
+#: src/lang.c:714
 msgid	"Thread selected"
 msgstr	"Fil sélectionné"
 
-#: src/lang.c:719
+#: src/lang.c:716
 msgid	"threads"
 msgstr	"fils"
 
-#: src/lang.c:721
+#: src/lang.c:718
 msgid	"Thread range"
 msgstr	"Champ du fil"
 
-#: src/lang.c:722
+#: src/lang.c:719
 msgid	"thread"
 msgstr	"fil"
 
-#: src/lang.c:723
+#: src/lang.c:720
 #, c-format
 msgid	"Thread %4s of %4s"
 msgstr	"    Fil %4s sur %4s"
 
-#: src/lang.c:724
+#: src/lang.c:721
 msgid	"Threading articles..."
 msgstr	"Regroupement des articles..."
 
-#: src/lang.c:725
+#: src/lang.c:722
 #, c-format
 msgid	"Toggled word highlighting %s"
 msgstr	"(Dés)activer surbrillance %s"
 
-#: src/lang.c:726
+#: src/lang.c:723
 msgid	"Toggled rot13 encoding"
 msgstr	"(Dés)activer codage rot13"
 
-#: src/lang.c:727
+#: src/lang.c:724
 #, c-format
 msgid	"Toggled german TeX encoding %s"
 msgstr	"(Dés)activer codage TeX Allemand %s"
 
-#: src/lang.c:728
+#: src/lang.c:725
 #, c-format
 msgid	"Toggled tab-width to %d"
 msgstr	"(Dés)activer largeur de tabulation à %d"
 
-#: src/lang.c:729
+#: src/lang.c:726
 #, c-format
 msgid	"%d Trying to dotlock %s"
 msgstr	"%d essaye de déverrouiller %s"
 
-#: src/lang.c:730
+#: src/lang.c:727
 #, c-format
 msgid	"%d Trying to lock %s"
 msgstr	"%d essaye de verrouiller %s"
 
-#: src/lang.c:731
+#: src/lang.c:728
 msgid	"           h=help\n"
 msgstr	"           h=aide\n"
 
-#: src/lang.c:733
+#: src/lang.c:730
 msgid	"Unlimited"
 msgstr	"Illimitée"
 
-#: src/lang.c:734
+#: src/lang.c:731
 msgid	"Enter wildcard unsubscribe pattern> "
 msgstr	"Terme joker pour se désabonner > "
 
-#: src/lang.c:735
+#: src/lang.c:732
 #, c-format
 msgid	"Error decoding %s : %s"
 msgstr	"Erreur lors du décodage de %s : %s"
 
-#: src/lang.c:736
+#: src/lang.c:733
 msgid	"No end."
 msgstr	"Pas de fin."
 
-#: src/lang.c:737
+#: src/lang.c:734
 #, c-format
 msgid	"%s successfully decoded."
 msgstr	"%s décodé avec succès."
 
-#: src/lang.c:738
+#: src/lang.c:735
 #, c-format
 msgid	"%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
 	"\n"
 msgstr	"%*s[-- %s/%s, %sfichier uuencodé, %d lignes, nom : %s --]\n"
 	"\n"
 
-#: src/lang.c:739
+#: src/lang.c:736
 msgid	"unread "
 msgstr	"non lu"
 
-#: src/lang.c:740
+#: src/lang.c:737
 #, c-format
 msgid	"unsubscribed from %d groups"
 msgstr	"désabonné de %d groupes"
 
-#: src/lang.c:741
+#: src/lang.c:738
 #, c-format
 msgid	"Unsubscribed from %s"
 msgstr	"Désabonné de %s"
 
-#: src/lang.c:742
+#: src/lang.c:739
 msgid	"Unsubscribing... "
-msgstr	"Désabonnement..."
+msgstr	"Désabonnement... "
 
-#: src/lang.c:743
+#: src/lang.c:740
 msgid	"Unthreading articles..."
 msgstr	"Dégroupement des articles..."
 
-#: src/lang.c:744
+#: src/lang.c:741
 msgid	"Updated"
 msgstr	"Mis à jour"
 
-#: src/lang.c:745
+#: src/lang.c:742
 msgid	"Updating"
 msgstr	"Rafraîchissement"
 
-#: src/lang.c:746
+#: src/lang.c:743
 #, c-format
 msgid	"Opening %s\n"
 msgstr	"Ouverture de %s\n"
 
-#: src/lang.c:747
+#: src/lang.c:744
 msgid	"No more URL's in this article"
 msgstr	"Plus d'URL dans cet article"
 
-#: src/lang.c:748
+#: src/lang.c:745
 msgid	"Use MIME display program for this message?"
 msgstr	"Utiliser le programme d'affichage MIME pour ce message ?"
 
-#: src/lang.c:749
+#: src/lang.c:746
 msgid	"  -c       mark all news as read in subscribed newsgroups (batch mode)"
 msgstr	"  -c       marquer tous les articles lus dans les groupes abonnés (en tâche "
 	"de fond)"
 
-#: src/lang.c:750
+#: src/lang.c:747
 msgid	"  -Z       return status indicating if any unread news (batch mode)"
 msgstr	"  -Z       retourne un statut indiquant s'il y a nouveaux articles (en tâche "
 	"de fond)"
 
-#: src/lang.c:751
+#: src/lang.c:748
 msgid	"  -q       don't check for new newsgroups"
 msgstr	"  -q       ne pas vérifier s'il y a des nouveaux groupes"
 
-#: src/lang.c:752
+#: src/lang.c:749
 msgid	"  -X       don't save any files on quit"
 msgstr	"  -X       ne pas enregistrer de fichiers à la fermeture"
 
-#: src/lang.c:753
+#: src/lang.c:750
 msgid	"  -d       don't show newsgroup descriptions"
 msgstr	"  -d       ne pas afficher les descriptions des groupes"
 
-#: src/lang.c:754
+#: src/lang.c:751
 msgid	"  -G limit get only limit articles/group"
 msgstr	"  -G nombre d'articles par groupe limite"
 
-#: src/lang.c:755
+#: src/lang.c:752
 #, c-format
 msgid	"  -H       help information about %s"
 msgstr	"  -H       aide à propos de %s"
 
-#: src/lang.c:756
+#: src/lang.c:753
 msgid	"  -h       this help message"
 msgstr	"  -h       ce message d'aide"
 
-#: src/lang.c:757
+#: src/lang.c:754
 #, c-format
 msgid	"  -I dir   news index file directory [default=%s]"
 msgstr	"  -I rép.  répertoire du fichier index [défaut=%s]"
 
-#: src/lang.c:758
+#: src/lang.c:755
 msgid	"  -u       update index files (batch mode)"
 msgstr	"  -u       màj des fichiers index (en tâche de fond)"
 
-#: src/lang.c:759
+#: src/lang.c:756
 #, c-format
 msgid	"  -m dir   mailbox directory [default=%s]"
 msgstr	"  -m rép.  répertoire des bàl [défaut=%s]"
 
-#: src/lang.c:760
+#: src/lang.c:757
 #, c-format
 msgid	"\n"
 	"Mail bug reports/comments to %s"
 msgstr	"\n"
 	"Envoyez par mail vos rapports de bugs/suggestions à %s"
 
-#: src/lang.c:761
+#: src/lang.c:758
 msgid	"  -N       mail new news to your posts (batch mode)"
 msgstr	"  -N       envoyer toute réponse à vos articles (en tâche de fond)"
 
-#: src/lang.c:762
+#: src/lang.c:759
 msgid	"  -M user  mail new news to specified user (batch mode)"
 msgstr	"  -M util. envoyer tout nouvel article à une personne (en tâche de fond)"
 
-#: src/lang.c:763
+#: src/lang.c:760
 #, c-format
 msgid	"  -f file  subscribed to newsgroups file [default=%s]"
 msgstr	"  -f fich. abonné au fichier groupes [défaut=%s]"
 
-#: src/lang.c:764
+#: src/lang.c:761
 msgid	"  -x       no posting mode"
 msgstr	"  -x       mode postage OFF"
 
-#: src/lang.c:765
+#: src/lang.c:762
 msgid	"  -w       post an article and exit"
 msgstr	"  -w       poster un article puis quitter"
 
-#: src/lang.c:766
+#: src/lang.c:763
 msgid	"  -o       post all postponed articles and exit"
 msgstr	"  -o       poster tous les brouillons puis quitter"
 
-#: src/lang.c:767
+#: src/lang.c:764
 msgid	"  -r       read news remotely from default NNTP server"
 msgstr	"  -r       lire les articles depuis le serveur NNTP par défaut"
 
-#: src/lang.c:768
+#: src/lang.c:765
 msgid	"  -R       read news saved by -S option"
 msgstr	"  -R       lire les articles enregistrés via l'option -S"
 
-#: src/lang.c:769
+#: src/lang.c:766
 #, c-format
 msgid	"  -s dir   save news directory [default=%s]"
 msgstr	"  -s rép.  répertoire où enregistrer les articles [défaut=%s]"
 
-#: src/lang.c:770
+#: src/lang.c:767
 msgid	"  -S       save new news for later reading (batch mode)"
 msgstr	"  -S       enregistrer tout nouvel article pour lecture différée (en tâche de "
 	"fond)"
 
-#: src/lang.c:771
+#: src/lang.c:768
 msgid	"  -z       start if any unread news"
 msgstr	"  -z       lancer si articles non lus"
 
-#: src/lang.c:772
+#: src/lang.c:769
 #, c-format
 msgid	"A Usenet reader.\n"
 	"\n"
@@ -3176,66 +3228,66 @@ msgid	"A Usenet reader.\n"
 msgstr	"Un lecteur UseNet.\n"
 	"Usage : %s [options] [groupe[,...]]"
 
-#: src/lang.c:773
+#: src/lang.c:770
 msgid	"  -v       verbose output for batch mode options"
 msgstr	"  -v       sortie détaillée pour options en tâche de fond"
 
-#: src/lang.c:774
+#: src/lang.c:771
 msgid	"  -V       print version & date information"
 msgstr	"  -V       afficher infos date & version"
 
-#: src/lang.c:775
+#: src/lang.c:772
 #, c-format
 msgid	"%s only useful without batch mode operations\n"
 msgstr	"%s utile seulement sans opérations en tâche de fond\n"
 
-#: src/lang.c:776
+#: src/lang.c:773
 #, c-format
 msgid	"%s only useful for batch mode operations\n"
 msgstr	"%s utile seulement pour opérations en tâche de fond\n"
 
-#: src/lang.c:778
+#: src/lang.c:775
 #, c-format
 msgid	"\n"
 	"%s%d out of range (0 - %d). Reset to 0"
 msgstr	"\n"
 	"%s%d expiré (0 - %d). Remis à 0"
 
-#: src/lang.c:779
+#: src/lang.c:776
 #, c-format
 msgid	"View '%s' (%s/%s)?"
 msgstr	"Vue '%s' (%s/%s) ?"
 
-#: src/lang.c:781
+#: src/lang.c:778
 #, c-format
 msgid	"\n"
 	"Warning: posting exceeds %d columns. Line %d is the first long one:\n"
 	"%-100s\n"
 msgstr	"\n"
-	"Attention : message excédant %d colonnes. Ligne %d est la première dépassant "
-	":\n"
+	"Attention : message excédant %d colonnes. Ligne %d est la première "
+	"dépassant :\n"
 	"%-100s\n"
 
-#: src/lang.c:782
+#: src/lang.c:779
 msgid	"\n"
 	"Warning: article unchanged after editing\n"
 msgstr	"\n"
 	"Attention : article inchangé après son édition\n"
 
-#: src/lang.c:783
+#: src/lang.c:780
 msgid	"\n"
 	"Warning: \"Subject:\" contains only whitespaces.\n"
 msgstr	"\n"
 	"Attention : \"Subject:\" contient que des espaces.\n"
 
-#: src/lang.c:784
+#: src/lang.c:781
 msgid	"\n"
 	"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:\".\n"
 msgstr	"\n"
 	"Attention : \"Subject:\" commence par \"Re: \" mais il n'y a pas de "
 	"\"References:\".\n"
 
-#: src/lang.c:786
+#: src/lang.c:783
 msgid	"\n"
 	"Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
 	"         with \"Re: \" and does not contain \"(was:\".\n"
@@ -3243,7 +3295,7 @@ msgstr	"\n"
 	"Attention : L'article a \"References:\" mais \"Subject:\" ne commence\n"
 	"            avec \"Re: \" et ne contient pas \"(was:\".\n"
 
-#: src/lang.c:789
+#: src/lang.c:786
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly written by you. This will "
@@ -3265,7 +3317,7 @@ msgstr	"Lisez ceci attentivement !\n"
 	"Voici l'article que vous vous apprêtez à effacer :\n"
 	"\n"
 
-#: src/lang.c:793
+#: src/lang.c:790
 msgid	"\n"
 	"Warning: You are using a non-plain transfer encoding (such as base64 or\n"
 	"         quoted-printable) and an external inews program to submit your\n"
@@ -3277,7 +3329,7 @@ msgstr	"\n"
 	"            votre article. Si une signature y est ajoutée par cet inews,\n"
 	"            elle ne sera pas encodée correctement.\n"
 
-#: src/lang.c:798
+#: src/lang.c:795
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3290,7 +3342,7 @@ msgstr	"\n"
 	"Certaines valeurs dans votre fichier %s ont changé !\n"
 	"Lisez le fichier WHATSNEW, etc...\n"
 
-#: src/lang.c:800
+#: src/lang.c:797
 #, c-format
 msgid	"\n"
 	"\n"
@@ -3302,7 +3354,7 @@ msgstr	"\n"
 	"Certaines valeurs dans votre fichier %s peuvent être ignorées, d'autres\n"
 	"ont peut-être changées !\n"
 
-#: src/lang.c:803
+#: src/lang.c:800
 #, c-format
 msgid	"Warning: tin wrote fewer groups to your\n"
 	"\t%s\n"
@@ -3315,19 +3367,19 @@ msgstr	"Attention : tin a modifié quelqu
 	"lors de cette session, cela indique une erreur et vous devriez sauvegarder\n"
 	"votre %s avant de relancer tin !\n"
 
-#: src/lang.c:807
+#: src/lang.c:804
 #, c-format
 msgid	"\n"
 	"Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
 msgstr	"\n"
 	"Attention : %d lignes '-- \\n' trouvées, cela peut prêter à confusion.\n"
 
-#: src/lang.c:808
+#: src/lang.c:805
 #, c-format
 msgid	"Warning: Only %d out of %d articles were saved"
 msgstr	"Attention : Seul %d sur %d articles ont été enregistrés"
 
-#: src/lang.c:809
+#: src/lang.c:806
 #, c-format
 msgid	"\n"
 	"Warning: Your signature  is longer than %d lines.  Since signatures usually "
@@ -3342,50 +3394,50 @@ msgstr	"\n"
 	"d'être\n"
 	"            le plus court possible.\n"
 
-#: src/lang.c:813
+#: src/lang.c:810
 #, c-format
 msgid	"Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
-msgstr	"Attention : cette email peut contenir un piège à spam. %s=continuer, "
-	"%s=annuler ?"
+msgstr	"Attention : cette email peut contenir un piège à spam. %s=continuer, %"
+	"s=annuler ?"
 
-#: src/lang.c:814
+#: src/lang.c:811
 msgid	"\n"
 	"Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
 msgstr	"\n"
 	"Attention : Les signatures doivent commencer avec '-- \\n' et non par '-- "
 	"\\n'.\n"
 
-#: src/lang.c:815
+#: src/lang.c:812
 msgid	"Writing attributes file..."
 msgstr	"Écriture du fichier attributes..."
 
-#: src/lang.c:817
+#: src/lang.c:814
 #, c-format
 msgid	"%d Responses"
 msgstr	"%d Réponses"
 
-#: src/lang.c:819
+#: src/lang.c:816
 #, c-format
 msgid	"Added %d %s"
 msgstr	"%d %s ajouté(s)"
 
-#: src/lang.c:820
+#: src/lang.c:817
 msgid	"No unsubscribed groups to show"
 msgstr	"Aucuns groupes non abonnés à afficher"
 
-#: src/lang.c:821
+#: src/lang.c:818
 msgid	"Showing subscribed to groups only"
 msgstr	"Afficher uniquement les groupes abonnés"
 
-#: src/lang.c:822
+#: src/lang.c:819
 msgid	"Yes "
 msgstr	"Oui "
 
-#: src/lang.c:823
+#: src/lang.c:820
 msgid	"    You have mail\n"
 msgstr	"    Nouveau mail\n"
 
-#: src/lang.c:828
+#: src/lang.c:825
 #, c-format
 msgid	"\n"
 	"Warning: Posting is in %s and contains characters which are not\n"
@@ -3404,16 +3456,11 @@ msgstr	"\n"
 	"            problème, ou bien changer la valeur de MM_NETWORK_CHARSET\n"
 	"            via le M)enu.\n"
 
-#: src/lang.c:839
-#, c-format
-msgid	"Redefined key %s '%s' -> '%s'\n"
-msgstr	"Clé %s redéfinie '%s' -> '%s'\n"
-
-#: src/lang.c:840
+#: src/lang.c:836
 msgid	"  -D       debug mode 1=NNTP 2=ALL"
 msgstr	"  -D       mode debug 1=NNTP 2=TOUS"
 
-#: src/lang.c:844
+#: src/lang.c:840
 msgid	"Read carefully!\n"
 	"\n"
 	"  You are about to cancel an article seemingly not written by you.  This "
@@ -3440,11 +3487,11 @@ msgstr	"Lisez ceci attentivement !\n"
 	"Voici l'article que vous vous apprêtez a effacer :\n"
 	"\n"
 
-#: src/lang.c:853
+#: src/lang.c:849
 msgid	"toggle color"
 msgstr	"(dés)activer la couleur"
 
-#: src/lang.c:854
+#: src/lang.c:850
 msgid	"# Changing colors of several screen parts\n"
 	"# Possible values are:\n"
 	"#  -1 = default (white for foreground and black for background)\n"
@@ -3487,44 +3534,44 @@ msgstr	"# Changer la couleur de plusieur
 	"#  15 = blanc gras\n"
 	"\n"
 
-#: src/lang.c:874
+#: src/lang.c:870
 msgid	"  -a       toggle color flag"
 msgstr	"  -a       change la couleur"
 
-#: src/lang.c:878
+#: src/lang.c:874
 msgid	"\n"
 	"Error: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Erreur : Suivi positionné sur plus d'un groupe !\n"
 
-#: src/lang.c:879
+#: src/lang.c:875
 #, c-format
 msgid	"\n"
 	"Error: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Erreur : multi-postage vers %d groupes et pas de ligne Followup-To !\n"
 
-#: src/lang.c:880
+#: src/lang.c:876
 #, c-format
 msgid	"\n"
 	"Error: \"%s\" is not a valid newsgroup!\n"
 msgstr	"\n"
 	"Erreur : \"%s\" n'est pas un groupe valide !\n"
 
-#: src/lang.c:882
+#: src/lang.c:878
 msgid	"\n"
 	"Warning: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Attention : Suivi positionné sur plus d'un groupe !\n"
 
-#: src/lang.c:883
+#: src/lang.c:879
 #, c-format
 msgid	"\n"
 	"Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Attention : multi-postage vers %d groupes et aucun suivi !\n"
 
-#: src/lang.c:884
+#: src/lang.c:880
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
@@ -3533,307 +3580,315 @@ msgstr	"\n"
 	"            pas apparaître dans ce groupe !\n"
 	"\n"
 
-#: src/lang.c:885
+#: src/lang.c:881
 #, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not a valid newsgroup at this site!\n"
 msgstr	"\n"
 	"Attention : \"%s\" n'est pas un groupe valide !\n"
 
-#: src/lang.c:889
+#: src/lang.c:885
 #, c-format
 msgid	"%d files successfully written from %d articles. %d %s occurred."
 msgstr	"%d fichiers des %d articles écrits avec succès. %d %s est survenu."
 
-#: src/lang.c:890
+#: src/lang.c:886
 msgid	"Missing parts."
 msgstr	"Parties manquantes."
 
-#: src/lang.c:891
+#: src/lang.c:887
 msgid	"No beginning."
 msgstr	"Pas de début."
 
-#: src/lang.c:892
+#: src/lang.c:888
 msgid	"No data."
 msgstr	"Pas de données."
 
-#: src/lang.c:893
+#: src/lang.c:889
 msgid	"Unknown error."
 msgstr	"Erreur inconnue."
 
-#: src/lang.c:896
+#: src/lang.c:892
 #, c-format
 msgid	"\tChecksum of %s (%ld %s)"
 msgstr	"\tSomme de contrôle de %s (%ld %s)"
 
-#: src/lang.c:901
+#: src/lang.c:897
 msgid	"Reading mail active file... "
 msgstr	"Lecture du fichier active mail... "
 
-#: src/lang.c:902
+#: src/lang.c:898
 msgid	"Reading mailgroups file... "
 msgstr	"Lecture du fichier mailgroups... "
 
-#: src/lang.c:906
+#: src/lang.c:902
 msgid	"perform PGP operations on article"
 msgstr	"effectuer des opérations PGP sur l'article"
 
-#: src/lang.c:907
+#: src/lang.c:903
 msgid	"Add key(s) to public keyring?"
 msgstr	"Ajouter les clé(s) au cercle public ?"
 
-#: src/lang.c:908
+#: src/lang.c:904
 #, c-format
 msgid	"%s=encrypt, %s=sign, %s=both, %s=quit: "
 msgstr	"%s=encoder, %s=signer, %s=les deux, %s=quitter : "
 
-#: src/lang.c:909
+#: src/lang.c:905
 #, c-format
 msgid	"%s=sign, %s=sign & include public key, %s=quit: "
 msgstr	"%s=signer, %s=sig. & inclure clé publique, %s=quitter : "
 
-#: src/lang.c:910
+#: src/lang.c:906
 #, c-format
 msgid	"PGP has not been set up (can't open %s)"
 msgstr	"PGP n'a pas été configuré (ouverture de %s impossible)"
 
-#: src/lang.c:911
+#: src/lang.c:907
 msgid	"Article not signed and no public keys found"
 msgstr	"Article non signé et pas de clés publiques trouvées"
 
-#: src/lang.c:913
+#: src/lang.c:909
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=quitter, %s=éditer, %s=ispell, %s=pgp, %s=menu, %s=poster, %s=brouillon : "
 
-#: src/lang.c:914
+#: src/lang.c:910
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=quitter, %s=éditer, %s=ispell, %s=pgp, %s=envoyer [%%s] : "
 
-#: src/lang.c:915
+#: src/lang.c:911
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
-msgstr	"%s=quitter, %s=éditer, %s=ispell, %s=pgp, %s=menu, %s=poster, %s=brouillon "
-	"[%%s]: "
+msgstr	"%s=quitter, %s=éditer, %s=ispell, %s=pgp, %s=menu, %s=poster, %s=brouillon [%%"
+	"s]: "
 
-#: src/lang.c:917
+#: src/lang.c:913
 #, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=quitter, %s=éditer, %s=pgp, %s=menu, %s=poster, %s=brouillon : "
 
-#: src/lang.c:918
+#: src/lang.c:914
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=quitter, %s=éditer, %s=pgp, %s=envoyer [%%s] : "
 
-#: src/lang.c:919
+#: src/lang.c:915
+#, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=quitter, %s=éditer, %s=pgp, %s=menu, %s=poster, %s=brouillon [%%s] : "
 
-#: src/lang.c:923
+#: src/lang.c:919
 #, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=quitter, %s=éditer, %s=ispell, %s=menu, %s=poster, %s=brouillon : "
 
-#: src/lang.c:924
+#: src/lang.c:920
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
 msgstr	"%s=quitter, %s=éditer, %s=ispell, %s=envoyer [%%s] : "
 
-#: src/lang.c:925
+#: src/lang.c:921
+#, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=quitter, %s=éditer, %s=ispell, %s=menu, %s=poster, %s=brouillon [%%s] : "
 
-#: src/lang.c:927
+#: src/lang.c:923
 #, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=quitter, %s=éditer, %s=menu, %s=poster, %s=brouillon : "
 
-#: src/lang.c:928
+#: src/lang.c:924
+#, c-format
 msgid	"%s=quit, %s=edit, %s=send [%%s]: "
 msgstr	"%s=quitter, %s=éditer, %s=envoyer [%%s] : "
 
-#: src/lang.c:929
+#: src/lang.c:925
+#, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=quitter, %s=éditer, %s=menu, %s=poster, %s=brouillon [%%s]: "
 
-#: src/lang.c:938
+#: src/lang.c:934
 msgid	"Try cache_overview_files to speed up things.\n"
 msgstr	"Activez 'cache_overview_files' pour accélérer les choses.\n"
 
-#: src/lang.c:939
+#: src/lang.c:935
 msgid	"Tin will use local index files instead.\n"
 msgstr	"Tin utilisera à la place un index local.\n"
 
-#: src/lang.c:940
+#: src/lang.c:936
 msgid	"Cannot find NNTP server name"
 msgstr	"Nom du serveur NNTP introuvable"
 
-#: src/lang.c:941
+#: src/lang.c:937
 #, c-format
 msgid	"Connecting to %s:%d..."
 msgstr	"Connexion à %s:%d..."
 
-#: src/lang.c:942
+#: src/lang.c:938
 msgid	"Disconnecting from server...\n"
 msgstr	"Déconnexion du serveur...\n"
 
-#: src/lang.c:943
+#: src/lang.c:939
 #, c-format
 msgid	"Wrong newsgroup name in response of GROUP command, %s for %s"
 msgstr	"Nom de groupe erroné dans la réponse de la cmd GROUP, %s pour %s"
 
-#: src/lang.c:944
+#: src/lang.c:940
 #, c-format
 msgid	"Failed to connect to NNTP server %s. Exiting..."
 msgstr	"Échec de la connexion au serveur NNTP %s. Fermeture..."
 
-#: src/lang.c:945
+#: src/lang.c:941
 msgid	"205  Closing connection"
 msgstr	"205  Fermeture de la connexion"
 
-#: src/lang.c:946
+#: src/lang.c:942
 msgid	"Your server does not support the NNTP XOVER or OVER command.\n"
 msgstr	"Votre serveur ne supporte pas la commande NNTP XOVER ou OVER.\n"
 
-#: src/lang.c:947
+#: src/lang.c:943
 msgid	"Connection to news server has timed out. Reconnect?"
 msgstr	"Connexion au serveur de nouvelles expirée. Se reconnecter ?"
 
-#: src/lang.c:948
+#: src/lang.c:944
 #, c-format
 msgid	"Put the server name in the file %s,\n"
 	"or set the environment variable NNTPSERVER"
 msgstr	"Mettez le nom du serveur dans le fichier %s,\n"
 	"ou utilisez la variable d'environnement NNTPSERVER"
 
-#: src/lang.c:949
+#: src/lang.c:945
 msgid	"  -A       force authentication on connect"
 msgstr	"  -A       force l'authentication à la connexion"
 
-#: src/lang.c:950
+#: src/lang.c:946
 #, c-format
 msgid	"  -g serv  read news from NNTP server serv [default=%s]"
 msgstr	"  -g serv  lire depuis le serveur NNTP serv [défaut=%s]"
 
-#: src/lang.c:951
+#: src/lang.c:947
 #, c-format
 msgid	"  -p port  use port as NNTP port [default=%d]"
 msgstr	"  -p port  utiliser port comme port NNTP [défaut=%d]"
 
-#: src/lang.c:952
+#: src/lang.c:948
 msgid	"  -Q       quick start. Same as -nqd"
 msgstr	"  -Q       démarrage rapide. Idem que -npd"
 
-#: src/lang.c:953
+#: src/lang.c:949
 msgid	"  -l       use only LIST instead of GROUP (-n) command"
 msgstr	"  -l       utilise seulement LIST plutôt que GROUP (-n)"
 
-#: src/lang.c:954
+#: src/lang.c:950
 msgid	"  -n       only read subscribed .newsrc groups from NNTP server"
 msgstr	"  -n       lire seulement groupes abonnés du .newsrc depuis le serveur NNTP"
 
-#: src/lang.c:956
+#: src/lang.c:952
 #, c-format
 msgid	"%s/tcp: Unknown service.\n"
 msgstr	"%s/tcp : Service inconnu.\n"
 
-#: src/lang.c:959
+#: src/lang.c:955
 msgid	"\n"
 	"socket or connect problem\n"
 msgstr	"\n"
 	"problème de socket ou de connexion\n"
 
-#: src/lang.c:961
+#: src/lang.c:957
 #, c-format
 msgid	"\n"
 	"Connection to %s: "
 msgstr	"\n"
 	"Connexion à %s : "
 
-#: src/lang.c:962
+#: src/lang.c:958
 msgid	"Giving up...\n"
 msgstr	"Abandon...\n"
 
-#: src/lang.c:965
+#: src/lang.c:961
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 	"Tin will try to use XHDR XREF instead (slows down things a bit).\n"
 msgstr	"Votre serveur n'a pas d'Xref: dans son information XOVER.\n"
 	"Tin essayera d'utiliser XHDR XREF à la place (plus lent).\n"
 
-#: src/lang.c:968
+#: src/lang.c:964
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 msgstr	"Votre serveur n'a pas d'Xref: dans son information XOVER.\n"
 
-#: src/lang.c:971
+#: src/lang.c:967
 #, c-format
 msgid	"Can't open %s. Try %s -r to read news via NNTP.\n"
 msgstr	"Ouverture de %s impossible. Essayez %s -r pour lire via NNTP.\n"
 
-#: src/lang.c:974
+#: src/lang.c:970
 msgid	"  -Q       quick start. Same as -qd"
 msgstr	"  -Q       démarrage rapide. Idem que -qd"
 
-#: src/lang.c:975
+#: src/lang.c:971
 msgid	"  -l       read only active file instead of scanning spool (-n) command"
 msgstr	"  -l       lire seulement le fichier active plutôt que le spool (-n)"
 
-#: src/lang.c:976
+#: src/lang.c:972
 msgid	"  -n       only read subscribed .newsrc groups from spool"
 msgstr	"  -n       lire seulement groupes abonnés du .newsrc depuis le spool"
 
-#: src/lang.c:977
+#: src/lang.c:973
 msgid	"Your server does not have Xref: in its NOV-files.\n"
 msgstr	"Votre serveur n'a pas d'Xref: dans ses fichiers NOV.\n"
 
-#: src/lang.c:981
+#: src/lang.c:977
 msgid	"Posting using external inews failed. Use built in inews instead?"
 msgstr	"Le postage avec l'inews externe à échoué. Utiliser l'inews intégré ?"
 
-#: src/lang.c:982
+#: src/lang.c:978
 msgid	"It worked! Should I always use my built in inews from now on?"
 msgstr	"Ca a marché ! Devrais-je toujours utiliser mon inews intégré à présent ?"
 
-#: src/lang.c:990
+#: src/lang.c:986
 #, c-format
 msgid	"%d %s printed"
 msgstr	"%d %s imprimé"
 
-#: src/lang.c:991
+#: src/lang.c:987
 msgid	"output article/thread/hot/pattern/tagged articles to printer"
 msgstr	"envoyer article/fil/sél./articles marqués à l'imprimante"
 
-#: src/lang.c:992
+#: src/lang.c:988
 msgid	"Print"
 msgstr	"Imprimer"
 
-#: src/lang.c:993
+#: src/lang.c:989
 msgid	"Printing..."
 msgstr	"Impression..."
 
-#: src/lang.c:997
+#: src/lang.c:993
 msgid	"pipe article/thread/hot/pattern/tagged articles into command"
 msgstr	"passer article/fil/sél./articles marqués à une commande"
 
-#: src/lang.c:998
+#: src/lang.c:994
 msgid	"No command"
 msgstr	"Aucune commande"
 
-#: src/lang.c:999
+#: src/lang.c:995
 msgid	"Pipe"
 msgstr	"Passer (pipe)"
 
-#: src/lang.c:1000
+#: src/lang.c:996
 #, c-format
 msgid	"Pipe to command [%.*s]> "
 msgstr	"Passer à la commande [%.*s] > "
 
-#: src/lang.c:1001
+#: src/lang.c:997
 msgid	"Piping..."
 msgstr	"Passage..."
 
-#: src/lang.c:1003
+#: src/lang.c:999
 msgid	"Piping not enabled."
 msgstr	"Passage non activé."
 
-#: src/lang.c:1007
+#: src/lang.c:1003
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line has spaces  in it that MUST be removed.\n"
@@ -3846,7 +3901,7 @@ msgstr	"\n"
 	"         du contenu. Utilisez une virgule (,) pour séparer de multiples\n"
 	"         noms de groupes.\n"
 
-#: src/lang.c:1012
+#: src/lang.c:1008
 #, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line is  continued in  the next line.  Since\n"
@@ -3857,7 +3912,7 @@ msgstr	"\n"
 	"         Comme la ligne ne contient pas d'espace, ce n'est pas autorisé.\n"
 	"         Inscrivez svp tous les groupes sur une seule ligne.\n"
 
-#: src/lang.c:1017
+#: src/lang.c:1013
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line is continued in the next line.\n"
@@ -3870,7 +3925,7 @@ msgstr	"\n"
 	"            Pour éviter les problèmes, indiquez tous les groupes sur une\n"
 	"            seule ligne.\n"
 
-#: src/lang.c:1021
+#: src/lang.c:1017
 #, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
@@ -3878,7 +3933,7 @@ msgstr	"\n"
 	"Attention : La ligne \"%s:\" contient un ou des espaces qui DOIVENT\n"
 	"            être enlevés.\n"
 
-#: src/lang.c:1026
+#: src/lang.c:1022
 msgid	"\n"
 	"  If your article contains quoted text  please take some time to pare it "
 	"down\n"
@@ -3912,504 +3967,509 @@ msgstr	"\n"
 	"simples\n"
 	"  règles, pratiquement toutes les personnes ignoreront vos articles.\n"
 
-#: src/lang.c:1039
+#: src/lang.c:1035
 msgid	"shell escape"
 msgstr	"accéder à un shell"
 
-#: src/lang.c:1040
+#: src/lang.c:1036
 #, c-format
 msgid	"Shell Command (%s)"
 msgstr	"Commande shell (%s)"
 
-#: src/lang.c:1041
+#: src/lang.c:1037
 #, c-format
 msgid	"Enter shell command [%s]> "
 msgstr	"Commande shell [%s] > "
 
-#: src/lang.c:1045
+#: src/lang.c:1041
 #, c-format
 msgid	"%s: Can't get entry for TERM\n"
 msgstr	"%s : Entrée pour TERM introuvable\n"
 
-#: src/lang.c:1049
+#: src/lang.c:1045
 #, c-format
 msgid	"Group %.*s ('q' to quit)..."
 msgstr	"Groupe %.*s ('q' pour quitter)..."
 
-#: src/lang.c:1051
+#: src/lang.c:1047
 #, c-format
 msgid	"Group %.*s..."
 msgstr	"Groupe %.*s..."
 
-#: src/lang.c:1055
+#: src/lang.c:1051
 msgid	"Server unavailable\n"
 msgstr	"Service indisponible\n"
 
-#: src/lang.c:1061
+#: src/lang.c:1057
 #, c-format
-msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; "
-	"%s=post"
-msgstr	"%s=pipe; %s=mail; %s=impr.; %s=quitter; %s=voir lu/non lu; %s=enreg.; "
-	"%s=marquer; %s=poster"
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+	"s=post"
+msgstr	"%s=pipe; %s=mail; %s=impr.; %s=quitter; %s=voir lu/non lu; %s=enreg.; %"
+	"s=marquer; %s=poster"
 
-#: src/lang.c:1062
+#: src/lang.c:1058
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
-msgstr	"%s=pipe; %s=mail; %s=impr.; %s=quitter; %s=répondre; %s=enreg.; %s=marquer; "
-	"%s=poster"
+msgstr	"%s=pipe; %s=mail; %s=impr.; %s=quitter; %s=répondre; %s=enreg.; %s=marquer; %"
+	"s=poster"
 
-#: src/lang.c:1064
+#: src/lang.c:1060
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
-msgstr	"%s=mail; %s=imprimer; %s=quitter; %s=voir lu/non lu; %s=enregistrer; "
-	"%s=marquer; %s=poster"
+msgstr	"%s=mail; %s=imprimer; %s=quitter; %s=voir lu/non lu; %s=enregistrer; %"
+	"s=marquer; %s=poster"
 
-#: src/lang.c:1065
+#: src/lang.c:1061
 #, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
-msgstr	"%s=mail; %s=imprimer; %s=quitter; %s=répondre; %s=enregistrer; %s=marquer; "
-	"%s=poster"
+msgstr	"%s=mail; %s=imprimer; %s=quitter; %s=répondre; %s=enregistrer; %s=marquer; %"
+	"s=poster"
 
-#: src/lang.c:1069
+#: src/lang.c:1065
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
-msgstr	"%s=pipe; %s=mail; %s=quitter; %s=voir lu/non lu; %s=enregistrer; %s=marquer; "
-	"%s=poster"
+msgstr	"%s=pipe; %s=mail; %s=quitter; %s=voir lu/non lu; %s=enregistrer; %s=marquer; %"
+	"s=poster"
 
-#: src/lang.c:1070
+#: src/lang.c:1066
 #, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
-msgstr	"%s=pipe; %s=mail; %s=quitter; %s=répondre; %s=enregistrer; %s=marquer; "
-	"%s=poster"
+msgstr	"%s=pipe; %s=mail; %s=quitter; %s=répondre; %s=enregistrer; %s=marquer; %"
+	"s=poster"
 
-#: src/lang.c:1072
+#: src/lang.c:1068
 #, c-format
 msgid	"%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr	"%s=mail; %s=quitter; %s=voir lu/non lu; %s=enregistrer; %s=marquer; %s=poster"
 
-#: src/lang.c:1073
+#: src/lang.c:1069
 #, c-format
 msgid	"%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=mail; %s=quitter; %s=répondre; %s=enregistrer; %s=marquer; %s=poster"
 
-#: src/lang.c:1079
+#: src/lang.c:1075
 msgid	"Terminal does not support color"
 msgstr	"Le terminal ne supporte pas les couleurs"
 
-#: src/lang.c:1084
+#: src/lang.c:1080
 #, c-format
 msgid	"Trying %s"
 msgstr	"Essai %s"
 
-#: src/lang.c:1098 src/lang.c:1123 src/lang.c:1139 src/lang.c:1318 src/refs.c:296
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315 src/refs.c:296
 msgid	"None"
 msgstr	"Aucun"
 
-#: src/lang.c:1099
+#: src/lang.c:1095
 msgid	"Subject"
 msgstr	"Sujet"
 
-#: src/lang.c:1100
+#: src/lang.c:1096
 msgid	"References"
 msgstr	"Références"
 
-#: src/lang.c:1101
+#: src/lang.c:1097
 msgid	"Both Subject and References"
 msgstr	"Sujet et Références"
 
-#: src/lang.c:1102
+#: src/lang.c:1098
 msgid	"Multipart Subject"
 msgstr	"Sujet multiparties"
 
-#: src/lang.c:1114 src/lang.c:1225
+# TRANSLATION MISSING
+#: src/lang.c:1099
+msgid	"Percentage Match"
+msgstr	""
+
+#: src/lang.c:1111 src/lang.c:1222
 msgid	"No"
 msgstr	"Non"
 
-#: src/lang.c:1115 src/lang.c:1227
+#: src/lang.c:1112 src/lang.c:1224
 msgid	"Yes"
 msgstr	"Oui"
 
-#: src/lang.c:1116
+#: src/lang.c:1113
 msgid	"Hide All"
 msgstr	"Tout masquer"
 
-#: src/lang.c:1124
+#: src/lang.c:1121
 msgid	"Address"
 msgstr	"Adresse"
 
-#: src/lang.c:1125
+#: src/lang.c:1122
 msgid	"Full Name"
 msgstr	"Nom complet"
 
-#: src/lang.c:1126
+#: src/lang.c:1123
 msgid	"Address and Name"
 msgstr	"Adresse et Nom"
 
-#: src/lang.c:1133
+#: src/lang.c:1130
 msgid	"Max"
 msgstr	"Max"
 
-#: src/lang.c:1134
+#: src/lang.c:1131
 msgid	"Sum"
 msgstr	"Addition"
 
-#: src/lang.c:1135
+#: src/lang.c:1132
 msgid	"Average"
 msgstr	"Moyenne"
 
-#: src/lang.c:1140
+#: src/lang.c:1137
 msgid	"Lines"
 msgstr	"Lignes"
 
-#: src/lang.c:1141
+#: src/lang.c:1138
 msgid	"Score"
 msgstr	"Score"
 
-#: src/lang.c:1142
+#: src/lang.c:1139
 msgid	"Lines & Score"
 msgstr	"Lignes & Score"
 
-#: src/lang.c:1151
+#: src/lang.c:1148
 msgid	"Black"
 msgstr	"Noir"
 
-#: src/lang.c:1152
+#: src/lang.c:1149
 msgid	"Red"
 msgstr	"Rouge"
 
-#: src/lang.c:1153
+#: src/lang.c:1150
 msgid	"Green"
 msgstr	"Vert"
 
-#: src/lang.c:1154
+#: src/lang.c:1151
 msgid	"Brown"
 msgstr	"Marron"
 
-#: src/lang.c:1155
+#: src/lang.c:1152
 msgid	"Blue"
 msgstr	"Bleu"
 
-#: src/lang.c:1156
+#: src/lang.c:1153
 msgid	"Pink"
 msgstr	"Rose"
 
-#: src/lang.c:1157
+#: src/lang.c:1154
 msgid	"Cyan"
 msgstr	"Cyan"
 
-#: src/lang.c:1158
+#: src/lang.c:1155
 msgid	"White"
 msgstr	"Blanc"
 
-#: src/lang.c:1159
+#: src/lang.c:1156
 msgid	"Gray"
 msgstr	"Gris"
 
-#: src/lang.c:1160
+#: src/lang.c:1157
 msgid	"Light Red"
 msgstr	"Rouge gras"
 
-#: src/lang.c:1161
+#: src/lang.c:1158
 msgid	"Light Green"
 msgstr	"Vert gras"
 
-#: src/lang.c:1162
+#: src/lang.c:1159
 msgid	"Yellow"
 msgstr	"Jaune"
 
-#: src/lang.c:1163
+#: src/lang.c:1160
 msgid	"Light Blue"
 msgstr	"Bleu gras"
 
-#: src/lang.c:1164
+#: src/lang.c:1161
 msgid	"Light Pink"
 msgstr	"Rose gras"
 
-#: src/lang.c:1165
+#: src/lang.c:1162
 msgid	"Light Cyan"
 msgstr	"Cyan gras"
 
-#: src/lang.c:1166
+#: src/lang.c:1163
 msgid	"Light White"
 msgstr	"Blanc gras"
 
-#: src/lang.c:1174 src/lang.c:1231 src/lang.c:1245
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
 msgid	"Nothing"
 msgstr	"Rien"
 
-#: src/lang.c:1175
+#: src/lang.c:1172
 msgid	"Mark"
 msgstr	"Marque"
 
-#: src/lang.c:1176
+#: src/lang.c:1173
 msgid	"Space"
 msgstr	"Espace"
 
-#: src/lang.c:1183
+#: src/lang.c:1180
 msgid	"Normal"
 msgstr	"Normal"
 
-#: src/lang.c:1184
+#: src/lang.c:1181
 msgid	"Best highlighting"
 msgstr	"Meilleure surbrillance"
 
-#: src/lang.c:1185
+#: src/lang.c:1182
 msgid	"Underline"
 msgstr	"Souligné"
 
-#: src/lang.c:1186
+#: src/lang.c:1183
 msgid	"Reverse video"
 msgstr	"Vidéo inversée"
 
-#: src/lang.c:1187
+#: src/lang.c:1184
 msgid	"Blinking"
 msgstr	"Clignotement"
 
-#: src/lang.c:1188
+#: src/lang.c:1185
 msgid	"Half bright"
 msgstr	"Moins lumineux"
 
-#: src/lang.c:1189
+#: src/lang.c:1186
 msgid	"Bold"
 msgstr	"Gras"
 
-#: src/lang.c:1194
+#: src/lang.c:1191
 msgid	"none"
 msgstr	"aucun"
 
-#: src/lang.c:1195
+#: src/lang.c:1192
 msgid	"commands"
 msgstr	"commandes"
 
-#: src/lang.c:1196
+#: src/lang.c:1193
 msgid	"select"
 msgstr	"sélection"
 
-#: src/lang.c:1198
+#: src/lang.c:1195
 msgid	"commands & quit"
 msgstr	"commandes & quitter"
 
-#: src/lang.c:1199
+#: src/lang.c:1196
 msgid	"commands & select"
 msgstr	"commandes & sélection"
 
-#: src/lang.c:1200
+#: src/lang.c:1197
 msgid	"quit & select"
 msgstr	"quitter & sélection"
 
-#: src/lang.c:1201
+#: src/lang.c:1198
 msgid	"commands & quit & select"
 msgstr	"commandes, quitter & sélection"
 
-#: src/lang.c:1226
+#: src/lang.c:1223
 msgid	"Shell archive"
 msgstr	"Archive shell"
 
-#: src/lang.c:1232
+#: src/lang.c:1229
 msgid	"Subject: (descending)"
 msgstr	"Subject : (descendant)"
 
-#: src/lang.c:1233
+#: src/lang.c:1230
 msgid	"Subject: (ascending)"
 msgstr	"Subject : (ascendant)"
 
-#: src/lang.c:1234
+#: src/lang.c:1231
 msgid	"From: (descending)"
 msgstr	"From: (descendant)"
 
-#: src/lang.c:1235
+#: src/lang.c:1232
 msgid	"From: (ascending)"
 msgstr	"From: (ascendant)"
 
-#: src/lang.c:1236
+#: src/lang.c:1233
 msgid	"Date: (descending)"
 msgstr	"Date: (descendant)"
 
-#: src/lang.c:1237
+#: src/lang.c:1234
 msgid	"Date: (ascending)"
 msgstr	"Date: (ascendant)"
 
-#: src/lang.c:1238 src/lang.c:1246
+#: src/lang.c:1235 src/lang.c:1243
 msgid	"Score (descending)"
 msgstr	"Score (descendant)"
 
-#: src/lang.c:1239 src/lang.c:1247
+#: src/lang.c:1236 src/lang.c:1244
 msgid	"Score (ascending)"
 msgstr	"Score (ascendant)"
 
-#: src/lang.c:1240
+#: src/lang.c:1237
 msgid	"Lines: (descending)"
 msgstr	"Lines: (descendant)"
 
-#: src/lang.c:1241
+#: src/lang.c:1238
 msgid	"Lines: (ascending)"
 msgstr	"Lines: (ascendant)"
 
-#: src/lang.c:1252
+#: src/lang.c:1249
 msgid	"Always Keep"
 msgstr	"Toujours garder"
 
-#: src/lang.c:1253
+#: src/lang.c:1250
 msgid	"Always Remove"
 msgstr	"Toujours effacer"
 
-#: src/lang.c:1254
+#: src/lang.c:1251
 msgid	"Mark with D on selection screen"
 msgstr	"Marquer avec un D dans la vue sélection"
 
-#: src/lang.c:1259
+#: src/lang.c:1256
 msgid	"Kill only unread arts"
 msgstr	"Filtrer uniquement les articles non lus"
 
-#: src/lang.c:1260
+#: src/lang.c:1257
 msgid	"Kill all arts & show with K"
 msgstr	"Filtrer tous les articles & afficher avec un K"
 
 #. TODO: s/K/art_marked_killed/
-#: src/lang.c:1261
+#: src/lang.c:1258
 msgid	"Kill all arts and never show"
 msgstr	"Filtrer tous les articles et ne jamais afficher"
 
-#: src/lang.c:1266
+#: src/lang.c:1263
 msgid	"Nothing special"
 msgstr	"Rien de spécial"
 
-#: src/lang.c:1267
+#: src/lang.c:1264
 msgid	"Compress quotes"
 msgstr	"Citations compressées"
 
-#: src/lang.c:1268
+#: src/lang.c:1265
 msgid	"Quote signatures"
 msgstr	"Citer les signatures"
 
-#: src/lang.c:1269
+#: src/lang.c:1266
 msgid	"Compress quotes, quote sigs"
 msgstr	"Compresser les citations, citer les signatures"
 
-#: src/lang.c:1270
+#: src/lang.c:1267
 msgid	"Quote empty lines"
 msgstr	"Citer les lignes vides"
 
-#: src/lang.c:1271
+#: src/lang.c:1268
 msgid	"Compress quotes, quote empty lines"
 msgstr	"Compresser les citations, citer les lignes vides"
 
-#: src/lang.c:1272
+#: src/lang.c:1269
 msgid	"Quote sigs & empty lines"
 msgstr	"Citer les signatures & les lignes vides"
 
-#: src/lang.c:1273
+#: src/lang.c:1270
 msgid	"Comp. q., quote sigs & empty lines"
 msgstr	"Citations compr., signatures et lignes vides citées"
 
-#: src/lang.c:1311
+#: src/lang.c:1308
 msgid	"no"
 msgstr	"non"
 
-#: src/lang.c:1312
+#: src/lang.c:1309
 msgid	"with headers"
 msgstr	"avec les en-têtes"
 
-#: src/lang.c:1313
+#: src/lang.c:1310
 msgid	"without headers"
 msgstr	"sans les en-têtes"
 
-#: src/lang.c:1320 src/lang.c:1326
+#: src/lang.c:1317 src/lang.c:1323
 msgid	"NFKC"
 msgstr	"NFKC"
 
-#: src/lang.c:1321
+#: src/lang.c:1318
 msgid	"NFKD"
 msgstr	"NFKD"
 
-#: src/lang.c:1322
+#: src/lang.c:1319
 msgid	"NFC"
 msgstr	"NFC"
 
-#: src/lang.c:1323
+#: src/lang.c:1320
 msgid	"NFD"
 msgstr	"NFD"
 
-#: src/lang.c:1334
+#: src/lang.c:1331
 msgid	"Display Options"
 msgstr	"Options d'affichage"
 
-#: src/lang.c:1341
+#: src/lang.c:1338
 msgid	"Color Options"
 msgstr	"Options des couleurs"
 
-#: src/lang.c:1348
+#: src/lang.c:1345
 msgid	"Article-Limiting Options"
 msgstr	"Options des articles"
 
-#: src/lang.c:1354
+#: src/lang.c:1351
 msgid	"Posting/Mailing Options"
 msgstr	"Options de postage/messagerie"
 
-#: src/lang.c:1360
+#: src/lang.c:1357
 msgid	"Saving/Printing Options"
 msgstr	"Options d'enregistrement/d'impression"
 
-#: src/lang.c:1366
+#: src/lang.c:1363
 msgid	"Expert Options"
 msgstr	"Options avancées"
 
-#: src/lang.c:1372
+#: src/lang.c:1369
 msgid	"Filtering Options"
 msgstr	"Options de filtrage"
 
-#: src/lang.c:1377 src/lang.c:1408 src/lang.c:1414 src/lang.c:1426 src/lang.c:1476
-#: src/lang.c:1482 src/lang.c:1492 src/lang.c:1512 src/lang.c:1587 src/lang.c:1757
-#: src/lang.c:1763 src/lang.c:1769 src/lang.c:1775 src/lang.c:1787 src/lang.c:1794
-#: src/lang.c:1848 src/lang.c:1857 src/lang.c:1863 src/lang.c:1870 src/lang.c:1877
-#: src/lang.c:1884 src/lang.c:1891 src/lang.c:1898 src/lang.c:1905 src/lang.c:1912
-#: src/lang.c:1919 src/lang.c:1926 src/lang.c:1933 src/lang.c:1940 src/lang.c:1947
-#: src/lang.c:1954 src/lang.c:1961 src/lang.c:1968 src/lang.c:1975 src/lang.c:1982
-#: src/lang.c:1989 src/lang.c:1996 src/lang.c:2003 src/lang.c:2010 src/lang.c:2017
-#: src/lang.c:2025 src/lang.c:2041 src/lang.c:2048 src/lang.c:2055 src/lang.c:2062
-#: src/lang.c:2068 src/lang.c:2074 src/lang.c:2091 src/lang.c:2103 src/lang.c:2137
-#: src/lang.c:2190 src/lang.c:2197 src/lang.c:2203 src/lang.c:2228 src/lang.c:2245
-#: src/lang.c:2298 src/lang.c:2334 src/lang.c:2354 src/lang.c:2389 src/lang.c:2399
-#: src/lang.c:2424 src/lang.c:2440 src/lang.c:2459 src/lang.c:2472
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437 src/lang.c:1487
+#: src/lang.c:1493 src/lang.c:1503 src/lang.c:1523 src/lang.c:1598 src/lang.c:1768
+#: src/lang.c:1774 src/lang.c:1780 src/lang.c:1786 src/lang.c:1798 src/lang.c:1805
+#: src/lang.c:1859 src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916 src/lang.c:1923
+#: src/lang.c:1930 src/lang.c:1937 src/lang.c:1944 src/lang.c:1951 src/lang.c:1958
+#: src/lang.c:1965 src/lang.c:1972 src/lang.c:1979 src/lang.c:1986 src/lang.c:1993
+#: src/lang.c:2000 src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066 src/lang.c:2073
+#: src/lang.c:2079 src/lang.c:2085 src/lang.c:2102 src/lang.c:2114 src/lang.c:2148
+#: src/lang.c:2201 src/lang.c:2208 src/lang.c:2214 src/lang.c:2239 src/lang.c:2256
+#: src/lang.c:2309 src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
 msgid	"<SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"<ESPACE> change, <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1378
+#: src/lang.c:1375
 msgid	"Show mini menu & posting etiquette"
 msgstr	"Afficher le menu & l'intitulé du postage"
 
-#: src/lang.c:1379
+#: src/lang.c:1376
 msgid	"# If ON show a mini menu of useful commands at each level\n"
 	"# and posting etiquette after composing an article\n"
 msgstr	"# Si ON, affiche un mini menu des commandes utiles pour chaque\n"
 	"# niveaux et affiche les détails après la composition d'un article\n"
 
-#: src/lang.c:1384
+#: src/lang.c:1381
 msgid	"Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
 msgstr	"Afficher une brève description pour chaque groupe. <ESPACE> change & <RETOUR> "
 	"valide."
 
-#: src/lang.c:1385
+#: src/lang.c:1382
 msgid	"Show description of each newsgroup"
 msgstr	"Voir description de chaque groupe"
 
-#: src/lang.c:1386
+#: src/lang.c:1383
 msgid	"# If ON show group description text after newsgroup name at\n"
 	"# group selection level\n"
 msgstr	"# Si ON, affiche une description du groupe après son nom dans\n"
 	"# la vue de sélection des groupes\n"
 
-#: src/lang.c:1391
+#: src/lang.c:1388
 msgid	"Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
 	"sets."
 msgstr	"Affiche le sujet & l'auteur dans le menu groupe. <ESPACE> change & <RETOUR> "
 	"valide."
 
-#: src/lang.c:1392
+#: src/lang.c:1389
 msgid	"In group menu, show author by"
 msgstr	"Dans vue groupe, voir auteur par"
 
-#: src/lang.c:1393
+#: src/lang.c:1390
 msgid	"# Part of from field to display\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = none\n"
@@ -4423,32 +4483,33 @@ msgstr	"# Partie du champ from à affiche
 	"# * 2 = nom complet\n"
 	"#   3 les deux\n"
 
-#: src/lang.c:1402
+#: src/lang.c:1399
 msgid	"Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
 msgstr	"Affiche -> ou une barre de sélection. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:1403
+#: src/lang.c:1400
 msgid	"Draw -> instead of highlighted bar"
 msgstr	"Afficher -> plutôt qu'une barre"
 
-#: src/lang.c:1404
+#: src/lang.c:1401
 msgid	"# If ON use -> otherwise highlighted bar for selection\n"
 msgstr	"# Si ON, utilise -> sinon barre en surbrillance pour la sélection\n"
 
-#: src/lang.c:1409
+#: src/lang.c:1406
 msgid	"Use inverse video for page headers"
 msgstr	"Vidéo inversée pour les en-têtes"
 
-#: src/lang.c:1410
+#: src/lang.c:1407
 msgid	"# If ON use inverse video for page headers at different levels\n"
 msgstr	"# Si ON, utilise la vidéo inversée pour les en-têtes dans les différentes\n"
 	"# vues\n"
 
-#: src/lang.c:1415
+#: src/lang.c:1412
 msgid	"Thread articles by"
 msgstr	"Regrouper les articles par"
 
-#: src/lang.c:1416
+#: src/lang.c:1413
+#, fuzzy
 msgid	"# Thread articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4456,6 +4517,7 @@ msgid	"# Thread articles by ...\n"
 	"#   2 = References\n"
 	"# * 3 = Both (Subject and References)\n"
 	"#   4 = Multipart Subject\n"
+	"#   5 = Percentage Match\n"
 msgstr	"# Regrouper les articles par...\n"
 	"# Les valeurs possibles sont (celle par défaut est marquée par *) :\n"
 	"#   0 = aucun\n"
@@ -4464,11 +4526,35 @@ msgstr	"# Regrouper les articles par...\
 	"# * 3 = Les deux (Sujet et References)\n"
 	"#   4 = Sujet multipartie\n"
 
-#: src/lang.c:1427
+# TRANSLATION MISSING
+#: src/lang.c:1424
+msgid	"Enter percentage match required to thread together. <CR> sets."
+msgstr	""
+
+# TRANSLATION MISSING
+#: src/lang.c:1425
+msgid	"Thread percentage match"
+msgstr	""
+
+# TRANSLATION MISSING
+#: src/lang.c:1426
+#, c-format
+msgid	"# Thread percentage match...\n"
+	"# the percentage of characters in the subject of an article that must match\n"
+	"# a base article for both those articles to be considered to belong to the\n"
+	"# same thread. This option is an integer percentage, eg. 80, no decimals may\n"
+	"# follow. If 80 is used here, then 80%% of the characters must match "
+	"exactly,\n"
+	"# no insertion of a character, for the two articles to be put in the same\n"
+	"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+	"# 'harppy' would be threaded separately from 'happy'\n"
+msgstr	""
+
+#: src/lang.c:1438
 msgid	"Score of a thread"
 msgstr	"Score d'un fil"
 
-#: src/lang.c:1428
+#: src/lang.c:1439
 msgid	"# Thread score\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = max\n"
@@ -4480,15 +4566,15 @@ msgstr	"# Regrouper les scores\n"
 	"#   1 = somme\n"
 	"#   2 = moyenne\n"
 
-#: src/lang.c:1436
+#: src/lang.c:1447
 msgid	"Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
 msgstr	"Trie les articles d'après un en-tête. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:1437
+#: src/lang.c:1448
 msgid	"Sort articles by"
 msgstr	"Trier les articles par"
 
-#: src/lang.c:1438
+#: src/lang.c:1449
 msgid	"# Sort articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4516,15 +4602,15 @@ msgstr	"# Trie les article par...\n"
 	"#   9 = Lignes descendant\n"
 	"#  10 = Lignes ascendant)\n"
 
-#: src/lang.c:1454
+#: src/lang.c:1465
 msgid	"Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
 msgstr	"Trier les fils par Rien ou Score. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:1455
+#: src/lang.c:1466
 msgid	"Sort threads by"
 msgstr	"Trier les fils par"
 
-#: src/lang.c:1456
+#: src/lang.c:1467
 msgid	"# Sort thread by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4536,44 +4622,44 @@ msgstr	"# Trier les fils par...\n"
 	"# * 1 = Score descendant\n"
 	"#   2 = Score ascendant\n"
 
-#: src/lang.c:1464
+#: src/lang.c:1475
 msgid	"Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
 msgstr	"Place le curseur sur le 1er article non lu. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:1465
+#: src/lang.c:1476
 msgid	"Goto first unread article in group"
 msgstr	"Aller au 1er article non lu du groupe"
 
-#: src/lang.c:1466
+#: src/lang.c:1477
 msgid	"# If ON put cursor at first unread art in group otherwise last art\n"
 msgstr	"# Si ON, place le curseur sur le 1er article non lu sinon sur le dernier\n"
 
-#: src/lang.c:1470
+#: src/lang.c:1481
 msgid	"Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
 msgstr	"Affiche tous les articles ou seulement ceux non lus. <ESPACE> change & "
 	"<RETOUR> valide."
 
-#: src/lang.c:1471
+#: src/lang.c:1482
 msgid	"Show only unread articles"
 msgstr	"Afficher articles non lus seulement"
 
-#: src/lang.c:1472
+#: src/lang.c:1483
 msgid	"# If ON show only new/unread articles otherwise show all.\n"
 msgstr	"# Si ON, affiche seulement les articles non lus sinon les affiche tous.\n"
 
-#: src/lang.c:1477
+#: src/lang.c:1488
 msgid	"Show only groups with unread arts"
 msgstr	"Voir groupes avec articles non lus"
 
-#: src/lang.c:1478
+#: src/lang.c:1489
 msgid	"# If ON show only subscribed to groups that contain unread articles.\n"
 msgstr	"# Si ON, affiche seulement les groupes ayant des articles non lus.\n"
 
-#: src/lang.c:1483
+#: src/lang.c:1494
 msgid	"Filter which articles"
 msgstr	"Filtrer quel article"
 
-#: src/lang.c:1484
+#: src/lang.c:1495
 msgid	"# Filter which articles\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = only kill unread articles\n"
@@ -4585,200 +4671,200 @@ msgstr	"# Filtrer quels articles\n"
 	"#   1 = filtrer tous les articles et les marquer avec un K dans les fils\n"
 	"#   2 = filtrer tous les articles et ne pas les afficher\n"
 
-#: src/lang.c:1493
+#: src/lang.c:1504
 msgid	"Tab goes to next unread article"
 msgstr	"Tab va au prochain article non lu"
 
-#: src/lang.c:1494
+#: src/lang.c:1505
 msgid	"# If ON the TAB command will go to next unread article at article viewer "
 	"level\n"
 msgstr	"# Si ON, la touche TAB ira au prochain article non lu directement depuis le\n"
 	"# visualiseur d'article\n"
 
-#: src/lang.c:1498
+#: src/lang.c:1509
 msgid	"Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
 msgstr	"Naviguer avec <ESPACE> ira au prochain article non lu."
 
-#: src/lang.c:1499
+#: src/lang.c:1510
 msgid	"Space goes to next unread article"
 msgstr	"Espace va au prochain article non lu"
 
-#: src/lang.c:1500
+#: src/lang.c:1511
 msgid	"# If ON the SPACE command will go to next unread article at article viewer\n"
 	"# level when the end of the article is reached (rn-style pager)\n"
 msgstr	"# Si ON, ESPACE ira au prochain article non lu dans le visualiseur d'article\n"
 	"# lorsque la fin d'un article sera atteinte (pager style rn)\n"
 
-#: src/lang.c:1505
+#: src/lang.c:1516
 msgid	"Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
 msgstr	"Naviguer avec <PGDN>/<BAS> ira au prochain article non lu."
 
-#: src/lang.c:1506
+#: src/lang.c:1517
 msgid	"PgDn goes to next unread article"
 msgstr	"PgDn va au prochain article non lu"
 
-#: src/lang.c:1507
+#: src/lang.c:1518
 msgid	"# If ON the PGDN or DOWN command will go to next unread article when\n"
 	"# pressed at end of message\n"
 msgstr	"# Si ON, les touches PGDN ou BAS iront au prochain article non lu\n"
 	"# lorsque la fin d'un article sera atteinte\n"
 
-#: src/lang.c:1513
+#: src/lang.c:1524
 msgid	"List thread using right arrow key"
 msgstr	"Lister le fil via la flèche droite"
 
-#: src/lang.c:1514
+#: src/lang.c:1525
 msgid	"# If ON automatically list thread when entering it using right arrow key.\n"
 msgstr	"# Si ON, listera automatiquement le fil lors de l'utilisation de la flèche\n"
 	"# droite.\n"
 
-#: src/lang.c:1518
+#: src/lang.c:1529
 msgid	"Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles effacés. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1519
+#: src/lang.c:1530
 msgid	"Character to show deleted articles"
 msgstr	"Caractère pour articles effacés"
 
-#: src/lang.c:1520
+#: src/lang.c:1531
 msgid	"# Character used to show that an art was deleted (default 'D')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article a été supprimé (défaut 'D')\n"
 	"# _ est transformé en ' '\n"
 
-#: src/lang.c:1525
+#: src/lang.c:1536
 msgid	"Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles inclus. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1526
+#: src/lang.c:1537
 msgid	"Character to show inrange articles"
 msgstr	"Caractère pour articles non inclus"
 
-#: src/lang.c:1527
+#: src/lang.c:1538
 msgid	"# Character used to show that an art is in a range (default '#')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article est inclus (défaut '#')\n"
 	"# _ est transformé en ' '\n"
 
-#: src/lang.c:1532
+#: src/lang.c:1543
 msgid	"Enter character to indicate that article will return. <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Caractère indiquant que l'article sera retourné. <RETOUR> valide, <ESC> "
 	"annule."
 
-#: src/lang.c:1533
+#: src/lang.c:1544
 msgid	"Character to show returning arts"
 msgstr	"Caractère pour articles retournés"
 
-#: src/lang.c:1534
+#: src/lang.c:1545
 msgid	"# Character used to show that an art will return (default '-')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article sera retourné (défaut '#')\n"
 	"# _ est transformé en ' '\n"
 
-#: src/lang.c:1539
+#: src/lang.c:1550
 msgid	"Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles sélectionnés. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1540
+#: src/lang.c:1551
 msgid	"Character to show selected articles"
 msgstr	"Caractère pour articles sélect."
 
-#: src/lang.c:1541
+#: src/lang.c:1552
 msgid	"# Character used to show that an art was auto-selected (default '*')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article fut sélectionné (defaut '*')\n"
 	"# _est transformé en ' '\n"
 
-#: src/lang.c:1546
+#: src/lang.c:1557
 msgid	"Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles récents. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1547
+#: src/lang.c:1558
 msgid	"Character to show recent articles"
 msgstr	"Caractère pour articles récents"
 
-#: src/lang.c:1548
+#: src/lang.c:1559
 msgid	"# Character used to show that an art is recent (default 'o')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article est récent (defaut 'o')\n"
 	"# _est transformé en ' '\n"
 
-#: src/lang.c:1553
+#: src/lang.c:1564
 msgid	"Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles non lus. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1554
+#: src/lang.c:1565
 msgid	"Character to show unread articles"
 msgstr	"Caractère pour articles non lus"
 
-#: src/lang.c:1555
+#: src/lang.c:1566
 msgid	"# Character used to show that an art is unread (default '+')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article est non lu (defaut '+')\n"
 	"# _est transformé en ' '\n"
 
-#: src/lang.c:1560
+#: src/lang.c:1571
 msgid	"Enter character to indicate read articles. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles lus. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1561
+#: src/lang.c:1572
 msgid	"Character to show read articles"
 msgstr	"Caractère pour articles lus"
 
-#: src/lang.c:1562
+#: src/lang.c:1573
 msgid	"# Character used to show that an art was read (default ' ')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article a été lu (defaut ' ')\n"
 	"# _est transformé en ' '\n"
 
-#: src/lang.c:1567
+#: src/lang.c:1578
 msgid	"Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles filtrés. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1568
+#: src/lang.c:1579
 msgid	"Character to show killed articles"
 msgstr	"Caractère pour articles filtrés"
 
-#: src/lang.c:1569
+#: src/lang.c:1580
 msgid	"# Character used to show that an art was killed (default 'K')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr	"# Caractère utilisé pour indiquer qu'un article a été filtré (defaut 'K')\n"
 	"# kill_level doit être choisi en conséquence, _ est transformé en ' '\n"
 
-#: src/lang.c:1574
+#: src/lang.c:1585
 msgid	"Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Caractère indiquant les articles lus et sélectionnés. <RETOUR> valide, <ESC> "
 	"annule."
 
-#: src/lang.c:1575
+#: src/lang.c:1586
 msgid	"Character to show readselected arts"
 msgstr	"Caractère pour articles sélectionnés lus"
 
-#: src/lang.c:1576
+#: src/lang.c:1587
 msgid	"# Character used to show that an art was selected before read (default ':')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
-msgstr	"# Caractère utilisé pour indiquer qu'un article était sélectionné avec d'être "
-	"lu (defaut ':')\n"
+msgstr	"# Caractère utilisé pour indiquer qu'un article était sélectionné avec\n"
+	"# d'être lu (defaut ':')\n"
 	"# kill_level doit être choisi en conséquence, _ est transformé en ' '\n"
 
-#: src/lang.c:1581
+#: src/lang.c:1592
 msgid	"Enter maximum length of newsgroup names displayed. <CR> sets."
 msgstr	"Largeur max. à afficher des noms des groupes. <RETOUR> valide."
 
-#: src/lang.c:1582
+#: src/lang.c:1593
 msgid	"Max. length of group names shown"
 msgstr	"Largeur max. des noms des groupes"
 
-#: src/lang.c:1583
+#: src/lang.c:1594
 msgid	"# Maximum length of the names of newsgroups displayed\n"
 msgstr	"# Largeur maximum à afficher des noms des groupes.\n"
 
-#: src/lang.c:1588
+#: src/lang.c:1599
 msgid	"Show lines/score in listings"
 msgstr	"Afficher dans les différentes vues"
 
-#: src/lang.c:1589
+#: src/lang.c:1600
 msgid	"# What informations should be displayed in article/thread listing\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -4792,17 +4878,17 @@ msgstr	"# Quelles informations doivent ê
 	"#   2 = score\n"
 	"#   3 = lignes & score\n"
 
-#: src/lang.c:1598
-msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, "
-	"-2 = half page"
+#: src/lang.c:1609
+msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, -"
+	"2 = half page"
 msgstr	"0 = défilement page par page, -1 = afficher dernière ligne dans page "
 	"suivante, -2 = demi-page"
 
-#: src/lang.c:1599
+#: src/lang.c:1610
 msgid	"Number of lines to scroll in pager"
 msgstr	"Vitesse de défilement dans le pager"
 
-#: src/lang.c:1600
+#: src/lang.c:1611
 msgid	"# Number of lines that cursor-up/down will scroll in article pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#  -2 = half-page scrolling\n"
@@ -4818,29 +4904,29 @@ msgstr	"# Type du défilement lors de la 
 	"# * 1 = ligne par ligne\n"
 	"#   2 ou plus = défiler 2 lignes par 2 ou plus (seulement dans le pager)\n"
 
-#: src/lang.c:1610
+#: src/lang.c:1621
 msgid	"Display signatures. <SPACE> toggles & <CR> sets."
 msgstr	"Affiche les signatures. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:1611
+#: src/lang.c:1622
 msgid	"Display signatures"
 msgstr	"Afficher les signatures"
 
-#: src/lang.c:1612
+#: src/lang.c:1623
 msgid	"# If OFF don't show signatures when displaying articles\n"
-msgstr	"# Si OFF ne pas afficher les signatures lors de la visualisation\n"
-	"# des articles.\n"
+msgstr	"# Si OFF ne pas afficher les signatures lors de la visualisation des "
+	"articles.\n"
 
-#: src/lang.c:1616
+#: src/lang.c:1627
 msgid	"Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
 msgstr	"Afficher les archives uue comme PJ marquées. <ESPACE> change & <RETOUR> "
 	"valide."
 
-#: src/lang.c:1617
+#: src/lang.c:1628
 msgid	"Display uue data as an attachment"
 msgstr	"Afficher donnée uue comme PJ"
 
-#: src/lang.c:1618
+#: src/lang.c:1629
 msgid	"# Handling of uuencoded data in the pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no, display raw uuencoded data\n"
@@ -4851,57 +4937,55 @@ msgid	"# Handling of uuencoded data in t
 msgstr	"# Prise en charge des données uuencode dans le pager\n"
 	"# Les valeurs possibles sont (celle par défaut est marquée par *) :\n"
 	"# * 0 = aucune, affichage brut des données uuencode\n"
-	"#   1 = oui, les données uuencode seront condensée dans une seule ligne "
-	"affichant\n"
-	"#       la taille et le fichier, comme sont affichées les pj MIME\n"
-	"#   2 = masquer, comme pour l'option 1, mais toute ligne qui ressemble à des "
-	"données\n"
-	"#       uuencode sera condensée en une seule ligne.\n"
+	"#   1 = oui, les données uuencode seront condensée dans une seule ligne\n"
+	"#       affichant la taille et le fichier, comme sont affichées les pj MIME\n"
+	"#   2 = masquer, comme pour l'option 1, mais toute ligne qui ressemble à des\n"
+	"#       données uuencode sera condensée en une seule ligne.\n"
 
-#: src/lang.c:1628
+#: src/lang.c:1639
 msgid	"Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
 msgstr	"Décode les umlauts Allemands de type TeX en ISO. <ESPACE> change & <RETOUR> "
 	"valide."
 
-#: src/lang.c:1629
+#: src/lang.c:1640
 msgid	"Display \"a as Umlaut-a"
 msgstr	"Afficher \"a comme Umlaut-a"
 
-#: src/lang.c:1630
+#: src/lang.c:1641
 msgid	"# If ON decode German style TeX umlaut codes to ISO and\n"
 	"# show \"a as Umlaut-a, etc.\n"
 msgstr	"# Si ON, convertit les umlauts Allemands de type TeX en codes ISO\n"
 	"# et affiche \"a comme Umlaut-a, etc.\n"
 
-#: src/lang.c:1635 src/lang.c:1645
+#: src/lang.c:1646 src/lang.c:1656
 msgid	"Space separated list of header fields"
 msgstr	"Liste des en-têtes, séparés par des espaces"
 
-#: src/lang.c:1636
+#: src/lang.c:1647
 msgid	"Display these header fields (or *)"
 msgstr	"Afficher ces en-têtes (ou *)"
 
-#: src/lang.c:1637
+#: src/lang.c:1648
 msgid	"# Which news headers you wish to see. If you want to see _all_ the headers,\n"
 	"# place an '*' as this value. This is the only way a wildcard can be used.\n"
 	"# If you enter 'X-' as the value, you will see all headers beginning with\n"
 	"# 'X-' (like X-Alan or X-Pape). You can list more than one by delimiting "
 	"with\n"
 	"# spaces. Not defining anything turns off this option.\n"
-msgstr	"# Quels en-têtes voulez-vous voir. Si vous souhaitez voir _tout_ les "
-	"en-têtes,\n"
-	"# utilisez '*' comme valeur. C'est le seul moyen d'utiliser un caractère "
-	"joker ici.\n"
-	"# Si vous entrez 'X-' comme valeur, vous verrez tous les en-têtes commençant\n"
-	"# par 'X-' (comme X-Alan ou X-Pape). Vous pouvez afficher plusieurs en-têtes\n"
-	"# en les délimitant avec des espaces. Ne rien définir, désactive cette "
-	"option.\n"
+msgstr	"# Quels en-têtes voulez-vous voir. Si vous souhaitez voir _tout_ les en-"
+	"têtes,\n"
+	"# utilisez '*' comme valeur. C'est le seul moyen d'utiliser un caractère\n"
+	"# joker ici. Si vous entrez 'X-' comme valeur, vous verrez tous les en-têtes\n"
+	"# commençant par 'X-' (comme X-Alan ou X-Pape). Vous pouvez afficher "
+	"plusieurs\n"
+	"# en-têtes en les délimitant avec des espaces. Ne rien définir, désactive\n"
+	"# cette option.\n"
 
-#: src/lang.c:1646
+#: src/lang.c:1657
 msgid	"Do not display these header fields"
 msgstr	"Ne pas afficher ces en-têtes"
 
-#: src/lang.c:1647
+#: src/lang.c:1658
 msgid	"# Same as 'news_headers_to_display' except it denotes the opposite.\n"
 	"# An example of using both options might be if you thought X- headers were\n"
 	"# A Good Thing(tm), but thought Alan and Pape were miscreants...well then "
@@ -4914,36 +4998,35 @@ msgstr	"# Comme l'option 'news_headers_t
 	"contraire.\n"
 	"# Un exemple d'utilisation de ces deux options pourrait que vous trouviez "
 	"les\n"
-	"# en-têtes 'X-' intéressantes mais celles contenant 'Alan' et 'Pape' "
-	"inutiles...\n"
-	"# donc voici ce que vous pourriez alors faire :\n"
+	"# en-têtes 'X-' intéressantes mais celles contenant 'Alan' et 'Pape'\n"
+	"# inutiles... donc voici ce que vous pourriez alors faire :\n"
 	"# news_headers_to_display=X-\n"
 	"# news_headers_to_not_display=X-Alan X-Pape\n"
 	"# Ne rien définir, désactive cette option.\n"
 
-#: src/lang.c:1657
+#: src/lang.c:1668
 msgid	"Do you want to enable automatic handling of multipart/alternative articles?"
-msgstr	"Voulez-vous activer la prise en charge automatique des articles "
-	"multipart/alternative ?"
+msgstr	"Voulez-vous activer la prise en charge automatique des articles multipart/"
+	"alternative ?"
 
-#: src/lang.c:1658
+#: src/lang.c:1669
 msgid	"Skip multipart/alternative parts"
 msgstr	"Ignorer parties multipart/alter."
 
-#: src/lang.c:1659
+#: src/lang.c:1670
 msgid	"# If ON strip multipart/alternative messages automatically\n"
 msgstr	"# Si ON, enlève automatiquement les messages multipart/alternative\n"
 
-#: src/lang.c:1664
+#: src/lang.c:1675
 msgid	"A regex used to decide which lines to show in col_quote."
 msgstr	"Une expression régulière pour déterminer quelles lignes afficher dans "
 	"col_quote."
 
-#: src/lang.c:1665
+#: src/lang.c:1676
 msgid	"Regex used to show quoted lines"
 msgstr	"Regex pour afficher les citations"
 
-#: src/lang.c:1666
+#: src/lang.c:1677
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4951,16 +5034,16 @@ msgstr	"# Une expression régulière qui p
 	"# Les citations sont affichées dans col_quote. Si vous laissez ce champ\n"
 	"# vide, tin utilisera une valeur incluse par défaut.\n"
 
-#: src/lang.c:1672
+#: src/lang.c:1683
 msgid	"A regex used to decide which lines to show in col_quote2."
 msgstr	"Une expression régulière pour déterminer quelles lignes afficher dans "
 	"col_quote2."
 
-#: src/lang.c:1673
+#: src/lang.c:1684
 msgid	"Regex used to show twice quoted l."
 msgstr	"Regex pour afficher le 2nd niveau"
 
-#: src/lang.c:1674
+#: src/lang.c:1685
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted twice. Twice quoted lines are shown in col_quote2.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4968,16 +5051,16 @@ msgstr	"# Une expression régulière qui p
 	"# second niveau. Ces citations sont affichées dans col_quote2. Si vous\n"
 	"# laissez ce champ vide, tin utilisera une valeur incluse par défaut.\n"
 
-#: src/lang.c:1680
+#: src/lang.c:1691
 msgid	"A regex used to decide which lines to show in col_quote3."
 msgstr	"Une expression régulière pour déterminer quelles lignes afficher dans "
 	"col_quote3."
 
-#: src/lang.c:1681
+#: src/lang.c:1692
 msgid	"Regex used to show >= 3 times q.l."
 msgstr	"Regex pour afficher niveau >= 3"
 
-#: src/lang.c:1682
+#: src/lang.c:1693
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -4987,16 +5070,16 @@ msgstr	"# Une expression régulière qui p
 	"# Si vous laissez ce champ vide, tin utilisera une valeur incluse par "
 	"défaut.\n"
 
-#: src/lang.c:1689
+#: src/lang.c:1700
 msgid	"A regex used to decide which words to show in col_markslashes."
 msgstr	"Une expression régulière pour déterminer quels mots afficher dans "
 	"col_markslashes."
 
-#: src/lang.c:1690
+#: src/lang.c:1701
 msgid	"Regex used to highlight /slashes/"
 msgstr	"Regex pour les mots entre /slash/"
 
-#: src/lang.c:1691
+#: src/lang.c:1702
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '/' are to be shown in col_markslashes.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5005,16 +5088,16 @@ msgstr	"# Une expression régulière qui p
 	"# Si vous laissez ce champ vide, tin utilisera une valeur incluse par "
 	"défaut.\n"
 
-#: src/lang.c:1697
+#: src/lang.c:1708
 msgid	"A regex used to decide which words to show in col_markstars."
 msgstr	"Une expression régulière pour déterminer quels mots afficher dans "
 	"col_markstars."
 
-#: src/lang.c:1698
+#: src/lang.c:1709
 msgid	"Regex used to highlight *stars*"
 msgstr	"Regex pour les mots entre *astérisques*"
 
-#: src/lang.c:1699
+#: src/lang.c:1710
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '*' are to be shown in col_markstars.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5023,16 +5106,16 @@ msgstr	"# Une expression régulière qui p
 	"# Si vous laissez ce champ vide, tin utilisera une valeur incluse par "
 	"défaut.\n"
 
-#: src/lang.c:1705
+#: src/lang.c:1716
 msgid	"A regex used to decide which words to show in col_markstroke."
 msgstr	"Une expression régulière pour déterminer quels mots afficher dans "
 	"col_markstroke."
 
-#: src/lang.c:1706
+#: src/lang.c:1717
 msgid	"Regex used to highlight -strokes-"
 msgstr	"Regex pour les mots entre -tirets-"
 
-#: src/lang.c:1707
+#: src/lang.c:1718
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '-' are to be shown in col_markstroke.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5041,16 +5124,16 @@ msgstr	"# Une expression régulière qui p
 	"# Si vous laissez ce champ vide, tin utilisera une valeur incluse par "
 	"défaut.\n"
 
-#: src/lang.c:1713
+#: src/lang.c:1724
 msgid	"A regex used to decide which words to show in col_markdash."
 msgstr	"Une expression régulière pour déterminer quels mots afficher dans "
 	"col_markdash."
 
-#: src/lang.c:1714
+#: src/lang.c:1725
 msgid	"Regex used to highlight _underline_"
 msgstr	"Regex pour les mots entre _underscore_"
 
-#: src/lang.c:1715
+#: src/lang.c:1726
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '_' are to be shown in col_markdash.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
@@ -5059,47 +5142,47 @@ msgstr	"# Une expression régulière qui p
 	"# Si vous laissez ce champ vide, tin utilisera une valeur incluse par "
 	"défaut.\n"
 
-#: src/lang.c:1721
+#: src/lang.c:1732
 msgid	"A regex used to find Subject prefixes to remove.  Use '|' as separator."
 msgstr	"Une expression régulière pour trouver les préfixes dans le sujet. '|' est un "
 	"séparateur."
 
-#: src/lang.c:1722
+#: src/lang.c:1733
 msgid	"Regex with Subject prefixes"
 msgstr	"Regex pour les préfixes dans le sujet"
 
-#: src/lang.c:1723
+#: src/lang.c:1734
 msgid	"# A regular expression that tin will use to find Subject prefixes\n"
 	"# which will be removed before showing the header.\n"
 msgstr	"# Une expression régulière qui permettra à tin de trouver les préfixes\n"
 	"# dans le sujet et qui seront effacés avant d'afficher l'en-tête.\n"
 
-#: src/lang.c:1728
+#: src/lang.c:1739
 msgid	"A regex used to find Subject suffixes to remove.  Use '|' as separator."
 msgstr	"Une expression régulière pour trouver les suffixes dans le sujet. '|' est un "
 	"séparateur."
 
-#: src/lang.c:1729
+#: src/lang.c:1740
 msgid	"Regex with Subject suffixes"
 msgstr	"Regex pour les suffixes dans le sujet"
 
-#: src/lang.c:1730
+#: src/lang.c:1741
 msgid	"# A regular expression that tin will use to find Subject suffixes\n"
 	"# which will be removed when replying or posting followup.\n"
 msgstr	"# Une expression régulière qui permettra à tin de trouver les suffixes\n"
 	"# dans le sujet et qui seront effacés avant d'afficher l'en-tête.\n"
 
-#: src/lang.c:1735
+#: src/lang.c:1746
 msgid	"Enter name and options for external MIME viewer, --internal for built-in "
 	"viewer"
 msgstr	"Nom et options pour le visualisateur MIME externe, --internal pour celui "
 	"inclus"
 
-#: src/lang.c:1736
+#: src/lang.c:1747
 msgid	"MIME binary content viewer"
 msgstr	"Visualisateur de contenu MIME"
 
-#: src/lang.c:1737
+#: src/lang.c:1748
 msgid	"# If --internal automatically use the built in MIME viewer for non-text\n"
 	"# parts of articles.\n"
 	"# Otherwise specify an external viewer program (eg, metamail) or leave blank\n"
@@ -5109,129 +5192,129 @@ msgstr	"# Utilisation du visualisateur M
 	"# Sinon, spécifiez un logiciel externe (pe. metamail) ou laissez ce champ\n"
 	"# vide pour ne pas activer la prévisualisation automatique.\n"
 
-#: src/lang.c:1744
+#: src/lang.c:1755
 msgid	"Confirm before starting non-text viewing program"
 msgstr	"Confirmation avant le lancement d'un visualisateur externe"
 
-#: src/lang.c:1745
+#: src/lang.c:1756
 msgid	"Ask before using MIME viewer"
 msgstr	"Demander avant d'utiliser le visualisateur"
 
-#: src/lang.c:1746
+#: src/lang.c:1757
 msgid	"# If ON tin will ask before using metamail to display MIME messages\n"
 	"# this only happens if metamail_prog is set to something\n"
 msgstr	"# Si ON, tin demandera avant d'utiliser metamail pour afficher les\n"
 	"# messages MIME\n"
 	"# Cela ne se produit que lorsque 'metamail_prog' contient une valeur\n"
 
-#: src/lang.c:1751
+#: src/lang.c:1762
 msgid	"Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
 msgstr	"Marquer lu les groupes à la fermeture ? <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:1752
+#: src/lang.c:1763
 msgid	"Catchup read groups when quitting"
 msgstr	"Marquer lu les groupes à la fermeture"
 
-#: src/lang.c:1753
+#: src/lang.c:1764
 msgid	"# If ON ask user if read groups should all be marked read\n"
 msgstr	"# Si ON, demande à l'utilisateur si les groupes consultés\n"
 	"# doivent être marqués lus\n"
 
-#: src/lang.c:1758
+#: src/lang.c:1769
 msgid	"Catchup group using left key"
 msgstr	"Marquer lu le groupe via la flèche gauche"
 
-#: src/lang.c:1759
+#: src/lang.c:1770
 msgid	"# If ON catchup group/thread when leaving with the left arrow key.\n"
 msgstr	"# Si ON, marque lu avec <- le groupe/fil.\n"
 
-#: src/lang.c:1764
+#: src/lang.c:1775
 msgid	"Catchup thread by using left key"
 msgstr	"Marquer lu le fil via la flèche gauche"
 
-#: src/lang.c:1770
+#: src/lang.c:1781
 msgid	"Which actions require confirmation"
 msgstr	"Quelles actions requièrent confirmation"
 
-#: src/lang.c:1771
+#: src/lang.c:1782
 msgid	"# What should we ask confirmation for.\n"
 msgstr	"# Demande de confirmation pour...\n"
 
-#: src/lang.c:1776
+#: src/lang.c:1787
 msgid	"'Mark article read' ignores tags"
 msgstr	"'Marquer lu l'article' ignore les marques"
 
-#: src/lang.c:1777
+#: src/lang.c:1788
 msgid	"# If ON the 'Mark article read' function marks only the current article.\n"
 msgstr	"# Si ON, la fonction 'Marquer lu l'article' agit uniquement sur l'article\n"
 	"# actuel.\n"
 
-#: src/lang.c:1781
+#: src/lang.c:1792
 msgid	"Program to run to open URL's, <CR> sets, <ESC> cancels."
 msgstr	"Logiciel utilisé pour lancer les URLs, <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:1782
+#: src/lang.c:1793
 msgid	"Program that opens URL's"
 msgstr	"Logiciel lançant les URLs"
 
-#: src/lang.c:1783
+#: src/lang.c:1794
 msgid	"# The program used to open URL's. The actual URL will be appended\n"
 msgstr	"# Commande ou script ouvrant les URLs. L'URL sera ajoutée\n"
 
-#: src/lang.c:1788
+#: src/lang.c:1799
 msgid	"Use mouse in xterm"
 msgstr	"Utiliser la souris dans l'xterm"
 
-#: src/lang.c:1789
+#: src/lang.c:1800
 msgid	"# If ON enable mouse key support on xterm terminals\n"
 msgstr	"# Si ON, active le support de la souris dans xterm\n"
 
-#: src/lang.c:1795
+#: src/lang.c:1806
 msgid	"Use scroll keys on keypad"
 msgstr	"Utiliser les flèches du pavé numérique"
 
-#: src/lang.c:1796
+#: src/lang.c:1807
 msgid	"# If ON enable scroll keys on terminals that support it\n"
 msgstr	"# Si ON, active les flèches de défilement pour les terminaux\n"
 	"# les supportant\n"
 
-#: src/lang.c:1801
+#: src/lang.c:1812
 msgid	"Enter maximum number of article to get. <CR> sets."
 msgstr	"Nombre max d'articles à récupérer. <RETOUR> valide."
 
-#: src/lang.c:1802
+#: src/lang.c:1813
 msgid	"Number of articles to get"
 msgstr	"Nombre d'articles à récupérer"
 
 # AMBIGUOUS
-#: src/lang.c:1803
+#: src/lang.c:1814
 msgid	"# Number of articles to get (0=no limit), if negative sets maximum number\n"
 	"# of already read articles to be read before first unread one\n"
 msgstr	"# Nombre d'articles à récupérer (0=pas de limite); si le nombre est négatif\n"
 	"# détermine le nombre max d'articles déjà lus à relire avant le premier non "
 	"lu\n"
 
-#: src/lang.c:1808
+#: src/lang.c:1819
 msgid	"Enter number of days article is considered recent. <CR> sets."
 msgstr	"Nombre de jours un article est considéré comme récent. <RETOUR> valide."
 
-#: src/lang.c:1809
+#: src/lang.c:1820
 msgid	"Article recentness time limit"
 msgstr	"Durée des articles considérés comme récents"
 
-#: src/lang.c:1810
+#: src/lang.c:1821
 msgid	"# Number of days in which article is considered recent, (0=OFF)\n"
 msgstr	"# Nombre de jours un article est considéré comme récent; (0=OFF)\n"
 
-#: src/lang.c:1814
+#: src/lang.c:1825
 msgid	"WILDMAT for normal wildcards, REGEX for full regular expression matching."
 msgstr	"WILDMAT pour les wildcards normaux, REGEX pour expressions régulières."
 
-#: src/lang.c:1815
+#: src/lang.c:1826
 msgid	"Wildcard matching"
 msgstr	"Concordance wildcard"
 
-#: src/lang.c:1816
+#: src/lang.c:1827
 msgid	"# Wildcard matching\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = wildmat\n"
@@ -5241,307 +5324,307 @@ msgstr	"# Concordances Wildcard\n"
 	"# * 0 = wildmat\n"
 	"#   1 = regex\n"
 
-#: src/lang.c:1823
+#: src/lang.c:1834
 msgid	"Enter minimal score before an article is marked killed. <CR> sets."
 msgstr	"Score minimal avant qu'un article soit filtré. <RETOUR> valide."
 
-#: src/lang.c:1824
+#: src/lang.c:1835
 msgid	"Score limit (kill)"
 msgstr	"Score minimum (filtre)"
 
-#: src/lang.c:1825
+#: src/lang.c:1836
 msgid	"# Score limit before an article is marked killed\n"
 msgstr	"# Score minimal avant qu'un article soit filtré\n"
 
-#: src/lang.c:1829
+#: src/lang.c:1840
 msgid	"Enter default score to kill articles. <CR> sets."
 msgstr	"Score par défaut pour filtrer les articles. <RETOUR> valide."
 
-#: src/lang.c:1830
+#: src/lang.c:1841
 msgid	"Default score to kill articles"
 msgstr	"Score par déf. pour filtrer les articles"
 
-#: src/lang.c:1831
+#: src/lang.c:1842
 msgid	"# Default score to kill articles\n"
 msgstr	"# Score par défaut pour filtrer les articles\n"
 
-#: src/lang.c:1835
+#: src/lang.c:1846
 msgid	"Enter minimal score before an article is marked hot. <CR> sets."
 msgstr	"Score minimal avant qu'un article soit sélectionné. <RETOUR> valide."
 
-#: src/lang.c:1836
+#: src/lang.c:1847
 msgid	"Score limit (select)"
 msgstr	"Score minimum (sélection)"
 
-#: src/lang.c:1837
+#: src/lang.c:1848
 msgid	"# Score limit before an article is marked hot\n"
 msgstr	"# Score minimal avant qu'un article soit sélectionné\n"
 
-#: src/lang.c:1841
+#: src/lang.c:1852
 msgid	"Enter default score to select articles. <CR> sets."
 msgstr	"Score par défaut pour la sélection des articles. <RETOUR> valide."
 
-#: src/lang.c:1842
+#: src/lang.c:1853
 msgid	"Default score to select articles"
 msgstr	"Score par défaut pour sél. les articles"
 
-#: src/lang.c:1843
+#: src/lang.c:1854
 msgid	"# Default score to select articles\n"
 msgstr	"# Score par défaut pour sélectionner les articles\n"
 
-#: src/lang.c:1849
+#: src/lang.c:1860
 msgid	"Use slrnface to show ''X-Face:''s"
 msgstr	"Utiliser slrnface pour afficher les 'X-Face:'"
 
-#: src/lang.c:1850
+#: src/lang.c:1861
 msgid	"# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
 	"# Only useful when running in an xterm.\n"
 msgstr	"# Si ON, utiliser slrnface(1) pour interpréter l'en-tête 'X-Face:'\n"
 	"# Seulement utile lors de l'utilisation de tin dans un xterm.\n"
 
-#: src/lang.c:1858
+#: src/lang.c:1869
 msgid	"Use ANSI color"
 msgstr	"Utiliser les couleurs ANSI"
 
-#: src/lang.c:1859
+#: src/lang.c:1870
 msgid	"# If ON using ANSI-color\n"
 msgstr	"# Si ON, utiliser les couleurs ANSI\n"
 
-#: src/lang.c:1864
+#: src/lang.c:1875
 msgid	"Standard foreground color"
 msgstr	"Couleur standard de l'avant-plan"
 
-#: src/lang.c:1865
+#: src/lang.c:1876
 msgid	"# Standard foreground color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Couleur standard de l'avant-plan\n"
 	"# Défaut : -1 (défaut couleur)\n"
 
-#: src/lang.c:1871
+#: src/lang.c:1882
 msgid	"Standard background color"
 msgstr	"Couleur standard de l'arrière-plan"
 
-#: src/lang.c:1872
+#: src/lang.c:1883
 msgid	"# Standard background color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Couleur standard de l'arrière-plan\n"
 	"# Défaut : -1 (défaut couleur)\n"
 
-#: src/lang.c:1878
+#: src/lang.c:1889
 msgid	"Color for inverse text (background)"
 msgstr	"Couleur du texte inversé (arrière-plan)"
 
-#: src/lang.c:1879
+#: src/lang.c:1890
 msgid	"# Color of background for inverse text\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Couleur de l'arrière-plan pour le texte inversé\n"
 	"# Défaut : 4 (bleu)\n"
 
-#: src/lang.c:1885
+#: src/lang.c:1896
 msgid	"Color for inverse text (foreground)"
 msgstr	"Couleur du texte inversé (avant-plan)"
 
-#: src/lang.c:1886
+#: src/lang.c:1897
 msgid	"# Color of foreground for inverse text\n"
 	"# Default: 7 (white)\n"
 msgstr	"# Couleur de l'avant-plan du texte inversé\n"
 	"# Défaut : 7 (blanc)\n"
 
-#: src/lang.c:1892
+#: src/lang.c:1903
 msgid	"Color of text lines"
 msgstr	"Couleur du texte"
 
-#: src/lang.c:1893
+#: src/lang.c:1904
 msgid	"# Color of text lines\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Couleur du texte\n"
 	"# Défaut : -1 (défaut couleur)\n"
 
-#: src/lang.c:1899
+#: src/lang.c:1910
 msgid	"Color of mini help menu"
 msgstr	"Couleur du petit menu d'aide"
 
-#: src/lang.c:1900
+#: src/lang.c:1911
 msgid	"# Color of mini help menu\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Couleur du petit menu d'aide\n"
 	"# Défaut : 3 (marron)\n"
 
-#: src/lang.c:1906
+#: src/lang.c:1917
 msgid	"Color of help text"
 msgstr	"Couleur de l'aide"
 
-#: src/lang.c:1907
+#: src/lang.c:1918
 msgid	"# Color of help pages\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Couleur des pages d'aide\n"
 	"# Défaut : -1 (couleur par défaut)\n"
 
-#: src/lang.c:1913
+#: src/lang.c:1924
 msgid	"Color of status messages"
 msgstr	"Couleur des messages de statut"
 
-#: src/lang.c:1914
+#: src/lang.c:1925
 msgid	"# Color of messages in last line\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Couleur des messages de statut\n"
 	"# Défaut : 6 (cyan)\n"
 
-#: src/lang.c:1920
+#: src/lang.c:1931
 msgid	"Color of quoted lines"
 msgstr	"Couleur de citation de 1er niveau"
 
-#: src/lang.c:1921
+#: src/lang.c:1932
 msgid	"# Color of quote-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Couleur de citation de premier niveau\n"
 	"# Défaut : 2 (vert)\n"
 
-#: src/lang.c:1927
+#: src/lang.c:1938
 msgid	"Color of twice quoted line"
 msgstr	"Couleur de citation de 2nd niveau"
 
-#: src/lang.c:1928
+#: src/lang.c:1939
 msgid	"# Color of twice quoted lines\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Couleur de citation de second niveau\n"
 	"# Défaut : 3 (marron)\n"
 
-#: src/lang.c:1934
+#: src/lang.c:1945
 msgid	"Color of =>3 times quoted line"
 msgstr	"Couleur de citation de 3e niveau ou sup."
 
-#: src/lang.c:1935
+#: src/lang.c:1946
 msgid	"# Color of >=3 times quoted lines\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Couleur de citation de 3e niveau ou supérieur\n"
 	"# Défaut : 4 (bleu)\n"
 
-#: src/lang.c:1941
+#: src/lang.c:1952
 msgid	"Color of article header lines"
 msgstr	"Couleur des en-têtes de l'article"
 
-#: src/lang.c:1942
+#: src/lang.c:1953
 msgid	"# Color of header-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Couleur des en-têtes de l'article\n"
 	"# Défaut : 2 (vert)\n"
 
-#: src/lang.c:1948
+#: src/lang.c:1959
 msgid	"Color of actual news header fields"
 msgstr	"Couleur des champs d'en-tête actuels"
 
-#: src/lang.c:1949
+#: src/lang.c:1960
 msgid	"# Color of actual news header fields\n"
 	"# Default: 9 (light red)\n"
 msgstr	"# Couleur des champs d'en-têtes actuels\n"
 	"# Défaut : 9 (rouge gras)\n"
 
-#: src/lang.c:1955
+#: src/lang.c:1966
 msgid	"Color of article subject lines"
 msgstr	"Couleur du sujet"
 
-#: src/lang.c:1956
+#: src/lang.c:1967
 msgid	"# Color of article subject\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Couleur du sujet\n"
 	"# Défaut : 6 (cyan)\n"
 
-#: src/lang.c:1962
+#: src/lang.c:1973
 msgid	"Color of response counter"
 msgstr	"Couleur du compteur de réponse"
 
-#: src/lang.c:1963
+#: src/lang.c:1974
 msgid	"# Color of response counter\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Couleur du compteur de réponse\n"
 	"# Défaut : 2 (vert)\n"
 
-#: src/lang.c:1969
+#: src/lang.c:1980
 msgid	"Color of sender (From:)"
 msgstr	"Couleur de l'expéditeur (From:)"
 
-#: src/lang.c:1970
+#: src/lang.c:1981
 msgid	"# Color of sender (From:)\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Couleur de l'expéditeur (From:)\n"
 	"# Défaut : 2 (vert)\n"
 
-#: src/lang.c:1976
+#: src/lang.c:1987
 msgid	"Color of help/mail sign"
 msgstr	"Couleur de l'aide/signature email"
 
-#: src/lang.c:1977
+#: src/lang.c:1988
 msgid	"# Color of Help/Mail-Sign\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Couleur de l'aide/signature email\n"
 	"# Défaut : 4 (bleu)\n"
 
-#: src/lang.c:1983
+#: src/lang.c:1994
 msgid	"Color of signatures"
 msgstr	"Couleur des signatures"
 
-#: src/lang.c:1984
+#: src/lang.c:1995
 msgid	"# Color of signature\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Couleur des signatures\n"
 	"# Défaut : 4 (bleu)\n"
 
-#: src/lang.c:1990
+#: src/lang.c:2001
 msgid	"Color of highlighted URLs"
 msgstr	"Couleur des URLs en surbrillance"
 
-#: src/lang.c:1991
+#: src/lang.c:2002
 msgid	"# Color of highlighted URLs\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Couleur des URLs en surbrillance\n"
 	"# Défaut : -1 (défaut couleur)\n"
 
-#: src/lang.c:1997
+#: src/lang.c:2008
 msgid	"Color of highlighting with *stars*"
 msgstr	"Couleur des mots entre *astérisques*"
 
-#: src/lang.c:1998
+#: src/lang.c:2009
 msgid	"# Color of word highlighting with *stars*\n"
 	"# Default: 11 (yellow)\n"
 msgstr	"# Couleur des mots entre *astérisques*\n"
 	"# Défaut : 11 (jaune)\n"
 
-#: src/lang.c:2004
+#: src/lang.c:2015
 msgid	"Color of highlighting with _dash_"
 msgstr	"Couleur des mots entre _underscore_"
 
-#: src/lang.c:2005
+#: src/lang.c:2016
 msgid	"# Color of word highlighting with _dash_\n"
 	"# Default: 13 (light pink)\n"
 msgstr	"# Couleur des mots entre _underscore_\n"
 	"# Défaut : 13 (rose gras)\n"
 
-#: src/lang.c:2011
+#: src/lang.c:2022
 msgid	"Color of highlighting with /slash/"
 msgstr	"Couleur des mots entre /slash/"
 
-#: src/lang.c:2012
+#: src/lang.c:2023
 msgid	"# Color of word highlighting with /slash/\n"
 	"# Default: 14 (light cyan)\n"
 msgstr	"# Couleur des mots entre /slash/\n"
 	"# Défaut : 14 (cyan gras)\n"
 
-#: src/lang.c:2018
+#: src/lang.c:2029
 msgid	"Color of highlighting with -stroke-"
 msgstr	"Couleur des mots entre -tirets-"
 
-#: src/lang.c:2019
+#: src/lang.c:2030
 msgid	"# Color of word highlighting with -stroke-\n"
 	"# Default: 12 (light blue)\n"
 msgstr	"# Couleur des mots entre -tirets-\n"
 	"# Défaut : 12 (bleu gras)\n"
 
-#: src/lang.c:2026
+#: src/lang.c:2037
 msgid	"Attr. of highlighting with *stars*"
 msgstr	"Style des mots entre *astérisques*"
 
-#: src/lang.c:2027
+#: src/lang.c:2038
 msgid	"# Attributes of word highlighting on mono terminals\n"
 	"# Possible values are:\n"
 	"#   0 = Normal\n"
@@ -5567,57 +5650,57 @@ msgstr	"# Style des mots mis en évidence
 	"# Style des mots entre *astérisques*\n"
 	"# Défaut : 6 (gras)\n"
 
-#: src/lang.c:2042
+#: src/lang.c:2053
 msgid	"Attr. of highlighting with _dash_"
 msgstr	"Style des mots entre _underscore_"
 
-#: src/lang.c:2043
+#: src/lang.c:2054
 msgid	"# Attribute of word highlighting with _dash_\n"
 	"# Default: 2 (best highlighting)\n"
 msgstr	"# Style des mots entre _tirets_\n"
 	"# Défaut : 2 (misé en évidence accrue)\n"
 
-#: src/lang.c:2049
+#: src/lang.c:2060
 msgid	"Attr. of highlighting with /slash/"
 msgstr	"Style des mots entre /slash/"
 
-#: src/lang.c:2050
+#: src/lang.c:2061
 msgid	"# Attribute of word highlighting with /slash/\n"
 	"# Default: 5 (half bright)\n"
 msgstr	"# Style des mots entre /slash/\n"
 	"# Défaut : 5 (contrasté)\n"
 
-#: src/lang.c:2056
+#: src/lang.c:2067
 msgid	"Attr. of highlighting with -stroke-"
 msgstr	"Style des mots entre -tirets-"
 
-#: src/lang.c:2057
+#: src/lang.c:2068
 msgid	"# Attribute of word highlighting with -stroke-\n"
 	"# Default: 3 (reverse video)\n"
 msgstr	"# Style des mots entre -tirets-\n"
 	"# Défaut : 3 (vidéo inversée)\n"
 
-#: src/lang.c:2063
+#: src/lang.c:2074
 msgid	"URL highlighting in message body"
 msgstr	"Mise en évidence des URLs dans les articles"
 
-#: src/lang.c:2064
+#: src/lang.c:2075
 msgid	"# Enable URL highlighting?\n"
 msgstr	"# Mettre en évidence les URLs ?\n"
 
-#: src/lang.c:2069
+#: src/lang.c:2080
 msgid	"Word highlighting in message body"
 msgstr	"Mise en évidence des mots dans les articles"
 
-#: src/lang.c:2070
+#: src/lang.c:2081
 msgid	"# Enable word highlighting?\n"
 msgstr	"# Mettre en évidence les mots ?\n"
 
-#: src/lang.c:2075
+#: src/lang.c:2086
 msgid	"What to display instead of mark"
 msgstr	"Afficher ça plutôt qu'une marque"
 
-#: src/lang.c:2076
+#: src/lang.c:2087
 msgid	"# Should the leading and ending stars and dashes also be displayed,\n"
 	"# even when they are highlighting marks?\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -5631,113 +5714,115 @@ msgstr	"# Est-ce que les astérisques et 
 	"#   1 = oui, afficher la marque\n"
 	"# * 2 = plutôt afficher un espace\n"
 
-#: src/lang.c:2085
+#: src/lang.c:2096
 msgid	"Enter column number to wrap article lines to in the pager. <CR> sets."
 msgstr	"Largeur du pager. <RETOUR> valide."
 
-#: src/lang.c:2086
+#: src/lang.c:2097
 msgid	"Page line wrap column"
 msgstr	"Largeur du pager"
 
-#: src/lang.c:2087
+#: src/lang.c:2098
 msgid	"# Wrap article lines at column\n"
 msgstr	"# Justifier les lignes des articles à la colonne indiquée\n"
 
-#: src/lang.c:2092
+#: src/lang.c:2103
 msgid	"Wrap around threads on next unread"
 msgstr	"Englober les fils pour le non lu suivant"
 
-#: src/lang.c:2093
+#: src/lang.c:2104
 msgid	"# If ON wrap around threads on searching next unread article\n"
 msgstr	"# Si ON, englober les fils lors de la recherche de l'article suivant non lu\n"
 
-#: src/lang.c:2097
+#: src/lang.c:2108
 msgid	"Enter default mail address (and fullname). <CR> sets."
 msgstr	"Adresse mail par défaut (et nom complet). <RETOUR> valide."
 
-#: src/lang.c:2098
+#: src/lang.c:2109
 msgid	"Mail address (and fullname)"
 msgstr	"Adresse mail (et nom complet)"
 
-#: src/lang.c:2099
+#: src/lang.c:2110
 msgid	"# User's mail address (and fullname), if not username@host (fullname)\n"
 msgstr	"# Adresse mail (et nom complet) si ce n'est pas utilisateur@hôte\n"
 	"# (nom complet)\n"
 
-#: src/lang.c:2104
+#: src/lang.c:2115
 msgid	"Show empty Followup-To in editor"
 msgstr	"Inclure en-tête Followup-To dans l'éditeur"
 
-#: src/lang.c:2105
+#: src/lang.c:2116
 msgid	"# If ON show empty Followup-To header when editing an article\n"
 msgstr	"# Si ON, inclure l'en-tête Followup-To lors de la composition\n"
 	"# des articles\n"
 
-#: src/lang.c:2109
+#: src/lang.c:2120
 msgid	"Enter path/! command/--none to create your default signature. <CR> sets."
 msgstr	"Chemin/! commande/--aucune pour la création de votre signature. <RETOUR> "
 	"valide."
 
-#: src/lang.c:2110
+#: src/lang.c:2121
 msgid	"Create signature from path/command"
 msgstr	"Signature depuis fichier/commande"
 
-#: src/lang.c:2111
+#: src/lang.c:2122
 msgid	"# Signature path (random sigs)/file to be used when posting/replying\n"
 	"# default_sigfile=file       appends file as signature\n"
 	"# default_sigfile=!command   executes external command to generate a "
 	"signature\n"
 	"# default_sigfile=--none     don't append a signature\n"
-msgstr	"# Fichier de signature à utiliser lors de la composition/réponse à un\n"
-	"# article.\n"
+msgstr	"# Fichier de signature à utiliser lors de la composition/réponse à un "
+	"article.\n"
 	"# default_sigfile=fichier\tutilise le contenu du fichier comme signature\n"
 	"# default_sigfile=!commande\texécute une commande externe comme signature\n"
 
-#: src/lang.c:2118
+#: src/lang.c:2129
 msgid	"Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
 msgstr	"Précéder la signature avec \"-- \". <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:2119
+#: src/lang.c:2130
 msgid	"Prepend signature with \"-- \""
 msgstr	"Précéder la signature avec \"-- \""
 
-#: src/lang.c:2120
+#: src/lang.c:2131
 msgid	"# If ON prepend the signature with dashes '\\n-- \\n'\n"
 msgstr	"# Si ON, précéde la signature avec le délimiteur standard\n"
 	"# '\\n-- \\'\n"
 
-#: src/lang.c:2124
+#: src/lang.c:2135
 msgid	"Add signature when reposting articles. <SPACE> toggles & <CR> sets."
 msgstr	"Rajouter la signature lors du repostage. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:2125
+#: src/lang.c:2136
 msgid	"Add signature when reposting"
 msgstr	"Rajouter la signature lors du repostage"
 
-#: src/lang.c:2126
+#: src/lang.c:2137
 msgid	"# If ON add signature to reposted articles\n"
 msgstr	"# Si ON, rajoute la signature aux articles repostés\n"
 
-#: src/lang.c:2130
+#: src/lang.c:2141
+#, c-format
 msgid	"Enter quotation marks, %s or %S for author's initials."
 msgstr	"Caractère de citation, %s ou %S  pour les initiales de l'auteur."
 
-#: src/lang.c:2131
+#: src/lang.c:2142
 msgid	"Characters used as quote-marks"
 msgstr	"Caractère de citation"
 
-#: src/lang.c:2132
+#: src/lang.c:2143
+#, c-format
 msgid	"# Characters used in quoting to followups and replies.\n"
 	"# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
 msgstr	"# Caractères utilisés pour les citations.\n"
 	"# '_' est remplacé par ' ', %%s, %%S sont remplacés par les intiales\n"
 	"# de l'auteur auquel vous répondez.\n"
 
-#: src/lang.c:2138
+#: src/lang.c:2149
 msgid	"Quoting behavior"
 msgstr	"Type de citations"
 
-#: src/lang.c:2139
+#: src/lang.c:2150
 msgid	"# How quoting should be handled when following up or replying.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = Nothing special\n"
@@ -5759,15 +5844,16 @@ msgstr	"# Type de citations lors des rép
 	"#   6 = Citer les signatures, citer les lignes vides\n"
 	"#   7 = Citations compr., signatures et lignes vides citées\n"
 
-#: src/lang.c:2152 src/lang.c:2160 src/lang.c:2166
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
 msgid	"%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
 msgstr	"%A Adresse %D Date %F Adresse+Nom %G groupe %M Message-ID %N Nom %C Prénom"
 
-#: src/lang.c:2153
+#: src/lang.c:2164
 msgid	"Quote line when following up"
 msgstr	"Citation lors d'un suivi"
 
-#: src/lang.c:2154
+#: src/lang.c:2165
+#, c-format
 msgid	"# Format of quote line when mailing/posting/following-up an article\n"
 	"# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
 	"# %%N Full Name  %%C First Name   %%I Initials\n"
@@ -5775,35 +5861,35 @@ msgstr	"# Format de la citation lors de 
 	"# %%A Adresse\t\t%%D Date\t%%F Adresse+Nom\t%%G groupe\n"
 	"# %%M Message-ID\t%%N Nom complet\t%%C Prénom\t%%I Initiales\n"
 
-#: src/lang.c:2161
+#: src/lang.c:2172
 msgid	"Quote line when cross-posting"
 msgstr	"Citation lors d'un cross-post"
 
-#: src/lang.c:2167
+#: src/lang.c:2178
 msgid	"Quote line when mailing"
 msgstr	"Citation lors d'un envoi par mail"
 
-#: src/lang.c:2172
+#: src/lang.c:2183
 msgid	"If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
 msgstr	"Si ON, inclus l'en-tête 'User-Agent:'. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:2173
+#: src/lang.c:2184
 msgid	"Insert 'User-Agent:'-header"
 msgstr	"Insérer l'en-tête 'User-Agent'"
 
-#: src/lang.c:2174
+#: src/lang.c:2185
 msgid	"# If ON include advertising User-Agent: header\n"
 msgstr	"# Si ON inclus l'en-tête 'User-Agent:'\n"
 
-#: src/lang.c:2179
+#: src/lang.c:2190
 msgid	"Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
 msgstr	"Jeu d'encodage pour MIME (p.e. US-ASCII, ISO_8859_1, EUC_KR), <RETOUR> valide."
 
-#: src/lang.c:2180
+#: src/lang.c:2191
 msgid	"MM_CHARSET"
 msgstr	"MM_CHARSET"
 
-#: src/lang.c:2181
+#: src/lang.c:2192
 msgid	"# Charset supported locally which is also used for MIME header and\n"
 	"# Content-Type header.\n"
 	"# If not set, the value of the environment variable MM_CHARSET is used.\n"
@@ -5820,27 +5906,27 @@ msgstr	"# Jeu d'encodage supporté locale
 	"# d'encodage autre que mm_charset est considéré comme non disponible et\n"
 	"# représenté par '?'.\n"
 
-#: src/lang.c:2191
+#: src/lang.c:2202
 msgid	"MM_NETWORK_CHARSET"
 msgstr	"MM_NETWORK_CHARSET"
 
-#: src/lang.c:2192
+#: src/lang.c:2203
 msgid	"# Charset used for MIME (Content-Type) header in postings.\n"
 msgstr	"# Jeu d'encodage utilisé par l'en-tête MIME (Content-Type).\n"
 
-#: src/lang.c:2198
+#: src/lang.c:2209
 msgid	"Mailbox format"
 msgstr	"Format de la boîte à lettres"
 
-#: src/lang.c:2199
+#: src/lang.c:2210
 msgid	"# Format of the mailbox.\n"
 msgstr	"# Format de la boîte à lettres\n"
 
-#: src/lang.c:2204
+#: src/lang.c:2215
 msgid	"MIME encoding in news messages"
 msgstr	"Encodage MIME dans les messages usenet"
 
-#: src/lang.c:2205
+#: src/lang.c:2216
 msgid	"# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
 	"# for mails and posts, if necessary. QP is efficient for most European\n"
 	"# character sets (ISO-8859-X) with small fraction of non-US-ASCII chars,\n"
@@ -5853,15 +5939,15 @@ msgstr	"# Si nécessaire, encodage MIME (
 	"# pour les jeux d'encodage 8bit Est Asiatique, Grec et Russe, car contenant\n"
 	"# un plus grand nombre de caractères 8bit.\n"
 
-#: src/lang.c:2213 src/lang.c:2234
+#: src/lang.c:2224 src/lang.c:2245
 msgid	"Don't change unless you know what you are doing. <ESC> cancels."
 msgstr	"Ne pas changer sauf si vous savez ce que vous faites. <ESC> annule."
 
-#: src/lang.c:2214
+#: src/lang.c:2225
 msgid	"Use 8bit characters in news headers"
 msgstr	"Caractères 8bit dans les en-têtes usenet"
 
-#: src/lang.c:2215
+#: src/lang.c:2226
 msgid	"# If ON, 8bit characters in news headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in header are encoded regardless of the value of this\n"
@@ -5872,28 +5958,28 @@ msgstr	"# Si ON, les caractères 8bit dan
 	"# de la valeur de cette option sauf si post_mime_encoding a comme\n"
 	"# valeur 8bit.\n"
 
-#: src/lang.c:2222
+#: src/lang.c:2233
 msgid	"Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Visualiser automatiquement les fichiers traités. <ESPACE> change, <RETOUR> "
 	"valide, <ESC> annule."
 
-#: src/lang.c:2223
+#: src/lang.c:2234
 msgid	"View post-processed files"
 msgstr	"Voir les fichiers traités"
 
-#: src/lang.c:2224
+#: src/lang.c:2235
 msgid	"# If set, post processed files will be opened in a viewer\n"
 msgstr	"# Si ON, les fichiers traités seront ouverts\n"
 
-#: src/lang.c:2229
+#: src/lang.c:2240
 msgid	"MIME encoding in mail messages"
 msgstr	"Encodage MIME pour les mails"
 
-#: src/lang.c:2235
+#: src/lang.c:2246
 msgid	"Use 8bit characters in mail headers"
 msgstr	"Caractères 8bits dans en-têtes mail"
 
-#: src/lang.c:2236
+#: src/lang.c:2247
 msgid	"# If ON, 8bit characters in mail headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
 	"# 8bit chars in headers are encoded regardless of the value of this "
@@ -5911,26 +5997,26 @@ msgstr	"# Si ON, les caractères 8bit dan
 	"# mails donc nous vous conseillons de ne PAS activer cette option sauf si\n"
 	"# vous avez une bonne raison.\n"
 
-#: src/lang.c:2246
+#: src/lang.c:2257
 msgid	"Strip blanks from ends of lines"
 msgstr	"Nettoyer les fins de lignes"
 
-#: src/lang.c:2247
+#: src/lang.c:2258
 msgid	"# If ON strip blanks from ends of lines for faster display on slow "
 	"terminals.\n"
 msgstr	"# Si ON, enlève les blancs présents aux fins de lignes pour un affichage \n"
 	"# plus rapide sur les terminaux lents.\n"
 
-#: src/lang.c:2252
+#: src/lang.c:2263
 msgid	"If ON, use transliteration. <SPACE> toggles & <CR> sets."
 msgstr	"Si ON, utilise 'translit' pour iconv_open(3). <ESPACE> change & <RETOUR> "
 	"valide."
 
-#: src/lang.c:2253
+#: src/lang.c:2264
 msgid	"Transliteration"
 msgstr	"Translitération (conversion)"
 
-#: src/lang.c:2254
+#: src/lang.c:2265
 msgid	"# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
 	"# be represented in the in the target character set, it can be approximated\n"
 	"# through one or several similarly looking characters.\n"
@@ -5938,147 +6024,147 @@ msgstr	"# Si ON, utilise l'extension //T
 	"# caractère n'est pas disponible dans l'encodage choisi, il peut être\n"
 	"# remplacé par un ou plusieurs autres caractères similaires.\n"
 
-#: src/lang.c:2261
+#: src/lang.c:2272
 msgid	"Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Vous envoie automatiquement une copie (CC). <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:2262
+#: src/lang.c:2273
 msgid	"Send you a cc automatically"
 msgstr	"Envoyer automatiquement une copie"
 
-#: src/lang.c:2263
+#: src/lang.c:2274
 msgid	"# If ON automatically put your name in the Cc: field when mailing an article\n"
-msgstr	"# Si ON, inclus automatiquement votre nom dans le champ Cc: lors d'un envoi "
-	"par mail d'un article.\n"
+msgstr	"# Si ON, inclus automatiquement votre nom dans le champ Cc: lors d'un envoi\n"
+	"# par mail d'un article.\n"
 
-#: src/lang.c:2267
+#: src/lang.c:2278
 msgid	"Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Vous envoie automatiquement une copie privée (BCC). <ESPACE> change & "
 	"<RETOUR> valide."
 
-#: src/lang.c:2268
+#: src/lang.c:2279
 msgid	"Send you a blind cc automatically"
 msgstr	"Envoi automatique d'une copie privée"
 
-#: src/lang.c:2269
+#: src/lang.c:2280
 msgid	"# If ON automatically put your name in the Bcc: field when mailing an "
 	"article\n"
-msgstr	"# Si ON, inclus automatiquement votre nom dans le champ Bcc: lors d'un envoi "
-	"par mail d'un article.\n"
+msgstr	"# Si ON, inclus automatiquement votre nom dans le champ Bcc: lors d'un envoi\n"
+	"# par mail d'un article.\n"
 
-#: src/lang.c:2273
+#: src/lang.c:2284
 msgid	"Enter address elements about which you want to be warned. <CR> sets."
 msgstr	"Être averti de ces éléments. <RETOUR> valide."
 
-#: src/lang.c:2274
+#: src/lang.c:2285
 msgid	"Spamtrap warning address parts"
 msgstr	"Pièges à spam dans les adresses"
 
-#: src/lang.c:2275
+#: src/lang.c:2286
 msgid	"# A comma-delimited list of address-parts you want to be warned\n"
 	"# about when trying to reply by email.\n"
 msgstr	"# Une liste des parties dans les adresses, délimitées par des virgules,\n"
 	"# que vous souhaitez connaître lors d'une réponse par mail.\n"
 
-#: src/lang.c:2280
+#: src/lang.c:2291
 msgid	"Enter default number of days a filter entry will be valid. <CR> sets."
 msgstr	"Entrer la durée d'un filtre (en nombre de jours). <RETOUR> valide."
 
-#: src/lang.c:2281
+#: src/lang.c:2292
 msgid	"No. of days a filter entry is valid"
 msgstr	"Durée de validité d'un filtre"
 
-#: src/lang.c:2282
+#: src/lang.c:2293
 msgid	"# Number of days a short term filter will be active\n"
 msgstr	"# Durée (en nombre de jours) de validité d'un filtre\n"
 
-#: src/lang.c:2286
+#: src/lang.c:2297
 msgid	"Add posted articles to filter. <SPACE> toggles & <CR> sets."
 msgstr	"Créer un filtre pour les articles postés. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:2287
+#: src/lang.c:2298
 msgid	"Add posted articles to filter"
 msgstr	"Créer un filtre pour les articles postés"
 
-#: src/lang.c:2288
+#: src/lang.c:2299
 msgid	"# If ON add posted articles which start a new thread to filter for\n"
 	"# highlighting follow-ups\n"
 msgstr	"# Si ON, crée un filtre pour les articles débutant un nouveau fil\n"
 	"# afin de mettre en surbrillance les suivis.\n"
 
-#: src/lang.c:2292
+#: src/lang.c:2303
 msgid	"The directory where articles/threads are to be saved in mailbox format."
 msgstr	"Le répertoire où sont enregistrés les articles/fils au format mailbox."
 
-#: src/lang.c:2293
+#: src/lang.c:2304
 msgid	"Mail directory"
 msgstr	"Répertoire mail"
 
-#: src/lang.c:2294
+#: src/lang.c:2305
 msgid	"# (-m) directory where articles/threads are saved in mailbox format\n"
 msgstr	"# (-m) répertoire où sont enregistrés les articles/fils au format mailbox\n"
 
-#: src/lang.c:2299
+#: src/lang.c:2310
 msgid	"Save articles in batch mode (-S)"
 msgstr	"Enregistrer articles en arrière-plan (-S)"
 
-#: src/lang.c:2300
+#: src/lang.c:2311
 msgid	"# If ON articles/threads will be saved in batch mode when save -S\n"
 	"# or mail (-M/-N) is specified on the command line\n"
 msgstr	"# Si ON, les articles/fils seront enregistrés à l'arrière-plan lorsque\n"
 	"# l'option -S ou (-M/-N) pour les mails est spécifiée.\n"
 
-#: src/lang.c:2305
+#: src/lang.c:2316
 msgid	"The directory where you want articles/threads saved."
 msgstr	"Le répertoire où vous voulez enregistrer les articles/fils."
 
-#: src/lang.c:2306
+#: src/lang.c:2317
 msgid	"Directory to save arts/threads in"
 msgstr	"Répertoire où enregistrer les articles/fils"
 
-#: src/lang.c:2307
+#: src/lang.c:2318
 msgid	"# Directory where articles/threads are saved\n"
 msgstr	"# Répertoire où sont enregistrés les articles/fils\n"
 
-#: src/lang.c:2311
+#: src/lang.c:2322
 msgid	"Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> sets."
 msgstr	"Enregistrement auto. basé sur l'en-tête Archive-name:. <ESPACE> change & "
 	"<RETOUR> valide."
 
-#: src/lang.c:2312
+#: src/lang.c:2323
 msgid	"Use Archive-name: header for save"
 msgstr	"Honorer l'en-tête 'Archive-name:'"
 
-#: src/lang.c:2313
+#: src/lang.c:2324
 msgid	"# If ON articles/threads with Archive-name: in mail header will\n"
 	"# be automatically saved with the Archive-name & part/patch no.\n"
 msgstr	"# Si ON, les articles/fils avec 'Archive-name:' dans l'en-tête\n"
 	"# du mail seront enregistrés automatiquement avec l'Archive-name\n"
 	"# & le numéro de la partie et ou patch.\n"
 
-#: src/lang.c:2318
+#: src/lang.c:2329
 msgid	"Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Marquer lu les articles/fils enregistrés. <ESPACE> change, <RETOUR> valide, "
 	"<ESC> annule."
 
-#: src/lang.c:2319
+#: src/lang.c:2330
 msgid	"Mark saved articles/threads as read"
 msgstr	"Marquer lu les articles/fils enregistrés"
 
-#: src/lang.c:2320
+#: src/lang.c:2331
 msgid	"# If ON mark articles that are saved as read\n"
 msgstr	"# Si ON, marque lu les articles qui sont enregistrés\n"
 
-#: src/lang.c:2324
+#: src/lang.c:2335
 msgid	"Do post processing (eg. extract attachments) for saved articles."
 msgstr	"Post-traiter (p.e. extraire les pj) les articles enregistrés."
 
-#: src/lang.c:2325
+#: src/lang.c:2336
 msgid	"Post process saved articles"
 msgstr	"Post-traiter les articles enregistrés"
 
-#: src/lang.c:2326
+#: src/lang.c:2337
 msgid	"# Perform post processing (saving binary attachments) from saved articles.\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no\n"
@@ -6090,103 +6176,105 @@ msgstr	"# Post-traitement (enregistremen
 	"#   1 = extraire uniquement les *.shar (archives shell)\n"
 	"#   2 = oui\n"
 
-#: src/lang.c:2335
+#: src/lang.c:2346
 msgid	"Process only unread articles"
 msgstr	"Traiter uniquement les articles non lus"
 
-#: src/lang.c:2336
+#: src/lang.c:2347
 msgid	"# If ON only save/print/pipe/mail unread articles (tagged articles excepted)\n"
-msgstr	"# Si ON, enregistre/imprime/pipe/envoi articles non lu (excepté les articles "
-	"marqués)\n"
+msgstr	"# Si ON, enregistre/imprime/pipe/envoi articles non lu\n"
+	"# (excepté les articles marqués)\n"
 
-#: src/lang.c:2341
+#: src/lang.c:2352
 msgid	"Print all or just part of header. <SPACE> toggles & <CR> sets."
 msgstr	"Afficher tout ou une partie des en-têtes. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:2342
+#: src/lang.c:2353
 msgid	"Print all headers when printing"
 msgstr	"Imprimer tous les en-têtes"
 
-#: src/lang.c:2343
+#: src/lang.c:2354
 msgid	"# If ON print all of article header otherwise just the important lines\n"
 msgstr	"# Si ON, imprimer tous les en-têtes, sinon juste les lignes importantes\n"
 
-#: src/lang.c:2347
+#: src/lang.c:2358
 msgid	"The printer program with options that is to be used to print articles/threads."
-msgstr	"Le logiciel d'impression avec options utilisées pour imprimer les "
-	"articles/fils."
+msgstr	"Le logiciel d'impression avec options utilisées pour imprimer les articles/"
+	"fils."
 
-#: src/lang.c:2348
+#: src/lang.c:2359
 msgid	"Printer program with options"
 msgstr	"Logiciel d'impression avec options"
 
-#: src/lang.c:2349
+#: src/lang.c:2360
 msgid	"# Print program with parameters used to print articles/threads\n"
-msgstr	"# Logiciel d'impression avec options utilisées por imprimer les "
-	"articles/fils\n"
+msgstr	"# Logiciel d'impression avec options utilisées por imprimer les articles/"
+	"fils\n"
 
-#: src/lang.c:2355
+#: src/lang.c:2366
 msgid	"Force redraw after certain commands"
 msgstr	"Rafraîchir l'écran après certaines actions"
 
-#: src/lang.c:2356
+#: src/lang.c:2367
 msgid	"# If ON a screen redraw will always be done after certain external commands\n"
-msgstr	"# Si ON, un rafraîchissement de l'écran sera toujours effectué après "
-	"certaines commandes externes\n"
+msgstr	"# Si ON, un rafraîchissement de l'écran sera toujours effectué après\n"
+	"# certaines commandes externes\n"
 
-#: src/lang.c:2360
+#: src/lang.c:2371
 msgid	"Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Lancer l'éditeur avec une ligne décalée. <ESPACE> change, <RETOUR> valide, "
 	"<ESC> annule."
 
-#: src/lang.c:2361
+#: src/lang.c:2372
 msgid	"Start editor with line offset"
 msgstr	"Lancer l'éditeur avec une ligne décalée"
 
-#: src/lang.c:2362
+#: src/lang.c:2373
 msgid	"# If ON editor will be started with cursor offset into the file\n"
 	"# otherwise the cursor will be positioned at the first line\n"
 msgstr	"# Si ON, l'éditeur sera lancé avec le curseur décalé\n"
 	"# sinon, le curseur sera positionné sur la première ligne\n"
 
-#: src/lang.c:2367
+#: src/lang.c:2378
 msgid	"Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
 msgstr	"%E pour l'éditeur, %F pour le fichier, %N pour la ligne, <RETOUR> valide."
 
-#: src/lang.c:2368
+#: src/lang.c:2379
 msgid	"Invocation of your editor"
 msgstr	"Lancement de votre éditeur"
 
-#: src/lang.c:2369
+#: src/lang.c:2380
+#, c-format
 msgid	"# Format of editor line including parameters\n"
 	"# %%E Editor  %%F Filename  %%N Linenumber\n"
 msgstr	"# Format des paramètres pour l'éditeur\n"
 	"# %%E Éditeur  %%F Fichier  %%N N° de ligne\n"
 
-#: src/lang.c:2374
+#: src/lang.c:2385
 msgid	"Enter name and options for external-inews, --internal for internal inews"
 msgstr	"Nom et options pour l'inews externe, --internal pour l'inews interne"
 
-#: src/lang.c:2375
+#: src/lang.c:2386
 msgid	"External inews"
 msgstr	"Inews externe"
 
-#: src/lang.c:2376
+#: src/lang.c:2387
 msgid	"# If --internal use the built in mini inews for posting via NNTP\n"
 	"# otherwise use an external inews program\n"
 msgstr	"# Si '--internal', utilise l'inews allégé intégré pour poster via\n"
 	"# NNTP sinon, utilise un logiciel inews externe\n"
 
-#: src/lang.c:2380
+#: src/lang.c:2391
 msgid	"Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
 msgstr	"%M pour le MUA, %S pour le sujet, %T pour 'to:', %F pour Fichier, <RETOUR> "
 	"valide."
 
-#: src/lang.c:2381
+#: src/lang.c:2392
 msgid	"Invocation of your mail command"
 msgstr	"Lancement de votre client mail"
 
-#: src/lang.c:2382
+#: src/lang.c:2393
+#, c-format
 msgid	"# Format of mailer line including parameters\n"
 	"# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
 	"# ie. to use elm as your mailer:    elm -s \"%%S\" \"%%T\" < %%F\n"
@@ -6196,11 +6284,11 @@ msgstr	"# Format des paramètres pour le 
 	"# p.e. pour utiliser elm comme MUA : elm -s \"%%S\" \"%%T\" < %%F\n"
 	"# p.e. pour elm interactif         : elm -i %%F -s \"%%S\" \"%%T\"\n"
 
-#: src/lang.c:2390
+#: src/lang.c:2401
 msgid	"Use interactive mail reader"
 msgstr	"Utiliser un MUA interactif"
 
-#: src/lang.c:2391
+#: src/lang.c:2402
 msgid	"# Interactive mailreader\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no interactive mailreader\n"
@@ -6212,59 +6300,59 @@ msgstr	"# MUA interactif :\n"
 	"#   1 = utiliser un MUA interactif avec les en-têtes du fichier\n"
 	"#   2 = utiliser un MUA interactif sans les en-têtes du fichier\n"
 
-#: src/lang.c:2400
+#: src/lang.c:2411
 msgid	"Remove ~/.article after posting"
 msgstr	"Effacer ~/.article après le postage"
 
-#: src/lang.c:2401
+#: src/lang.c:2412
 msgid	"# If ON remove ~/.article after posting.\n"
 msgstr	"# Si ON, effacer ~/.article après le postage.\n"
 
-#: src/lang.c:2405
+#: src/lang.c:2416
 msgid	"Filename for all posted articles, <CR> sets, no filename=do not save."
 msgstr	"Fichier pour les articles postés, <RETOUR> valide, pas de fichier = désactive."
 
-#: src/lang.c:2406
+#: src/lang.c:2417
 msgid	"Filename for posted articles"
 msgstr	"Fichier pour les articles postés"
 
-#: src/lang.c:2407
+#: src/lang.c:2418
 msgid	"# Filename where to keep all postings (default posted)\n"
 	"# If no filename is set then postings will not be saved\n"
 msgstr	"# Fichier où enregistrer les articles postés ('posted' par défaut)\n"
 	"# Si aucun fichier n'est indiqué, les articles postés ne seront pas\n"
 	"# enregistrés\n"
 
-#: src/lang.c:2412
+#: src/lang.c:2423
 msgid	"Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
 msgstr	"Garder les articles non postés dans ~/dead.articles. <ESPACE> change & "
 	"<RETOUR> valide."
 
-#: src/lang.c:2413
+#: src/lang.c:2424
 msgid	"Keep failed arts in ~/dead.articles"
 msgstr	"Articles non postés dans ~/dead.articles"
 
-#: src/lang.c:2414
+#: src/lang.c:2425
 msgid	"# If ON keep all failed postings in ~/dead.articles\n"
 msgstr	"# Si ON, garde tous les articles non postés dans ~/dead.articles\n"
 
-#: src/lang.c:2418
+#: src/lang.c:2429
 msgid	"Do you want to strip unsubscribed groups from .newsrc"
 msgstr	"Voulez-vous effacer dans newsrc les groupes auxquels vous vous êtes désabonnés"
 
-#: src/lang.c:2419
+#: src/lang.c:2430
 msgid	"No unsubscribed groups in newsrc"
 msgstr	"Pas de groupes désabonnés dans newsrc"
 
-#: src/lang.c:2420
+#: src/lang.c:2431
 msgid	"# If ON strip unsubscribed groups from newsrc\n"
 msgstr	"# Si ON, efface dans newsrc les groupes auxquels vous vous êtes désabonnés\n"
 
-#: src/lang.c:2425
+#: src/lang.c:2436
 msgid	"Remove bogus groups from newsrc"
 msgstr	"Effacer les groupes corrompus de newsrc"
 
-#: src/lang.c:2426
+#: src/lang.c:2437
 msgid	"# What to do with bogus groups in newsrc file\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = keep\n"
@@ -6276,55 +6364,55 @@ msgstr	"# Que faire des groupes corrompu
 	"#   1 = effacer\n"
 	"#   2 = marquer d'un D dans l'écran de sélection\n"
 
-#: src/lang.c:2434
+#: src/lang.c:2445
 msgid	"Enter number of seconds until active file will be reread. <CR> sets."
 msgstr	"Durée avant que le fichier active ne soit relu. <RETOUR> valide."
 
-#: src/lang.c:2435
+#: src/lang.c:2446
 msgid	"Interval in secs to reread active"
 msgstr	"Durée avant relecture du fichier active"
 
-#: src/lang.c:2436
+#: src/lang.c:2447
 msgid	"# Time interval in seconds between rereading the active file (0=never)\n"
 msgstr	"# Durée (en secondes) avant que le fichier active ne soit relu (0=jamais)\n"
 
-#: src/lang.c:2441
+#: src/lang.c:2452
 msgid	"Reconnect to server automatically"
 msgstr	"Reconnexion automatique au serveur"
 
-#: src/lang.c:2442
+#: src/lang.c:2453
 msgid	"# If ON automatically reconnect to NNTP server if the connection is broken\n"
 msgstr	"# Si ON, reconnexion automatique au serveur NNTP si la connexion est rompue\n"
 
-#: src/lang.c:2446
+#: src/lang.c:2457
 msgid	"Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
 msgstr	"Créer des copies locales des en-têtes NNTP. <ESPACE> change & <RETOUR> valide."
 
-#: src/lang.c:2447
+#: src/lang.c:2458
 msgid	"Cache NNTP overview files locally"
 msgstr	"Cache local des en-têtes NNTP"
 
-#: src/lang.c:2448
+#: src/lang.c:2459
 msgid	"# If ON, create local copies of NNTP overview files.\n"
 msgstr	"# Si ON, crée une copie locale des en-têtes NNTP.\n"
 
-#: src/lang.c:2452
+#: src/lang.c:2463
 msgid	"Enter format string. <CR> sets, <ESC> cancels."
 msgstr	"Formatage des dates. <RETOUR> valide, <ESC> annule."
 
-#: src/lang.c:2453
+#: src/lang.c:2464
 msgid	"Format string for display of dates"
 msgstr	"Format des dates affichées"
 
-#: src/lang.c:2454
+#: src/lang.c:2465
 msgid	"# Format string for date representation\n"
 msgstr	"# Format des dates affichées\n"
 
-#: src/lang.c:2460
+#: src/lang.c:2471
 msgid	"Unicode normalization form"
 msgstr	"Normalisation d'Unicode"
 
-#: src/lang.c:2461
+#: src/lang.c:2472
 msgid	"# Unicode normalization form\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = None\n"
@@ -6340,60 +6428,93 @@ msgstr	"# Normalisation d'Unicode\n"
 	"#   3 = NFC\n"
 	"#   4 = NFD\n"
 
-#: src/lang.c:2473
+#: src/lang.c:2484
 msgid	"Render BiDi"
 msgstr	"Rendu BiDi"
 
-#: src/lang.c:2474
+#: src/lang.c:2485
 msgid	"# If ON, bi-directional text is rendered by tin\n"
 msgstr	"# Si ON, le texte bi-directionnel est affiché par tin\n"
 
-#: src/misc.c:3721
+#: src/misc.c:3728
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\") %s %s\n"
 msgstr	"Version : %s %s release %s (\"%s\") %s %s\n"
 
-#: src/misc.c:3724
+#: src/misc.c:3731
 #, c-format
 msgid	"Version: %s %s release %s (\"%s\")\n"
 msgstr	"Version : %s %s release %s (\"%s\")\n"
 
-#: src/newsrc.c:432
+#: src/newsrc.c:430
 msgid	"Unreachable?\n"
 msgstr	"Inacessible ?\n"
 
-#: src/nntplib.c:825
+#: src/nntplib.c:824
 #, c-format
 msgid	"\n"
 	"Server timed out, trying reconnect # %d\n"
 msgstr	"\n"
 	"Connexion au serveur expirée, reconnexion # %d\n"
 
-#: src/nntplib.c:843
+#: src/nntplib.c:842
 msgid	"Rejoin current group\n"
 msgstr	"Rejoindre le groupe actuel\n"
 
-#: src/nntplib.c:850
+#: src/nntplib.c:849
 #, c-format
 msgid	"Read (%s)\n"
 msgstr	"Lecture (%s)\n"
 
-#: src/nntplib.c:852
+#: src/nntplib.c:851
 #, c-format
 msgid	"Resend last command (%s)\n"
 msgstr	"Réenvoyer la dernière commande (%s)\n"
 
+# TRANSLATION MISSING
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid	"MOTD: "
+msgstr	""
+
 #: src/nrctbl.c:172
 #, c-format
 msgid	"couldn't expand %s\n"
 msgstr	"impossible de décompacter %s\n"
 
-#: src/post.c:1969
+# TRANSLATION MISSING
+#: src/post.c:1152
+#, c-format
+msgid	"Line %d is longer than 998 octets and should be folded, but\n"
+	"encoding is neither set to %s nor to %s\n"
+msgstr	""
+
+# TRANSLATION MISSING
+#: src/post.c:1157
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+	"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr	""
+
+# TRANSLATION MISSING
+#: src/post.c:1159
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is not set to %s\n"
+msgstr	""
+
+#: src/post.c:1974
 #, c-format
 msgid	"Posting: %.*s ..."
 msgstr	"Postage : %.*s ..."
 
-#. fp
 #. Check if okay to read
 #: src/read.c:214
 msgid	"Aborting read, please wait..."
@@ -6421,6 +6542,7 @@ msgstr	"[- Indisponible -]"
 #. * TODO: -> lang.c
 #.
 #: src/rfc2047.c:1203
+#, c-format
 msgid	"This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
 	"are reading this prefix, your mail reader probably has not yet been modified\n"
 	"to understand the new format, and some of what follows may look strange.\n"
@@ -6430,7 +6552,7 @@ msgstr	"Ce message a été composé avec le
 	"ce qui suit peut paraître assez bizarre.\n"
 	"\n"
 
-#: src/save.c:977
+#: src/save.c:978
 msgid	"bytes"
 msgstr	"octets"
 
Binary files tin-1.7.8/po/ru.gmo and tin-1.7.9/po/ru.gmo differ
diff -Nurp tin-1.7.8/po/ru.po tin-1.7.9/po/ru.po
--- tin-1.7.8/po/ru.po	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/po/ru.po	2005-06-28 10:31:29.699540005 +0200
@@ -0,0 +1,6150 @@
+# Russian translations for tin package
+# áÎÇÌÉÊÓËÉÅ ÐÅÒÅ×ÏÄÙ ÄÌÑ ÐÁËÅÔÁ tin.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# Andrei Emeltchenko <andrei.emeltchenko@finik.org>, 2005.
+#
+msgid	""
+msgstr	"Project-Id-Version: tin 1.7.8\n"
+	"Report-Msgid-Bugs-To: \n"
+	"POT-Creation-Date: 2005-06-22 20:13+0200\n"
+	"PO-Revision-Date: 2005-03-23 15:39+0200\n"
+	"Last-Translator: Andrei Emeltchenko <andrei.emeltchenko@finik.org>\n"
+	"Language-Team: Russian <ru@li.org>\n"
+	"MIME-Version: 1.0\n"
+	"Content-Type: text/plain; charset=KOI8-R\n"
+	"Content-Transfer-Encoding: 8bit\n"
+	"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
+	"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
+
+#: src/art.c:1553
+#, c-format
+msgid	"%d Bad overview record (%d fields) '%s'"
+msgstr	""
+
+#: src/attrib.c:643
+#, c-format
+msgid	"# Do not edit this comment block\n"
+	"#\n"
+msgstr	"# îÅ ÒÅÄÁËÔÉÒÕÊÔÅ ÜÔÏÔ ÂÌÏË ËÏÍÍÅÎÔÁÒÉÅ×#\n"
+
+#: src/attrib.c:644
+#, c-format
+msgid	"#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
+msgstr	""
+
+#: src/attrib.c:645
+#, c-format
+msgid	"#  maildir=STRING (ie. ~/Mail)\n"
+msgstr	""
+
+#: src/attrib.c:646
+#, c-format
+msgid	"#  savedir=STRING (ie. ~user/News)\n"
+msgstr	""
+
+#: src/attrib.c:647
+#, c-format
+msgid	"#  savefile=STRING (ie. =linux)\n"
+msgstr	""
+
+#: src/attrib.c:648
+#, c-format
+msgid	"#  sigfile=STRING (ie. $var/sig)\n"
+msgstr	""
+
+#: src/attrib.c:649
+#, c-format
+msgid	"#  organization=STRING (if beginning with '/' read from file)\n"
+msgstr	""
+
+#: src/attrib.c:650
+#, c-format
+msgid	"#  followup_to=STRING\n"
+msgstr	""
+
+#: src/attrib.c:651
+#, c-format
+msgid	"#  mailing_list=STRING (ie. majordomo@example.org)\n"
+msgstr	""
+
+#: src/attrib.c:652
+#, c-format
+msgid	"#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
+msgstr	""
+
+#: src/attrib.c:653
+#, c-format
+msgid	"#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
+msgstr	""
+
+#: src/attrib.c:654
+#, c-format
+msgid	"#  from=STRING (just append wanted From:-line, don't use quotes)\n"
+msgstr	""
+
+#: src/attrib.c:655
+#, c-format
+msgid	"#  news_quote_format=STRING\n"
+msgstr	""
+
+#: src/attrib.c:656
+#, c-format
+msgid	"#  quote_chars=STRING (%%s, %%S for initials)\n"
+msgstr	""
+
+#: src/attrib.c:657
+#, c-format
+msgid	"#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
+msgstr	""
+
+#: src/attrib.c:659
+#, c-format
+msgid	"#  ispell=STRING\n"
+msgstr	""
+
+#: src/attrib.c:661
+#, c-format
+msgid	"#  auto_select=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:662
+#, c-format
+msgid	"#  auto_save=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:663
+#, c-format
+msgid	"#  batch_save=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:664
+#, c-format
+msgid	"#  delete_tmp_files=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:665
+#, c-format
+msgid	"#  show_only_unread=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:666
+#, c-format
+msgid	"#  thread_arts=NUM"
+msgstr	""
+
+#: src/attrib.c:673
+#, c-format
+msgid	"#  show_author=NUM\n"
+msgstr	""
+
+#: src/attrib.c:679
+#, c-format
+msgid	"#  show_info=NUM\n"
+msgstr	""
+
+#: src/attrib.c:685
+#, c-format
+msgid	"#  sort_art_type=NUM\n"
+msgstr	""
+
+#: src/attrib.c:703
+#, c-format
+msgid	"#  sort_threads_type=NUM\n"
+msgstr	""
+
+#: src/attrib.c:708
+#, c-format
+msgid	"#  post_proc_type=NUM\n"
+msgstr	""
+
+#: src/attrib.c:713
+#, c-format
+msgid	"#  quick_kill_scope=STRING (ie. talk.*)\n"
+msgstr	""
+
+#: src/attrib.c:714
+#, c-format
+msgid	"#  quick_kill_expire=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:715
+#, c-format
+msgid	"#  quick_kill_case=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:716
+#, c-format
+msgid	"#  quick_kill_header=NUM\n"
+msgstr	""
+
+#: src/attrib.c:717 src/attrib.c:724
+#, c-format
+msgid	"#    0=subj (case sensitive) 1=subj (ignore case)\n"
+msgstr	""
+
+#: src/attrib.c:718 src/attrib.c:725
+#, c-format
+msgid	"#    2=from (case sensitive) 3=from (ignore case)\n"
+msgstr	""
+
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
+msgid	"#    4=msgid 5=lines\n"
+msgstr	""
+
+#: src/attrib.c:720
+#, c-format
+msgid	"#  quick_select_scope=STRING\n"
+msgstr	""
+
+#: src/attrib.c:721
+#, c-format
+msgid	"#  quick_select_expire=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:722
+#, c-format
+msgid	"#  quick_select_case=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:723
+#, c-format
+msgid	"#  quick_select_header=NUM\n"
+msgstr	""
+
+#: src/attrib.c:727
+#, c-format
+msgid	"#  x_comment_to=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:728
+#, c-format
+msgid	"#  fcc=STRING (eg. =mailbox)\n"
+msgstr	""
+
+#: src/attrib.c:729
+#, c-format
+msgid	"#  tex2iso_conv=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:730
+#, c-format
+msgid	"#  mime_forward=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:732
+#, c-format
+msgid	"#  mm_network_charset=supported_charset"
+msgstr	""
+
+#: src/attrib.c:739
+#, c-format
+msgid	"#  undeclared_charset=STRING (default is US-ASCII)\n"
+msgstr	""
+
+#: src/attrib.c:741
+#, c-format
+msgid	"#\n"
+	"# Note that it is best to put general (global scoping)\n"
+msgstr	""
+
+#: src/attrib.c:742
+#, c-format
+msgid	"# entries first followed by group specific entries.\n"
+	"#\n"
+msgstr	""
+
+#: src/attrib.c:743
+#, c-format
+msgid	"############################################################################\n"
+	"\n"
+msgstr	""
+
+#: src/attrib.c:749
+#, c-format
+msgid	"# include extra headers\n"
+msgstr	""
+
+#: src/attrib.c:757
+#, c-format
+msgid	"# in *sources* set post process type to shar only\n"
+msgstr	""
+
+#: src/attrib.c:761
+#, c-format
+msgid	"# in *binaries* do full post processing but no TeX2ISO conversion,\n"
+msgstr	""
+
+#: src/attrib.c:762
+#, c-format
+msgid	"# remove tmp files and set Followup-To: poster\n"
+msgstr	""
+
+#: src/cook.c:497
+msgid	"(unknown)"
+msgstr	"(ÎÅÉÚ×ÅÓÔÎÏ)"
+
+#.
+#. * TODO: add to the right rule, give better explanation, -> lang.c
+#.
+#: src/filter.c:600 src/filter.c:608
+msgid	"Removed from the previous rule: "
+msgstr	"õÄÁÌÅÎ ÉÚ ÐÒÅÄÙÄÕÝÅÇÏ ÐÒÁ×ÉÌÁ: "
+
+#: src/lang.c:42
+msgid	"1 Response"
+msgstr	"1 ïÔ×ÅÔ"
+
+#: src/lang.c:46
+#, c-format
+msgid	"\n"
+	"%s contains no newsgroups. Exiting."
+msgstr	"\n"
+	"%s ÎÅ ÓÏÄÅÒÖÉÔ newsgroup. ÷ÙÈÏÄ."
+
+#: src/lang.c:47
+msgid	"all "
+msgstr	"×ÓÅ "
+
+#: src/lang.c:48
+msgid	"All groups"
+msgstr	"÷ÓÅ ÇÒÕÐÐÙ"
+
+#: src/lang.c:49
+#, c-format
+msgid	"File %s exists. %s=append, %s=overwrite, %s=quit: "
+msgstr	"æÁÊÌ %s ÓÕÝÅÓÔ×ÕÅÔ. %s=ÄÏÂÁ×ÉÔØ, %s=ÐÅÒÅÐÉÓÁÔØ, %s=×ÙÊÔÉ: "
+
+#: src/lang.c:50
+msgid	"Article cancelled (deleted)."
+msgstr	"óÔÁÔØÑ ÏÔÍÅÎÅÎÁ (ÕÄÁÌÅÎÁ)."
+
+#: src/lang.c:51
+msgid	"Article cannot be cancelled (deleted)."
+msgstr	"óÔÁÔØÑ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÔÍÅÎÅÎÁ (ÕÄÁÌÅÎÁ)."
+
+#: src/lang.c:52
+msgid	"Article deleted."
+msgstr	"óÔÁÔØÑ ÕÄÁÌÅÎÁ."
+
+#: src/lang.c:53
+#, c-format
+msgid	"\n"
+	"Your article:\n"
+	"  \"%s\"\n"
+	"will be posted to the following %s:\n"
+msgstr	"\n"
+	"÷ÁÛÁ ÓÔÁÔØÑ:\n"
+	"  \"%s\"\n"
+	"ÂÕÄÅÔ ÏÔÐÒÁ×ÌÅÎÁ × %s:\n"
+
+#: src/lang.c:54
+msgid	"Article not posted!"
+msgstr	"óÔÁÔØÑ ÎÅ ÏÔÐÒÁ×ÌÅÎÁ!"
+
+#: src/lang.c:55
+msgid	"Article not saved"
+msgstr	"óÔÁÔØÑ ÎÅ ÓÏÈÒÁÎÅÎÁ"
+
+#: src/lang.c:56
+msgid	"Article Level Commands"
+msgstr	"ëÏÍÁÎÄÙ õÒÏ×ÎÑ óÔÁÔØÉ"
+
+#: src/lang.c:57
+msgid	"Article has no parent"
+msgstr	"óÔÁÔØÑ ÎÅ ÉÍÅÅÔ ÒÏÄÉÔÅÌÅÊ"
+
+#: src/lang.c:58
+msgid	"Parent article has been killed"
+msgstr	"òÏÄÉÔÅÌØÓËÁÑ ÓÔÁÔØÑ ÂÙÌÁ ÕÎÉÞÔÏÖÅÎÁ"
+
+#: src/lang.c:59
+msgid	"Parent article is unavailable"
+msgstr	"òÏÄÉÔÅÌØÓËÁÑ ÓÔÁÔØÑ ÎÅÄÏÓÔÕÐÎÁ"
+
+#: src/lang.c:60
+#, c-format
+msgid	"Article posted: %s"
+msgstr	"óÔÁÔØÑ ÏÔÐÒÁ×ÌÅÎÁ: %s"
+
+#: src/lang.c:61
+#, c-format
+msgid	"Article rejected (saved to %s)"
+msgstr	"óÔÁÔØÑ ÏÔ×ÅÒÇÎÕÔÁ (ÓÏÈÒÁÎÅÎÁ × %s)"
+
+#: src/lang.c:62
+#, c-format
+msgid	"%s=article, %s=thread, %s=hot, %s=pattern, %s=tagged articles, %s=quit: "
+msgstr	"%s=ÓÔÁÔØÑ, %s=ÄÉÓË., %s=hot, %s=ÛÁÂÌÏÎ, %s=ÏÔÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ, %s=×ÙÈÏÄ: "
+
+#: src/lang.c:63
+msgid	"Article unavailable"
+msgstr	"óÔÁÔØÑ ÎÅÄÏÓÔÕÐÎÁ"
+
+#: src/lang.c:64
+msgid	"Article undeleted."
+msgstr	"óÔÁÔØÑ ×ÏÓÓÔÁÎÏ×ÌÅÎÁ."
+
+#: src/lang.c:66
+msgid	"articles"
+msgstr	"ÓÔÁÔØÉ"
+
+#: src/lang.c:67
+msgid	"This is a repost of the following article:"
+msgstr	"üÔÏ ÐÅÒÅÏÔÐÒÁ×ÌÅÎÉÅ ÓÌÅÄ. ÓÔÁÔØÉ:"
+
+#: src/lang.c:68
+msgid	"article"
+msgstr	"ÓÔÁÔØÑ"
+
+#: src/lang.c:69
+msgid	"Article"
+msgstr	"óÔÁÔØÑ"
+
+#: src/lang.c:70
+#, c-format
+msgid	"-- %d %s mailed --"
+msgstr	"-- %d %s ÐÏÓÌÁÎÏ ÐÏ e-mail --"
+
+#: src/lang.c:71
+#, c-format
+msgid	" at %s"
+msgstr	" × %s"
+
+#: src/lang.c:72
+#, c-format
+msgid	"%*s[-- %s/%s, encoding %s%s%s, %d lines%s%s --]\n"
+msgstr	"%*s[-- %s/%s, ËÏÄÉÒÏ×ËÁ %s%s%s, %d ÓÔÒÏË%s%s --]\n"
+
+#: src/lang.c:73
+msgid	", charset: "
+msgstr	", ËÏÄÉÒÏ×ËÁ: "
+
+#: src/lang.c:74
+#, c-format
+msgid	"%*s[-- Description: %s --]\n"
+msgstr	"%*s[-- ïÐÉÓÁÎÉÅ: %s --]\n"
+
+#: src/lang.c:75
+#, c-format
+msgid	"%d Authentication failed"
+msgstr	"%d á×ÔÏÒÉÚÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ"
+
+#: src/lang.c:76
+msgid	"Server expects authentication.\n"
+msgstr	"óÅÒ×ÅÒ ÏÖÉÄÁÅÔ Á×ÔÏÒÉÚÁÃÉÀ. \n"
+
+#: src/lang.c:77
+msgid	"    Please enter password: "
+msgstr	"    ðÏÖÁÌÕÊÓÔÁ ××ÅÄÉÔÅ ÐÁÒÏÌØ: "
+
+#: src/lang.c:78
+msgid	"    Please enter username: "
+msgstr	"    ðÏÖÁÌÕÊÓÔÁ ××ÅÄÉÔÅ ÉÍÑ: "
+
+#: src/lang.c:79
+#, c-format
+msgid	"Author search backwards [%s]> "
+msgstr	"ðÏÉÓË ÐÏ á×ÔÏÒÕ ÎÁÚÁÄ [%s]> "
+
+#: src/lang.c:80
+#, c-format
+msgid	"Author search forwards [%s]> "
+msgstr	"ðÏÉÓË ÐÏ á×ÔÏÒÕ ×ÐÅÒÅÄ [%s]> "
+
+#: src/lang.c:81
+#, c-format
+msgid	"Authorized for user: %s\n"
+msgstr	"á×ÔÏÒÉÚÉÒÏ×ÁÎÏ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ: %s\n"
+
+#: src/lang.c:82
+#, c-format
+msgid	"Authorization failed for user: %s\n"
+msgstr	"á×ÔÏÒÉÚÁÃÉÑ ÎÅ ÕÄÁÌÁÓØ ÄÌÑ ÐÏÌØÚÏ×ÁÔÅÌÑ: %s\n"
+
+#: src/lang.c:83
+#, c-format
+msgid	"\n"
+	"Autosubscribed to %s"
+msgstr	"\n"
+	"ðÏÄÐÉÓÁÎ Á×ÔÏÍÁÔÉÞÅÓËÉ ÎÁ %s"
+
+#: src/lang.c:84
+msgid	"Autosubscribing groups...\n"
+msgstr	"á×ÔÏÍÁÔ. ÐÏÄÐÉÓËÁ ÎÁ ÇÒÕÐÐÙ...\n"
+
+#: src/lang.c:85
+#, c-format
+msgid	"Autoselecting articles (use '%s' to see all unread) ..."
+msgstr	"á×ÔÏÍÁÔ. ×ÙÂÏÒ ÓÔÁÔÅÊ (ÉÓÐÏÌØÚÕÊÔÅ '%s' ÄÌÑ ÐÒÏÓÍÏÔÒÁ ÎÅÐÒÏÞÉÔÁÎÎÙÈ) ..."
+
+#: src/lang.c:87
+#, c-format
+msgid	"Active file corrupt - %s"
+msgstr	"áËÔÉ×ÎÙÊ ÆÁÊÌ ÐÏ×ÒÅÖÄÅÎ - %s"
+
+#: src/lang.c:88
+#, c-format
+msgid	"Article to be posted resulted in errors/warnings. %s=quit, %s=Menu, %s=edit: "
+msgstr	"óÔÁÔØÑ Ó ÏÛÉÂËÁÍÉ/ÐÒÅÄÕÐÒÅÖÄÅÎÉÑÍÉ. %s=×ÙÈÏÄ, %s=íÅÎÀ, %s=ÒÅÄÁËÔ.: "
+
+#: src/lang.c:89
+#, c-format
+msgid	"Unrecognized attribute: %s"
+msgstr	"îÅÒÁÓÐÏÚÎÁÎÎÙÊ ÁÔÒÉÂÕÔ: %s"
+
+#: src/lang.c:90
+#, c-format
+msgid	"Bad command. Type '%s' for help."
+msgstr	"ïÛÉÂÏÞÎÁÑ ËÏÍÁÎÄÁ. îÁÂÅÒÉÔÅ '%s' ÄÌÑ ÐÏÍÏÝÉ."
+
+#: src/lang.c:92
+msgid	"Base article"
+msgstr	"ïÓÎÏ×ÎÁÑ ÓÔÁÔØÑ"
+
+#: src/lang.c:93
+msgid	"Base article range"
+msgstr	"äÉÁÐÁÚÏÎ ÏÓÎ. ÓÔÁÔØÉ"
+
+#: src/lang.c:94
+#, c-format
+msgid	"%s: Updating of index files not supported\n"
+msgstr	"%s: ïÂÎÏ×ÌÅÎÉÅ ÉÎÄÅËÓÁ ÎÅÐÏÄÄÅÒÖÉ×ÁÅÍÙÈ ÆÁÊÌÏ×\n"
+
+#: src/lang.c:95
+msgid	"*** Beginning of article ***"
+msgstr	"*** îÁÞÁÌÏ ÓÔÁÔØÉ ***"
+
+#: src/lang.c:97
+#, c-format
+msgid	"Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
+msgstr	"ïÔÍÅÎÉÔØ (ÕÄÁÌÉÔØ) ÉÌÉ ÚÁÍÅÎÉÔØ (ÐÅÒÅÐÉÓÁÔØ) ÓÔÁÔØÀ [%%s]? (%s/%s/%s): "
+
+#: src/lang.c:98
+msgid	"Cancelling article..."
+msgstr	"ïÔÍÅÎÁ ÓÔÁÔØÉ..."
+
+#: src/lang.c:100
+#, c-format
+msgid	"Cannot create %s"
+msgstr	"îÅ ÍÏÇÕ ÓÏÚÄÁÔØ %s"
+
+#: src/lang.c:101
+#, c-format
+msgid	"Can't find base article %d"
+msgstr	"îÅ ÍÏÇÕ ÎÁÊÔÉ ÏÓÎ. ÓÔÁÔØÀ %d"
+
+#: src/lang.c:102
+#, c-format
+msgid	"Can't open %s"
+msgstr	"îÅ ÍÏÇÕ ÏÔËÒÙÔØ %s"
+
+#: src/lang.c:103
+#, c-format
+msgid	"Couldn't open %s for saving"
+msgstr	"îÅ ÍÏÇÕ ÏÔËÒÙÔØ %s ÄÌÑ ÚÁÐÉÓÉ"
+
+#: src/lang.c:104
+msgid	"*** Posting not allowed ***"
+msgstr	"*** ïÔÐÒÁ×ËÁ ÚÁÐÒÅÝÅÎÁ ***"
+
+#: src/lang.c:105
+#, c-format
+msgid	"Posting is not allowed to %s"
+msgstr	"ïÔÐÒÁ×ËÁ ÚÁÐÒÅÝÅÎÁ ÎÁ %s"
+
+#: src/lang.c:106
+#, c-format
+msgid	"Can't retrieve %s"
+msgstr	"îÅ ÍÏÇÕ ÐÏÌÕÞÉÔØ %s"
+
+#: src/lang.c:107
+#, c-format
+msgid	"%s is a directory"
+msgstr	"%s - ÄÉÒÅËÔÏÒÉÑ"
+
+#: src/lang.c:108
+msgid	"Catchup"
+msgstr	"úÁÈ×ÁÔ"
+
+#: src/lang.c:109
+#, c-format
+msgid	"Catchup %s..."
+msgstr	"úÁÈ×ÁÔ %s..."
+
+#: src/lang.c:110
+msgid	"Catchup all groups entered during this session?"
+msgstr	"úÁÈ×ÁÔÉÔØ ×ÓÅ ÇÒÕÐÐÙ ÐÏÓÅÝÅÎÎÙÅ × ÜÔÏÊ ÓÅÓÓÉÉ?"
+
+#: src/lang.c:111
+msgid	"You have tagged articles in this group - catchup anyway?"
+msgstr	"÷Ù ÐÏÍÅÔÉÌÉ ÓÔÁÔØÉ × ÇÒÕÐÐÅ - ÚÁÈ×ÁÔÉÔØ ÎÅÓÍÏÔÒÑ ÎÁ ÜÔÏ?"
+
+#: src/lang.c:112
+#, c-format
+msgid	"%s %d %s in %lu seconds\n"
+msgstr	"%s %d %s × %lu ÓÅËÕÎÄ\n"
+
+#: src/lang.c:113
+msgid	"Caughtup"
+msgstr	"úÁÈ×ÁÞÅÎÏ"
+
+#: src/lang.c:114
+msgid	"Check Prepared Article"
+msgstr	"ðÒÏ×ÅÒÉÔØ ÐÒÉÇÏÔÏ×ÌÅÎÎÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:115
+msgid	"Checking for new groups... "
+msgstr	"ðÏÉÓË ÎÏ×ÙÈ ÇÒÕÐÐ... "
+
+#: src/lang.c:116
+msgid	"Checking for news..."
+msgstr	"ðÒÏ×ÅÒËÁ ÎÏ×ÏÓÔÅÊ..."
+
+#: src/lang.c:117
+#, c-format
+msgid	"Post-process %s=no, %s=yes, %s=shar, %s=quit: "
+msgstr	""
+
+#: src/lang.c:119
+msgid	"ANSI color disabled"
+msgstr	"ANSI Ã×ÅÔÁ ×ËÌÀÞÉÔØ"
+
+#: src/lang.c:120
+msgid	"ANSI color enabled"
+msgstr	"ANSI Ã×ÅÔÁ ×ÙËÌÀÞÉÔØ"
+
+#: src/lang.c:122
+#, c-format
+msgid	"Command failed: %s"
+msgstr	"ïÛÉÂËÁ ÐÒÉ ÉÓÐÏÌÎÅÎÉÉ: %s"
+
+#: src/lang.c:123
+msgid	"Mark not selected articles read?"
+msgstr	"ðÏÍÅÔÉÔØ ÎÅÏÔÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ ËÁË ÐÒÏÞÉÔÁÎÎÙÅ?"
+
+#: src/lang.c:124
+#, c-format
+msgid	"Connecting to %s..."
+msgstr	"óÏÅÄÉÎÑÅÍÓÑ Ó %s..."
+
+#: src/lang.c:125
+msgid	"<CR>"
+msgstr	""
+
+#: src/lang.c:126
+msgid	"Creating active file for saved groups...\n"
+msgstr	"óÏÚÄÁÎÉÅ active ÆÁÊÌÁ ÄÌÑ ÓÏÈÒ. ÇÒÕÐÐ...\n"
+
+#: src/lang.c:127
+msgid	"Creating newsrc file...\n"
+msgstr	"óÏÚÄÁÎÉÅ newsrc ÆÁÊÌÁ...\n"
+
+#: src/lang.c:129 src/lang.c:1147
+msgid	"Default"
+msgstr	"ðÏ ÕÍÏÌÞÁÎÉÀ"
+
+#: src/lang.c:130
+msgid	"Delete saved files that have been post processed?"
+msgstr	"õÄÁÌÉÔØ ÓÏÈÒÁÎÅÎÎÙÅ ÏÂÒÁÂÏÔÁÎÎÙÅ ÆÁÊÌÙ?"
+
+#: src/lang.c:131
+msgid	"Deleting temporary files..."
+msgstr	"õÄÁÌÅÎÉÅ ×ÒÅÍÅÎÎÙÈ ÆÁÊÌÏ×..."
+
+#: src/lang.c:133
+msgid	"*** End of article ***"
+msgstr	"*** ëÏÎÅÃ ÓÔÁÔØÉ ***"
+
+#: src/lang.c:134
+msgid	"*** End of articles ***"
+msgstr	"*** ëÏÎÅÃ ÓÔÁÔÅÊ ***"
+
+#: src/lang.c:135
+msgid	"*** End of groups ***"
+msgstr	"*** ëÏÎÅÃ ÇÒÕÐÐ ***"
+
+#: src/lang.c:136
+msgid	"*** End of thread ***"
+msgstr	"*** ëÏÎÅÃ ÄÉÓËÕÓÓÉÉ ***"
+
+#: src/lang.c:137
+msgid	"Enter limit of articles to get> "
+msgstr	"÷×ÅÄÉÔÅ ÐÒÅÄÅÌ ÐÏÌÕÞÁÅÍÙÈ ÓÔÁÔÅÊ> "
+
+#: src/lang.c:138
+msgid	"Enter Message-ID to go to> "
+msgstr	"÷×ÅÄÉÔÅ Message-ID ÄÌÑ ÐÅÒÅÈÏÄÁ> "
+
+#: src/lang.c:139
+msgid	" and enter next unread thread"
+msgstr	" É ××ÅÄÉÔÅ ÓÌÅÄ. ÎÅÐÒÏÞÉÔÁÎÎÕÀ ÄÉÓËÕÓÓÉÀ"
+
+#: src/lang.c:140
+msgid	" and enter next unread group"
+msgstr	" É ××ÅÄÉÔÅ ÓÌÅÄ. ÎÅÐÒÏÞÉÔÁÎÎÕÀ ÇÒÕÐÐÕ"
+
+#: src/lang.c:141
+msgid	"Enter option number> "
+msgstr	"÷×ÅÄÉÔÅ ÎÅÏÂÑÚÁÔ. ÎÏÍÅÒ> "
+
+#: src/lang.c:142
+#, c-format
+msgid	"Enter range [%s]> "
+msgstr	"÷×ÅÄÉÔÅ ÄÉÁÐÁÚÏÎ [%s]> "
+
+#: src/lang.c:143
+msgid	"\n"
+	"Warning: Approved: header used.\n"
+msgstr	"\n"
+	"ðÒÅÄÕÐÒÅÖÄÅÎÉÅ: Approved: header ÉÓÐÏÌØÚÏ×ÁÎ.\n"
+
+#: src/lang.c:145
+msgid	"\n"
+	"Error: Bad address in Approved: header.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: îÅ×ÅÒÎÙÊ ÁÄÒÅÓ × Approved: header.\n"
+
+#: src/lang.c:146
+msgid	"\n"
+	"Error: Bad address in From: header.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: îÅ×ÅÒÎÙÊ ÁÄÒÅÓ × From: header.\n"
+
+#: src/lang.c:147
+msgid	"\n"
+	"Error: Bad address in Reply-To: header.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: îÅ×ÅÒÎÙÊ ÁÄÒÅÓ × Reply-To: header.\n"
+
+#: src/lang.c:148
+msgid	"\n"
+	"Error: Bad FQDN in Message-ID: header.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: îÅ×ÅÒÎÙÊ FQDN × Message-ID: header.\n"
+
+#: src/lang.c:149
+#, c-format
+msgid	"Can't unlock %s"
+msgstr	"îÅ ÍÏÇÕ ÒÁÚÂÌÏËÉÒÏ×ÁÔØ %s"
+
+#: src/lang.c:151
+#, c-format
+msgid	"Corrupted file %s"
+msgstr	"ðÏ×ÒÅÖÄÅÎÎÙÊ ÆÁÊÌ %s"
+
+#: src/lang.c:152
+#, c-format
+msgid	"Couldn't dotlock %s - article not appended!"
+msgstr	""
+
+#: src/lang.c:153
+#, c-format
+msgid	"Couldn't lock %s - article not appended!"
+msgstr	"îÅ ÍÏÇÕ ÚÁÂÌÏËÉÒÏ×ÁÔØ %s - ÓÔÁÔØÑ ÎÅ ÐÒÉËÒÅÐÌÅÎÁ!"
+
+#: src/lang.c:155
+msgid	"Internal error in GNKSA routine - send bug report.\n"
+msgstr	"÷ÎÕÔÒÅÎÎÑÑ ÏÛÉÂËÁ × ÆÕÎËÃÉÉ GNKSA - ÐÏÛÌÉÔÅ bugreport.\n"
+
+#: src/lang.c:156
+msgid	"Left angle bracket missing in route address.\n"
+msgstr	"ìÅ×ÁÑ ÕÇÌÏ×ÁÑ ÓËÏÂËÁ ÐÒÏÐÕÝÅÎÁ × ÁÄÒÅÓÅ.\n"
+
+#: src/lang.c:157
+msgid	"Left parenthesis missing in old-style address.\n"
+msgstr	"ìÅ×ÁÑ ËÒÕÇÌÁÑ ÓËÏÂËÁ ÐÒÏÐÕÝÅÎÁ × ÁÄÒÅÓÅ ÓÔÁÒÏÇÏ ÓÔÉÌÑ.\n"
+
+#: src/lang.c:158
+msgid	"Right parenthesis missing in old-style address.\n"
+msgstr	"ðÒÁ×ÁÑ ËÒÕÇÌÁÑ ÓËÏÂËÁ ÐÒÏÐÕÝÅÎÁ × ÁÄÒÅÓÅ ÓÔÁÒÏÇÏ ÓÔÉÌÑ.\n"
+
+#: src/lang.c:159
+msgid	"At-sign missing in mail address.\n"
+msgstr	"úÎÁË AT ÐÒÏÐÕÝÅÎ × ÁÄÒÅÓÅ e-mail.\n"
+
+#: src/lang.c:160
+msgid	"Single component FQDN is not allowed. Add your domain.\n"
+msgstr	"åÄÉÎÓÔ×. ËÏÍÐÏÎÅÎÔ FQDN ÎÅÄÏÐÕÓÔÉÍ. äÏÂÁ×ÔÅ ÄÏÍÅÎ.\n"
+
+#: src/lang.c:161
+msgid	"Invalid domain. Send bug report if your top level domain really exists.\n"
+	"Use .invalid as top level domain for munged addresses.\n"
+msgstr	"îÅÐÒÁ×ÉÌØÎÙÊ ÄÏÍÅÎ. ðÏÛÌÉÔÅ bugreport ÅÓÌÉ ÄÏÍÅÎ ÓÕÝÅÓÔ×ÕÅÔ.\n"
+	"éÓÐÏÌØÚÕÊÔÅ .invalid ËÁË ÄÏÍÅÎ 1 ÕÒÏ×ÎÑ ÄÌÑ ÉÓÐÏÒÞÅÎÎÙÈ ÁÄÒÅÓÏ×.\n"
+
+#: src/lang.c:162
+msgid	"Illegal domain. Send bug report if your top level domain really exists.\n"
+	"Use .invalid as top level domain for munged addresses.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÄÏÍÅÎ. ðÏÛÌÉÔÅ bugreport ÅÓÌÉ ÄÏÍÅÎ ÓÕÝÅÓÔ×ÕÅÔ.\n"
+	"éÓÐÏÌØÚÕÊÔÅ .invalid ËÁË ÄÏÍÅÎ 1 ÕÒÏ×ÎÑ ÄÌÑ ÉÓÐÏÒÞÅÎÎÙÈ ÁÄÒÅÓÏ×.\n"
+
+#: src/lang.c:163
+msgid	"Unknown domain. Send bug report if your top level domain really exists.\n"
+	"Use .invalid as top level domain for munged addresses.\n"
+msgstr	"îÅÉÚ×ÅÓÔÎÙÊ ÄÏÍÅÎ. ðÏÛÌÉÔÅ bugreport ÅÓÌÉ ÄÏÍÅÎ ÓÕÝÅÓÔ×ÕÅÔ.\n"
+	"éÓÐÏÌØÚÕÊÔÅ .invalid ËÁË ÄÏÍÅÎ 1 ÕÒÏ×ÎÑ ÄÌÑ ÉÓÐÏÒÞÅÎÎÙÈ ÁÄÒÅÓÏ×.\n"
+
+#: src/lang.c:164
+msgid	"Illegal character in FQDN.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË × FQDN.\n"
+
+#: src/lang.c:165
+msgid	"Zero length FQDN component not allowed.\n"
+msgstr	"îÕÌÅ×ÁÑ ÄÌÉÎÁ ËÏÍÐÏÎÅÎÔÁ FQDN ÎÅÄÏÐÕÓÔÉÍÁ.\n"
+
+#: src/lang.c:166
+msgid	"FQDN component exceeds maximum allowed length (63 chars).\n"
+msgstr	"ëÏÍÐÏÎÅÎÔ FQDN ÐÒÅ×ÙÛÁÅÔ ÍÁËÓ. ÄÏÐÕÓÔÉÍÕÀ ÄÌÉÎÕ (63 ÚÎÁËÁ).\n"
+
+#: src/lang.c:167
+msgid	"FQDN component may not start or end with hyphen.\n"
+msgstr	"ëÏÍÐÏÎÅÎÔ FQDN ÎÅ ÍÏÖÅÔ ÎÁÞÉÎÁÔØÓÑ ÉÌÉ ÚÁËÁÎÞÉ×ÁÔØÓÑ ÄÅÆÉÓÏÍ.\n"
+
+#: src/lang.c:168
+msgid	"FQDN component may not start with digit.\n"
+msgstr	"ëÏÍÐÏÎÅÎÔ FQDN ÎÅ ÍÏÖÅÔ ÎÁÞÉÎÁÔØÓÑ Ó ÃÉÆÒÙ.\n"
+
+#: src/lang.c:169
+msgid	"Domain literal has impossible numeric value.\n"
+msgstr	"÷ ÚÎÁËÅ ÄÏÍÅÎÁ ÎÅÄÏÐÕÓÔÉÍÙÊ ÃÉÆÒ. ÚÎÁË.\n"
+
+#: src/lang.c:170
+msgid	"Domain literal is for private use only and not allowed for global use.\n"
+msgstr	"úÎÁË ÄÏÍÅÎÁ ÔÏÌØËÏ ÄÌÑ ÞÁÓÔÎÏÇÏ ÉÓÐÏÌØÚÏ×ÁÎÉÑ É ÎÅÄÏÐÕÓÔÉÍ.\n"
+
+#: src/lang.c:171
+msgid	"Right bracket missing in domain literal.\n"
+msgstr	"ðÒÁ×ÁÑ ÓËÏÂËÁ ÐÒÏÐÕÝÅÎÁ × ÚÎÁËÅ ÄÏÍÅÎÁ.\n"
+
+#: src/lang.c:172
+msgid	"Missing localpart of mail address.\n"
+msgstr	"ðÒÏÐÕÝÅÎÁ ÌÏËÁÌØÎÁÑ ÞÁÓÔØ e-mail.\n"
+
+#: src/lang.c:173
+msgid	"Illegal character in localpart of mail address.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË × ÌÏËÁÌØÎÏÊ ÞÁÓÔÉ e-mail.\n"
+
+#: src/lang.c:174
+msgid	"Zero length localpart component not allowed.\n"
+msgstr	"îÕÌÅ×ÁÑ ÄÌÉÎÁ ÌÏËÁÌØÎÏÊ ÞÁÓÔÉ e-mail ÎÅÄÏÐÕÓÔÉÍÁ.\n"
+
+#: src/lang.c:175
+msgid	"Illegal character in realname.\n"
+	"Unquoted words may not contain '!()<>@,;:\\.[]' in route addresses.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË × realname.\n"
+	"óÌÏ×Á ÂÅÚ ËÁ×ÙÞÅË ÎÅ ÍÏÇÕÔ ÓÏÄÅÒÖÁÔØ '!()<>@,;:\\.[]' × ÁÄÒÅÓÅ ÏÔÐÒÁ×ÌÅÎÉÑ.\n"
+
+#: src/lang.c:176
+msgid	"Illegal character in realname.\n"
+	"Quoted words may not contain '()<>\\'.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË × realname.\n"
+	"óÌÏ×Á × ËÁ×ÙÞËÁÈ ÎÅ ÍÏÇÕÔ ÓÏÄÅÒÖÁÔØ '()<>\\'.\n"
+
+#: src/lang.c:177
+msgid	"Illegal character in realname.\n"
+	"Encoded words may not contain '!()<>@,;:\"\\.[]/=' in parameter.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË × realname.\n"
+	"ëÏÄÉÒÏ×ÁÎÎÙÅ ÓÌÏ×Á ÎÅ ÍÏÇÕÔ ÓÏÄÅÒÖÁÔØ '!()<>@,;:\"\\.[]/=' × ÐÁÒÁÍÅÔÒÅ.\n"
+
+#: src/lang.c:178
+msgid	"Bad syntax in encoded word used in realname.\n"
+msgstr	"îÅ×ÅÒÎÙÊ ÓÉÎÔÁËÓÉÓ × ËÏÄÉÒÏ×ÁÎÎÏÍ ÓÌÏ×Å, ÉÓÐÏÌØÚÏ×ÁÎÎÏÍ × realname.\n"
+
+#: src/lang.c:179
+msgid	"Illegal character in realname.\n"
+	"Unquoted words may not contain '()<>\\' in old-style addresses.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË × realname.\n"
+	"óÌÏ×Á ÂÅÚ ËÁ×ÙÞÅË ÎÅ ÍÏÇÕÔ ÓÏÄÅÒÖÁÔØ '()<>\\' × ÁÄÒÅÓÁÈ ÓÔÁÒÏÇÏ ÓÔÉÌÑ.\n"
+
+#: src/lang.c:180
+msgid	"Illegal character in realname.\n"
+	"Control characters and unencoded 8bit characters > 127 are not allowed.\n"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÎÁË × realname.\n"
+	"õÐÒÁ×ÌÑÀÝÉÅ ÓÉÍ×ÏÌÙ É ÎÅËÏÄ. 8-ÂÉÔÎÙÅ ÓÉÍ×. > 127 ÎÅÄÏÐÕÓÔÉÍÙ.\n"
+
+#: src/lang.c:181
+msgid	"\n"
+	"Error: No blank line found after header.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: îÅ ÎÁÊÄÅÎÁ ÐÕÓÔÁÑ ÓÔÒÏËÁ ÐÏÓÌÅ ÚÁÇÏÌÏ×ËÁ.\n"
+
+#. TODO: fixme, US-ASCII is not the only 7bit charset we know about
+#: src/lang.c:183
+msgid	"\n"
+	"Error: Posting contains non-ASCII characters but MM_CHARSET is set to\n"
+	"       US-ASCII  - please change this setting to a suitable value for\n"
+	"       your language  using the  M)enu of configurable  options or by\n"
+	"       editing tinrc.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: óÏÏÂÝÅÎÉÅ ÓÏÄÅÒÖÉÔ ÎÅ-ASCII ÓÉÍ×ÏÌÙ ÎÏ MM_CHARSET ÕÓÔÁÎÏ×ÌÅÎ\n"
+	"        US-ASCII - ÐÏÖÁÌÕÊÓÔÁ ÓÍÅÎÉÔÅ ÚÎÁÞÅÎÉÅ ÎÁ ÓÏÏÔ×ÅÔÓÔ×ÕÀÝÅÅ\n"
+	"        ×ÁÛÅÍÕ ÑÚÙËÕ, ÉÓÐÏÌØÚÕÑ M)ÍÅÎÀ ËÏÎÆÉÇÕÒÉÒÕÅÍÙÈ ÚÎÁÞÅÎÉÊ ÉÌÉ\n"
+	"        ÏÔÒÅÄÁËÔÉÒÕÊÔÅ tinrc.\n"
+
+#: src/lang.c:188
+msgid	"\n"
+	"Error: Posting contains  non-ASCII characters  but the  MIME encoding\n"
+	"       for news  messages  is set  to \"7bit\"  -  please change this\n"
+	"       setting to \"8bit\" or \"quoted-printable\" depending  on what\n"
+	"       is more common  in your part  of the world.  This can  be done\n"
+	"       using the M)enu of configurable options or by editing tinrc.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: óÏÏÂÝÅÎÉÅ ÓÏÄÅÒÖÉÔ ÎÅ-ASCII ÓÉÍ×ÏÌÙ ÎÏ ËÏÄÉÒÏ×ËÁ MIME ÕÓÔÁÎÏ×ÌÅÎÁ\n"
+	"        × \"7bit\" - ÐÏÖÁÌÕÊÓÔÁ ÓÍÅÎÉÔÅ ÚÎÁÞÅÎÉÅ ÎÁ \"8bit\" ÉÌÉ\n"
+	"        \"quoted-printable\" × ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ ÷ÁÛÅÇÏ ÕÄÏÂÓÔ×Á. éÓÐÏÌØÚÕÊÔÅ\n"
+	"        M)ÍÅÎÀ  ËÏÎÆÉÇÕÒÉÒÕÅÍÙÈ ÚÎÁÞÅÎÉÊ ÉÌÉ ÏÔÒÅÄÁËÔÉÒÕÊÔÅ tinrc.\n"
+
+#: src/lang.c:194
+msgid	"\n"
+	"Error: Article starts with blank line instead of header\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: óÏÏÂÝÅÎÉÅ ÎÁÞÉÎÁÅÔÓÑ Ó ÐÕÓÔÏÊ ÓÔÒÏËÉ ×ÍÅÓÔÏ ÚÁÇÏÌÏ×ËÁ\n"
+
+#: src/lang.c:195
+#, c-format
+msgid	"\n"
+	"Error: Header on line %d does not have a colon after the header name:\n"
+	"%s\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: úÁÇÏÌÏ×ÏË × ÓÔÒÏËÅ %d ÎÅ ÉÍÅÅÔ Ä×ÏÅÔÏÞÉÑ ÐÏÓÌÅ ÉÍÅÎÉ:\n"
+	"%s\n"
+
+#: src/lang.c:196
+#, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line is empty.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: óÔÒÏËÁ  \"%s:\" ÐÕÓÔÁÑ.\n"
+
+#: src/lang.c:197
+#, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line is missing from the article header.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: óÔÒÏËÁ  \"%s:\" ÐÒÏÐÕÝÅÎÁ × ÚÁÌÏ×ËÅ ÓÔÁÔØÉ.\n"
+
+#: src/lang.c:198
+#, c-format
+msgid	"\n"
+	"Error: Header on line %d does not have a space after the colon:\n"
+	"%s\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: úÁÇÏÌÏ×ÏË × ÓÔÒÏËÅ %d ÎÅ ÉÍÅÅÔ ÐÒÏÂÅÌÁ ÐÏÓÌÅ Ä×ÏÅÔÏÞÉÑ:\n"
+	"%s\n"
+
+#: src/lang.c:199
+#, c-format
+msgid	"\n"
+	"Error: There are multiple (%d) \"%s:\" lines in the header.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: îÅÓËÏÌØËÏ ÓÔÒÏË (%d) \"%s:\" × ÚÁÇÏÌÏ×ËÅ.\n"
+
+#: src/lang.c:200
+#, c-format
+msgid	"Insecure permissions of %s (%o)"
+msgstr	"îÅÂÅÚÏÐÁÓÎÙÅ ÐÒÁ×Á ÄÏÓÔÕÐÁ %s (%o)"
+
+#: src/lang.c:201
+#, c-format
+msgid	"Invalid response to GROUP command, %s"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÏÔ×ÅÔ ÎÁ ËÏÍÁÎÄÕ GROUP, %s"
+
+#: src/lang.c:203
+#, c-format
+msgid	"MIME parse error: Unexpected end of %s/%s article"
+msgstr	"ïÛÉÂËÁ ÏÂÒÁÂÏÔËÉ MIME: îÅÏÖÉÄÁÎÎÏÅ ÏËÏÎÞÁÎÉÅ ÓÔÁÔØÉ %s/%s"
+
+#: src/lang.c:204
+msgid	"MIME parse error: Start boundary whilst reading headers"
+msgstr	"ïÛÉÂËÁ ÏÂÒÁÂÏÔËÉ MIME: îÁÞÁÌÏ ÇÒÁÎÉÃÙ × ÚÁÇÏÌÏ×ËÅ"
+
+#: src/lang.c:205
+msgid	"Can't get a (fully-qualified) domain-name!"
+msgstr	"îÅ ÕÄÁÅÔÓÑ ÐÏÌÕÞÉÔØ (fully-qualified) ÄÏÍÅÎ!"
+
+#: src/lang.c:206
+#, c-format
+msgid	"No permissions to go into %s\n"
+msgstr	"îÅÔ ÄÏÓÔÕÐÁ ÄÌÑ  %s\n"
+
+#: src/lang.c:207
+msgid	"\n"
+	"Error: From: line missing.\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: From: ÐÒÏÐÕÝÅÎÁ.\n"
+
+#: src/lang.c:208
+#, c-format
+msgid	"No read permissions for %s\n"
+msgstr	"îÅÔ ÐÒÁ× ÄÏÓÔÕÐÁ ÄÌÑ ÞÔÅÎÉÑ ÄÌÑ %s\n"
+
+#: src/lang.c:209
+#, c-format
+msgid	"File %s does not exist\n"
+msgstr	"æÁÊÌ %s ÎÅ ÓÕÝÅÓÔ×ÕÅÔ\n"
+
+#: src/lang.c:210
+#, c-format
+msgid	"No write permissions for %s\n"
+msgstr	"îÅÔ ÐÒÁ× ÄÏÓÔÕÐÁ ÄÌÑ ÚÁÐÉÓÉ ÄÌÑ %s\n"
+
+#: src/lang.c:211
+msgid	"Can't get user information (/etc/passwd missing?)"
+msgstr	"îÅ ÕÄÁÅÔÓÑ ÐÏÌÕÞÉÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ÐÏÌØÚÏ×ÁÔÅÌÅ (/etc/passwd ÎÅ ÓÕÝ. ?)"
+
+#: src/lang.c:212
+msgid	"errors"
+msgstr	"ÏÛÉÂËÉ"
+
+#: src/lang.c:213
+#, c-format
+msgid	"\n"
+	"Error on line %d: \"Sender:\" header not allowed (it will be added for you)\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ × ÓÔÒÏËÅ %d: \"Sender:\" ÚÁÇÏÌÏ×ÏË ÎÅÄÏÐÕÓÔÉÍ (ÂÕÄÅÔ ÄÏÂÁ×ÌÅÎ ÓÁÍ)\n"
+
+#: src/lang.c:214
+#, c-format
+msgid	"Server has non of the groups listed in %s"
+msgstr	"îÁ ÓÅÒ×ÅÒÅ ÎÅÔ ÎÉ ÏÄÎÏÊ ÇÒÕÐÐÙ ÕËÁÚÁÎÎÙÈ × %s"
+
+#: src/lang.c:215
+msgid	"error"
+msgstr	"ÏÛÉÂËÁ"
+
+#: src/lang.c:216
+msgid	"Unknown display level"
+msgstr	"îÅÉÚ×ÅÓÔÎÙÊ ÕÒÏ×ÅÎØ ÄÉÓÐÌÅÑ"
+
+#: src/lang.c:217
+msgid	"<ESC>"
+msgstr	""
+
+#: src/lang.c:218
+msgid	"Exiting..."
+msgstr	"÷ÙÈÏÄ..."
+
+#: src/lang.c:219
+msgid	"leaving external mail-reader"
+msgstr	"ÏÓÔÁ×ÌÑÅÍ ×ÎÅÛÎÉÊ e-mail ËÌÉÅÎÔ"
+
+#: src/lang.c:220
+#, c-format
+msgid	"Extracting %s..."
+msgstr	"éÚ×ÌÅËÁÅÍ %s..."
+
+#: src/lang.c:222
+#, c-format
+msgid	"Error writing %s file. Filesystem full? File reset to previous state."
+msgstr	"ïÛÉÂËÁ ÚÁÐÉÓÉ %s ÆÁÊÌÁ. îÅÔ ÍÅÓÔÁ? æÁÊÌ ÓÂÒÏÛÅÎ × ÐÒÅÄÙÄ. ÓÏÓÔÏÑÎÉÅ."
+
+#: src/lang.c:223
+#, c-format
+msgid	"Error making backup of %s file. Filesystem full?"
+msgstr	"ïÛÉÂËÁ backup %s ÆÁÊÌÁ. îÅÔ ÍÅÓÔÁ?"
+
+#: src/lang.c:224
+#, c-format
+msgid	"Filtering global rules (%d/%d)..."
+msgstr	"æÉÌØÔÒÁÃÉÀ ÇÌÏÂÁÌØÎÙÈ ÐÒÁ×ÉÌ (%d/%d)..."
+
+#: src/lang.c:225
+msgid	"Rule created by: "
+msgstr	"ðÒÁ×ÉÌÏ ÓÏÚÄÁÎÏ: "
+
+#: src/lang.c:226
+#, c-format
+msgid	"Enter pattern [%s]> "
+msgstr	"÷×ÅÄÉÔÅ ÛÁÂÌÏÎ [%s]> "
+
+#: src/lang.c:227
+#, c-format
+msgid	"\n"
+	"You requested followups to your article to go to the following %s:\n"
+msgstr	"\n"
+	"÷Ù ÚÁÐÒÁÛÉ×ÁÌÉ followups ÎÁ ×ÁÛÕ ÓÔÁÔØÀ × %s:\n"
+
+#: src/lang.c:228
+#, c-format
+msgid	"  %s\t Answers will be directed to you by mail.\n"
+msgstr	"  %s\t ïÔ×ÅÔÙ ÂÕÄÕÔ ÎÁÐÒÁ×ÌÅÎÙ Ë ÷ÁÍ ÐÏ e-mail.\n"
+
+#: src/lang.c:229
+msgid	"-- forwarded message --\n"
+msgstr	"-- ÐÅÒÅÓÌÁÎÎÏÅ ÓÏÏÂÝÅÎÉÅ --\n"
+
+#: src/lang.c:230
+msgid	"-- end of forwarded message --\n"
+msgstr	"-- ËÏÎÅÃ ÐÅÒÅÓÌÁÎÎÏÇÏ ÓÏÏÂÝÅÎÉÑ --\n"
+
+#: src/lang.c:231
+msgid	"# Format:\n"
+	"#   comment=STRING    Optional. Multiple lines allowed. Comments must be "
+	"placed\n"
+	"#                     at the beginning of a rule, or they will be moved to "
+	"the\n"
+	"#                     next rule. '#' is not a valid keyword for a comment!\n"
+	"#   group=STRING      Mandatory. Newsgroups list (e.g. comp.*,!*sources*).\n"
+	"#   case=NUM          Mandatory. Compare=0 / ignore=1 case when filtering.\n"
+	"#   score=NUM|STRING  Mandatory. Score to give. Either:\n"
+	"#     score=NUM         A number (e.g. 70). Or:\n"
+	"#     score=STRING      One of the two keywords: 'hot' or 'kill'.\n"
+	"#   subj=STRING       Optional. Subject: line (e.g. How to be a wizard).\n"
+	"#   from=STRING       Optional. From: line (e.g. *Craig Shergold*).\n"
+	"#   msgid=STRING      Optional. Message-ID: line (e.g. <123@ether.net>) with\n"
+	"#                     full references.\n"
+	"#   msgid_last=STRING Optional. Like above, but with last reference only.\n"
+	"#   msgid_only=STRING Optional. Like above, but without references.\n"
+	"#   refs_only=STRING  Optional. References: line (e.g. <123@ether.net>) "
+	"without\n"
+	"#                     Message-ID:\n"
+	"#   lines=[<>]?NUM    Optional. Lines: line. '<' or '>' are optional.\n"
+	"#   gnksa=[<>]?NUM    Optional. GNKSA parse_from() return code. '<' or '>' "
+	"opt.\n"
+	"#   xref=PATTERN      Optional. Kill pattern (e.g. alt.flame*)\n"
+	"#   time=NUM          Optional. time_t value when rule expires\n"
+	"#\n"
+msgstr	""
+
+#: src/lang.c:252
+#, c-format
+msgid	"Enter score for rule (default=%d): "
+msgstr	"÷×ÅÄÉÔÅ score ÄÌÑ ÐÒÁ×ÉÌÁ (ÐÏ ÕÍÏÌÞÁÎÉÀ=%d): "
+
+#: src/lang.c:253
+#, c-format
+msgid	"Enter the score weight (range 0 < score <= %d)"
+msgstr	"÷×ÅÄÉÔÅ ×ÅÓ score (× ÐÒÅÄÅÌÁÈ 0 < score <= %d)"
+
+#. SCORE_MAX
+#: src/lang.c:254
+msgid	"Full"
+msgstr	"ðÏÌÎÙÊ"
+
+#: src/lang.c:255
+msgid	"Comment (optional)  : "
+msgstr	"ëÏÍÍÅÎÔÁÒÉÉ (ÎÅÏÂÑÚÁÔÅÌØÎÙÅ)  : "
+
+#: src/lang.c:256
+msgid	"Apply pattern to    : "
+msgstr	"ðÒÉÍÅÎÉÔØ ÛÁÂÌÏÎ Ë    : "
+
+#: src/lang.c:257
+msgid	"From: line (ignore case)      "
+msgstr	"From: ÓÔÒÏËÁ (ÉÇÎÏÒÉÒ. ÒÅÇÉÓÔÒ)    "
+
+#: src/lang.c:258
+msgid	"From: line (case sensitive)   "
+msgstr	"From: ÓÔÒÏËÁ (ÎÅÉÇÎÏÒÉÒ. ÒÅÇÉÓÔÒ)    "
+
+#: src/lang.c:260
+#, c-format
+msgid	"%s%s: Unknown host.\n"
+msgstr	"%s%s: îÅÉÚ×ÅÓÔÎÙÊ ËÏÍÐØÀÔÅÒ.\n"
+
+#: src/lang.c:261
+msgid	"global "
+msgstr	"ÇÌÏÂÁÌØÎÙÊ "
+
+#: src/lang.c:262
+#, c-format
+msgid	"Please use %.100s instead"
+msgstr	"ðÏÖÁÌÕÊÓÔÁ ÉÓÐÏÌØÚÕÊÔÅ ×ÍÅÓÔÏ ÜÔÏÇÏ %.100s"
+
+#: src/lang.c:263
+#, c-format
+msgid	"%s is bogus"
+msgstr	"%s ÆÉËÔÉ×ÎÁ(bogus)"
+
+#: src/lang.c:264
+#, c-format
+msgid	"Group %s is moderated. Continue?"
+msgstr	"çÒÕÐÐÁ %s ÍÏÄÅÒÉÒÕÅÔÓÑ. ðÒÏÄÏÌÖÉÔØ?"
+
+#: src/lang.c:265
+msgid	"groups"
+msgstr	"ÇÒÕÐÐÙ"
+
+#: src/lang.c:266
+#, c-format
+msgid	"Rereading %s..."
+msgstr	"ðÅÒÅÞÉÔÙ×ÁÎÉÅ %s..."
+
+#: src/lang.c:267
+msgid	"Top Level Commands"
+msgstr	"ëÏÍÁÎÄÙ ×ÅÒÈÎÅÇÏ ÕÒÏ×ÎÑ"
+
+#: src/lang.c:268
+msgid	"Group Selection"
+msgstr	"÷ÙÂÏÒ ÇÒÕÐÐÙ"
+
+#: src/lang.c:269
+msgid	"group"
+msgstr	"ÇÒÕÐÐÁ"
+
+#: src/lang.c:271
+msgid	"One or more lines of comment. <CR> to add a line or proceed if line is empty."
+msgstr	"ïÄÎÁ ÉÌÉ ÂÏÌÅÅ ÌÉÎÉÊ ËÏÍÍÅÎÔÁÒÉÅ×. <÷÷ïä> ÎÏ×ÁÑ ÓÔÒÏËÁ ÉÌÉ ÄÁÌØÛÅ ÅÓÌÉ ÓÔÒÏËÁ "
+	"ÐÕÓÔÁ."
+
+#: src/lang.c:272
+msgid	"From: line to add to filter file. <SPACE> toggles & <CR> sets."
+msgstr	"From: ÓÔÒÏËÁ ÄÌÑ ÄÏÂ. × ÆÉÌØÔÒ. <ðòïâåì> ÉÚÍÅÎÉÔØ Á <÷÷ïä> ÕÓÔÁÎÏ×ÉÔØ."
+
+#: src/lang.c:273
+msgid	"Linecount of articles to be filtered. < for less, > for more, = for equal."
+msgstr	"äÌÉÎÁ ÆÉÌØÔÒÕÅÍÙÈ ÓÔÁÔÅÊ. < ÍÅÎØÛÅ, > ÂÏÌØÛÅ, = ÒÏ×ÎÏ."
+
+#: src/lang.c:274
+msgid	"Message-ID: line to add to filter file. <SPACE> toggles & <CR> sets."
+msgstr	"Message-ID: ÓÔÒÏËÁ ÄÌÑ ÄÏÂ. × ÆÉÌØÔÒ. <ðòïâåì> ÉÚÍÅÎÉÔØ Á <÷÷ïä> ÕÓÔÁÎÏ×ÉÔØ."
+
+#: src/lang.c:275
+msgid	"Subject: line to add to filter file. <SPACE> toggles & <CR> sets."
+msgstr	"Subject: ÓÔÒÏËÁ ÄÌÑ ÄÏÂ. × ÆÉÌØÔÒ. <ðòïâåì> ÉÚÍÅÎÉÔØ Á <÷÷ïä> ÕÓÔÁÎÏ×ÉÔØ."
+
+#: src/lang.c:276
+msgid	"Enter text pattern to filter if Subject: & From: lines are not what you want."
+msgstr	"÷×ÅÄÉÔÅ ÛÁÂÌÏÎ ÄÌÑ ÆÉÌØÔÒÁÃÉÉ ÅÓÌÉ Subject: É From: ÓÔÒÏËÉ ÎÅÖÅÌÁÎÎÙ."
+
+#: src/lang.c:277
+msgid	"Select where text pattern should be applied. <SPACE> toggles & <CR> sets."
+msgstr	"÷ÙÂÒÁÔØ ÇÄÅ ÛÁÂÌÏÎ ÂÕÄÅÔ ÐÒÉÍÅÎÅÎ. <ðòïâåì> ÉÚÍÅÎÉÔØ Á <÷÷ïä> ÕÓÔÁÎÏ×ÉÔØ."
+
+#: src/lang.c:278
+msgid	"Expiration time in days for the entered filter. <SPACE> toggles & <CR> sets."
+msgstr	"÷ÒÅÍÑ ÄÅÊÓÔ×ÉÑ ÆÉÌØÔÒÁ × ÄÎÑÈ. <ðòïâåì> ÉÚÍÅÎÉÔØ Á <÷÷ïä> ÕÓÔÁÎÏ×ÉÔØ."
+
+#: src/lang.c:279
+msgid	"Apply kill only to current group or all groups. <SPACE> toggles & <CR> sets."
+msgstr	"ðÒÉÍÅÎÉÔØ ÕÎÉÞ. ÔÏÌØËÏ Ë ÔÅËÕÝÅÊ ÉÌÉ ËÏ ×ÓÅÍ ÇÒÕÐÐÁÍ. <ðòïâåì> ÉÚÍÅÎÉÔØ Á "
+	"<÷÷ïä> ÕÓÔÁÎÏ×ÉÔØ."
+
+#: src/lang.c:280
+msgid	"Apply select to current group or all groups. <SPACE> toggles & <CR> sets."
+msgstr	"ðÒÉÍÅÎÉÔØ ×ÙÂÏÒ Ë ÔÅËÕÝÅÊ ÉÌÉ ËÏ ×ÓÅÍ ÇÒÕÐÐÁÍ. <ðòïâåì> ÉÚÍÅÎÉÔØ Á <÷÷ïä> "
+	"ÕÓÔÁÎÏ×ÉÔØ."
+
+#: src/lang.c:281
+msgid	"kill an article via a menu"
+msgstr	"õÎÉÞÔÏÖÉÔØ ÓÔÁÔØÀ ÞÅÒÅÚ ÍÅÎÀ"
+
+#: src/lang.c:282
+msgid	"auto-select (hot) an article via a menu"
+msgstr	"Á×ÔÏ-×ÙÂÏÒ (hot) ÓÔÁÔØÉ ÞÅÒÅÚ ÍÅÎÀ"
+
+#: src/lang.c:283
+msgid	"Browse URLs in article"
+msgstr	"ðÒÏÓÍÏÔÒ URL × ÓÔÁÔØÅ"
+
+#: src/lang.c:284
+msgid	"0 - 9\t  display article by number in current thread"
+msgstr	"0 - 9\t  ÐÏËÁÚÁÔØ ÓÔÁÔØÀ ÐÏ ÎÏÍÅÒÕ × ÄÉÓËÕÓÓÉÉ"
+
+#: src/lang.c:285
+msgid	"cancel (delete) or supersede (overwrite) current article"
+msgstr	"ÏÔÍÅÎÉÔØ (ÕÄÁÌÉÔØ) ÉÌÉ ÚÁÍÅÎÉÔØ (ÐÅÒÅÐÉÓÁÔØ) ÔÅËÕÝÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:286
+msgid	"edit article (mail-groups only)"
+msgstr	"ÒÅÄÁËÔÉÒÏ×ÁÔØ ÓÔÁÔØÀ (ÔÏÌØËÏ ÄÌÑ ÇÒÕÐÐ mail)"
+
+#: src/lang.c:287
+msgid	"display first article in current thread"
+msgstr	"ÐÏËÁÚÁÔØ ÐÅÒ×ÕÀ ÓÔÁÔØÀ × ÔÅËÕÝÅÊ ÄÉÓËÕÓÓÉÉ"
+
+#: src/lang.c:288
+msgid	"display first page of article"
+msgstr	"ÐÏËÁÚÁÔØ ÐÅÒ×ÕÀ ÓÔÒÁÎÉÃÕ ÓÔÁÔØÉ"
+
+#: src/lang.c:289
+msgid	"post followup to current article"
+msgstr	"ÏÔÐÒÁ×ÉÔØ followup ÎÁ ÔÅËÕÝÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:290
+msgid	"post followup (don't copy text) to current article"
+msgstr	"ÏÔÐÒÁ×ÉÔØ followup (ÎÅ ËÏÐÉÒÕÑ ÔÅËÓÔ) ÎÁ ÔÅËÕÝÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:291
+msgid	"post followup to current article quoting complete headers"
+msgstr	"ÏÔÐÒÁ×ÉÔØ followup ÎÁ ÔÅËÕÝÕÀ ÓÔÁÔØÀ, ÃÉÔÉÒÕÑ ÐÏÌÎÙÅ ÚÁÇÏÌÏ×ËÉ"
+
+#: src/lang.c:292
+msgid	"display last article in current thread"
+msgstr	"ÐÏËÁÚÁÔØ ÐÏÓÌÅÄÎÀÀ ÓÔÁÔØÀ × ÔÅËÕÝÅÊ ÄÉÓËÕÓÓÉÉ"
+
+#: src/lang.c:293
+msgid	"display last page of article"
+msgstr	"ÐÏËÁÚÁÔØ ÐÏÓÌÅÄÎÀÀ ÓÔÒÁÎÉÃÕ ÓÔÁÔØÉ"
+
+#: src/lang.c:294
+msgid	"mark rest of thread as read and advance to next unread"
+msgstr	"ÐÏÍÅÔÉÔØ ÏÓÔÁÔÏË ÄÉÓË. ËÁË ÐÒÏÞÉÔÁÎÏ É ÐÅÒÅÎÅÓÔÉÓØ ÎÁ ÓÌÅÄ. ÎÅÐÒÏÞÉÔ."
+
+#: src/lang.c:295
+msgid	"display next article"
+msgstr	"ÐÏËÁÚÁÔØ ÓÌÅÄÕÀÝÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:296
+msgid	"display first article in next thread"
+msgstr	"ÐÏËÁÚÁÔØ ÐÅÒ×ÕÀ ÓÔÁÔØÀ × ÓÌÅÄ. ÄÉÓËÕÓÓÉÉ"
+
+#: src/lang.c:297
+msgid	"display next unread article"
+msgstr	"ÐÏËÁÚÁÔØ ÓÌÅÄÕÀÝÕÀ ÎÅÐÒÏÞÉÔÁÎÎÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:298
+msgid	"go to the article that this one followed up"
+msgstr	"ÐÅÒÅÊÔÅ ÎÁ ÓÔÁÔØÀ ÚÁ ËÏÔÏÒÏÊ ÓÌÅÄÕÅÔ ÜÔÁ ÓÔÁÔØÑ"
+
+#: src/lang.c:299
+msgid	"display previous article"
+msgstr	"ÐÏËÁÚÁÔØ ÐÒÅÄÙÄÕÝÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:300
+msgid	"display previous unread article"
+msgstr	"ÐÏËÁÚÁÔØ ÐÒÅÄÙÄÕÝÕÀ ÎÅÐÒÏÞÉÔÁÎÎÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:301
+msgid	"quickly kill an article using defaults"
+msgstr	"ÂÙÓÔÒÏ ÕÎÉÞÔÏÖÉÔØ ÓÔÁÔØÀ ÉÓÐÏÌØÚÕÑ ÕÍÏÌÞÁÎÉÑ"
+
+#: src/lang.c:302
+msgid	"quickly auto-select (hot) an article using defaults"
+msgstr	"ÂÙÓÔÒÙÊ Á×ÔÏ-×ÙÂÏÒ (hot) ÓÔÁÔØÉ ÉÓÐÏÌØÚÕÑ ÕÍÏÌÞÁÎÉÑ"
+
+#: src/lang.c:303
+msgid	"return to group selection level"
+msgstr	"×ÅÒÎÕÔØÓÑ × ÕÒÏ×ÅÎØ ×ÙÂÏÒÁ ÇÒÕÐÐ"
+
+#: src/lang.c:304
+msgid	"reply through mail to author"
+msgstr	"ÏÔ×ÅÔÉÔØ ÐÏ e-mail Á×ÔÏÒÕ"
+
+#: src/lang.c:305
+msgid	"reply through mail (don't copy text) to author"
+msgstr	"ÏÔ×ÅÔÉÔØ ÐÏ e-mail (ÎÅ ×ÓÔÁ×ÌÑÑ ÔÅËÓÔ) Á×ÔÏÒÕ"
+
+#: src/lang.c:306
+msgid	"reply through mail to author quoting complete headers"
+msgstr	"ÏÔ×ÅÔÉÔØ ÐÏ e-mail Á×ÔÏÒÕ ÃÉÔÉÒÕÑ ÐÏÌÎÏÓÔØÀ ÚÁÇÏÌÏ×ËÉ"
+
+#: src/lang.c:307
+msgid	"repost chosen article to another group"
+msgstr	"ÏÔÐÒÁ×ÉÔØ ÓÎÏ×Á ÓÔÁÔØÀ × ÄÒÕÇÕÀ ÇÒÕÐÐÕ"
+
+#: src/lang.c:308
+msgid	"search backwards within this article"
+msgstr	"ÐÏÉÓË ÎÁÚÁÄ ×ÎÕÔÒÉ ÓÔÁÔØÉ"
+
+#: src/lang.c:309
+msgid	"search forwards within this article"
+msgstr	"ÐÏÉÓË ×ÐÅÒÅÄ ×ÎÕÔÒÉ ÓÔÁÔØÉ"
+
+#: src/lang.c:310
+msgid	"show article in raw-mode (including all headers)"
+msgstr	"ÐÏËÁÚÁÔØ ÓÔÁÔØÀ × raw ÒÅÖÉÍÅ (×ËÌ. ×ÓÅ ÚÁÇÏÌÏ×ËÉ)"
+
+#: src/lang.c:311
+msgid	"skip next block of included text"
+msgstr	"ÐÒÏÐÕÓÔÉÔØ ÓÌÅÄ. ÂÌÏË ×ËÌÀÞÅÎÎÏÇÏ ÔÅËÓÔÁ"
+
+#: src/lang.c:312
+msgid	"toggle display of sections hidden by a form-feed (^L) on/off"
+msgstr	"ÉÚÍÅÎÉÔØ ÐÏËÁÚ ÓÅËÃÉÊ ÓËÒÙÔÙÈ Ó ÐÏÍÏÝØÀ form-feed (^L) ÷ëì/÷ùëì"
+
+#: src/lang.c:313
+msgid	"toggle word highlighting on/off"
+msgstr	"ÉÚÍÅÎÉÔØ ÐÏÄÓ×ÅÔËÕ ÓÌÏ× ÷ëì/÷ùëì"
+
+#: src/lang.c:314
+msgid	"toggle ROT-13 (basic decode) for current article"
+msgstr	"ÉÚÍÅÎÉÔØ ROT-13 (ÄÅËÏÄÉÒÏ×ÁÎÉÅ) ÄÌÑ ÔÅËÕÝÅÊ ÓÔÁÔØÉ"
+
+#: src/lang.c:315
+msgid	"toggle tabwidth 4 <-> 8"
+msgstr	"ÉÚÍÅÎÉÔØ ÛÉÒÉÎÕ TAB 4 <-> 8"
+
+#: src/lang.c:316
+msgid	"toggle german TeX style decoding for current article"
+msgstr	"ÉÚÍÅÎÉÔØ ÎÅÍÅÃËÉÊ TeX ÓÔÉÌØ ÄÅËÏÄÉÒÏ×ÁÎÉÑ ÄÌÑ ÔÅËÕÝÅÊ ÓÔÁÔØÉ"
+
+#: src/lang.c:317
+msgid	"toggle display of uuencoded sections"
+msgstr	"ÉÚÍÅÎÉÔØ ÐÏËÁÚ uuencoded ÓÅËÃÉÉ"
+
+#: src/lang.c:318
+msgid	"View/save multimedia attachments"
+msgstr	"ðÒÏÓÍÏÔÒÅÔØ/óÏÈÒÁÎÉÔØ ÍÕÌØÔÉÍÅÄÉÑ-×ÌÏÖÅÎÉÅ"
+
+#: src/lang.c:319
+#, c-format
+msgid	"report bug or comment via mail to %s"
+msgstr	"ÐÏÓÌÁÔØ ÏÛÉÂËÕ ÉÌÉ ËÏÍÍÅÎÔÁÒÉÉ ÐÏ e-mail: %s"
+
+#: src/lang.c:320
+msgid	"choose range of articles to be affected by next command"
+msgstr	"×ÙÂÒÁÔØ ÄÉÁÐÁÚÏÎ ÓÔÁÔÅÊ ÐÏÄ×ÅÒÖÅÎÎÙÈ ÓÌÅÄ. ËÏÍÁÎÄÏÊ"
+
+#: src/lang.c:321
+msgid	"escape from command prompt"
+msgstr	"×ÙÊÔÉ ÉÚ ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ"
+
+#: src/lang.c:322
+msgid	"edit filter file"
+msgstr	"ÒÅÄÁËÔÉÒÏ×ÁÔØ ÆÁÊÌ ÆÉÌØÔÒÁ"
+
+#: src/lang.c:323
+msgid	"get help"
+msgstr	"ÐÏÌÕÞÉÔØ ÐÏÍÏÝØ"
+
+#: src/lang.c:324
+msgid	"display last article viewed"
+msgstr	"ÐÏËÁÚÁÔØ ÐÏÓÌÅÄÎÀÀ ÐÒÏÓÍÏÔÒÅÎÎÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:325
+msgid	"down one line"
+msgstr	"×ÎÉÚ ÏÄÎÕ ÓÔÒÏËÕ"
+
+#: src/lang.c:326
+msgid	"up one line"
+msgstr	"××ÅÒÈ ÏÄÎÕ ÓÔÒÏËÕ"
+
+#: src/lang.c:327
+msgid	"go to article chosen by Message-ID"
+msgstr	"ÐÅÒÅÊÔÉ ÎÁ ÓÔÁÔØÀ ÐÏ Message-ID"
+
+#: src/lang.c:328
+msgid	"mail article/thread/hot/pattern/tagged articles to someone"
+msgstr	"ÐÏÓÌÁÔØ ÓÔÁÔØÀ/ÄÉÓË./hot/ÛÁÂÌÏÎ/ÏÔÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ ÐÏ e-mail"
+
+#: src/lang.c:329
+msgid	"menu of configurable options"
+msgstr	"ÍÅÎÀ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÈ ÏÐÃÉÊ"
+
+#: src/lang.c:330
+msgid	"down one page"
+msgstr	"×ÎÉÚ ÏÄÎÕ ÓÔÒÁÎÉÃÕ"
+
+#: src/lang.c:331
+msgid	"up one page"
+msgstr	"××ÅÒÈ ÏÄÎÕ ÓÔÒÁÎÉÃÕ"
+
+#: src/lang.c:332
+msgid	"post (write) article to current group"
+msgstr	"ÏÔÐÒÁ×ÉÔØ (ÎÁÐÉÓÁÔØ) ÓÔÁÔØÀ × ÔÅËÕÝÕÀ ÇÒÕÐÐÕ"
+
+#: src/lang.c:333
+msgid	"post postponed articles"
+msgstr	"ÏÔÐÒÁ×ÉÔØ ÏÔÌÏÖÅÎÎÙÅ ÓÔÁÔØÉ"
+
+#: src/lang.c:334
+msgid	"list articles posted by you (from posted file)"
+msgstr	"ÓÐÉÓÏË ÓÔÁÔÅÊ ÏÔÐÒÁ×ÌÅÎÎÙÈ ÷ÁÍÉ (ÉÚ ÆÁÊÌÁ posted)"
+
+#: src/lang.c:335
+msgid	"return to previous menu"
+msgstr	"×ÏÚ×ÒÁÔ × ÐÒÅÄÙÄÕÝÅÅ ÍÅÎÀ"
+
+#: src/lang.c:336
+msgid	"quit tin immediately"
+msgstr	"×ÙÈÏÄ ÉÚ tin ÎÅÍÅÄÌÅÎÎÏ"
+
+#: src/lang.c:337
+msgid	"redraw page"
+msgstr	"ÐÅÒÅÒÉÓÏ×ÁÔØ ÓÔÒÁÎÉÃÕ"
+
+#: src/lang.c:338
+msgid	"save article/thread/hot/pattern/tagged articles to file"
+msgstr	"ÓÏÈÒÁÎÉÔØ ÓÔÁÔØÀ/ÄÉÓË./hot/ÛÁÂÌÏÎ/ÏÔÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ × ÆÁÊÌ"
+
+#: src/lang.c:339
+msgid	"save marked articles automatically without user prompts"
+msgstr	"ÓÏÈÒÁÎÑÔØ ÏÔÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ Á×ÔÏÍÁÔÉÞÅÓËÉ ÂÅÚ ÐÏÄÔ×ÅÒÖÄÅÎÉÑ"
+
+#: src/lang.c:340
+msgid	"scroll the screen one line down"
+msgstr	"ÐÒÏËÒÕÔÉÔØ ÜËÒÁÎ ÎÁ ÏÄÎÕ ÌÉÎÉÀ ×ÎÉÚ"
+
+#: src/lang.c:341
+msgid	"scroll the screen one line up"
+msgstr	"ÐÒÏËÒÕÔÉÔØ ÜËÒÁÎ ÎÁ ÏÄÎÕ ÌÉÎÉÀ ××ÅÒÈ"
+
+#: src/lang.c:342
+msgid	"search for articles by author backwards"
+msgstr	"ÐÏÉÓË ÓÔÁÔÅÊ ÐÏ Á×ÔÏÒÕ ÎÁÚÁÄ"
+
+#: src/lang.c:343
+msgid	"search for articles by author forwards"
+msgstr	"ÐÏÉÓË ÓÔÁÔÅÊ ÐÏ Á×ÔÏÒÕ ×ÐÅÒÅÄ"
+
+#: src/lang.c:344
+msgid	"search all articles for a given string (this may take some time)"
+msgstr	"ÐÏÉÓË ×ÓÅÈ ÓÔÁÔÅÊ ÐÏ ÚÁÄÁÎÎÏÊ ÓÔÒÏËÅ (ÍÏÖÅÔ ÚÁÎÑÔØ ÎÅËÏÔÏÒÏÅ ×ÒÅÍÑ)"
+
+#: src/lang.c:345
+msgid	" \t  (searches are case-insensitive and wrap around to all articles)"
+msgstr	" \t  (ÐÏÉÓË ÉÇÎÏÒÉÒÕÅÔ ÒÅÇÉÓÔÒ É ÏÈ×ÁÔÙ×ÁÅÔ ×ÓÅ ÓÔÁÔØÉ)"
+
+#: src/lang.c:346
+msgid	"search for articles by Subject line backwards"
+msgstr	"ÐÏÉÓË ÓÔÁÔÅÊ ÐÏ ÓÔÒÏËÅ Subject ÎÁÚÁÄ"
+
+#: src/lang.c:347
+msgid	"search for articles by Subject line forwards"
+msgstr	"ÐÏÉÓË ÓÔÁÔÅÊ ÐÏ ÓÔÒÏËÅ Subject ×ÐÅÒÅÄ"
+
+#: src/lang.c:348
+msgid	"repeat last search"
+msgstr	"ÐÏ×ÔÏÒÉÔØ ÐÏÓÌÅÄÎÉÊ ÐÏÉÓË"
+
+#: src/lang.c:349
+msgid	"tag current article for reposting/mailing/piping/printing/saving"
+msgstr	"ÏÔÍÅÔÉÔØ ÔÅËÕÝÕÀ ÓÔÁÔØÀ ÄÌÑ ÐÅÒÅÏÔÐÒÁ×ËÉ/ÏÔÐÒÁ×ËÉ ÐÏ e-mail/piping/ÐÅÞÁÔÉ/"
+	"ÓÏÈÒÁÎÅÎÉÑ"
+
+#: src/lang.c:350
+msgid	"toggle info message in last line (subject/description)"
+msgstr	"ÉÚÍÅÎÉÔØ ÉÎÆÏÓÏÏÂÝÅÎÉÅ × ÐÏÓÌÅÄÎÅÊ ÓÔÒÏËÅ (ÔÅÍÁ/ÏÐÉÓÁÎÉÅ)"
+
+#: src/lang.c:351
+msgid	"toggle inverse video"
+msgstr	"ÉÚÍÅÎÉÔØ ÉÎ×ÅÒÓÉÀ ×ÉÄÅÏ"
+
+#: src/lang.c:352
+msgid	"toggle mini help menu display"
+msgstr	"ÉÚÍÅÎÉÔØ ÍÉÎÉÐÏÄÓËÁÚËÕ (÷ëì/÷ùëì)"
+
+#: src/lang.c:353
+msgid	"cycle the display of authors email address, real name, both or neither"
+msgstr	"ÓÍÅÎÉÔØ ÐÏËÁÚ ÁÄÒÅÓÏ× e-mail, realname, ÏÂÏÉÈ, ÎÉÞÅÇÏ"
+
+#: src/lang.c:354
+msgid	"show version information"
+msgstr	"ÐÏËÁÚÁÔØ ÉÎÆÏÒÍÁÃÉÀ Ï ×ÅÒÓÉÉ"
+
+#: src/lang.c:355
+msgid	"mark all articles as read and return to group selection menu"
+msgstr	"ÐÏÍÅÔÉÔØ ×ÓÅ ÓÔÁÔØÉ ËÁË ÐÒÏÞÉÔÁÎÏ É ×ÏÚ×ÒÁÔ × ÍÅÎÀ ×ÙÂÏÒÁ ÇÒÕÐÐ"
+
+#: src/lang.c:356
+msgid	"mark all articles as read and enter next group with unread articles"
+msgstr	"ÐÏÍÅÔÉÔØ ×ÓÅ ÓÔÁÔØÉ ËÁË ÐÒÏÞÉÔÁÎÏ É ×ÏÊÔÉ × ÓÌÅÄ. ÇÒÕÐÐÕ Ó ÎÅÐÒÏÞÉÔ. ÓÔÁÔØÑÍÉ"
+
+#: src/lang.c:357
+msgid	"choose first thread in list"
+msgstr	"×ÙÂÒÁÔØ ÐÅÒ×ÕÀ ÄÉÓËÕÓÓÉÀ × ÓÐÉÓËÅ"
+
+#: src/lang.c:358
+msgid	"choose last thread in list"
+msgstr	"×ÙÂÒÁÔØ ÐÏÓÌÅÄÎÀÀ ÄÉÓËÕÓÓÉÀ × ÓÐÉÓËÅ"
+
+#: src/lang.c:359
+msgid	"list articles within current thread (bring up Thread sub-menu)"
+msgstr	"ÓÐÉÓÏË ÓÔÁÔÅÊ × ÄÉÓËÕÓÉÉ (×ÙÚ×ÁÔØ ÐÏÄÍÅÎÀ äÉÓËÕÓÓÉÑ)"
+
+#: src/lang.c:360
+msgid	"mark article as unread"
+msgstr	"ÐÏÍÅÔÉÔØ ÓÔÁÔØÀ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ"
+
+#: src/lang.c:361
+msgid	"mark current thread or tagged threads as read"
+msgstr	"ÐÏÍÅÔÉÔØ ÔÅËÕÝÕÀ ÄÉÓË. ÉÌÉ ÏÔÍÅÞÅÎÎÙÅ ÄÉÓË. ËÁË ÐÒÏÞÉÔÁÎÎÙÅ"
+
+#: src/lang.c:362
+msgid	"mark thread as unread"
+msgstr	"ÐÏÍÅÔÉÔØ ÄÉÓËÕÓÓÉÀ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÕÀ"
+
+#: src/lang.c:363
+msgid	"toggle display of all/selected articles"
+msgstr	"ðÏËÁÚÙ×ÁÔØ: ×ÓÅ/×ÙÂÒÁÎÎÙÅ ÓÔÁÔØÉ"
+
+#: src/lang.c:364
+msgid	"display next group"
+msgstr	"ÐÏËÁÚÁÔØ ÓÌÅÄÕÀÝÕÀ ÇÒÕÐÐÕ"
+
+#: src/lang.c:365
+msgid	"display previous group"
+msgstr	"ÐÏËÁÚÁÔØ ÐÒÅÄÙÄÕÝÕÀ ÇÒÕÐÐÕ"
+
+#: src/lang.c:366
+msgid	"toggle all selections (all articles)"
+msgstr	"éÚÍÅÎÉÔØ ×ÓÅ ÐÏÍÅÔËÉ (×ÓÅ ÓÔÁÔØÉ)"
+
+#: src/lang.c:367
+msgid	"select group (make \"hot\")"
+msgstr	"×ÙÂÒÁÔØ ÇÒÕÐÐÕ (make \"hot\")"
+
+#: src/lang.c:368
+msgid	"select thread"
+msgstr	"×ÙÂÒÁÔØ ÄÉÓËÕÓÓÉÀ"
+
+#: src/lang.c:369
+msgid	"select threads if at least one unread article is selected"
+msgstr	"×ÙÂÒÁÔØ ÄÉÓË. ÅÓÌÉ ÈÏÔÑ ÂÙ ÏÄÎÁ ÎÅÐÒÏÞÉÔ. ÓÔÁÔØÑ ÐÏÍÅÞÅÎÁ"
+
+#: src/lang.c:370
+msgid	"select threads that match user specified pattern"
+msgstr	"×ÙÂÒÁÔØ ÄÉÓË. ËÏÔÏÒÙÅ ÐÏÄÐÁÄÁÀÔ ÐÏÄ ÕËÁÚÁÎÎÙÊ ÛÁÂÌÏÎ"
+
+#: src/lang.c:371
+msgid	"tag all parts of current multipart-message in order"
+msgstr	"ÐÏÍÅÔÉÔØ ×Ó£ ÞÁÓÔÉ ÔÅËÕÝÅÇÏ multipart-ÓÏÏÂÝÅÎÉÑ ÐÏ ÐÏÒÑÄËÕ"
+
+#: src/lang.c:372
+msgid	"0 - 9\t  choose thread by number"
+msgstr	"0 - 9\t  ×ÙÂÒÁÔØ ÄÉÓËÕÓÓÉÀ ÐÏ ÎÏÍÅÒÕ"
+
+#: src/lang.c:373
+msgid	"toggle limit number of articles to get, and reload"
+msgstr	"ÉÚÍÅÎÉÔØ ÐÒÅÄÅÌ ÞÉÓÌÁ ÐÏÌÕÞÁÅÍÙÈ É ÐÅÒÅÞÉÔÁÎÎÙÈ ÓÔÁÔÅÊ"
+
+#: src/lang.c:374
+msgid	"toggle display of all/unread articles"
+msgstr	"ðÏËÁÚÙ×ÁÔØ: ×ÓÅ/ÎÅÐÒÏÞÉÔÁÎÎÙÅ ÓÔÁÔØÉ"
+
+#: src/lang.c:375
+msgid	"toggle selection of thread"
+msgstr	"éÚÍÅÎÉÔØ ÐÏÍÅÔËÉ ÄÉÓËÕÓÓÉÊ"
+
+#: src/lang.c:376
+msgid	"cycle through threading options available"
+msgstr	"ðÅÒÅÂÏÒ ÄÏÓÔÕÐÎÙÈ ÏÐÃÉÊ ÄÉÓËÕÓÓÉÊ"
+
+#: src/lang.c:377
+msgid	"undo all selections (all articles)"
+msgstr	"ïÔÍÅÎÉÔØ ×ÓÅ ÐÏÍÅÔËÉ (×ÓÅÈ ÓÔÁÔÅÊ)"
+
+#: src/lang.c:378
+msgid	"untag all tagged threads"
+msgstr	"óÎÑÔØ ÍÅÔËÉ Ó ÏÔÍÅÞÅÎÎÙÈ ÄÉÓËÕÓÓÉÊ"
+
+#: src/lang.c:379
+msgid	"mark all articles in group as read"
+msgstr	"ÐÏÍÅÔÉÔØ ×ÓÅ ÓÔÁÔØÉ × ÇÒÕÐÐÅ ËÁË ÐÒÏÞÉÔÁÎÎÙÅ"
+
+#: src/lang.c:380
+msgid	"mark all articles in group as read and move to next unread group"
+msgstr	"ÐÏÍÅÔÉÔØ ×ÓÅ ÓÔÁÔØÉ × ÇÒÕÐÐÅ ËÁË ÐÒÏÞÉÔÁÎÎÙÅ É ÐÅÒÅÊÔÉ Ë ÓÌÅÄ. ÎÅÐÒÏÞÉÔ. "
+	"ÇÒÕÐÐÅ"
+
+#: src/lang.c:381
+msgid	"choose first group in list"
+msgstr	"×ÙÂÒÁÔØ ÐÅÒ×ÕÀ ÇÒÕÐÐÕ × ÓÐÉÓËÅ"
+
+#: src/lang.c:382
+msgid	"choose group by name"
+msgstr	"×ÙÂÒÁÔØ ÇÒÕÐÐÕ ÐÏ ÉÍÅÎÉ"
+
+#: src/lang.c:383
+msgid	"0 - 9\t  choose group by number"
+msgstr	"0 - 9\t  ×ÙÂÒÁÔØ ÇÒÕÐÐÕ ÐÏ ÎÏÍÅÒÕ"
+
+#: src/lang.c:384
+msgid	"choose range of groups to be affected by next command"
+msgstr	"×ÙÂÒÁÔØ ÄÉÁÐÁÚÏÎ ÇÒÕÐÐ ÐÏÄ×ÅÒÖÅÎÎÙÈ ÓÌÅÄ. ËÏÍÁÎÄÅ"
+
+#: src/lang.c:385
+msgid	"choose last group in list"
+msgstr	"×ÙÂÒÁÔØ ÐÏÓÌÅÄÎÀÀ ÇÒÕÐÐÕ × ÓÐÉÓËÅ"
+
+#: src/lang.c:386
+msgid	"mark all articles in chosen group unread"
+msgstr	"ÐÏÍÅÔÉÔØ ×ÓÅ ÓÔÁÔØÉ × ÇÒÕÐÐÅ ËÁË ÎÅÐÒÏÞÉÔÁÎÎÙÅ"
+
+#: src/lang.c:387
+msgid	"move chosen group within list"
+msgstr	"ÐÅÒÅÍÅÓÔÉÔØ ÇÒÕÐÐÕ × ÓÐÉÓËÅ"
+
+#: src/lang.c:388
+msgid	"choose next group with unread news"
+msgstr	"×ÙÂÒÁÔØ ÓÌÅÄ. ÇÒÕÐÐÕ Ó ÎÅÐÒÏÞÉÔÁÎÎÙÍÉ ÎÏ×ÏÓÔÑÍÉ"
+
+#: src/lang.c:389 src/lang.c:1194
+msgid	"quit"
+msgstr	"×ÙÈÏÄ"
+
+#: src/lang.c:390
+msgid	"quit without saving configuration changes"
+msgstr	"×ÙÈÏÄ ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÈ ÉÚÍÅÎÅÎÉÊ"
+
+#: src/lang.c:391
+msgid	"read chosen group"
+msgstr	"ÐÒÏÞÉÔÁÔØ ×ÙÂÒÁÎÎÕÀ ÇÒÕÐÐÕ"
+
+#: src/lang.c:392
+msgid	"reset .newsrc (all available articles in groups marked unread)"
+msgstr	"ÓÂÒÏÓÉÔØ .newsrc (×ÓÅ ÓÔÁÔØÉ × ÇÒÕÐÐÅ ÐÏÍÅÔÑÔÓÑ ÎÅÐÒÏÞÉÔÁÎÎÙÍÉ)"
+
+#: src/lang.c:393
+msgid	"search backwards for a group name"
+msgstr	"ÐÏÉÓË ÎÁÚÁÄ ÐÏ ÉÍÅÎÉ ÇÒÕÐÐÙ"
+
+#: src/lang.c:394
+msgid	" \t  (all searches are case-insensitive and wrap around)"
+msgstr	" \t  (×ÓÅ ÐÏÉÓËÉ ÒÅÇÉÓÔÒÏ-ÎÅÚÁ×ÉÓÉÍÙ É ÏÈ×ÁÔÙ×ÁÀÔ ×ÓÅ ÓÔÁÔØÉ/ÇÒÕÐÐÙ)"
+
+#: src/lang.c:395
+msgid	"search forwards for a group name"
+msgstr	"ÐÏÉÓË ×ÐÅÒÅÄ ÐÏ ÉÍÅÎÉ ÇÒÕÐÐÙ"
+
+#: src/lang.c:396
+msgid	"subscribe to chosen group"
+msgstr	"ÐÏÄÐÉÓÁÔØÓÑ ÎÁ ×ÙÂÒÁÎÎÕÀ ÇÒÕÐÐÕ"
+
+#: src/lang.c:397
+msgid	"subscribe to groups that match pattern"
+msgstr	"ÐÏÄÐÉÓÁÔØÓÑ ÎÁ ÇÒÕÐÐÙ, ÐÏÄÐÁÄÁÀÝÕÀ ÐÏÄ ÛÁÂÌÏÎ"
+
+#: src/lang.c:398
+msgid	"reread active file to check for any new news"
+msgstr	"ÐÅÒÅÞÉÔÁÔØ active ÆÁÊÌ ÄÌÑ ÐÒÏ×ÅÒËÉ ÎÏ×ÙÈ ÎÏ×ÏÓÔÅÊ"
+
+#: src/lang.c:399
+msgid	"toggle display of group name only or group name plus description"
+msgstr	"ÐÅÒÅËÌÀÞÉÔØ ÐÏËÁÚ: ÉÍÑ ÇÒÕÐÐÙ ÉÌÉ ÉÍÑ ÇÒÕÐÐÙ + ÏÐÉÓÁÎÉÅ"
+
+#: src/lang.c:400
+msgid	"toggle display to show all/unread subscribed groups"
+msgstr	"ÐÅÒÅËÌÀÞÉÔØ ÐÏËÁÚ: ×ÓÅ ÇÒÕÐÐÙ / ÎÅÐÒÏÞÉÔÁÎÎÙÅ ÐÏÄÐÉÓÁÎÎÙÅ ÇÒÕÐÐÙ"
+
+#: src/lang.c:401
+msgid	"unsubscribe from chosen group"
+msgstr	"ÏÔÐÉÓÁÔØÓÑ ÏÔ ×ÙÂÒÁÎÎÏÊ ÇÒÕÐÐÙ"
+
+#: src/lang.c:402
+msgid	"unsubscribe from groups that match pattern"
+msgstr	"ÏÔÐÉÓÁÔØÓÑ ÏÔ ÇÒÕÐÐ, ÐÏÄÐÁÄÁÀÝÉÈ ÐÏÄ ÛÁÂÌÏÎ"
+
+#: src/lang.c:403
+msgid	"sort the list of groups"
+msgstr	"ÓÏÒÔÉÒÏ×ÁÔØ ÓÐÉÓÏË ÇÒÕÐÐ"
+
+#: src/lang.c:404
+msgid	"toggle display to show all/subscribed groups"
+msgstr	"ÐÅÒÅËÌÀÞÉÔØ ÐÏËÁÚ: ×ÓÅ / ÐÏÄÐÉÓÁÎÎÙÅ ÇÒÕÐÐÙ"
+
+#: src/lang.c:405
+msgid	"0 - 9\t  choose article by number"
+msgstr	"0 - 9\t  ×ÙÂÒÁÔØ ÓÔÁÔØÀ ÐÏ ÎÏÍÅÒÕ"
+
+#: src/lang.c:406
+msgid	"mark thread as read and return to group index page"
+msgstr	"ÐÏÍÅÔÉÔØ ÎÉÔØ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ É ×ÅÒÎÕÔØÓÑ ÎÁ ÓÔÒÁÎÉÃÕ ÉÎÄÅËÓÁ ÇÒÕÐÐ"
+
+#: src/lang.c:407
+msgid	"mark thread as read and enter next unread thread or group"
+msgstr	"ÐÏÍÅÔÉÔØ ÎÉÔØ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ É ÐÅÒÅÊÔÉ × ÓÌÅÄ. ÎÅÐÒÏÞÉÔ. ÎÉÔØ ÉÌÉ ÇÒÕÐÐÕ"
+
+#: src/lang.c:408
+msgid	"choose first article in list"
+msgstr	"×ÙÂÒÁÔØ ÐÅÒ×ÕÀ ÓÔÁÔØÀ × ÓÐÉÓËÅ"
+
+#: src/lang.c:409
+msgid	"choose last article in list"
+msgstr	"×ÙÂÒÁÔØ ÐÏÓÌÅÄÎÀÀ ÓÔÁÔØÀ × ÓÐÉÓËÅ"
+
+#: src/lang.c:410
+msgid	"mark article or tagged articles as read and move cursor to next unread article"
+msgstr	"ÐÏÍÅÔÉÔØ ÓÔÁÔØÀ ÉÌÉ ÏÔÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ ËÁË ÐÒÏÞÉÔÁÎÎÙÅ É ÐÅÒÅÍÅÓÔÉÔØ ËÕÒÓÏÒ Ë "
+	"ÓÌÅÄ. ÎÅÐÒÏÞÉÔÁÎÎÏÊ ÓÔÁÔØÅ"
+
+#: src/lang.c:411
+msgid	"read chosen article"
+msgstr	"ÐÒÏÞÉÔÁÔØ ×ÙÂÒÁÎÎÕÀ ÓÔÁÔØÀ"
+
+#: src/lang.c:412
+msgid	"Display properties\n"
+	"------------------"
+msgstr	"ðÏËÁÚÁÔØ Ó×ÏÊÓÔ×Á\n"
+	"------------------"
+
+#: src/lang.c:413
+msgid	"Miscellaneous\n"
+	"-------------"
+msgstr	"óÍÅÛÁÎÎÙÅ ...\n"
+	"-------------"
+
+#: src/lang.c:414
+msgid	"Moving around\n"
+	"-------------"
+msgstr	"  ä×ÉÖÅÎÉÅ \n"
+	"----------"
+
+#: src/lang.c:415
+msgid	"Group/thread/article operations\n"
+	"-------------------------------"
+msgstr	"ïÐÅÒÁÃÉÉ Ó ÇÒÕÐÐÁÍÉ/ÎÉÔÑÍÉ/ÓÔÁÔØÑÍÉ\n"
+	"-----------------------------------"
+
+#: src/lang.c:417
+msgid	"Group Level Commands"
+msgstr	"ëÏÍÁÎÄÙ õÒÏ×ÎÑ çÒÕÐÐ"
+
+#: src/lang.c:418
+msgid	"Kill filter added"
+msgstr	"õÎÉÞÔÏÖÉÔØ ÄÏÂÁ×ÌÅÎÎÙÊ ÆÉÌØÔÒ"
+
+#: src/lang.c:419
+msgid	"Auto-selection filter added"
+msgstr	"æÉÌØÔÒ Á×ÔÏ-×ÙÂÏÒ ÄÏÂÁ×ÌÅÎ"
+
+#: src/lang.c:420
+msgid	"All parts tagged"
+msgstr	"÷ÓÅ ÞÁÓÔÉ ÐÏÍÅÞÅÎÙ"
+
+#: src/lang.c:421
+msgid	"Storing article for later posting"
+msgstr	"óÏÈÒÁÎÉÅ ÓÔÁÔØÉ ÄÌÑ ÏÔÐÒÁ×ÌÅÎÉÑ ÐÏÚÖÅ"
+
+#: src/lang.c:422
+msgid	"Please enter a valid character"
+msgstr	"ðÏÖÁÌÕÊÓÔÁ ××ÅÄÉÔÅ ÄÏÐÕÓÔÉÍÙÊ ÓÉÍ×ÏÌ"
+
+#: src/lang.c:423
+#, c-format
+msgid	"Missing part #%d"
+msgstr	"ðÒÏÐÕÝÅÎÁ ÞÁÓÔØ #%d"
+
+#: src/lang.c:424
+msgid	"*** No postponed articles ***"
+msgstr	"*** îÅÔ ÏÔÌÏÖÅÎÎÙÈ ÓÔÁÔÅÊ ***"
+
+#: src/lang.c:425
+msgid	"Not a multi-part message"
+msgstr	"îÅ multi-part ÓÏÏÂÝÅÎÉÅ"
+
+#: src/lang.c:426
+msgid	"You are not subscribed to this group"
+msgstr	"÷Ù ÎÅ ÐÏÄÐÉÓÁÎÙ ÎÁ ÜÔÕ ÇÒÕÐÐÕ"
+
+#: src/lang.c:427
+msgid	"No previous expression"
+msgstr	"îÅÔ ÐÒÅÄÙÄÕÝÅÇÏ ×ÙÒÁÖÅÎÉÑ"
+
+#: src/lang.c:428
+msgid	"Operation disabled in no-overwrite mode"
+msgstr	"ïÐÅÒÁÃÉÑ ÚÁÐÒÅÝÅÎÁ × ÒÅÖÉÍÅ ÚÁÐÒÅÝÅÎÉÑ ÐÅÒÅÚÁÐÉÓÉ"
+
+#. TODO: replace hardcoded key-name in txt_info_postponed
+#: src/lang.c:430
+#, c-format
+msgid	"%d postponed %s, reuse with ^O...\n"
+msgstr	"%d ÏÔÌÏÖÅÎÁ %s, ×ÏÚÏÂÎÏ×ÉÔØ Ó ^O...\n"
+
+#: src/lang.c:431
+msgid	"X-Conversion-Note: multipart/alternative contents have been removed.\n"
+	"  To get the whole article, turn alternative handling OFF in the Option Menu\n"
+msgstr	"X-Conversion-Note: ÓÏÄÅÒÖÁÎÉÅ multipart/alternative ÂÙÌÏ ÕÄÁÌÅÎÏ.\n"
+	"  äÌÑ ÐÏÌÕÞÅÎÉÑ ×ÓÅÊ ÓÔÁÔØÉ, ÉÚÍÅÎÉÔÅ alternative handling ÎÁ OFF × íÅÎÀ "
+	"ïÐÃÉÊ\n"
+
+#: src/lang.c:433
+#, c-format
+msgid	"Save filename for %s/%s is a mailbox. Attachment not saved"
+msgstr	"æÁÊÌ ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ  %s/%s - mailbox. ÷ÌÏÖÅÎÉÅ ÎÅ ÓÏÈÒÁÎÅÎÏ"
+
+#: src/lang.c:434
+msgid	"TeX2Iso encoded article"
+msgstr	"TeX2Iso ËÏÄÉÒÏ×ÁÎÎÁÑ ÓÔÁÔØÑ"
+
+#: src/lang.c:435
+msgid	"incomplete "
+msgstr	"ÎÅÐÏÌÎÙÊ "
+
+#. TODO: replace hardcoded key-names
+#: src/lang.c:437
+#, c-format
+msgid	"\n"
+	"Welcome to %s, a full screen threaded Netnews reader. It can read news "
+	"locally\n"
+	"(ie. <spool>/news) or remotely (-r option)  from a NNTP (Network News "
+	"Transport\n"
+	"Protocol) server. -h lists the available command line options.\n"
+	"\n"
+	"%s  has four newsreading levels, the newsgroup selection page, the group "
+	"index\n"
+	"page, the thread listing page and the article viewer. Help is available at "
+	"each\n"
+	"level by pressing the 'h' command.\n"
+	"\n"
+	"Move up/down by using the terminal arrow keys or 'j' and 'k'.  Use PgUp/PgDn "
+	"or\n"
+	"Ctrl-U and Ctrl-D to page up/down. Enter a newsgroup by pressing RETURN/TAB.\n"
+	"\n"
+	"Articles, threads, tagged articles or articles matching a pattern can be "
+	"mailed\n"
+	"('m' command), printed ('o' command), saved ('s' command), piped ('|' "
+	"command).\n"
+	"Use  the 'w' command  to post a  news article,  the 'f'/'F' commands  to post "
+	"a\n"
+	"follow-up to  an existing  news article  and the 'r'/'R' commands  to reply "
+	"via\n"
+	"mail to an  existing news article author.  The 'M' command allows the "
+	"operation\n"
+	"of %s to be configured via a menu.\n"
+	"\n"
+	"For more information read the manual page, README, INSTALL, TODO and FTP "
+	"files.\n"
+	"Please send bug-reports/comments to %s with the 'R' command.\n"
+msgstr	"\n"
+	"äÏÂÒÏ ÐÏÖÁÌÏ×ÁÔØ × %s, ÐÏÌÎÏÜËÒÁÎÎÙÊ newsreader. tin ÍÏÖÅÔ ÞÉÔÁÔØ ÎÏ×ÏÓÔÉ Ó \n"
+	"ÌÏËÁÌØÎÏÊ ÍÁÛÉÎÙ (ÎÁÐÒÉÍÅÒ Ó <spool>/news) ÉÌÉ ÕÄÁÌÅÎÎÏ (Ó ÏÐÃÉÅÊ -r) Ó NNTP\n"
+	"(Network News Transport Protocol) ÓÅÒ×ÅÒÁ. -h ÐÏËÁÚÙ×ÁÅÔ ÄÏÓÔÕÐÎÙÅ ÏÐÃÉÉ \n"
+	"ËÏÍÁÎÄÎÏÊ ÓÔÒÏËÉ.\n"
+	"\n"
+	"÷ %s ÞÅÔÙÒÅ ÕÒÏ×ÎÑ: óÔÒÁÎÉÃÁ ×ÙÂÏÒÁ ÇÒÕÐÐÙ, óÔÒÁÎÉÃÁ ÉÎÄÅËÓÁ ÇÒÕÐÐÙ, "
+	"óÔÒÁÎÉÃÁ\n"
+	"ÎÉÔÉ É óÔÒÁÎÉÃÁ ÐÒÏÓÍÏÔÒÁ ÓÔÁÔØÉ. ðÏÄÓËÁÚËÁ ÄÏÓÔÕÐÎÁ ÄÌÑ ËÁÖÄÏÇÏ ÕÒÏ×ÎÑ\n"
+	"ÎÁÖÁÔÉÅÍ 'h'\n"
+	"\n"
+	"ðÅÒÅÍÅÝÁÔØÓÑ ××ÅÒÈ/×ÎÉÚ ÍÏÖÎÏ ÎÁÖÁÔÉÅÍ ÓÔÒÅÌÏË ÉÌÉ 'j' É 'k'. äÌÑ\n"
+	"ÐÒÏÌÉÓÔÙ×ÁÎÉÑ ÓÔÒÁÎÉÃÙ ××ÅÒÈ/×ÎÉÚ ÎÁÖÍÉÔÅ PgUp / PgDn ÉÌÉ Ctrl-U / Ctrl-D\n"
+	"÷ÈÏÄ × ÇÒÕÐÐÕ ÎÁÖÁÔÉÅÍ <÷÷ïä>/<ôáâ>\n"
+	"\n"
+	"óÔÁÔØÉ, ÎÉÔÉ, ÐÏÍÅÞÅÎÎÙÅ ÉÌÉ ÐÏÄÐÁÄÁÀÝÉÅ ÐÏÄ ÛÁÂÌÏÎ ÓÔÁÔØÉ ÍÏÇÕÔ ÂÙÔØ\n"
+	"ÏÔÐÒÁ×ÌÅÎÙ ÐÏ e-mail (ËÏÍÁÎÄÁ 'm'), ÎÁÐÅÞÁÔÁÎÙ (ËÏÍÁÎÄÁ 'o'), ÓÏÈÒÁÎÅÎÙ\n"
+	"(ËÏÍÁÎÄÁ 's') ÉÌÉ ÏÔÐÒÁ×ÌÅÎÙ × pipe (ËÏÍÁÎÄÁ '|')\n"
+	"'w' - ÏÔÐÒÁ×ÉÔØ ÎÏ×ÕÀ ÓÔÁÔØÀ, 'f'/'F' - ÏÔÐÒÁ×ÉÔØ follow-up ÎÁ ÓÕÝÅÓÔ×ÕÀÝÕÀ\n"
+	"ÓÔÁÔØÀ É 'r'/'R' - ÏÔ×ÅÔÉÔØ ÐÏ e-mail Á×ÔÏÒÕ ÓÔÁÔØÉ. ëÏÍÁÎÄÁ 'M' ÐÏÚ×ÏÌÑÅÔ\n"
+	"ÓËÏÎÆÉÇÕÒÉÒÏ×ÁÔØ %s ÐÏÓÒÅÄÓÔ×ÏÍ ÕÄÏÂÎÏÇÏ ÍÅÎÀ.\n"
+	"\n"
+	"äÌÑ ÄÏÐÏÌÎÉÔÅÌØÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÞÉÔÁÊÔÅ man, README, INSTALL, TODO É FTP ÆÁÊÌÙ\n"
+	"ðÏÓÙÌÁÊÔÅ bug-reports/comments ÎÁ %s ËÏÍÁÎÄÏÊ 'R'.\n"
+
+#: src/lang.c:453
+#, c-format
+msgid	"Invalid  From: %s  line. Read the INSTALL file again."
+msgstr	"îÅÄÏÐÕÓÔÉÍÁÑ ÓÔÒÏËÁ From: %s. ðÒÏÞÉÔÁÊÔÅ INSTALL ÓÎÏ×Á."
+
+#: src/lang.c:454
+#, c-format
+msgid	"Invalid  Sender:-header %s"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÚÁÇÏÌÏ×ÏË Sender: %s"
+
+#: src/lang.c:455
+msgid	"Inverse video disabled"
+msgstr	"éÎ×ÅÒÓÎÏÅ ×ÉÄÅÏ ÚÁÐÒÅÝÅÎÏ"
+
+#: src/lang.c:456
+msgid	"Inverse video enabled"
+msgstr	"éÎ×ÅÒÓÎÏÅ ×ÉÄÅÏ ÒÁÚÒÅÛÅÎÏ"
+
+#: src/lang.c:458
+#, c-format
+msgid	"Missing definition for %s\n"
+msgstr	"ðÒÏÐÕÝÅÎÏ ÏÐÒÅÄÅÌÅÎÉÅ ÄÌÑ %s\n"
+
+#: src/lang.c:459
+#, c-format
+msgid	"Invalid key definition '%s'\n"
+msgstr	"îÅÐÒÁ×ÉÌØÎÏÅ ÏÐÒÅÄÅÌÅÎÉÅ ËÌÁ×ÉÛÉ '%s'\n"
+
+#: src/lang.c:460
+#, c-format
+msgid	"Invalid keyname '%s'\n"
+msgstr	"îÅÐÒÁ×ÉÌØÎÏÅ ÎÁÚ×ÁÎÉÅ ËÌÁ×ÉÛÉ '%s'\n"
+
+#: src/lang.c:461
+#, c-format
+msgid	"Keymap file was upgraded to version %s\n"
+msgstr	"Keymap ÆÁÊÌ ÏÂÎÏ×ÌÅÎ ÄÏ ×ÅÒÓÉÉ %s\n"
+
+#: src/lang.c:462
+#, c-format
+msgid	"Kill From:     [%s] (y/n): "
+msgstr	"õÎÉÞÔÏÖÉÔØ From:     [%s] (y/n): "
+
+#: src/lang.c:463
+msgid	"Kill Lines: (</>num): "
+msgstr	"õÎÉÞÔÏÖÉÔØ óÔÒÏËÉ: (</>num): "
+
+#: src/lang.c:464
+msgid	"Kill Article Menu"
+msgstr	"õÎÉÞÔÏÖÉÔØ íÅÎÀ óÔÁÔØÉ"
+
+#: src/lang.c:465
+#, c-format
+msgid	"Kill Msg-Id:   [%s] (f/l/o/n): "
+msgstr	"õÎÉÞÔÏÖÉÔØ Msg-Id:   [%s] (f/l/o/n): "
+
+#: src/lang.c:466
+msgid	"Kill pattern scope  : "
+msgstr	"õÎÉÞÔÏÖÉÔØ ÛÁÂÌÏÎ ÏÂÚÏÒÁ  : "
+
+#: src/lang.c:467
+#, c-format
+msgid	"Kill Subject:  [%s] (y/n): "
+msgstr	"õÎÉÞÔÏÖÉÔØ Subject:  [%s] (y/n): "
+
+#: src/lang.c:468
+msgid	"Kill text pattern   : "
+msgstr	"õÎÉÞÔÏÖÉÔØ ÛÁÂÌÏÎ    : "
+
+#: src/lang.c:469
+msgid	"Kill time in days   : "
+msgstr	"õÎÉÞÔÏÖÉÔØ ×ÒÅÍÑ × ÄÎÑÈ   : "
+
+#: src/lang.c:471
+msgid	"Last"
+msgstr	"ðÏÓÌÅÄÎÉÊ"
+
+#: src/lang.c:472
+msgid	"-- Last response --"
+msgstr	"-- ðÏÓÌÅÄÎÉÊ ÏÔ×ÅÔ --"
+
+#: src/lang.c:473
+#, c-format
+msgid	"Lines %s  "
+msgstr	"ìÉÎÉÊ %s  "
+
+#: src/lang.c:475
+msgid	"Message-ID: line              "
+msgstr	"Message-ID: ÓÔÒÏË              "
+
+#: src/lang.c:476
+msgid	"Mail"
+msgstr	""
+
+#: src/lang.c:477
+msgid	"mailbox "
+msgstr	""
+
+#: src/lang.c:478
+#, c-format
+msgid	"Mail article(s) to [%.*s]> "
+msgstr	"ðÏÓÌÁÔØ ÐÏ e-mail ÓÔÁÔØÀ(É) ÐÏ [%.*s]> "
+
+#: src/lang.c:479
+#, c-format
+msgid	"Mailing log to %s\n"
+msgstr	"ïÔÐÒÁ×ÉÔØ log %s\n"
+
+#: src/lang.c:480
+msgid	"Mail bug report..."
+msgstr	"ïÔÐÒÁ×ÌÑÅÔÓÑ bugreport ..."
+
+#: src/lang.c:481
+#, c-format
+msgid	"Mail BUG REPORT to %s?"
+msgstr	"ïÔÐÒÁ×ÉÔØ bugreport  %s?"
+
+#: src/lang.c:482
+msgid	"Mailed"
+msgstr	"ïÔÐÒÁ×ÌÅÎÏ ÐÏ e-mail"
+
+#: src/lang.c:483
+#, c-format
+msgid	"Mailing to %s..."
+msgstr	"ïÔÐÒÁ×ÌÑÅÔÓÑ ÐÏ e-mail %s..."
+
+#: src/lang.c:484
+msgid	"# [Mail/Save] active file. Format is like news active file:\n"
+	"#   groupname  max.artnum  min.artnum  /dir\n"
+	"# The 4th field is the basedir (ie. ~/Mail or ~/News)\n"
+	"#\n"
+msgstr	""
+
+#: src/lang.c:487
+#, c-format
+msgid	"%s marked as unread"
+msgstr	"%s ÐÏÍÅÞÅÎÏ ËÁË ÎÅÐÒÏÞÉÔÁÎÏ"
+
+#: src/lang.c:488
+#, c-format
+msgid	"Marked %d of %d tagged %s as read"
+msgstr	"ðÏÍÅÞÅÎÏ %d ÉÚ %d ÏÔÍÅÞÅÎÎÙÈ %s ËÁË ÐÒÏÞÉÔÁÎÏ"
+
+#: src/lang.c:489
+#, c-format
+msgid	"Mark all articles as read%s?"
+msgstr	"ðÏÍÅÔÉÔØ ×ÓÅ ÓÔÁÔØÉ ËÁË ÐÒÏÞÉÔÁÎÏ%s?"
+
+#: src/lang.c:490
+#, c-format
+msgid	"Mark %s=tagged articles, %s=current article, %s=quit: "
+msgstr	"íÁÒËÉÒÏ×ÁÔØ %s=ÐÏÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ, %s=ÔÅËÕÝÕÀ ÓÔÁÔØÀ, %s=×ÙÈÏÄ: "
+
+#: src/lang.c:491
+#, c-format
+msgid	"Mark group %s as read?"
+msgstr	"ðÏÍÅÔÉÔØ ÇÒÕÐÐÕ %s ËÁË ÐÒÏÞÉÔÁÎÎÕÀ?"
+
+#: src/lang.c:492
+#, c-format
+msgid	"Mark thread as read%s?"
+msgstr	"ðÏÍÅÔÉÔØ ÎÉÔØ ËÁË ÐÒÏÞÉÔÁÎÎÕÀ %s?"
+
+#: src/lang.c:493
+#, c-format
+msgid	"Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
+msgstr	"íÁÒËÉÒÏ×ÁÔØ %s=ÏÔÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ/ÎÉÔÉ, %s=ÔÅËÕÝÕÀ ÎÉÔØ, %s=×ÙÈÏÄ: "
+
+#: src/lang.c:494
+#, c-format
+msgid	"Matching %s groups..."
+msgstr	"ðÒÏ×ÅÒËÁ %s ÇÒÕÐÐ..."
+
+#: src/lang.c:495 src/lang.c:499
+#, c-format
+msgid	"<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
+msgstr	"<n>=ÐÅÒÅÊÔÉ Ë n; %s=ÓÌÅÄ.ÎÅÐÒÏÞ.; %s=ÐÏÉÓË ÐÏ ÛÁÂÌÏÎÕ; %s=ÕÎÉÞÔ./×ÙÂÒÁÔØ"
+
+#: src/lang.c:496
+#, c-format
+msgid	"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %s=list "
+	"thread"
+msgstr	"%s=ÐÏÉÓË Á×ÔÏÒ.; %s=catchup; %s=ÓÔÒ.×ÎÉÚ; %s=ÓÔÒ.××ÅÒÈ; %s=ÍÁÒË.ÐÒÏÞ.; %"
+	"s=ÓÐÉÓÏË ÄÉÓË."
+
+#: src/lang.c:497
+#, c-format
+msgid	"%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
+msgstr	"%s=ÓÔÒ.××ÅÒÈ; %s=ÓÔÒ.×ÎÉÚ; %s=ÓÔÒÁÎ.××ÅÒÈ; %s=ÓÔÒÁÎ.×ÎÉÚ; %s=ÎÁÞÁÌÏ; %s=ËÏÎÅÃ"
+
+#: src/lang.c:498
+#, c-format
+msgid	"%s=search forwards; %s=search backwards; %s=quit"
+msgstr	"%s=ÐÏÉÓË ×ÐÅÒÅÄ; %s=ÐÏÉÓË ÎÁÚÁÄ; %s=×ÙÈÏÄ"
+
+#: src/lang.c:500
+#, c-format
+msgid	"%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
+msgstr	"%s=ÐÏÉË Á×ÔÏÒ.; %s=ÐÏÉÓË ÔÅÌ.; %s=catchup; %s=followup; %s=ÍÁÒË.ÐÒÏÞ."
+
+#: src/lang.c:501
+#, c-format
+msgid	"<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
+msgstr	"<n>=ÐÅÒÅÊÔÉ Ë n; %s=ÓÌÅÄ.ÎÅÐÒÏÞ.; %s,%s=ÐÏÉÓË ÐÏ ÛÁÂÌÏÎÕ; %s=catchup"
+
+#: src/lang.c:502
+#, c-format
+msgid	"%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
+msgstr	"%s=ÓÔÒ.×ÎÉÚ; %s=ÓÔÒ.××ÅÒÈ; %s=ÐÏÍÏÝØ; %s=ÐÅÒÅÍ.; %s=×ÙÈÏÄ; %s=[×ÓÅ|ÎÅÐÒÏÞ.]"
+
+#: src/lang.c:503
+#, c-format
+msgid	"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/out"
+msgstr	"%s=ÐÏÄÐÉÓÁÔØÓÑ; %s=ÐÏÄÐ.ÛÁÂÌÏÎ; %s=ÏÔÐÉÓÁÔØÓÑ; %s=ÏÔÐÉÓ.ÛÁÂÌÏÎ; %s=yank in/out"
+
+#: src/lang.c:504
+#, c-format
+msgid	"<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
+msgstr	"<n>=ÐÅÒÅÊÔÉ Ë n; %s=ÓÌÅÄ.ÎÅÐÒÏÞ.; %s=catchup; %s=ÉÚÍÅÎ.ÐÏËÁÚ"
+
+#: src/lang.c:505
+#, c-format
+msgid	"%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
+msgstr	"%s=ÐÏÍÏÝØ; %s=ÓÔÒ.×ÎÉÚ; %s=ÓÔÒ.××ÅÒÈ; %s=×ÙÈÏÄ; %s=ÍÁÒË.; %s=ÍÁÒË.ÎÅÐÒ."
+
+#: src/lang.c:506
+msgid	"--More--"
+msgstr	"--äÁÌÅÅ--"
+
+#: src/lang.c:507
+#, c-format
+msgid	"Moving %s..."
+msgstr	"ðÅÒÅÍÅÝÅÎÉÅ %s..."
+
+#: src/lang.c:509
+msgid	", name: "
+msgstr	", ÉÍÑ: "
+
+#: src/lang.c:510
+#, c-format
+msgid	"Goto newsgroup [%s]> "
+msgstr	"ðÅÒÅÊÔÉ Ë ÇÒÕÐÐÅ [%s]> "
+
+#: src/lang.c:511
+msgid	"newsgroups"
+msgstr	"ÇÒÕÐÐÙ"
+
+#: src/lang.c:512
+#, c-format
+msgid	"Position %s in group list (1,2,..,$) [%d]> "
+msgstr	"ðÏÚÉÃÉÑ %s × ÓÐÉÓËÅ ÇÒÕÐÐ (1,2,..,$) [%d]> "
+
+#: src/lang.c:513
+msgid	"newsgroup"
+msgstr	"ÇÒÕÐÐÁ"
+
+#: src/lang.c:514
+msgid	"Try and save newsrc file again?"
+msgstr	"ðÏÐÒÏÂÏ×ÁÔØ É ÓÏÈÒÁÎÉÔØ newsrc ÓÎÏ×Á?"
+
+#: src/lang.c:515
+msgid	"Warning: No newsgroups were written to your newsrc file. Save aborted."
+msgstr	"÷ÎÉÍÁÎÉÅ: çÒÕÐÐÙ ÎÅ ÂÙÌÉ ÚÁÐÉÓÁÎÙ × newsrc. óÏÈÒÁÎÅÎÉÅ ÐÒÅÒ×ÁÎÏ."
+
+#: src/lang.c:516
+msgid	"newsrc file saved successfully.\n"
+msgstr	"newsrc ÆÁÊÌ ÕÓÐÅÛÎÏ ÓÏÈÒÁÎÅÎ.\n"
+
+#: src/lang.c:517
+msgid	"-- Next response --"
+msgstr	"-- óÌÅÄÕÀÝÉÊ ÏÔ×ÅÔ --"
+
+#: src/lang.c:518
+#, c-format
+msgid	"NNTP authorization password not found for %s"
+msgstr	"NNTP ÐÁÒÏÌØ ÎÅ ÎÁÊÄÅÎ ÄÌÑ %s"
+
+#: src/lang.c:519
+msgid	"No  "
+msgstr	"îÅÔ  "
+
+#: src/lang.c:520
+msgid	"*** No articles ***"
+msgstr	"*** îÅÔ ÓÔÁÔÅÊ ***"
+
+#: src/lang.c:521
+msgid	"No articles have been posted"
+msgstr	"îÉ ÏÄÎÁ ÓÔÁÔØÑ ÎÅ ÂÙÌÁ ÏÔÐÒÁ×ÌÅÎÁ"
+
+#: src/lang.c:522
+msgid	"*** No description ***"
+msgstr	"*** îÅÔ ÏÐÉÓÁÎÉÑ ***"
+
+#: src/lang.c:523
+msgid	"No filename"
+msgstr	"îÅÔ ÉÍÅÎÉ ÆÁÊÌÁ"
+
+#: src/lang.c:524
+msgid	"No group"
+msgstr	"îÅÔ ÇÒÕÐÐÙ"
+
+#: src/lang.c:525
+msgid	"*** No groups ***"
+msgstr	"*** îÅÔ ÇÒÕÐÐ ***"
+
+#: src/lang.c:526
+msgid	"No more groups to read"
+msgstr	"îÅÔ ÂÏÌØÛÅ ÇÒÕÐÐ"
+
+#: src/lang.c:527
+msgid	"No last message"
+msgstr	"îÅÔ ÐÏÓÌÅÄÎÅÇÏ ÓÏÏÂÝÅÎÉÑ"
+
+#: src/lang.c:528
+msgid	"No mail address"
+msgstr	"îÅÔ ÁÄÒÅÓÁ e-mail"
+
+#: src/lang.c:529
+msgid	"No articles marked for saving"
+msgstr	"îÅÔ ÍÁÒËÉÒÏ×ÁÎÎÙÈ ÄÌÑ ÓÏÈÒÁÎÅÎÉÑ ÓÔÁÔÅÊ"
+
+#: src/lang.c:530
+msgid	"No match"
+msgstr	"îÅÔ ÓÏ×ÐÁÄÅÎÉÑ"
+
+#: src/lang.c:531
+msgid	"No more groups"
+msgstr	"âÏÌØÛÅ ÎÅÔ ÇÒÕÐÐ"
+
+#: src/lang.c:532
+msgid	"No newsgroups"
+msgstr	"îÅÔ ÇÒÕÐÐ"
+
+#: src/lang.c:533
+msgid	"No next unread article"
+msgstr	"îÅÔ ÓÌÅÄÕÀÝÅÊ ÎÅÐÒÏÞÉÔÁÎÎÏÊ ÓÔÁÔØÉ"
+
+#: src/lang.c:534
+msgid	"No previous group"
+msgstr	"îÅÔ ÐÒÅÄÙÄÕÝÅÊ ÇÒÕÐÐÙ"
+
+#: src/lang.c:535
+msgid	"No previous unread article"
+msgstr	"îÅÔ ÐÒÅÄÙÄÕÝÅÊ ÎÅÐÒÏÞÉÔÁÎÎÏÊ ÓÔÁÔØÉ"
+
+#: src/lang.c:536
+msgid	"No responses"
+msgstr	"îÅÔ ÏÔËÌÉËÏ×"
+
+#: src/lang.c:537
+msgid	"No responses to list in current thread"
+msgstr	"îÅÔ ÏÔ×ÅÔÏ× ÎÁ ÓÐÉÓÏË × ÔÅËÕÝÅÊ ÎÉÔÉ"
+
+#: src/lang.c:538
+msgid	"No search string"
+msgstr	"îÅÔ ÓÔÒÏËÉ ÐÏÉÓËÁ"
+
+#: src/lang.c:539
+msgid	"No subject"
+msgstr	"îÅÔ ÔÅÍÙ"
+
+#: src/lang.c:541
+#, c-format
+msgid	"%s: Terminal must have clear to end-of-line (ce)\n"
+msgstr	""
+
+#: src/lang.c:542
+#, c-format
+msgid	"%s: Terminal must have clear to end-of-screen (cd)\n"
+msgstr	""
+
+#: src/lang.c:543
+#, c-format
+msgid	"%s: Terminal must have clearscreen (cl) capability\n"
+msgstr	"%s: ôÅÒÍÉÎÁÌ ÄÏÌÖÅÎ ÉÍÅÔØ clearscreen (cl) ÆÕÎËÃÉÀ\n"
+
+#: src/lang.c:544
+#, c-format
+msgid	"%s: Terminal must have cursor motion (cm)\n"
+msgstr	"%s: ôÅÒÍÉÎÁÌ ÄÏÌÖÅÎ ÉÍÅÔØ cursor motion (cm)\n"
+
+#: src/lang.c:545
+#, c-format
+msgid	"%s: TERM variable must be set to use screen capabilities\n"
+msgstr	"%s: ÐÅÒÅÍÅÎÎÁÑ ÏËÒÕÖÅÎÉÑ TERM ÄÏÌÖÎÁ ÂÙÔØ ÕÓÔÁÎÏ×ÌÅÎÁ ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ "
+	"ÓÐÏÓÏÂÎÏÓÔÅÊ ÜËÒÁÎÁ\n"
+
+#: src/lang.c:547
+#, c-format
+msgid	"No viewer found for %s/%s\n"
+msgstr	"îÅ ÎÁÊÄÅÎ ÐÒÏÓÍÏÔÏÒÝÉË ÄÌÑ %s/%s\n"
+
+#: src/lang.c:548
+msgid	"Newsgroup does not exist on this server"
+msgstr	"çÒÕÐÐÁ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÎÁ ÜÔÏÍ ÓÅÒ×ÅÒÅ"
+
+#: src/lang.c:549
+#, c-format
+msgid	"Group %s not found in active file"
+msgstr	"çÒÕÐÐÁ %s ÎÅ ÎÁÊÄÅÎÁ × ÆÁÊÌÅ active"
+
+#: src/lang.c:550
+msgid	"c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
+msgstr	"c)ÓÏÚÄÁÔØ, a)ÉÓÐ.ÄÒÕÇÏÅ ÉÍÑ, d)ÉÓÐ.ÓÔÁÎÄ. .newsrc, q)×ÙÈÏÄ ÉÚ tin: "
+
+#: src/lang.c:551
+msgid	"use a)lternative name, use d)efault .newsrc, q)uit tin: "
+msgstr	"a)ÉÓÐ.ÄÒÕÇÏÅ ÉÍÑ, ÉÓÐ.ÓÔÁÎÄ. .newsrc, q)×ÙÈÏÄ ÉÚ tin: "
+
+#: src/lang.c:552
+#, c-format
+msgid	"# NNTP-server -> newsrc translation table and NNTP-server\n"
+	"# shortname list for %s %s\n"
+	"#\n"
+	"# the format of this file is\n"
+	"#   <FQDN of NNTP-server> <newsrc file> <shortname> ...\n"
+	"#\n"
+	"# if <newsrc file> is given without path, $HOME is assumed as its location\n"
+	"#\n"
+	"# examples:\n"
+	"#   news.tin.org  .newsrc-tin.org  tinorg\n"
+	"#   news.ka.nu    /tmp/nrc-nu      kanu    nu\n"
+	"#\n"
+msgstr	""
+
+#: src/lang.c:559
+msgid	"Only"
+msgstr	"ôÏÌØËÏ"
+
+#: src/lang.c:560
+#, c-format
+msgid	"Option not enabled. Recompile with %s."
+msgstr	"ïÐÃÉÑ ÎÅ ×ËÌÀÞÅÎÁ. ðÅÒÅÓÏÂÅÒÉÔÅ ÐÁËÅÔ Ó %s."
+
+#: src/lang.c:561
+msgid	"Options Menu"
+msgstr	"íÅÎÀ ïÐÃÉÊ"
+
+#: src/lang.c:564
+#, c-format
+msgid	"Error in regex: %s at pos. %d '%s'"
+msgstr	"ïÛÉÂËÁ × regex: %s × ÐÏÚ. %d '%s'"
+
+#: src/lang.c:565
+#, c-format
+msgid	"Error in regex: pcre internal error %d"
+msgstr	"ïÛÉÂËÁ × regex: pcre ×ÎÕÔÒ. ÏÛÉÂËÁ %d"
+
+#: src/lang.c:566
+#, c-format
+msgid	"Error in regex: study - pcre internal error %s"
+msgstr	"ïÛÉÂËÁ × regex: study - pcre ×ÎÕÔÒ. ÏÛÉÂËÁ %s"
+
+#: src/lang.c:567
+msgid	"Post a followup..."
+msgstr	"ïÔÐÒÁ×ÌÅÎÉÅ ÏÔ×ÅÔÁ × ÇÒÕÐÐÕ..."
+
+#. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
+#: src/lang.c:569
+msgid	"An error has occurred while posting the article. If you think that this\n"
+	"error is temporary or otherwise correctable, you can postpone the article\n"
+	"and pick it up again with ^O later.\n"
+msgstr	"ïÛÉÂËÁ ×Ï ×ÒÅÍÑ ÏÔÐÒÁ×ÌÅÎÉÑ ÓÔÁÔØÉ. åÓÌÉ ÷Ù ÄÕÍÁÅÔÅ, ÞÔÏ ÏÛÉÂËÁ ×ÒÅÍÅÎÎÁÑ\n"
+	"É ËÏÒÒÅËÔÉÒÕÅÍÁÑ, ÷Ù ÍÏÖÅÔÅ ÏÔÌÏÖÉÔØ ÓÔÁÔØÀ É ÏÔÐÒÁ×ÉÔØ ÐÏÚÖÅ Ó ÐÏÍÏÝØÀ ^O\n"
+
+#: src/lang.c:572
+msgid	"Posted articles history"
+msgstr	"ïÔÐÒÁ×ÌÅÎÁ ÉÓÔÏÒÉÑ ÓÔÁÔÅÊ"
+
+#: src/lang.c:573
+#, c-format
+msgid	"Post to newsgroup(s) [%s]> "
+msgstr	"ïÔÐÒÁ×ÉÔØ × ÇÒÕÐÐÕ(Ù) [%s]> "
+
+#: src/lang.c:574
+msgid	"-- post processing started --"
+msgstr	"-- ÏÂÒÁÂÏÔËÁ ÎÁÞÁÔÁ --"
+
+#: src/lang.c:575
+msgid	"-- post processing completed --"
+msgstr	"-- ÏÂÒÁÂÏÔËÁ ÚÁËÏÎÞÅÎÁ --"
+
+#: src/lang.c:576
+#, c-format
+msgid	"Post subject [%s]> "
+msgstr	"ôÅÍÁ ÓÏÏÂÝÅÎÉÑ [%s]> "
+
+#: src/lang.c:577
+msgid	"# Summary of mailed/posted messages viewable by 'W' command from within tin.\n"
+msgstr	"# ó×ÏÄËÁ ÏÔÐÒÁ×ÌÅÎÎÙÈ × ÇÒÕÐÐÕ/ÐÏ e-mail ÓÏÏÂÝÅÎÉÊ ×ÙÚÙ×ÁÅÔÓÑ ËÏÍÁÎÄÏÊ  'W' "
+	"ÉÚtin.\n"
+
+#: src/lang.c:578
+msgid	"Posting article..."
+msgstr	"ïÔÐÒÁ×ÌÅÎÉÅ × ÇÒÕÐÐÕ ÓÔÁÔØÉ..."
+
+#: src/lang.c:579
+#, c-format
+msgid	"Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
+msgstr	"ïÔÐÒÁ×ÉÔØ ÏÔÌÏÖÅÎÎÙÅ ÓÔÁÔØÉ [%%s]? (%s/%s/%s/%s/%s): "
+
+#: src/lang.c:580
+#, c-format
+msgid	"Hot %s"
+msgstr	""
+
+#: src/lang.c:581
+#, c-format
+msgid	"Tagged %s"
+msgstr	"ðÏÍÅÞÅÎÙ %s"
+
+#: src/lang.c:582
+#, c-format
+msgid	"Untagged %s"
+msgstr	"óÎÑÔÙ ÏÔÍÅÔËÉ %s"
+
+#: src/lang.c:583
+msgid	"Processing mail messages marked for deletion."
+msgstr	"ïÂÒÁÂÏÔËÁ e-mail ÐÏÍÅÞÅÎÎÙÈ ÄÌÑ ÕÄÁÌÅÎÉÑ."
+
+#: src/lang.c:584
+msgid	"Processing saved articles marked for deletion."
+msgstr	"ïÂÒÁÂÏÔËÁ ÓÏÈÒ. ÓÔÁÔÅÊ ÐÏÍÅÞÅÎÎÙÈ ÄÌÑ ÕÄÁÌÅÎÉÑ."
+
+#: src/lang.c:585
+#, c-format
+msgid	"Accept Followup-To? %s=post, %s=ignore, %s=quit: "
+msgstr	"ðÒÉÎÑÔØ Followup-To? %s=ÏÔÐÒÁ×ÉÔØ, %s=ÉÇÎÏÒ., %s=×ÙÈÏÄ: "
+
+#: src/lang.c:586
+msgid	"Article unchanged, abort mailing?"
+msgstr	"óÔÁÔØÑ ÎÅ ÉÚÍÅÎÉÌÁÓØ, ÐÒÅÒ×ÁÔØ ÏÔÐÒÁ×ËÕ?"
+
+#: src/lang.c:587
+#, c-format
+msgid	"Do you want to see postponed articles (%d)?"
+msgstr	"èÏÔÉÔÅ ÐÏÓÍÏÔÒÅÔØ ÏÔÌÏÖÅÎÎÙÅ ÓÔÁÔØÉ (%d)?"
+
+#: src/lang.c:589
+msgid	"Add quick kill filter?"
+msgstr	"äÏÂÁ×ÉÔØ ÂÙÓÔÒÙÊ ÕÎÉÞÔ. ÆÉÌØÔÒ?"
+
+#: src/lang.c:590
+msgid	"Add quick selection filter?"
+msgstr	"äÏÂÁ×ÉÔØ ÂÙÓÔÒ. ÓÅÌÅË. ÆÉÌØÔÒ?"
+
+#: src/lang.c:591
+msgid	"Do you really want to quit?"
+msgstr	"÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ×ÙÊÔÉ?"
+
+#: src/lang.c:592
+#, c-format
+msgid	"%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
+msgstr	"%s=ÒÅÄÁËÔ.ÏÔÍÅÎ.ÓÏÏÂÝÅÎÉÅ , %s=×ÙÈÏÄ, %s=ÕÄÁÌÉÔØ (ÏÔÍÅÎÉÔØ) [%%s]: "
+
+#: src/lang.c:593
+msgid	"You have tagged articles in this group - quit anyway?"
+msgstr	"ïÓÔÁÌÉÓØ ÐÏÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ × ÇÒÕÐÐÅ - ×ÙÊÔÉ ×ÓÅ ÒÁ×ÎÏ?"
+
+#: src/lang.c:594
+#, c-format
+msgid	"%s=quit, %s=edit, %s=postpone: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄÁËÔÉÒÏ×ÁÔØ, %s=ÏÔÌÏÖÉÔØ: "
+
+#: src/lang.c:595
+#, c-format
+msgid	"%s=quit %s=edit %s=save kill description: "
+msgstr	"%s=×ÙÈÏÄ %s=ÒÅÄÁËÔÉÒÏ×ÁÔØ %s=ÓÏÈÒ.ÕÎÉÞÔ. ÏÐÉÓÁÎÉÅ: "
+
+#: src/lang.c:596
+#, c-format
+msgid	"%s=quit %s=edit %s=save select description: "
+msgstr	"%s=×ÙÈÏÄ %s=ÒÅÄÁËÔÉÒÏ×ÁÔØ %s=ÓÏÈÒ.×ÙÂÒ. ÏÐÉÓÁÎÉÅ: "
+
+#: src/lang.c:597
+msgid	"Do you really want to quit without saving your configuration?"
+msgstr	"÷Ù ÄÅÊÓÔ×ÉÔÅÌØÎÏ ÈÏÔÉÔÅ ×ÙÊÔÉ ÂÅÚ ÓÏÈÒÁÎÅÎÉÑ ËÏÎÆÉÇÕÒÁÃÉÉ?"
+
+#: src/lang.c:600
+msgid	"Invalid range - valid are '0-9.$' eg. 1-$"
+msgstr	"îÅÄÏÐÕÓÔÉÍÙÊ ÄÉÁÐÁÚÏÎ - ÐÒÁ×ÉÌØÎÏ: '0-9.$' ÎÁÐÒÉÍÅÒ 1-$"
+
+#: src/lang.c:601
+msgid	"Do you want to abort this operation?"
+msgstr	"÷Ù ÈÏÔÉÔÅ ÐÒÅÒ×ÁÔØ ÏÐÅÒÁÃÉÀ?"
+
+#: src/lang.c:602
+msgid	"Do you want to exit tin immediately?"
+msgstr	"÷Ù ÈÏÔÉÔÅ ×ÙÊÔÉ ÉÚ tin ÎÅÍÅÄÌÅÎÎÏ?"
+
+#: src/lang.c:603
+msgid	"Read response> "
+msgstr	"ðÒÏÞÉÔÁÔØ ÏÔ×ÅÔ> "
+
+#: src/lang.c:604
+msgid	"Reading ('q' to quit)..."
+msgstr	"þÔÅÎÉÅ ('q' - ×ÙÈÏÄ)..."
+
+#: src/lang.c:605
+#, c-format
+msgid	"Reading %sarticles..."
+msgstr	"þÔÅÎÉÅ %sÓÔÁÔÅÊ..."
+
+#: src/lang.c:606
+#, c-format
+msgid	"Reading %sattributes file...\n"
+msgstr	"þÔÅÎÉÅ %sattributes ÆÁÊÌÁ...\n"
+
+#: src/lang.c:607
+#, c-format
+msgid	"Reading %sconfig file...\n"
+msgstr	"þÔÅÎÉÅ %sconfig ÆÁÊÌÁ...\n"
+
+#: src/lang.c:608
+msgid	"Reading filter file...\n"
+msgstr	"þÔÅÎÉÅ filter ÆÁÊÌÁ...\n"
+
+#: src/lang.c:609
+#, c-format
+msgid	"Reading %s groups..."
+msgstr	"þÔÅÎÉÅ %s ÇÒÕÐÐ..."
+
+#: src/lang.c:610
+msgid	"Reading input history file...\n"
+msgstr	"þÔÅÎÉÅ ÆÁÊÌÁ ÉÓÔÏÒÉÉ...\n"
+
+#: src/lang.c:611
+msgid	"Reading keymap file...\n"
+msgstr	"þÔÅÎÉÅ keymap ÆÁÊÌÁ...\n"
+
+#: src/lang.c:612
+msgid	"Reading groups from active file... "
+msgstr	"þÔÅÎÉÅ ÇÒÕÐÐ ÉÚ active ÆÁÊÌÁ... "
+
+#: src/lang.c:613
+msgid	"Reading groups from newsrc file... "
+msgstr	"þÔÅÎÉÅ ÇÒÕÐÐ ÉÚ ÆÁÊÌÁ newsrc... "
+
+#: src/lang.c:614
+msgid	"Reading newsgroups file... "
+msgstr	"þÔÁÎÉÅ ÆÁÊÌÁ ÇÒÕÐÐ... "
+
+#: src/lang.c:615
+msgid	"Reading newsrc file..."
+msgstr	"þÔÅÎÉÅ ÆÁÊÌÁ newsrc..."
+
+#: src/lang.c:617
+#, c-format
+msgid	"(%d:%02d remaining)"
+msgstr	"(%d:%02d ÏÓÔÁÌÏÓØ)"
+
+#: src/lang.c:619
+#, c-format
+msgid	"Bogus group %s removed."
+msgstr	"ïÛÉÂ. ÇÒÕÐÐÁ %s ÕÄÁÌÅÎÁ."
+
+#: src/lang.c:620
+#, c-format
+msgid	"Error: rename %s to %s"
+msgstr	"ïÛÉÂËÁ: ÐÅÒÅÉÍÅÎÏ×ÁÔØ %s × %s"
+
+#: src/lang.c:621
+msgid	"Reply to author..."
+msgstr	"ïÔ×ÅÞÁÅÍ Á×ÔÏÒÕ..."
+
+#: src/lang.c:622
+msgid	"Repost"
+msgstr	"ðÅÒÅÏÔÐÒÁ×ÉÔØ"
+
+#: src/lang.c:623
+msgid	"Reposting article..."
+msgstr	"ðÅÒÅÏÔÐÒÁ×ÌÅÎÉÅ ÓÔÁÔØÉ..."
+
+#: src/lang.c:624
+#, c-format
+msgid	"Repost article(s) to group(s) [%s]> "
+msgstr	"ïÔÐÒÁ×ÉÔØ ÓÎÏ×Á ÓÔÁÔØÀ(É) × ÇÒÕÐÐÕ(Ù) [%s]> "
+
+#: src/lang.c:625
+msgid	"Reset newsrc?"
+msgstr	"óÂÒÏÓÉÔØ newsrc?"
+
+#: src/lang.c:626
+msgid	"Responses have been directed to the following newsgroups"
+msgstr	"ïÔ×ÅÔÙ ÂÙÌÉ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ × ÓÌÅÄÕÀÝÉÅ ÇÒÕÐÐÙ"
+
+#: src/lang.c:627
+#, c-format
+msgid	"Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
+msgstr	"ïÔ×ÅÔÙ ÂÙÌÉ ÐÅÒÅÎÁÐÒÁ×ÌÅÎÙ ÏÔÐÒÁ×ÉÔÅÌÀ. %s=e-mail, %s=ÏÔÐÒÁ×ÉÔØ, %s=×ÙÈÏÄ: "
+
+#: src/lang.c:628
+#, c-format
+msgid	"RespNo %4d of %4d"
+msgstr	""
+
+#: src/lang.c:629
+msgid	"Press <RETURN> to continue..."
+msgstr	"îÁÖÍÉÔÅ <÷÷ïä> ÄÌÑ ÐÒÏÄÏÌÖÅÎÉÑ..."
+
+#: src/lang.c:631
+#, c-format
+msgid	"Select From    [%s] (y/n): "
+msgstr	"÷ÙÂÒÁÔØ ÉÚ    [%s] (y/n): "
+
+#: src/lang.c:632
+msgid	"Select Lines: (</>num): "
+msgstr	"÷ÙÂÒÁÔØ ÓÔÒÏËÉ: (</>num): "
+
+#: src/lang.c:633
+msgid	"Auto-select Article Menu"
+msgstr	"á×ÔÏ-×ÙÂÏÒ íÅÎÀ óÔÁÔÅÊ"
+
+#: src/lang.c:634
+#, c-format
+msgid	"Select Msg-Id  [%s] (f/l/o/n): "
+msgstr	"÷ÙÂÒÁÔØ Msg-Id  [%s] (f/l/o/n): "
+
+#: src/lang.c:635
+msgid	"Select pattern scope: "
+msgstr	"÷ÙÂÒÁÔØ ÏÂÌÁÓÔØ ÛÁÂÌÏÎÁ: "
+
+#: src/lang.c:636
+#, c-format
+msgid	"Select Subject [%s] (y/n): "
+msgstr	"÷ÙÂÒÁÔØ ôÅÍÕ [%s] (y/n): "
+
+#: src/lang.c:637
+msgid	"Select text pattern : "
+msgstr	"÷ÙÂÒÁÔØ ÛÁÂÌÏÎ : "
+
+#: src/lang.c:638
+msgid	"Select time in days   : "
+msgstr	"÷ÙÂÒÁÔØ ×ÒÅÍÑ  : "
+
+#: src/lang.c:639
+#, c-format
+msgid	"# %s server configuration file\n"
+	"# This file was automatically saved by %s %s %s (\"%s\")\n"
+	"#\n"
+	"# Do not edit while %s is running, since all your changes to this file\n"
+	"# will be overwritten when you leave %s.\n"
+	"# Do not edit at all if you don't know what you do.\n"
+	"############################################################################\n"
+	"\n"
+msgstr	""
+
+#: src/lang.c:645
+msgid	"Showing unread groups only"
+msgstr	"ðÏËÁÚ ÔÏÌØËÏ ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÇÒÕÐÐ"
+
+#: src/lang.c:646
+msgid	"Subject: line (ignore case)   "
+msgstr	"ôÅÍÁ: ÓÔÒÏËÁ (ÉÇÎÏÒÉÒÏ×ÁÔØ ÒÅÇÉÓÔÒ)   "
+
+#: src/lang.c:647
+msgid	"Subject: line (case sensitive)"
+msgstr	"ôÅÍÁ: ÓÔÒÏËÁ (ÎÅ ÉÇÎÏÒÉÒÏ×ÁÔØ ÒÅÇÉÓÔÒ)   "
+
+#: src/lang.c:648
+msgid	"Save"
+msgstr	"óÏÈÒÁÎÉÔØ"
+
+#: src/lang.c:649
+#, c-format
+msgid	"Save '%s' (%s/%s)?"
+msgstr	"óÏÈÒÁÎÉÔØ '%s' (%s/%s)?"
+
+#: src/lang.c:650
+msgid	"Save configuration before continuing?"
+msgstr	"óÏÈÒÁÎÉÔØ ËÏÎÆÉÇÕÒÁÃÉÀ ÐÅÒÅÄ ÐÒÏÄÏÌÖÅÎÉÅÍ?"
+
+#: src/lang.c:651
+msgid	"Save filename> "
+msgstr	"óÏÈÒ. × ÆÁÊÌ> "
+
+#: src/lang.c:652
+msgid	"Saved"
+msgstr	"óÏÈÒÁÎÅÎÏ"
+
+#: src/lang.c:653
+#, c-format
+msgid	"%4d unread (%4d hot) %s in %s\n"
+msgstr	"%4d ÎÅÐÒÏÞÉÔÁÎÏ (%4d hot) %s × %s\n"
+
+#: src/lang.c:654
+#, c-format
+msgid	"Saved %s...\n"
+msgstr	"óÏÈÒÁÎÅÎÏ %s...\n"
+
+#: src/lang.c:655
+msgid	"Nothing was saved"
+msgstr	"îÉÞÅÇÏ ÎÅ ÂÙÌÏ ÓÏÈÒÁÎÅÎÏ"
+
+#: src/lang.c:656
+#, c-format
+msgid	"\n"
+	"%s %d %s from %d %s\n"
+msgstr	"\n"
+	"%s %d %s ÉÚ %d %s\n"
+
+#: src/lang.c:657
+#, c-format
+msgid	"-- %s saved to %s%s --"
+msgstr	"-- %s ÓÏÈÒÁÎÅÎÏ × %s%s --"
+
+#: src/lang.c:658
+#, c-format
+msgid	"-- %s saved to %s - %s --"
+msgstr	"-- %s ÓÏÈÒÁÎÅÎÏ × %s - %s --"
+
+#: src/lang.c:659
+msgid	"Saving..."
+msgstr	"úÁÐÉÓØ..."
+
+#: src/lang.c:660
+#, c-format
+msgid	"%s: Screen initialization failed"
+msgstr	"%s: îÅÕÄÁÞÎÁÑ ÉÎÉÃÉÁÌÉÚÁÃÉÑ ÜËÒÁÎÁ"
+
+#: src/lang.c:662
+#, c-format
+msgid	"%s: screen is too small\n"
+msgstr	"%s: ÜËÒÁÎ ÓÌÉÛËÏÍ ÍÁÌÅÎØËÉÊ\n"
+
+#: src/lang.c:664
+#, c-format
+msgid	"screen is too small, %s is exiting\n"
+msgstr	"ÜËÒÁÎ ÓÌÉÛËÏÍ ÍÁÌÅÎØËÉÊ, %s ×ÙÈÏÄ\n"
+
+#: src/lang.c:665
+#, c-format
+msgid	"Search backwards [%s]> "
+msgstr	"ðÏÉÓË ÎÁÚÁÄ [%s]> "
+
+#: src/lang.c:666
+#, c-format
+msgid	"Search body [%s]> "
+msgstr	"ðÏÉÓË ÐÏ ÔÅÌÕ [%s]> "
+
+#: src/lang.c:667
+#, c-format
+msgid	"Search forwards [%s]> "
+msgstr	"ðÏÉÓË ×ÐÅÒÅÄ [%s]> "
+
+#: src/lang.c:668
+msgid	"Searching..."
+msgstr	"ðÏÉÓË..."
+
+#: src/lang.c:669
+#, c-format
+msgid	"Searching article %d of %d ('q' to abort)..."
+msgstr	"ðÏÉÓË ÓÔÁÔØÉ %d ÉÚ %d ('q' - ×ÙÈÏÄ)..."
+
+#: src/lang.c:670
+msgid	"Select article> "
+msgstr	"÷ÙÂÅÒÉÔÅ ÓÔÁÔØÀ> "
+
+#: src/lang.c:671
+msgid	"Select option number before text or use arrow keys and <CR>. 'q' to quit."
+msgstr	"÷ÙÂÅÒÉÔÅ ÎÏÍÅÒ ÏÐÃÉÉ ÉÌÉ ÐÅÒÅÊÄÉÔÅ ÓÔÒÅÌÏÞËÁÍÉ É ÎÁÖÍÉÔÅ <÷÷ïä>. 'q'-×ÙÈÏÄ."
+
+#: src/lang.c:672
+msgid	"Select group> "
+msgstr	"÷ÙÂÅÒÉÔÅ ÇÒÕÐÐÕ> "
+
+#: src/lang.c:673
+#, c-format
+msgid	"Enter selection pattern [%s]> "
+msgstr	"÷×ÅÄÉÔÅ ÛÁÂÌÏÎ ÄÌÑ ×ÙÂÏÒÁ [%s]> "
+
+#: src/lang.c:674
+msgid	"Select thread > "
+msgstr	"÷ÙÂÅÒÉÔÅ ÄÉÓËÕÓÓÉÀ > "
+
+#: src/lang.c:675
+#, c-format
+msgid	"%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
+msgstr	"%s %s %s (\"%s\") [%s]: ÐÏÛÌÉÔÅ ðïìîùê bugreport ÎÁ %s\n"
+
+#: src/lang.c:676
+msgid	"servers active-file"
+msgstr	"active-ÆÁÊÌ ÓÅÒ×ÅÒÏ×"
+
+#: src/lang.c:677
+msgid	"Cannot move into new newsgroups. Subscribe first..."
+msgstr	"îÅ ÍÏÇÕ ÐÅÒÅÊÔÉ × ÎÏ×ÕÀ ÇÒÕÐÐÕ. óÎÁÞÁÌÁ ÐÏÄÐÉÛÉÔÅÓØ..."
+
+#: src/lang.c:678
+msgid	"<SPACE>"
+msgstr	"<ðòïâåì>"
+
+#: src/lang.c:679
+#, c-format
+msgid	"Starting: (%s)"
+msgstr	"óÔÁÒÔÕÀ: (%s)"
+
+#: src/lang.c:680
+#, c-format
+msgid	"List Thread (%d of %d)"
+msgstr	"ðÏËÁÚ äÉÓËÕÓÓÉÊ (%d of %d)"
+
+#: src/lang.c:681
+#, c-format
+msgid	"Thread (%.*s)"
+msgstr	"äÉÓËÕÓÓÉÑ (%.*s)"
+
+#: src/lang.c:682
+msgid	"Enter wildcard subscribe pattern> "
+msgstr	"÷×ÅÄÉÔÅ wildcard - ÛÁÂÌÏÎ ÄÌÑ ÐÏÄÐÉÓËÉ> "
+
+#: src/lang.c:683
+#, c-format
+msgid	"subscribed to %d groups"
+msgstr	"ÐÏÄÐÉÓÁÌÉÓØ ÎÁ %d ÇÒÕÐÐ"
+
+#: src/lang.c:684
+#, c-format
+msgid	"Subscribed to %s"
+msgstr	"ðÏÄÐÉÓÁÌÉÓØ ÎÁ %s"
+
+#: src/lang.c:685
+msgid	"Subscribing... "
+msgstr	"ðÏÄÐÉÓÙ×ÁÅÍÓÑ... "
+
+#: src/lang.c:686
+#, c-format
+msgid	"Repost or supersede article(s) [%%s]? (%s/%s/%s): "
+msgstr	"ïÔÐÒÁ×ÉÔØ ÓÎÏ×Á ÉÌÉ ÚÁÍÅÎÉÔØ ÓÔÁÔØÀ(É) [%%s]? (%s/%s/%s): "
+
+#: src/lang.c:687
+#, c-format
+msgid	"Supersede article(s) to group(s) [%s]> "
+msgstr	"úÁÍÅÎÉÔØ ÓÔÁÔØÀ(É) × ÇÒÕÐÐÕ(Ù) [%s]> "
+
+#: src/lang.c:688
+msgid	"Superseding article ..."
+msgstr	"úÁÍÅÎÁ ÓÔÁÔØÉ ..."
+
+#: src/lang.c:689
+#, c-format
+msgid	"\n"
+	"Stopped. Type 'fg' to restart %s\n"
+msgstr	"\n"
+	"ïÓÔÁÎÏ×ÌÅÎÏ. îÁÂÅÒÉÔÅ 'fg' ÄÌÑ ÐÅÒÅÚÁÐÕÓËÁ %s\n"
+
+#: src/lang.c:691
+#, c-format
+msgid	"%d days"
+msgstr	"%d ÄÎÅÊ"
+
+#: src/lang.c:692
+msgid	"<TAB>"
+msgstr	"<TAâ>"
+
+#: src/lang.c:693
+msgid	"TeX "
+msgstr	""
+
+#: src/lang.c:694
+msgid	"# Default action/prompt strings\n"
+msgstr	""
+
+#: src/lang.c:695
+msgid	"# Defaults for quick (1 key) kill & auto-selection filters\n"
+	"# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
+	"#             5=Message-ID: & last References: entry only\n"
+	"#             6=Message-ID: entry only 7=Lines:\n"
+	"# global=ON/OFF  ON=apply to all groups OFF=apply to current group\n"
+	"# case=ON/OFF    ON=filter case sensitive OFF=ignore case\n"
+	"# expire=ON/OFF  ON=limit to default_filter_days OFF=don't ever expire\n"
+msgstr	""
+
+#: src/lang.c:708
+msgid	"# If ON use print current subject or newsgroup description in the last line\n"
+msgstr	""
+
+#: src/lang.c:709
+msgid	"# Host & time info used for detecting new groups (don't touch)\n"
+msgstr	""
+
+#: src/lang.c:710
+msgid	"There is no news\n"
+msgstr	"îÅÔ ÎÏ×ÏÓÔÅÊ\n"
+
+#: src/lang.c:711
+msgid	"Thread"
+msgstr	"äÉÓËÕÓÓÉÑ"
+
+#: src/lang.c:712
+msgid	"Thread Level Commands"
+msgstr	"ëÏÍÁÎÄÙ õÒÏ×ÎÑ äÉÓËÕÓÓÉÊ"
+
+#: src/lang.c:713
+msgid	"Thread deselected"
+msgstr	"ó ÄÉÓËÕÓÓÉÉ ÓÎÑÔÁ ÏÔÍÅÔËÁ"
+
+#: src/lang.c:714
+msgid	"Thread selected"
+msgstr	"äÉÓËÕÓÓÉÑ ×ÙÂÒÁÎÁ"
+
+#: src/lang.c:716
+msgid	"threads"
+msgstr	"ÄÉÓËÕÓÓÉÊ"
+
+#: src/lang.c:718
+msgid	"Thread range"
+msgstr	"äÉÁÐÁÚÏÎ ÄÉÓËÕÓÓÉÉ"
+
+#: src/lang.c:719
+msgid	"thread"
+msgstr	"ÄÉÓËÕÓÓÉÑ"
+
+#: src/lang.c:720
+#, c-format
+msgid	"Thread %4s of %4s"
+msgstr	"äÉÓËÕÓÓÉÑ %4s ÉÚ %4s"
+
+#: src/lang.c:721
+msgid	"Threading articles..."
+msgstr	"òÁÚÂÏÒ ÄÉÓËÕÓÓÉÊ..."
+
+#: src/lang.c:722
+#, c-format
+msgid	"Toggled word highlighting %s"
+msgstr	"ðÅÒÅËÌÀÞÅÎÉÅ ÐÏÄÓ×ÅÔËÉ ÓÌÏ× %s"
+
+#: src/lang.c:723
+msgid	"Toggled rot13 encoding"
+msgstr	"ðÅÒÅËÌÀÞÅÎÉÅ rot13 ËÏÄÉÒÏ×ËÉ"
+
+#: src/lang.c:724
+#, c-format
+msgid	"Toggled german TeX encoding %s"
+msgstr	"ðÅÒÅËÌÀÞÅÎÉÅ ÎÅÍÅÃËÏÊ TeX ËÏÄÉÒÏ×ËÉ %s"
+
+#: src/lang.c:725
+#, c-format
+msgid	"Toggled tab-width to %d"
+msgstr	"ðÅÒÅËÌÀÞÅÎÉÅ ÛÉÒÉÎÙ TAâ ÎÁ %d"
+
+#: src/lang.c:726
+#, c-format
+msgid	"%d Trying to dotlock %s"
+msgstr	""
+
+#: src/lang.c:727
+#, c-format
+msgid	"%d Trying to lock %s"
+msgstr	"%d ðÏÐÙÔËÁ ÚÁÂÌÏËÉÒÏ×ÁÔØ %s"
+
+#: src/lang.c:728
+msgid	"           h=help\n"
+msgstr	"           h=ÐÏÍÏÝØ\n"
+
+#: src/lang.c:730
+msgid	"Unlimited"
+msgstr	"îÅÏÇÒÁÎÉÞÅÎ"
+
+#: src/lang.c:731
+msgid	"Enter wildcard unsubscribe pattern> "
+msgstr	"÷×ÅÄÉÔÅ wildcard ÏÔÐÉÓÎÏÊ ÛÁÂÌÏÎ> "
+
+#: src/lang.c:732
+#, c-format
+msgid	"Error decoding %s : %s"
+msgstr	"ïÛÉÂËÁ ÒÁÓËÏÄÉÒÏ×ÁÎÉÑ %s : %s"
+
+#: src/lang.c:733
+msgid	"No end."
+msgstr	"îÅÔ ËÏÎÃÁ."
+
+#: src/lang.c:734
+#, c-format
+msgid	"%s successfully decoded."
+msgstr	"%s ÕÓÐÅÛÎÏ ÒÁÓËÏÄÉÒÏ×ÁÎ."
+
+#: src/lang.c:735
+#, c-format
+msgid	"%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
+	"\n"
+msgstr	"%*s[-- %s/%s, %suuencoded ÆÁÊÌ, %d ÓÔÒÏË, ÉÍÑ: %s --]\n"
+	"\n"
+
+#: src/lang.c:736
+msgid	"unread "
+msgstr	"ÎÅÐÒÏÞÉÔÁÎÏ "
+
+#: src/lang.c:737
+#, c-format
+msgid	"unsubscribed from %d groups"
+msgstr	"ÏÔÐÉÓÁÌÉÓØ ÉÚ %d ÇÒÕÐÐ"
+
+#: src/lang.c:738
+#, c-format
+msgid	"Unsubscribed from %s"
+msgstr	"ïÔÐÉÓÁÌÉÓØ ÏÔ %s"
+
+#: src/lang.c:739
+msgid	"Unsubscribing... "
+msgstr	"ïÔÐÉÓÙ×ÁÅÍÓÑ... "
+
+#: src/lang.c:740
+msgid	"Unthreading articles..."
+msgstr	""
+
+#: src/lang.c:741
+msgid	"Updated"
+msgstr	"ïÂÎÏ×ÌÅÎÏ"
+
+#: src/lang.c:742
+msgid	"Updating"
+msgstr	"ïÂÎÏ×ÌÅÎÉÅ"
+
+#: src/lang.c:743
+#, c-format
+msgid	"Opening %s\n"
+msgstr	"ïÔËÏÙÔÉÅ %s\n"
+
+#: src/lang.c:744
+msgid	"No more URL's in this article"
+msgstr	"îÅÔ ÂÏÌØÛÅ URL × ÓÔÁÔØÅ"
+
+#: src/lang.c:745
+msgid	"Use MIME display program for this message?"
+msgstr	"÷ÙÚ×ÁÔØ ÐÒÏÇÒÁÍÍÕ, ÐÏËÁÚÙ×ÁÀÝÕÀ MIME ÄÌÑ ÓÔÁÔØÉ?"
+
+#: src/lang.c:746
+msgid	"  -c       mark all news as read in subscribed newsgroups (batch mode)"
+msgstr	"  -c       ÍÁÒË. ×ÓÅ ÎÏ×ÏÓÔÉ ËÁË ÐÒÏÞ. × ÐÏÄÐÉÓÁÎÎÙÈ ÇÒÕÐÐÁÈ(ÐÁËÅÔÎÙÊ ÒÅÖÉÍ)"
+
+#: src/lang.c:747
+msgid	"  -Z       return status indicating if any unread news (batch mode)"
+msgstr	"  -Z       ×ÏÚ×ÒÁÔ ÓÔÁÔÕÓÁ Ï ÎÅÐÒÏÞÉÔÁÎÎÙÈ ÎÏ×ÏÓÔÑÈ (ÐÁËÅÔÎÙÊ ÒÅÖÉÍ)"
+
+#: src/lang.c:748
+msgid	"  -q       don't check for new newsgroups"
+msgstr	"  -q       ÎÅ ÐÒÏ×ÅÒÑÔØ ÎÁ ÎÏ×ÙÅ ÇÒÕÐÐÙ ÎÏ×ÏÓÔÅÊ"
+
+#: src/lang.c:749
+msgid	"  -X       don't save any files on quit"
+msgstr	"  -X       ÎÅ ÓÏÈÒÁÎÑÔØ ÆÁÊÌÙ ÐÒÉ ×ÙÈÏÄÅ"
+
+#: src/lang.c:750
+msgid	"  -d       don't show newsgroup descriptions"
+msgstr	"  -d       ÎÅ ÐÏËÁÚÙ×ÁÔØ ÏÐÉÓÁÎÉÅ ÇÒÕÐÐÙ"
+
+#: src/lang.c:751
+msgid	"  -G limit get only limit articles/group"
+msgstr	"  -G limit ÐÏÌÕÞÉÔØ ÔÏÌØËÏ limit ÓÔÁÔÅÊ/ÇÒÕÐÐ"
+
+#: src/lang.c:752
+#, c-format
+msgid	"  -H       help information about %s"
+msgstr	"  -H       ÐÏÄÓËÁÚËÁ Ï %s"
+
+#: src/lang.c:753
+msgid	"  -h       this help message"
+msgstr	"  -h       ÜÔÁ ÐÏÄÓËÁÚËÁ"
+
+#: src/lang.c:754
+#, c-format
+msgid	"  -I dir   news index file directory [default=%s]"
+msgstr	"  -I dir   ÐÁÐËÁ ÉÎÄÅËÓÎÏÇÏ ÆÁÊÌÁ [ÐÏ ÕÍÏÌÞÁÎÉÀ=%s]"
+
+#: src/lang.c:755
+msgid	"  -u       update index files (batch mode)"
+msgstr	"  -u       ÏÂÎÏ×ÉÔØ ÉÎÄÅËÓÎÙÅ ÆÁÊÌÙ (ÐÁËÅÔÎÙÊ ÒÅÖÉÍ)"
+
+#: src/lang.c:756
+#, c-format
+msgid	"  -m dir   mailbox directory [default=%s]"
+msgstr	"  -m dir   ÐÁÐËÁ mailbox [ÐÏ ÕÍÏÌÞÁÎÉÀ=%s]"
+
+#: src/lang.c:757
+#, c-format
+msgid	"\n"
+	"Mail bug reports/comments to %s"
+msgstr	"\n"
+	"ïÔÐÒÁ×ÌÑÊÔÅ ÏÛÉÂËÉ/ËÏÍÍÅÎÔÁÒÉÉ ÎÁ %s"
+
+#: src/lang.c:758
+msgid	"  -N       mail new news to your posts (batch mode)"
+msgstr	"  -N       e-mail ÎÏ×ÙÅ ÎÏ×ÏÓÔÉ ÎÁ ×ÁÛÅ ÓÏÏÂÝÅÎÉÅ (ÐÁËÅÔÎÙÊ ÒÅÖÉÍ)"
+
+#: src/lang.c:759
+msgid	"  -M user  mail new news to specified user (batch mode)"
+msgstr	"  -M user  e-mail ÎÏ×ÙÅ ÎÏ×ÏÓÔÉ ÁÄÒÅÓÁÔÕ (ÐÁËÅÔÎÙÊ ÒÅÖÉÍ)"
+
+#: src/lang.c:760
+#, c-format
+msgid	"  -f file  subscribed to newsgroups file [default=%s]"
+msgstr	"  -f file  ÆÁÊÌ ÐÏÄÐÉÓËÉ [ÐÏ ÕÍÏÌÞÁÎÉÀ=%s]"
+
+#: src/lang.c:761
+msgid	"  -x       no posting mode"
+msgstr	"  -x       ÒÅÖÉÍ ÚÁÐÒÅÔ ÏÔÐÒÁ×ÌÅÎÉÑ"
+
+#: src/lang.c:762
+msgid	"  -w       post an article and exit"
+msgstr	"  -w       ÏÔÐÒÁ×ÉÔØ ÓÔÁÔØÀ É ×ÙÊÔÉ"
+
+#: src/lang.c:763
+msgid	"  -o       post all postponed articles and exit"
+msgstr	"  -o       ÏÔÐÒÁ×ÉÔØ ×ÓÅ ÏÔÌÏÖÅÎÎÙÅ ÓÔÁÔØÉ É ×ÙÊÔÉ"
+
+#: src/lang.c:764
+msgid	"  -r       read news remotely from default NNTP server"
+msgstr	"  -r       ÞÉÔÁÔØ ÎÏ×ÏÓÔÉ ÕÄÁÌÅÎÎÏ Ó NNTP ÓÅÒ×ÅÒÁ (ÓÅÒ×ÅÒ ÐÏ ÕÍÏÌÞÁÎÉÀ)"
+
+#: src/lang.c:765
+msgid	"  -R       read news saved by -S option"
+msgstr	"  -R       ÞÉÔÁÔØ ÎÏ×ÏÓÔÉ, ÓÏÈÒÁÎÅÎÎÙÅ -S ÏÐÃÉÅÊ"
+
+#: src/lang.c:766
+#, c-format
+msgid	"  -s dir   save news directory [default=%s]"
+msgstr	"  -s dir   ÐÁÐËÁ ÓÏÈÒ. ÎÏ×ÏÓÔÅÊ [ÐÏ ÕÍÏÌÞÁÎÉÀ=%s]"
+
+#: src/lang.c:767
+msgid	"  -S       save new news for later reading (batch mode)"
+msgstr	"  -S       ÓÏÈÒÁÎÅÎÉÅ ÄÌÑ ÐÏÓÌÅÄÕÀÝÅÇÏ ÐÒÏÞÔÅÎÉÑ (ÐÁËÅÔÎÙÊ ÒÅÖÉÍ)"
+
+#: src/lang.c:768
+msgid	"  -z       start if any unread news"
+msgstr	"  -z       ÚÁÐÕÓÔÉÔØ ÅÓÌÉ ÅÓÔØ ÎÅÐÒÏÞÉÔÁÎÎÙÅ ÎÏ×ÏÓÔÉ"
+
+#: src/lang.c:769
+#, c-format
+msgid	"A Usenet reader.\n"
+	"\n"
+	"Usage: %s [options] [newsgroup[,...]]"
+msgstr	"ðÒÏÇÒÁÍÍÁ ÞÔÅÎÉÑ ÎÏ×ÏÓÔÅÊ Usenet.\n"
+	"\n"
+	"éÓÐÏÌØÚÏ×ÁÎÉÅ: %s [ÏÐÃÉÉ] [ÇÒÕÐÐÁ ÎÏ×ÏÓÔÅÊ[,...]]"
+
+#: src/lang.c:770
+msgid	"  -v       verbose output for batch mode options"
+msgstr	"  -v       ÄÅÔÁÌØÎÙÊ ×Ù×ÏÄ ÄÌÑ ÐÁËÅÔÎÏÇÏ ÒÅÖÉÍÁ"
+
+#: src/lang.c:771
+msgid	"  -V       print version & date information"
+msgstr	"  -V       ÎÁÐÅÞÁÔÁÔØ ×ÅÒÓÉÀ É ÄÁÔÕ"
+
+#: src/lang.c:772
+#, c-format
+msgid	"%s only useful without batch mode operations\n"
+msgstr	"%s ÏÐÃÉÑ ÐÏÌÅÚÎÁ ÔÏÌØËÏ ÂÅÚ ÐÁËÅÔÎÏÇÏ ÒÅÖÉÍÁ\n"
+
+#: src/lang.c:773
+#, c-format
+msgid	"%s only useful for batch mode operations\n"
+msgstr	"%s ÏÐÃÉÑ ÐÏÌÅÚÎÁ ÔÏÌØËÏ × ÐÁËÅÔÎÏÍ ÒÅÖÉÍÅ\n"
+
+#: src/lang.c:775
+#, c-format
+msgid	"\n"
+	"%s%d out of range (0 - %d). Reset to 0"
+msgstr	"\n"
+	"%s%d ×ÎÅ ÄÉÁÐÁÚÏÎÁ (0 - %d). óÂÒÏÓ × 0"
+
+#: src/lang.c:776
+#, c-format
+msgid	"View '%s' (%s/%s)?"
+msgstr	"ðÒÏÓÍÏÔÒ '%s' (%s/%s)?"
+
+#: src/lang.c:778
+#, c-format
+msgid	"\n"
+	"Warning: posting exceeds %d columns. Line %d is the first long one:\n"
+	"%-100s\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: ÓÏÏÂÝÅÎÉÅ ÐÒÅ×ÙÓÉÌÏ %d ÓÉÍ×ÏÌÏ× × ÓÔÒÏËÅ. óÔÒÏËÁ %d - ÐÅÒ×ÁÑ "
+	"ÄÌÉÎÎÁÑ:\n"
+	"%-100s\n"
+
+#: src/lang.c:779
+msgid	"\n"
+	"Warning: article unchanged after editing\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: ÓÔÁÔØÑ ÎÅ ÉÚÍÅÎÉÌÁÓØ ÐÏÓÌÅ ÒÅÄÁËÔÉÒÏ×ÁÎÉÑ\n"
+
+#: src/lang.c:780
+msgid	"\n"
+	"Warning: \"Subject:\" contains only whitespaces.\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: \"Subject:\" ÓÏÄÅÒÖÉÔ ÏÄÎÉ ÐÒÏÂÅÌÙ.\n"
+
+#: src/lang.c:781
+msgid	"\n"
+	"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:\".\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: \"Subject:\" ÎÁÞÉÎÁÅÔÓÑ Ó  \"Re: \" ÎÏ ÎÅÔ \"References:\".\n"
+
+#: src/lang.c:783
+msgid	"\n"
+	"Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
+	"         with \"Re: \" and does not contain \"(was:\".\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: ÷ ÓÔÁÔØÅ ÅÓÔØ \"References:\" ÎÏ \"Subject:\" ÎÅ ÎÁÞÉÎÁÅÔÓÑ\n"
+	"         Ó \"Re: \" É ÎÅ ÓÏÄÅÒÖÉÔ \"(was:\".\n"
+
+#: src/lang.c:786
+msgid	"Read carefully!\n"
+	"\n"
+	"  You are about to cancel an article seemingly written by you. This will "
+	"wipe\n"
+	"  the article from most  news servers  throughout the world,  but there is "
+	"no\n"
+	"  guarantee that it will work.\n"
+	"\n"
+	"This is the article you are about to cancel:\n"
+	"\n"
+msgstr	"ðÒÏÞÉÔÁÊÔÅ ×ÎÉÍÁÔÅÌØÎÏ!\n"
+	"\n"
+	"  ÷Ù ÈÏÔÉÔÅ \"cancel\" ÓÔÁÔØÀ, ÎÁÐÉÓÁÎÎÕÀ ÐÏÈÏÖÅ ÷ÁÍÉ. üÔÏ ÕÎÉÞÔÏÖÉÔ "
+	"ÓÔÁÔØÀÓ \n"
+	"  ÂÏÌØÛÉÎÓÔ×Á ÓÅÒ×ÅÒÏ× ÐÏ ×ÓÅÍÕ ÍÉÒÕ, ÎÏ ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÇÁÒÁÎÔÉÉ, ÞÔÏ ÜÔÏ "
+	"ÂÕÄÅÔ\n"
+	"  ÒÁÂÏÔÁÔØ.\n"
+	"\n"
+	"üÔÏ ÓÔÁÔØÑ ×Ù ÈÏÔÉÔÅ \"cancel\":\n"
+	"\n"
+
+#: src/lang.c:790
+msgid	"\n"
+	"Warning: You are using a non-plain transfer encoding (such as base64 or\n"
+	"         quoted-printable) and an external inews program to submit your\n"
+	"         article. If a signature is appended by that inews program it will\n"
+	"         not be encoded properly.\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: ÷Ù ÉÓÐÏÌØÚÕÅÔÅ ËÏÄÉÒÏ×ÁÎÉÅ ÓÏÏÂÝÅÎÉÑ (base64 ÉÌÉ quoted-printable)\n"
+	"          É ×ÎÅÛÎÀÀ inews ÐÒÏÇÒÁÍÍÕ ÄÌÑ ÐÏÓÙÌËÉ ÎÏ×ÏÓÔÅÊ. åÓÌÉ ÐÏÄÐÉÓØ\n"
+	"          ÂÕÄÅÔ ÄÏÂÁ×ÌÅÎÁ ÜÔÏÊ ÐÒÏÇÒÁÍÍÏÊ, ÏÎÁ ÎÅ ÂÕÄÅÔ ËÏÄÉÒÏ×ÁÎÁ!\n"
+
+#: src/lang.c:795
+#, c-format
+msgid	"\n"
+	"\n"
+	"You are upgrading to tin %s from an earlier version.\n"
+	"Some values in your %s file have changed!\n"
+	"Read WHATSNEW, etc...\n"
+msgstr	"\n"
+	"\n"
+	"÷Ù ÏÂÎÏ×ÌÑÅÔÅÓØ ÄÏ tin %s Ó ÐÒÅÄÙÄÕÝÅÊ ×ÅÒÓÉÉ.\n"
+	"îÅËÏÔÏÒÙÅ ÚÎÁÞÅÎÉÑ × ×ÁÛÅÍ %s ÆÁÊÌÅ ÉÚÍÅÎÉÌÉÓØ!\n"
+	"ðÒÏÞÉÔÁÊÔÅ WHATSNEW, ÉÔÄ...\n"
+
+#: src/lang.c:797
+#, c-format
+msgid	"\n"
+	"\n"
+	"You are downgrading to tin %s from a more recent version!\n"
+	"Some values in your %s file may be ignored, others might have changed!\n"
+msgstr	""
+
+#: src/lang.c:800
+#, c-format
+msgid	"Warning: tin wrote fewer groups to your\n"
+	"\t%s\n"
+	"than it read at startup. If you didn't unsubscribe from %ld %s during\n"
+	"this session this indicates an error and you should backup your %s\n"
+	"before you start tin once again!\n"
+msgstr	""
+
+#: src/lang.c:804
+#, c-format
+msgid	"\n"
+	"Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
+msgstr	""
+
+#: src/lang.c:805
+#, c-format
+msgid	"Warning: Only %d out of %d articles were saved"
+msgstr	"÷ÎÉÍÁÎÉÅ: ôÏÌØËÏ %d ÉÚ %d ÓÔÁÔÅÊ ÓÏÈÒÁÎÅÎÙ"
+
+#: src/lang.c:806
+#, c-format
+msgid	"\n"
+	"Warning: Your signature  is longer than %d lines.  Since signatures usually "
+	"do\n"
+	"         not  transport any  useful information,  they should be as  short "
+	"as\n"
+	"         possible.\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: ÷ÁÛÁ ÐÏÄÐÉÓØ ÄÌÉÎÎÅÅ %d ÓÔÒÏË. ôÁË ËÁË ÐÏÄÐÉÓÉ ÏÂÙÞÎÏ ÎÅ ÐÅÒÅÄÁÀÔ\n"
+	"         ÐÏÌÅÚÎÕÀ ÉÎÆÏÒÍÁÃÉÀ, ÏÎÉ ÄÏÌÖÎÙ ÂÙÔØ ËÏÒÏÔËÉÍÉ ÎÁÓÔÏÌØËÏ, ÎÁÓËÏÌØËÏ\n"
+	"         ÜÔÏ ×ÏÚÍÏÖÎÏ.\n"
+
+#: src/lang.c:810
+#, c-format
+msgid	"Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
+msgstr	"÷ÎÉÍÁÎÉÅ: ÁÄÒÅÓ e-mail ÍÏÖÅÔ ÓÏÄÅÒÖÁÔØ spamtrap. %s=ÐÒÏÄÏÌÖÉÔØ, %s=ÓÔÏÐ? "
+
+#: src/lang.c:811
+msgid	"\n"
+	"Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: ðÏÄÐÉÓÉ ÄÏÌÖÎÙ ÎÁÞÉÎÁÔØÓÑ Ó '-- \\n' ÎÅ Ó '--\\n'.\n"
+
+#: src/lang.c:812
+msgid	"Writing attributes file..."
+msgstr	"úÁÐÉÓØ ÆÁÊÌÁ attributes..."
+
+#: src/lang.c:814
+#, c-format
+msgid	"%d Responses"
+msgstr	"%d ïÔ×ÅÔÁ(Ï×)"
+
+#: src/lang.c:816
+#, c-format
+msgid	"Added %d %s"
+msgstr	"äÏÂÁ×ÌÅÎÏ %d %s"
+
+#: src/lang.c:817
+msgid	"No unsubscribed groups to show"
+msgstr	"îÅÔ ÏÔÐÉÓÁÎÎÙÈ ÇÒÕÐÐ"
+
+#: src/lang.c:818
+msgid	"Showing subscribed to groups only"
+msgstr	"ðÏËÁÚ ÔÏÌØËÏ ÐÏÄÐÉÓÁÎÎÙÈ ÎÁ ÛÒÕÐÐÕ"
+
+#: src/lang.c:819
+msgid	"Yes "
+msgstr	"äÁ "
+
+#: src/lang.c:820
+msgid	"    You have mail\n"
+msgstr	"    õ ÷ÁÓ ÎÏ×ÏÅ ÐÉÓØÍÏ\n"
+
+#: src/lang.c:825
+#, c-format
+msgid	"\n"
+	"Warning: Posting is in %s and contains characters which are not\n"
+	"         in your selected MM_NETWORK_CHARSET: %s.\n"
+	"         These characters will be replaced by '?' if you post this\n"
+	"         article unchanged. To avoid garbling your article please either\n"
+	"         edit it and remove those characters or change the setting of\n"
+	"         MM_NETWORK_CHARSET to a suitable value for your posting via the\n"
+	"         M)enu option.\n"
+msgstr	""
+
+#: src/lang.c:836
+msgid	"  -D       debug mode 1=NNTP 2=ALL"
+msgstr	"  -D       debug ÒÅÖÉÍ 1=NNTP 2=÷óå"
+
+#: src/lang.c:840
+msgid	"Read carefully!\n"
+	"\n"
+	"  You are about to cancel an article seemingly not written by you.  This "
+	"will\n"
+	"  wipe the article from lots of news servers throughout the world;\n"
+	"  Usenet's majority  considers this  rather inappropriate,  to say the "
+	"least.\n"
+	"  Only press 'd'  if you are  absolutely positive  that you are ready to "
+	"take\n"
+	"  the rap.\n"
+	"\n"
+	"This is the article you are about to cancel:\n"
+	"\n"
+msgstr	""
+
+#: src/lang.c:849
+msgid	"toggle color"
+msgstr	"ÉÚÍÅÎÉÔØ Ã×ÅÔ"
+
+#: src/lang.c:850
+msgid	"# Changing colors of several screen parts\n"
+	"# Possible values are:\n"
+	"#  -1 = default (white for foreground and black for background)\n"
+	"#   0 = black\n"
+	"#   1 = red\n"
+	"#   2 = green\n"
+	"#   3 = brown\n"
+	"#   4 = blue\n"
+	"#   5 = pink\n"
+	"#   6 = cyan\n"
+	"#   7 = white\n"
+	"# These are *only* for foreground:\n"
+	"#   8 = gray\n"
+	"#   9 = light red\n"
+	"#  10 = light green\n"
+	"#  11 = yellow\n"
+	"#  12 = light blue\n"
+	"#  13 = light pink\n"
+	"#  14 = light cyan\n"
+	"#  15 = light white\n"
+	"\n"
+msgstr	""
+
+#: src/lang.c:870
+msgid	"  -a       toggle color flag"
+msgstr	"  -a       ÉÚÍÅÎÉÔØ Ã×ÅÔ"
+
+#: src/lang.c:874
+msgid	"\n"
+	"Error: Followup-To set to more than one newsgroup!\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: Followup-To ÕÓÔÁÎÏ×ÌÅÎ ÎÁ ÂÏÌØÛÅ ÞÅÍ ÏÄÎÕ ÇÒÕÐÐÕ!\n"
+
+#: src/lang.c:875
+#, c-format
+msgid	"\n"
+	"Error: cross-posting to %d newsgroups and no Followup-To line!\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: cross-posting × %d ÇÒÕÐÐÙ ÂÅÚ Followup-To ÓÔÒÏËÉ!\n"
+
+#: src/lang.c:876
+#, c-format
+msgid	"\n"
+	"Error: \"%s\" is not a valid newsgroup!\n"
+msgstr	"\n"
+	"ïÛÉÂËÁ: \"%s\" - ÎÅÄÏÐÕÓÔÉÍÁÑ ÇÒÕÐÐÁ!\n"
+
+#: src/lang.c:878
+msgid	"\n"
+	"Warning: Followup-To set to more than one newsgroup!\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: Followup-To ÕÓÔÁÎÏ×ÌÅÎ ÎÁ ÂÏÌØÛÅ ÞÅÍ ÏÄÎÕ ÇÒÕÐÐÕ!\n"
+
+#: src/lang.c:879
+#, c-format
+msgid	"\n"
+	"Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: cross-posting × %d ÇÒÕÐÐÙ ÂÅÚ Followup-To ÓÔÒÏËÉ!\n"
+
+#: src/lang.c:880
+#, c-format
+msgid	"\n"
+	"Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: \"%s\" ÎÅ × newsrc É ÍÏÖÅÔ ÂÙÔØ ÏÛÉÂÏÞÎÁ ÎÁ ÜÔÏÍ ÍÅÓÔÅ!\n"
+
+#: src/lang.c:881
+#, c-format
+msgid	"\n"
+	"Warning: \"%s\" is not a valid newsgroup at this site!\n"
+msgstr	"\n"
+	"÷ÎÉÍÁÎÉÅ: \"%s\" - ÎÅÄÏÐÕÓÔÉÍÁÑ ÎÁ ÜÔÏÍ ÍÅÓÔÅ ÇÒÕÐÐÁ ÎÏ×ÏÓÔÅÊ!\n"
+
+#: src/lang.c:885
+#, c-format
+msgid	"%d files successfully written from %d articles. %d %s occurred."
+msgstr	"%d ÆÁÊÌÏ× ÕÓÐÅÛÎÏ ÚÁÐÉÓÁÎÙ ÉÚ %d ÓÔÁÔÅÊ. %d %s ÓÌÕÞÉÌÏÓØ."
+
+#: src/lang.c:886
+msgid	"Missing parts."
+msgstr	"ðÒÏÐÕÝÅÎÙ ÞÁÓÔÉ."
+
+#: src/lang.c:887
+msgid	"No beginning."
+msgstr	"îÅÔ ÎÁÞÁÌÁ."
+
+#: src/lang.c:888
+msgid	"No data."
+msgstr	"îÅÔ ÄÁÎÎÙÈ."
+
+#: src/lang.c:889
+msgid	"Unknown error."
+msgstr	"îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ."
+
+#: src/lang.c:892
+#, c-format
+msgid	"\tChecksum of %s (%ld %s)"
+msgstr	"\tëÏÎÔÒÏÌØÎÁÑ ÓÕÍÍÁ %s (%ld %s)"
+
+#: src/lang.c:897
+msgid	"Reading mail active file... "
+msgstr	"þÔÅÎÉÅ e-mail active ÆÁÊÌÁ... "
+
+#: src/lang.c:898
+msgid	"Reading mailgroups file... "
+msgstr	"þÔÅÎÉÅ mailgroups ÆÁÊÌÁ... "
+
+#: src/lang.c:902
+msgid	"perform PGP operations on article"
+msgstr	"×ÙÐÏÌÎÉÔØ PGP ÏÐÅÒÁÃÉÑ ÓÏ ÓÔÁÔØÅÊ"
+
+#: src/lang.c:903
+msgid	"Add key(s) to public keyring?"
+msgstr	"äÏÂÁ×ÉÔØ ËÌÀÞ(É) Ë ÏÔËÒÙÔÙÍ ËÌÀÞÁÍ?"
+
+#: src/lang.c:904
+#, c-format
+msgid	"%s=encrypt, %s=sign, %s=both, %s=quit: "
+msgstr	"%s=ÛÉÆÒÏ×ÁÔØ, %s=ÐÏÄÐÉÓÁÔØ, %s=ÏÂÁ, %s=×ÙÈÏÄ: "
+
+#: src/lang.c:905
+#, c-format
+msgid	"%s=sign, %s=sign & include public key, %s=quit: "
+msgstr	"%s=ÛÉÆÒÏ×ÁÔØ, %s=ÐÏÄÐÉÓÁÔØ É ×ÌÏÖÉÔØ ÏÔËÒÙÔÙÊ ËÌÀÞ, %s=×ÙÈÏÄ: "
+
+#: src/lang.c:906
+#, c-format
+msgid	"PGP has not been set up (can't open %s)"
+msgstr	"PGP ÎÅ ÕÓÔÁÎÏ×ÌÅÎ (ÎÅ ÍÏÇÕ ÏÔËÒÙÔØ %s)"
+
+#: src/lang.c:907
+msgid	"Article not signed and no public keys found"
+msgstr	"óÔÁÔØÑ ÎÅ ÐÏÄÐÉÓÁÎÁ É ÏÔËÒÙÔÙÊ ËÌÀÞ ÎÅ ÎÁÊÄÅÎ"
+
+#: src/lang.c:909
+#, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ispell, %s=pgp, %s=ÍÅÎÀ, %s=ÏÔÐÒÁ×ÉÔØ, %s=ÏÔÌÏÖÉÔØ: "
+
+#: src/lang.c:910
+#, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ispell, %s=pgp, %s=ÐÏÓÌÁÔØ [%%s]: "
+
+#: src/lang.c:911
+#, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ispell, %s=pgp, %s=ÍÅÎÀ, %s=ÏÔÐÒ., %s=ÏÔÌÏÖÉÔØ [%%s]: "
+
+#: src/lang.c:913
+#, c-format
+msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=pgp, %s=ÍÅÎÀ, %s=ÏÔÐÒÁ×ÉÔØ, %s=ÏÔÌÏÖÉÔØ: "
+
+#: src/lang.c:914
+#, c-format
+msgid	"%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=pgp, %s=ÏÔÐÒÁ×ÉÔØ [%%s]: "
+
+#: src/lang.c:915
+#, c-format
+msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=pgp, %s=ÍÅÎÀ, %s=ÏÔÐÒÁ×ÉÔØ, %s=ÏÔÌÏÖÉÔØ [%%s]: "
+
+#: src/lang.c:919
+#, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ispell, %s=ÍÅÎÀ, %s=ÏÔÐÒ., %s=ÏÔÌÏÖÉÔØ: "
+
+#: src/lang.c:920
+#, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ispell, %s=ÏÔÐÒÁ×ÉÔØ [%%s]: "
+
+#: src/lang.c:921
+#, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	""
+
+#: src/lang.c:923
+#, c-format
+msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ÍÅÎÀ, %s=ÏÔÐÒÁ×ÉÔØ, %s=ÏÔÌÏÖÉÔØ: "
+
+#: src/lang.c:924
+#, c-format
+msgid	"%s=quit, %s=edit, %s=send [%%s]: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ÏÔÐÒÁ×ÉÔØ [%%s]: "
+
+#: src/lang.c:925
+#, c-format
+msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	"%s=×ÙÈÏÄ, %s=ÒÅÄ., %s=ÍÅÎÀ, %s=ÏÔÐÒÁ×ÉÔØ, %s=ÏÔÌÏÖÉÔØ [%%s]: "
+
+#: src/lang.c:934
+msgid	"Try cache_overview_files to speed up things.\n"
+msgstr	"ðÏÐÒÏÂÕÊÔÅ cache_overview_files ÄÌÑ ÕÓËÏÒÅÎÉÑ.\n"
+
+#: src/lang.c:935
+msgid	"Tin will use local index files instead.\n"
+msgstr	"tin ÂÕÄÅÔ ÉÓÐÏÌØÚÏ×ÁÔØ ÆÁÊÌÙ ÌÏËÁÌØÎÏÇÏ ÉÎÄÅËÓÁ ×ÍÅÓÔÏ ÜÔÏÇÏ.\n"
+
+#: src/lang.c:936
+msgid	"Cannot find NNTP server name"
+msgstr	"îÅ ÍÏÇÕ ÎÁÊÔÉ ÉÍÑ NNTP ÓÅÒ×ÅÒÁ"
+
+#: src/lang.c:937
+#, c-format
+msgid	"Connecting to %s:%d..."
+msgstr	"óÏÅÄÉÎÅÎÉÅ Ó %s:%d..."
+
+#: src/lang.c:938
+msgid	"Disconnecting from server...\n"
+msgstr	"ïÔÓÏÅÄÉÎÅÎÉÅ ÏÔ ÓÅÒ×ÅÒÁ...\n"
+
+#: src/lang.c:939
+#, c-format
+msgid	"Wrong newsgroup name in response of GROUP command, %s for %s"
+msgstr	"îÅÐÒÁ×ÉÌØÎÏÅ ÉÍÑ ÇÒÕÐÐÙ × ÏÔ×ÅÔÅ ÎÁ ËÏÍÁÎÄÕ GROUP, %s ÄÌÑ %s"
+
+#: src/lang.c:940
+#, c-format
+msgid	"Failed to connect to NNTP server %s. Exiting..."
+msgstr	"îÅ ÕÄÁÌÏÓØ ÓÏÅÄÉÎÉÔØÓÑ Ó NNTP ÓÅÒ×ÅÒÏÍ %s. ÷ÙÈÏÄ..."
+
+#: src/lang.c:941
+msgid	"205  Closing connection"
+msgstr	"205 úÁËÒÙÔÉÅ ÓÏÅÄÉÎÅÎÉÑ"
+
+#: src/lang.c:942
+msgid	"Your server does not support the NNTP XOVER or OVER command.\n"
+msgstr	"óÅÒ×ÅÒ ÎÅ ÐÏÄÄÅÒÖÉ×ÁÅÔ NNTP XOVER ÉÌÉ OVER ËÏÍÁÎÄÙ.\n"
+
+#: src/lang.c:943
+msgid	"Connection to news server has timed out. Reconnect?"
+msgstr	"÷ÒÅÍÑ ÓÏÅÄÉÎÅÎÉÑ Ë ÓÅÒ×ÅÒÕ ÐÒÅ×ÙÓÉÌÏ ÌÉÍÉÔ. ðÅÒÅÓÏÅÄÉÎÉÔØÓÑ?"
+
+#: src/lang.c:944
+#, c-format
+msgid	"Put the server name in the file %s,\n"
+	"or set the environment variable NNTPSERVER"
+msgstr	"ðÏÍÅÓÔÉÔØ ÉÍÑ ÓÅÒ×ÅÒÁ × ÆÁÊÌ %s,\n"
+	"ÉÌÉ ÕÓÔÁÎÏ×ÉÔØ ÐÅÒÅÍÅÎÎÕÀ ÏËÒÕÖÅÎÉÑ NNTPSERVER"
+
+#: src/lang.c:945
+msgid	"  -A       force authentication on connect"
+msgstr	"  -A       ÐÒÉÎÕÄÉÔÅÌØÎÁÑ ÁÕÔÅÎÔÉÆÉËÁÃÉÑ ÐÒÉ ÓÏÅÄÉÎÅÎÉÉ"
+
+#: src/lang.c:946
+#, c-format
+msgid	"  -g serv  read news from NNTP server serv [default=%s]"
+msgstr	"  -g serv  ÞÔÅÎÉÅ ÎÏ×ÏÓÔÅÊ Ó NNTP ÓÅÒ×ÅÒÁ serv [ÐÏ ÕÍÏÌÞÁÎÉÀ=%s]"
+
+#: src/lang.c:947
+#, c-format
+msgid	"  -p port  use port as NNTP port [default=%d]"
+msgstr	"  -p port  ÉÓÐÏÌØÚÏ×ÁÔØ port ËÁË NNTP ÐÏÒÔ [ÐÏ ÕÍÏÌÞÁÎÉÀ=%d]"
+
+#: src/lang.c:948
+msgid	"  -Q       quick start. Same as -nqd"
+msgstr	"  -Q       ÂÙÓÔÒÙÊ ÚÁÐÕÓË. ëÁË Ó ÏÐÃÉÑÍÉ -nqd"
+
+#: src/lang.c:949
+msgid	"  -l       use only LIST instead of GROUP (-n) command"
+msgstr	"  -l       ÉÓÐÏÌØÚÏ×ÁÔØ LIST ×ÍÅÓÔÏ GROUP (-n) ËÏÍÁÎÄ"
+
+#: src/lang.c:950
+msgid	"  -n       only read subscribed .newsrc groups from NNTP server"
+msgstr	"  -n       ÞÉÔÁÔØ ÔÏÌØËÏ ÐÏÄÐÉÓÁÎÎÙÅ .newsrc ÇÒÕÐÐÙ Ó NNTP ÓÅÒ×ÅÒÁ"
+
+#: src/lang.c:952
+#, c-format
+msgid	"%s/tcp: Unknown service.\n"
+msgstr	"%s/tcp: îÅÉÚ×ÅÓÔÎÙÊ ÓÅÒ×ÉÓ.\n"
+
+#: src/lang.c:955
+msgid	"\n"
+	"socket or connect problem\n"
+msgstr	"\n"
+	"ÐÒÏÂÌÅÍÁ Ó ÓÏËÅÔÏÍ ÉÌÉ ÓÏÅÄÉÎÅÎÉÅÍ\n"
+
+#: src/lang.c:957
+#, c-format
+msgid	"\n"
+	"Connection to %s: "
+msgstr	"\n"
+	"óÏÅÄÉÎÅÎÉÅ Ó %s: "
+
+#: src/lang.c:958
+msgid	"Giving up...\n"
+msgstr	"õÓÔÕÐÁÅÍ...\n"
+
+#: src/lang.c:961
+msgid	"Your server does not have Xref: in its XOVER information.\n"
+	"Tin will try to use XHDR XREF instead (slows down things a bit).\n"
+msgstr	""
+
+#: src/lang.c:964
+msgid	"Your server does not have Xref: in its XOVER information.\n"
+msgstr	"óÅÒ×ÅÒ ÎÅ ÓÏÄÅÒÖÉÔ Xref: × XOVER.\n"
+
+#: src/lang.c:967
+#, c-format
+msgid	"Can't open %s. Try %s -r to read news via NNTP.\n"
+msgstr	"îÅ ÍÏÇÕ ÏÔËÒÙÔØ %s. ðÏÐÒÏÂÕÊÔÅ %s -r ÄÌÑ ÞÔÅÎÉÑ ÎÏ×ÏÓÔÅÊ ÐÏ NNTP.\n"
+
+#: src/lang.c:970
+msgid	"  -Q       quick start. Same as -qd"
+msgstr	"  -Q       ÂÙÓÔÒÙÊ ÚÁÐÕÓË. ôÏ ÖÅ ÓÁÍÏÅ ËÁË Ó ÏÐÃÉÑÍÉ -qd"
+
+#: src/lang.c:971
+msgid	"  -l       read only active file instead of scanning spool (-n) command"
+msgstr	"  -l       ÞÉÔÁÔØ ÔÏÌØËÏ active file ×ÍÅÓÔÏ ÓËÁÎÉÒÏ×ÁÎÉÑ spool (-n) ËÏÍÁÎÄÁ"
+
+#: src/lang.c:972
+msgid	"  -n       only read subscribed .newsrc groups from spool"
+msgstr	"  -n       ÞÉÔÁÔØ ÔÏÌØËÏ ÐÏÄÐÉÓÁÎÎÙÅ .newsrc ÇÒÕÐÐÙ ÉÚ spool"
+
+#: src/lang.c:973
+msgid	"Your server does not have Xref: in its NOV-files.\n"
+msgstr	"÷ÁÛ ÓÅÒ×ÅÒ ÎÅ ÉÍÅÅÔ  Xref: × NOV-ÆÁÊÌÁÈ.\n"
+
+#: src/lang.c:977
+msgid	"Posting using external inews failed. Use built in inews instead?"
+msgstr	"ïÔÐÒÁ×ÌÅÎÉÅ Ó ×ÎÅÛÎÉÍ inews ÐÒÏ×ÁÌÉÌÏÓØ. éÓÐÏÌØÚÏ×ÁÔØ ×ÓÔÒÏÅÎÎÙÊ inews"
+
+#: src/lang.c:978
+msgid	"It worked! Should I always use my built in inews from now on?"
+msgstr	"úÁÒÁÂÏÔÁÌÏ! éÓÐÏÌØÚÏ×ÁÔØ ×ÓÅÇÄÁ ÓÄÅÌÁÎÎÙÊ inews?"
+
+#: src/lang.c:986
+#, c-format
+msgid	"%d %s printed"
+msgstr	"%d %s ÎÁÐÅÞÁÔÁÎÏ"
+
+#: src/lang.c:987
+msgid	"output article/thread/hot/pattern/tagged articles to printer"
+msgstr	"×Ù×ÏÄ ÓÔÁÔØÉ/ÄÉÓËÕÓÓÉÉ/hot/ÛÁÂÌÏÎÁ/ÐÏÍÅÞÅÎÎÙÈ ÓÔÁÔÅÊ ÎÁ ÐÅÞÁÔØ"
+
+#: src/lang.c:988
+msgid	"Print"
+msgstr	"ðÅÞÁÔØ"
+
+#: src/lang.c:989
+msgid	"Printing..."
+msgstr	"ðÅÞÁÔÁÀ..."
+
+#: src/lang.c:993
+msgid	"pipe article/thread/hot/pattern/tagged articles into command"
+msgstr	"pipe ÓÔÁÔØÀ/ÄÉÓËÕÓÓÉÀ/hot/ÛÁÂÌÏÎ/ÐÏÍÅÞÅÎÎÙÅ ÓÔÁÔØÉ × ËÏÍÁÎÄÕ"
+
+#: src/lang.c:994
+msgid	"No command"
+msgstr	"îÅÔ ËÏÍÁÎÄÙ"
+
+#: src/lang.c:995
+msgid	"Pipe"
+msgstr	""
+
+#: src/lang.c:996
+#, c-format
+msgid	"Pipe to command [%.*s]> "
+msgstr	"Pipe × ËÏÍÁÎÄÕ [%.*s]> "
+
+#: src/lang.c:997
+msgid	"Piping..."
+msgstr	""
+
+#: src/lang.c:999
+msgid	"Piping not enabled."
+msgstr	"Piping ÎÅ ×ËÌÀÞÅÎÏ."
+
+#: src/lang.c:1003
+#, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line has spaces  in it that MUST be removed.\n"
+	"       The only allowable  space is the one  separating the colon (:)\n"
+	"       from  the  contents.  Use a  comma  (,)  to separate  multiple\n"
+	"       newsgroup names.\n"
+msgstr	""
+
+#: src/lang.c:1008
+#, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line is  continued in  the next line.  Since\n"
+	"       the line  may not  contain  whitespace,  this is  not allowed.\n"
+	"       Please write all newsgroups into a single line.\n"
+msgstr	""
+
+#: src/lang.c:1013
+#, c-format
+msgid	"\n"
+	"Warning: The \"%s:\" line is continued in the next line.\n"
+	"         This is a very new feature and may not be accepted by all servers.\n"
+	"         To avoid trouble please write all newsgroups into a single line.\n"
+msgstr	""
+
+#: src/lang.c:1017
+#, c-format
+msgid	"\n"
+	"Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
+msgstr	""
+
+#: src/lang.c:1022
+msgid	"\n"
+	"  If your article contains quoted text  please take some time to pare it "
+	"down\n"
+	"  to just the  key points to which you are  responding,  or people will "
+	"think\n"
+	"  you are a dweeb!  Many people have the habit of skipping any article  "
+	"whose\n"
+	"  first page is largely  quoted material.  Format your article to fit in "
+	"less\n"
+	"  then 80 chars,  since that's the conventional size  (72 is a good choice "
+	"as\n"
+	"  it allows quoting without exceeding the limit).  If your lines are too "
+	"long\n"
+	"  they'll wrap  around  ugly and  people won't  read what you  write.  If "
+	"you\n"
+	"  aren't  careful  and considerate  in  formatting  your posting, people  "
+	"are\n"
+	"  likely to ignore it completely.  It's a crowded net out there.\n"
+msgstr	""
+
+#: src/lang.c:1035
+msgid	"shell escape"
+msgstr	""
+
+#: src/lang.c:1036
+#, c-format
+msgid	"Shell Command (%s)"
+msgstr	""
+
+#: src/lang.c:1037
+#, c-format
+msgid	"Enter shell command [%s]> "
+msgstr	""
+
+#: src/lang.c:1041
+#, c-format
+msgid	"%s: Can't get entry for TERM\n"
+msgstr	""
+
+#: src/lang.c:1045
+#, c-format
+msgid	"Group %.*s ('q' to quit)..."
+msgstr	""
+
+#: src/lang.c:1047
+#, c-format
+msgid	"Group %.*s..."
+msgstr	""
+
+#: src/lang.c:1051
+msgid	"Server unavailable\n"
+msgstr	""
+
+#: src/lang.c:1057
+#, c-format
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+	"s=post"
+msgstr	""
+
+#: src/lang.c:1058
+#, c-format
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	""
+
+#: src/lang.c:1060
+#, c-format
+msgid	"%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
+msgstr	""
+
+#: src/lang.c:1061
+#, c-format
+msgid	"%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	""
+
+#: src/lang.c:1065
+#, c-format
+msgid	"%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
+msgstr	""
+
+#: src/lang.c:1066
+#, c-format
+msgid	"%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	""
+
+#: src/lang.c:1068
+#, c-format
+msgid	"%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
+msgstr	""
+
+#: src/lang.c:1069
+#, c-format
+msgid	"%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	""
+
+#: src/lang.c:1075
+msgid	"Terminal does not support color"
+msgstr	""
+
+#: src/lang.c:1080
+#, c-format
+msgid	"Trying %s"
+msgstr	""
+
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315 src/refs.c:296
+msgid	"None"
+msgstr	""
+
+#: src/lang.c:1095
+msgid	"Subject"
+msgstr	""
+
+#: src/lang.c:1096
+msgid	"References"
+msgstr	""
+
+#: src/lang.c:1097
+msgid	"Both Subject and References"
+msgstr	""
+
+#: src/lang.c:1098
+msgid	"Multipart Subject"
+msgstr	""
+
+#: src/lang.c:1099
+msgid	"Percentage Match"
+msgstr	""
+
+#: src/lang.c:1111 src/lang.c:1222
+msgid	"No"
+msgstr	""
+
+#: src/lang.c:1112 src/lang.c:1224
+msgid	"Yes"
+msgstr	""
+
+#: src/lang.c:1113
+msgid	"Hide All"
+msgstr	""
+
+#: src/lang.c:1121
+msgid	"Address"
+msgstr	""
+
+#: src/lang.c:1122
+msgid	"Full Name"
+msgstr	""
+
+#: src/lang.c:1123
+msgid	"Address and Name"
+msgstr	""
+
+#: src/lang.c:1130
+msgid	"Max"
+msgstr	""
+
+#: src/lang.c:1131
+msgid	"Sum"
+msgstr	""
+
+#: src/lang.c:1132
+msgid	"Average"
+msgstr	""
+
+#: src/lang.c:1137
+msgid	"Lines"
+msgstr	""
+
+#: src/lang.c:1138
+msgid	"Score"
+msgstr	""
+
+#: src/lang.c:1139
+msgid	"Lines & Score"
+msgstr	""
+
+#: src/lang.c:1148
+msgid	"Black"
+msgstr	""
+
+#: src/lang.c:1149
+msgid	"Red"
+msgstr	""
+
+#: src/lang.c:1150
+msgid	"Green"
+msgstr	""
+
+#: src/lang.c:1151
+msgid	"Brown"
+msgstr	""
+
+#: src/lang.c:1152
+msgid	"Blue"
+msgstr	""
+
+#: src/lang.c:1153
+msgid	"Pink"
+msgstr	""
+
+#: src/lang.c:1154
+msgid	"Cyan"
+msgstr	""
+
+#: src/lang.c:1155
+msgid	"White"
+msgstr	""
+
+#: src/lang.c:1156
+msgid	"Gray"
+msgstr	""
+
+#: src/lang.c:1157
+msgid	"Light Red"
+msgstr	""
+
+#: src/lang.c:1158
+msgid	"Light Green"
+msgstr	""
+
+#: src/lang.c:1159
+msgid	"Yellow"
+msgstr	""
+
+#: src/lang.c:1160
+msgid	"Light Blue"
+msgstr	""
+
+#: src/lang.c:1161
+msgid	"Light Pink"
+msgstr	""
+
+#: src/lang.c:1162
+msgid	"Light Cyan"
+msgstr	""
+
+#: src/lang.c:1163
+msgid	"Light White"
+msgstr	""
+
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
+msgid	"Nothing"
+msgstr	""
+
+#: src/lang.c:1172
+msgid	"Mark"
+msgstr	""
+
+#: src/lang.c:1173
+msgid	"Space"
+msgstr	""
+
+#: src/lang.c:1180
+msgid	"Normal"
+msgstr	""
+
+#: src/lang.c:1181
+msgid	"Best highlighting"
+msgstr	""
+
+#: src/lang.c:1182
+msgid	"Underline"
+msgstr	""
+
+#: src/lang.c:1183
+msgid	"Reverse video"
+msgstr	""
+
+#: src/lang.c:1184
+msgid	"Blinking"
+msgstr	""
+
+#: src/lang.c:1185
+msgid	"Half bright"
+msgstr	""
+
+#: src/lang.c:1186
+msgid	"Bold"
+msgstr	""
+
+#: src/lang.c:1191
+msgid	"none"
+msgstr	""
+
+#: src/lang.c:1192
+msgid	"commands"
+msgstr	""
+
+#: src/lang.c:1193
+msgid	"select"
+msgstr	""
+
+#: src/lang.c:1195
+msgid	"commands & quit"
+msgstr	""
+
+#: src/lang.c:1196
+msgid	"commands & select"
+msgstr	""
+
+#: src/lang.c:1197
+msgid	"quit & select"
+msgstr	""
+
+#: src/lang.c:1198
+msgid	"commands & quit & select"
+msgstr	""
+
+#: src/lang.c:1223
+msgid	"Shell archive"
+msgstr	""
+
+#: src/lang.c:1229
+msgid	"Subject: (descending)"
+msgstr	""
+
+#: src/lang.c:1230
+msgid	"Subject: (ascending)"
+msgstr	""
+
+#: src/lang.c:1231
+msgid	"From: (descending)"
+msgstr	""
+
+#: src/lang.c:1232
+msgid	"From: (ascending)"
+msgstr	""
+
+#: src/lang.c:1233
+msgid	"Date: (descending)"
+msgstr	""
+
+#: src/lang.c:1234
+msgid	"Date: (ascending)"
+msgstr	""
+
+#: src/lang.c:1235 src/lang.c:1243
+msgid	"Score (descending)"
+msgstr	""
+
+#: src/lang.c:1236 src/lang.c:1244
+msgid	"Score (ascending)"
+msgstr	""
+
+#: src/lang.c:1237
+msgid	"Lines: (descending)"
+msgstr	""
+
+#: src/lang.c:1238
+msgid	"Lines: (ascending)"
+msgstr	""
+
+#: src/lang.c:1249
+msgid	"Always Keep"
+msgstr	""
+
+#: src/lang.c:1250
+msgid	"Always Remove"
+msgstr	""
+
+#: src/lang.c:1251
+msgid	"Mark with D on selection screen"
+msgstr	""
+
+#: src/lang.c:1256
+msgid	"Kill only unread arts"
+msgstr	""
+
+#: src/lang.c:1257
+msgid	"Kill all arts & show with K"
+msgstr	""
+
+#. TODO: s/K/art_marked_killed/
+#: src/lang.c:1258
+msgid	"Kill all arts and never show"
+msgstr	""
+
+#: src/lang.c:1263
+msgid	"Nothing special"
+msgstr	""
+
+#: src/lang.c:1264
+msgid	"Compress quotes"
+msgstr	""
+
+#: src/lang.c:1265
+msgid	"Quote signatures"
+msgstr	""
+
+#: src/lang.c:1266
+msgid	"Compress quotes, quote sigs"
+msgstr	""
+
+#: src/lang.c:1267
+msgid	"Quote empty lines"
+msgstr	""
+
+#: src/lang.c:1268
+msgid	"Compress quotes, quote empty lines"
+msgstr	""
+
+#: src/lang.c:1269
+msgid	"Quote sigs & empty lines"
+msgstr	""
+
+#: src/lang.c:1270
+msgid	"Comp. q., quote sigs & empty lines"
+msgstr	""
+
+#: src/lang.c:1308
+msgid	"no"
+msgstr	""
+
+#: src/lang.c:1309
+msgid	"with headers"
+msgstr	""
+
+#: src/lang.c:1310
+msgid	"without headers"
+msgstr	""
+
+#: src/lang.c:1317 src/lang.c:1323
+msgid	"NFKC"
+msgstr	""
+
+#: src/lang.c:1318
+msgid	"NFKD"
+msgstr	""
+
+#: src/lang.c:1319
+msgid	"NFC"
+msgstr	""
+
+#: src/lang.c:1320
+msgid	"NFD"
+msgstr	""
+
+#: src/lang.c:1331
+msgid	"Display Options"
+msgstr	""
+
+#: src/lang.c:1338
+msgid	"Color Options"
+msgstr	""
+
+#: src/lang.c:1345
+msgid	"Article-Limiting Options"
+msgstr	""
+
+#: src/lang.c:1351
+msgid	"Posting/Mailing Options"
+msgstr	""
+
+#: src/lang.c:1357
+msgid	"Saving/Printing Options"
+msgstr	""
+
+#: src/lang.c:1363
+msgid	"Expert Options"
+msgstr	""
+
+#: src/lang.c:1369
+msgid	"Filtering Options"
+msgstr	""
+
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437 src/lang.c:1487
+#: src/lang.c:1493 src/lang.c:1503 src/lang.c:1523 src/lang.c:1598 src/lang.c:1768
+#: src/lang.c:1774 src/lang.c:1780 src/lang.c:1786 src/lang.c:1798 src/lang.c:1805
+#: src/lang.c:1859 src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916 src/lang.c:1923
+#: src/lang.c:1930 src/lang.c:1937 src/lang.c:1944 src/lang.c:1951 src/lang.c:1958
+#: src/lang.c:1965 src/lang.c:1972 src/lang.c:1979 src/lang.c:1986 src/lang.c:1993
+#: src/lang.c:2000 src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066 src/lang.c:2073
+#: src/lang.c:2079 src/lang.c:2085 src/lang.c:2102 src/lang.c:2114 src/lang.c:2148
+#: src/lang.c:2201 src/lang.c:2208 src/lang.c:2214 src/lang.c:2239 src/lang.c:2256
+#: src/lang.c:2309 src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
+msgid	"<SPACE> toggles, <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1375
+msgid	"Show mini menu & posting etiquette"
+msgstr	""
+
+#: src/lang.c:1376
+msgid	"# If ON show a mini menu of useful commands at each level\n"
+	"# and posting etiquette after composing an article\n"
+msgstr	""
+
+#: src/lang.c:1381
+msgid	"Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1382
+msgid	"Show description of each newsgroup"
+msgstr	""
+
+#: src/lang.c:1383
+msgid	"# If ON show group description text after newsgroup name at\n"
+	"# group selection level\n"
+msgstr	""
+
+#: src/lang.c:1388
+msgid	"Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
+	"sets."
+msgstr	""
+
+#: src/lang.c:1389
+msgid	"In group menu, show author by"
+msgstr	""
+
+#: src/lang.c:1390
+msgid	"# Part of from field to display\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = none\n"
+	"#   1 = address\n"
+	"# * 2 = full name\n"
+	"#   3 = both\n"
+msgstr	""
+
+#: src/lang.c:1399
+msgid	"Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1400
+msgid	"Draw -> instead of highlighted bar"
+msgstr	""
+
+#: src/lang.c:1401
+msgid	"# If ON use -> otherwise highlighted bar for selection\n"
+msgstr	""
+
+#: src/lang.c:1406
+msgid	"Use inverse video for page headers"
+msgstr	""
+
+#: src/lang.c:1407
+msgid	"# If ON use inverse video for page headers at different levels\n"
+msgstr	""
+
+#: src/lang.c:1412
+msgid	"Thread articles by"
+msgstr	""
+
+#: src/lang.c:1413
+msgid	"# Thread articles by ...\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"#   1 = Subject\n"
+	"#   2 = References\n"
+	"# * 3 = Both (Subject and References)\n"
+	"#   4 = Multipart Subject\n"
+	"#   5 = Percentage Match\n"
+msgstr	""
+
+#: src/lang.c:1424
+msgid	"Enter percentage match required to thread together. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1425
+msgid	"Thread percentage match"
+msgstr	""
+
+#: src/lang.c:1426
+#, c-format
+msgid	"# Thread percentage match...\n"
+	"# the percentage of characters in the subject of an article that must match\n"
+	"# a base article for both those articles to be considered to belong to the\n"
+	"# same thread. This option is an integer percentage, eg. 80, no decimals may\n"
+	"# follow. If 80 is used here, then 80%% of the characters must match "
+	"exactly,\n"
+	"# no insertion of a character, for the two articles to be put in the same\n"
+	"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+	"# 'harppy' would be threaded separately from 'happy'\n"
+msgstr	""
+
+#: src/lang.c:1438
+msgid	"Score of a thread"
+msgstr	""
+
+#: src/lang.c:1439
+msgid	"# Thread score\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = max\n"
+	"#   1 = sum\n"
+	"#   2 = average\n"
+msgstr	""
+
+#: src/lang.c:1447
+msgid	"Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1448
+msgid	"Sort articles by"
+msgstr	""
+
+#: src/lang.c:1449
+msgid	"# Sort articles by ...\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"#   1 = Subject descending\n"
+	"#   2 = Subject ascending\n"
+	"#   3 = From descending\n"
+	"#   4 = From ascending\n"
+	"#   5 = Date descending\n"
+	"# * 6 = Date ascending\n"
+	"#   7 = Score descending\n"
+	"#   8 = Score ascending\n"
+	"#   9 = Lines descending\n"
+	"#  10 = Lines ascending\n"
+msgstr	""
+
+#: src/lang.c:1465
+msgid	"Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1466
+msgid	"Sort threads by"
+msgstr	""
+
+#: src/lang.c:1467
+msgid	"# Sort thread by ...\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"# * 1 = Score descending\n"
+	"#   2 = Score ascending\n"
+msgstr	""
+
+#: src/lang.c:1475
+msgid	"Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1476
+msgid	"Goto first unread article in group"
+msgstr	""
+
+#: src/lang.c:1477
+msgid	"# If ON put cursor at first unread art in group otherwise last art\n"
+msgstr	""
+
+#: src/lang.c:1481
+msgid	"Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1482
+msgid	"Show only unread articles"
+msgstr	""
+
+#: src/lang.c:1483
+msgid	"# If ON show only new/unread articles otherwise show all.\n"
+msgstr	""
+
+#: src/lang.c:1488
+msgid	"Show only groups with unread arts"
+msgstr	""
+
+#: src/lang.c:1489
+msgid	"# If ON show only subscribed to groups that contain unread articles.\n"
+msgstr	""
+
+#: src/lang.c:1494
+msgid	"Filter which articles"
+msgstr	""
+
+#: src/lang.c:1495
+msgid	"# Filter which articles\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = only kill unread articles\n"
+	"#   1 = kill all articles and show in threads marked with K\n"
+	"#   2 = kill all articles and never show them\n"
+msgstr	""
+
+#: src/lang.c:1504
+msgid	"Tab goes to next unread article"
+msgstr	""
+
+#: src/lang.c:1505
+msgid	"# If ON the TAB command will go to next unread article at article viewer "
+	"level\n"
+msgstr	""
+
+#: src/lang.c:1509
+msgid	"Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
+msgstr	""
+
+#: src/lang.c:1510
+msgid	"Space goes to next unread article"
+msgstr	""
+
+#: src/lang.c:1511
+msgid	"# If ON the SPACE command will go to next unread article at article viewer\n"
+	"# level when the end of the article is reached (rn-style pager)\n"
+msgstr	""
+
+#: src/lang.c:1516
+msgid	"Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
+msgstr	""
+
+#: src/lang.c:1517
+msgid	"PgDn goes to next unread article"
+msgstr	""
+
+#: src/lang.c:1518
+msgid	"# If ON the PGDN or DOWN command will go to next unread article when\n"
+	"# pressed at end of message\n"
+msgstr	""
+
+#: src/lang.c:1524
+msgid	"List thread using right arrow key"
+msgstr	""
+
+#: src/lang.c:1525
+msgid	"# If ON automatically list thread when entering it using right arrow key.\n"
+msgstr	""
+
+#: src/lang.c:1529
+msgid	"Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1530
+msgid	"Character to show deleted articles"
+msgstr	""
+
+#: src/lang.c:1531
+msgid	"# Character used to show that an art was deleted (default 'D')\n"
+	"# _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1536
+msgid	"Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1537
+msgid	"Character to show inrange articles"
+msgstr	""
+
+#: src/lang.c:1538
+msgid	"# Character used to show that an art is in a range (default '#')\n"
+	"# _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1543
+msgid	"Enter character to indicate that article will return. <CR> sets, <ESC> "
+	"cancels."
+msgstr	""
+
+#: src/lang.c:1544
+msgid	"Character to show returning arts"
+msgstr	""
+
+#: src/lang.c:1545
+msgid	"# Character used to show that an art will return (default '-')\n"
+	"# _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1550
+msgid	"Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1551
+msgid	"Character to show selected articles"
+msgstr	""
+
+#: src/lang.c:1552
+msgid	"# Character used to show that an art was auto-selected (default '*')\n"
+	"# _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1557
+msgid	"Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1558
+msgid	"Character to show recent articles"
+msgstr	""
+
+#: src/lang.c:1559
+msgid	"# Character used to show that an art is recent (default 'o')\n"
+	"# _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1564
+msgid	"Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1565
+msgid	"Character to show unread articles"
+msgstr	""
+
+#: src/lang.c:1566
+msgid	"# Character used to show that an art is unread (default '+')\n"
+	"# _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1571
+msgid	"Enter character to indicate read articles. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1572
+msgid	"Character to show read articles"
+msgstr	""
+
+#: src/lang.c:1573
+msgid	"# Character used to show that an art was read (default ' ')\n"
+	"# _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1578
+msgid	"Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1579
+msgid	"Character to show killed articles"
+msgstr	""
+
+#: src/lang.c:1580
+msgid	"# Character used to show that an art was killed (default 'K')\n"
+	"# kill_level must be set accordingly, _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1585
+msgid	"Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1586
+msgid	"Character to show readselected arts"
+msgstr	""
+
+#: src/lang.c:1587
+msgid	"# Character used to show that an art was selected before read (default ':')\n"
+	"# kill_level must be set accordingly, _ is turned into ' '\n"
+msgstr	""
+
+#: src/lang.c:1592
+msgid	"Enter maximum length of newsgroup names displayed. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1593
+msgid	"Max. length of group names shown"
+msgstr	""
+
+#: src/lang.c:1594
+msgid	"# Maximum length of the names of newsgroups displayed\n"
+msgstr	""
+
+#: src/lang.c:1599
+msgid	"Show lines/score in listings"
+msgstr	""
+
+#: src/lang.c:1600
+msgid	"# What informations should be displayed in article/thread listing\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"# * 1 = lines\n"
+	"#   2 = score\n"
+	"#   3 = lines & score\n"
+msgstr	""
+
+#: src/lang.c:1609
+msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, -"
+	"2 = half page"
+msgstr	""
+
+#: src/lang.c:1610
+msgid	"Number of lines to scroll in pager"
+msgstr	""
+
+#: src/lang.c:1611
+msgid	"# Number of lines that cursor-up/down will scroll in article pager\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#  -2 = half-page scrolling\n"
+	"#  -1 = the top/bottom line is carried over onto the next page\n"
+	"#   0 = page-by-page (traditional behavior)\n"
+	"# * 1 = line-by-line\n"
+	"#   2 or greater = scroll by 2 or more lines (only in the pager)\n"
+msgstr	""
+
+#: src/lang.c:1621
+msgid	"Display signatures. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1622
+msgid	"Display signatures"
+msgstr	""
+
+#: src/lang.c:1623
+msgid	"# If OFF don't show signatures when displaying articles\n"
+msgstr	""
+
+#: src/lang.c:1627
+msgid	"Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1628
+msgid	"Display uue data as an attachment"
+msgstr	""
+
+#: src/lang.c:1629
+msgid	"# Handling of uuencoded data in the pager\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = no, display raw uuencoded data\n"
+	"#   1 = yes, uuencoded data will be condensed to a single tag line showing\n"
+	"#       size and filename, similar to how MIME attachments are displayed\n"
+	"#   2 = hide all, as for 1, but any line that looks like uuencoded data will\n"
+	"#       be folded into a tag line.\n"
+msgstr	""
+
+#: src/lang.c:1639
+msgid	"Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1640
+msgid	"Display \"a as Umlaut-a"
+msgstr	""
+
+#: src/lang.c:1641
+msgid	"# If ON decode German style TeX umlaut codes to ISO and\n"
+	"# show \"a as Umlaut-a, etc.\n"
+msgstr	""
+
+#: src/lang.c:1646 src/lang.c:1656
+msgid	"Space separated list of header fields"
+msgstr	""
+
+#: src/lang.c:1647
+msgid	"Display these header fields (or *)"
+msgstr	""
+
+#: src/lang.c:1648
+msgid	"# Which news headers you wish to see. If you want to see _all_ the headers,\n"
+	"# place an '*' as this value. This is the only way a wildcard can be used.\n"
+	"# If you enter 'X-' as the value, you will see all headers beginning with\n"
+	"# 'X-' (like X-Alan or X-Pape). You can list more than one by delimiting "
+	"with\n"
+	"# spaces. Not defining anything turns off this option.\n"
+msgstr	""
+
+#: src/lang.c:1657
+msgid	"Do not display these header fields"
+msgstr	""
+
+#: src/lang.c:1658
+msgid	"# Same as 'news_headers_to_display' except it denotes the opposite.\n"
+	"# An example of using both options might be if you thought X- headers were\n"
+	"# A Good Thing(tm), but thought Alan and Pape were miscreants...well then "
+	"you\n"
+	"# would do something like this:\n"
+	"# news_headers_to_display=X-\n"
+	"# news_headers_to_not_display=X-Alan X-Pape\n"
+	"# Not defining anything turns off this option.\n"
+msgstr	""
+
+#: src/lang.c:1668
+msgid	"Do you want to enable automatic handling of multipart/alternative articles?"
+msgstr	""
+
+#: src/lang.c:1669
+msgid	"Skip multipart/alternative parts"
+msgstr	""
+
+#: src/lang.c:1670
+msgid	"# If ON strip multipart/alternative messages automatically\n"
+msgstr	""
+
+#: src/lang.c:1675
+msgid	"A regex used to decide which lines to show in col_quote."
+msgstr	""
+
+#: src/lang.c:1676
+msgid	"Regex used to show quoted lines"
+msgstr	""
+
+#: src/lang.c:1677
+msgid	"# A regular expression that tin will use to decide which lines are\n"
+	"# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	""
+
+#: src/lang.c:1683
+msgid	"A regex used to decide which lines to show in col_quote2."
+msgstr	""
+
+#: src/lang.c:1684
+msgid	"Regex used to show twice quoted l."
+msgstr	""
+
+#: src/lang.c:1685
+msgid	"# A regular expression that tin will use to decide which lines are\n"
+	"# quoted twice. Twice quoted lines are shown in col_quote2.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	""
+
+#: src/lang.c:1691
+msgid	"A regex used to decide which lines to show in col_quote3."
+msgstr	""
+
+#: src/lang.c:1692
+msgid	"Regex used to show >= 3 times q.l."
+msgstr	""
+
+#: src/lang.c:1693
+msgid	"# A regular expression that tin will use to decide which lines are\n"
+	"# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	""
+
+#: src/lang.c:1700
+msgid	"A regex used to decide which words to show in col_markslashes."
+msgstr	""
+
+#: src/lang.c:1701
+msgid	"Regex used to highlight /slashes/"
+msgstr	""
+
+#: src/lang.c:1702
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '/' are to be shown in col_markslashes.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	""
+
+#: src/lang.c:1708
+msgid	"A regex used to decide which words to show in col_markstars."
+msgstr	""
+
+#: src/lang.c:1709
+msgid	"Regex used to highlight *stars*"
+msgstr	""
+
+#: src/lang.c:1710
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '*' are to be shown in col_markstars.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	""
+
+#: src/lang.c:1716
+msgid	"A regex used to decide which words to show in col_markstroke."
+msgstr	""
+
+#: src/lang.c:1717
+msgid	"Regex used to highlight -strokes-"
+msgstr	""
+
+#: src/lang.c:1718
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '-' are to be shown in col_markstroke.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	""
+
+#: src/lang.c:1724
+msgid	"A regex used to decide which words to show in col_markdash."
+msgstr	""
+
+#: src/lang.c:1725
+msgid	"Regex used to highlight _underline_"
+msgstr	""
+
+#: src/lang.c:1726
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '_' are to be shown in col_markdash.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	""
+
+#: src/lang.c:1732
+msgid	"A regex used to find Subject prefixes to remove.  Use '|' as separator."
+msgstr	""
+
+#: src/lang.c:1733
+msgid	"Regex with Subject prefixes"
+msgstr	""
+
+#: src/lang.c:1734
+msgid	"# A regular expression that tin will use to find Subject prefixes\n"
+	"# which will be removed before showing the header.\n"
+msgstr	""
+
+#: src/lang.c:1739
+msgid	"A regex used to find Subject suffixes to remove.  Use '|' as separator."
+msgstr	""
+
+#: src/lang.c:1740
+msgid	"Regex with Subject suffixes"
+msgstr	""
+
+#: src/lang.c:1741
+msgid	"# A regular expression that tin will use to find Subject suffixes\n"
+	"# which will be removed when replying or posting followup.\n"
+msgstr	""
+
+#: src/lang.c:1746
+msgid	"Enter name and options for external MIME viewer, --internal for built-in "
+	"viewer"
+msgstr	""
+
+#: src/lang.c:1747
+msgid	"MIME binary content viewer"
+msgstr	""
+
+#: src/lang.c:1748
+msgid	"# If --internal automatically use the built in MIME viewer for non-text\n"
+	"# parts of articles.\n"
+	"# Otherwise specify an external viewer program (eg, metamail) or leave blank\n"
+	"# for no automatic viewing\n"
+msgstr	""
+
+#: src/lang.c:1755
+msgid	"Confirm before starting non-text viewing program"
+msgstr	""
+
+#: src/lang.c:1756
+msgid	"Ask before using MIME viewer"
+msgstr	""
+
+#: src/lang.c:1757
+msgid	"# If ON tin will ask before using metamail to display MIME messages\n"
+	"# this only happens if metamail_prog is set to something\n"
+msgstr	""
+
+#: src/lang.c:1762
+msgid	"Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1763
+msgid	"Catchup read groups when quitting"
+msgstr	""
+
+#: src/lang.c:1764
+msgid	"# If ON ask user if read groups should all be marked read\n"
+msgstr	""
+
+#: src/lang.c:1769
+msgid	"Catchup group using left key"
+msgstr	""
+
+#: src/lang.c:1770
+msgid	"# If ON catchup group/thread when leaving with the left arrow key.\n"
+msgstr	""
+
+#: src/lang.c:1775
+msgid	"Catchup thread by using left key"
+msgstr	""
+
+#: src/lang.c:1781
+msgid	"Which actions require confirmation"
+msgstr	""
+
+#: src/lang.c:1782
+msgid	"# What should we ask confirmation for.\n"
+msgstr	""
+
+#: src/lang.c:1787
+msgid	"'Mark article read' ignores tags"
+msgstr	""
+
+#: src/lang.c:1788
+msgid	"# If ON the 'Mark article read' function marks only the current article.\n"
+msgstr	""
+
+#: src/lang.c:1792
+msgid	"Program to run to open URL's, <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1793
+msgid	"Program that opens URL's"
+msgstr	""
+
+#: src/lang.c:1794
+msgid	"# The program used to open URL's. The actual URL will be appended\n"
+msgstr	""
+
+#: src/lang.c:1799
+msgid	"Use mouse in xterm"
+msgstr	""
+
+#: src/lang.c:1800
+msgid	"# If ON enable mouse key support on xterm terminals\n"
+msgstr	""
+
+#: src/lang.c:1806
+msgid	"Use scroll keys on keypad"
+msgstr	""
+
+#: src/lang.c:1807
+msgid	"# If ON enable scroll keys on terminals that support it\n"
+msgstr	""
+
+#: src/lang.c:1812
+msgid	"Enter maximum number of article to get. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1813
+msgid	"Number of articles to get"
+msgstr	""
+
+#: src/lang.c:1814
+msgid	"# Number of articles to get (0=no limit), if negative sets maximum number\n"
+	"# of already read articles to be read before first unread one\n"
+msgstr	""
+
+#: src/lang.c:1819
+msgid	"Enter number of days article is considered recent. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1820
+msgid	"Article recentness time limit"
+msgstr	""
+
+#: src/lang.c:1821
+msgid	"# Number of days in which article is considered recent, (0=OFF)\n"
+msgstr	""
+
+#: src/lang.c:1825
+msgid	"WILDMAT for normal wildcards, REGEX for full regular expression matching."
+msgstr	""
+
+#: src/lang.c:1826
+msgid	"Wildcard matching"
+msgstr	""
+
+#: src/lang.c:1827
+msgid	"# Wildcard matching\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = wildmat\n"
+	"#   1 = regex\n"
+msgstr	""
+
+#: src/lang.c:1834
+msgid	"Enter minimal score before an article is marked killed. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1835
+msgid	"Score limit (kill)"
+msgstr	""
+
+#: src/lang.c:1836
+msgid	"# Score limit before an article is marked killed\n"
+msgstr	""
+
+#: src/lang.c:1840
+msgid	"Enter default score to kill articles. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1841
+msgid	"Default score to kill articles"
+msgstr	""
+
+#: src/lang.c:1842
+msgid	"# Default score to kill articles\n"
+msgstr	""
+
+#: src/lang.c:1846
+msgid	"Enter minimal score before an article is marked hot. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1847
+msgid	"Score limit (select)"
+msgstr	""
+
+#: src/lang.c:1848
+msgid	"# Score limit before an article is marked hot\n"
+msgstr	""
+
+#: src/lang.c:1852
+msgid	"Enter default score to select articles. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1853
+msgid	"Default score to select articles"
+msgstr	""
+
+#: src/lang.c:1854
+msgid	"# Default score to select articles\n"
+msgstr	""
+
+#: src/lang.c:1860
+msgid	"Use slrnface to show ''X-Face:''s"
+msgstr	""
+
+#: src/lang.c:1861
+msgid	"# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
+	"# Only useful when running in an xterm.\n"
+msgstr	""
+
+#: src/lang.c:1869
+msgid	"Use ANSI color"
+msgstr	""
+
+#: src/lang.c:1870
+msgid	"# If ON using ANSI-color\n"
+msgstr	""
+
+#: src/lang.c:1875
+msgid	"Standard foreground color"
+msgstr	""
+
+#: src/lang.c:1876
+msgid	"# Standard foreground color\n"
+	"# Default: -1 (default color)\n"
+msgstr	""
+
+#: src/lang.c:1882
+msgid	"Standard background color"
+msgstr	""
+
+#: src/lang.c:1883
+msgid	"# Standard background color\n"
+	"# Default: -1 (default color)\n"
+msgstr	""
+
+#: src/lang.c:1889
+msgid	"Color for inverse text (background)"
+msgstr	""
+
+#: src/lang.c:1890
+msgid	"# Color of background for inverse text\n"
+	"# Default: 4 (blue)\n"
+msgstr	""
+
+#: src/lang.c:1896
+msgid	"Color for inverse text (foreground)"
+msgstr	""
+
+#: src/lang.c:1897
+msgid	"# Color of foreground for inverse text\n"
+	"# Default: 7 (white)\n"
+msgstr	""
+
+#: src/lang.c:1903
+msgid	"Color of text lines"
+msgstr	""
+
+#: src/lang.c:1904
+msgid	"# Color of text lines\n"
+	"# Default: -1 (default color)\n"
+msgstr	""
+
+#: src/lang.c:1910
+msgid	"Color of mini help menu"
+msgstr	""
+
+#: src/lang.c:1911
+msgid	"# Color of mini help menu\n"
+	"# Default: 3 (brown)\n"
+msgstr	""
+
+#: src/lang.c:1917
+msgid	"Color of help text"
+msgstr	""
+
+#: src/lang.c:1918
+msgid	"# Color of help pages\n"
+	"# Default: -1 (default color)\n"
+msgstr	""
+
+#: src/lang.c:1924
+msgid	"Color of status messages"
+msgstr	""
+
+#: src/lang.c:1925
+msgid	"# Color of messages in last line\n"
+	"# Default: 6 (cyan)\n"
+msgstr	""
+
+#: src/lang.c:1931
+msgid	"Color of quoted lines"
+msgstr	""
+
+#: src/lang.c:1932
+msgid	"# Color of quote-lines\n"
+	"# Default: 2 (green)\n"
+msgstr	""
+
+#: src/lang.c:1938
+msgid	"Color of twice quoted line"
+msgstr	""
+
+#: src/lang.c:1939
+msgid	"# Color of twice quoted lines\n"
+	"# Default: 3 (brown)\n"
+msgstr	""
+
+#: src/lang.c:1945
+msgid	"Color of =>3 times quoted line"
+msgstr	""
+
+#: src/lang.c:1946
+msgid	"# Color of >=3 times quoted lines\n"
+	"# Default: 4 (blue)\n"
+msgstr	""
+
+#: src/lang.c:1952
+msgid	"Color of article header lines"
+msgstr	""
+
+#: src/lang.c:1953
+msgid	"# Color of header-lines\n"
+	"# Default: 2 (green)\n"
+msgstr	""
+
+#: src/lang.c:1959
+msgid	"Color of actual news header fields"
+msgstr	""
+
+#: src/lang.c:1960
+msgid	"# Color of actual news header fields\n"
+	"# Default: 9 (light red)\n"
+msgstr	""
+
+#: src/lang.c:1966
+msgid	"Color of article subject lines"
+msgstr	""
+
+#: src/lang.c:1967
+msgid	"# Color of article subject\n"
+	"# Default: 6 (cyan)\n"
+msgstr	""
+
+#: src/lang.c:1973
+msgid	"Color of response counter"
+msgstr	""
+
+#: src/lang.c:1974
+msgid	"# Color of response counter\n"
+	"# Default: 2 (green)\n"
+msgstr	""
+
+#: src/lang.c:1980
+msgid	"Color of sender (From:)"
+msgstr	""
+
+#: src/lang.c:1981
+msgid	"# Color of sender (From:)\n"
+	"# Default: 2 (green)\n"
+msgstr	""
+
+#: src/lang.c:1987
+msgid	"Color of help/mail sign"
+msgstr	""
+
+#: src/lang.c:1988
+msgid	"# Color of Help/Mail-Sign\n"
+	"# Default: 4 (blue)\n"
+msgstr	""
+
+#: src/lang.c:1994
+msgid	"Color of signatures"
+msgstr	""
+
+#: src/lang.c:1995
+msgid	"# Color of signature\n"
+	"# Default: 4 (blue)\n"
+msgstr	""
+
+#: src/lang.c:2001
+msgid	"Color of highlighted URLs"
+msgstr	""
+
+#: src/lang.c:2002
+msgid	"# Color of highlighted URLs\n"
+	"# Default: -1 (default color)\n"
+msgstr	""
+
+#: src/lang.c:2008
+msgid	"Color of highlighting with *stars*"
+msgstr	""
+
+#: src/lang.c:2009
+msgid	"# Color of word highlighting with *stars*\n"
+	"# Default: 11 (yellow)\n"
+msgstr	""
+
+#: src/lang.c:2015
+msgid	"Color of highlighting with _dash_"
+msgstr	""
+
+#: src/lang.c:2016
+msgid	"# Color of word highlighting with _dash_\n"
+	"# Default: 13 (light pink)\n"
+msgstr	""
+
+#: src/lang.c:2022
+msgid	"Color of highlighting with /slash/"
+msgstr	""
+
+#: src/lang.c:2023
+msgid	"# Color of word highlighting with /slash/\n"
+	"# Default: 14 (light cyan)\n"
+msgstr	""
+
+#: src/lang.c:2029
+msgid	"Color of highlighting with -stroke-"
+msgstr	""
+
+#: src/lang.c:2030
+msgid	"# Color of word highlighting with -stroke-\n"
+	"# Default: 12 (light blue)\n"
+msgstr	""
+
+#: src/lang.c:2037
+msgid	"Attr. of highlighting with *stars*"
+msgstr	""
+
+#: src/lang.c:2038
+msgid	"# Attributes of word highlighting on mono terminals\n"
+	"# Possible values are:\n"
+	"#   0 = Normal\n"
+	"#   1 = Underline\n"
+	"#   2 = Best highlighting\n"
+	"#   3 = Reverse video\n"
+	"#   4 = Blinking\n"
+	"#   5 = Half bright\n"
+	"#   6 = Bold\n"
+	"\n"
+	"# Attribute of word highlighting with *stars*\n"
+	"# Default: 6 (bold)\n"
+msgstr	""
+
+#: src/lang.c:2053
+msgid	"Attr. of highlighting with _dash_"
+msgstr	""
+
+#: src/lang.c:2054
+msgid	"# Attribute of word highlighting with _dash_\n"
+	"# Default: 2 (best highlighting)\n"
+msgstr	""
+
+#: src/lang.c:2060
+msgid	"Attr. of highlighting with /slash/"
+msgstr	""
+
+#: src/lang.c:2061
+msgid	"# Attribute of word highlighting with /slash/\n"
+	"# Default: 5 (half bright)\n"
+msgstr	""
+
+#: src/lang.c:2067
+msgid	"Attr. of highlighting with -stroke-"
+msgstr	""
+
+#: src/lang.c:2068
+msgid	"# Attribute of word highlighting with -stroke-\n"
+	"# Default: 3 (reverse video)\n"
+msgstr	""
+
+#: src/lang.c:2074
+msgid	"URL highlighting in message body"
+msgstr	""
+
+#: src/lang.c:2075
+msgid	"# Enable URL highlighting?\n"
+msgstr	""
+
+#: src/lang.c:2080
+msgid	"Word highlighting in message body"
+msgstr	""
+
+#: src/lang.c:2081
+msgid	"# Enable word highlighting?\n"
+msgstr	""
+
+#: src/lang.c:2086
+msgid	"What to display instead of mark"
+msgstr	""
+
+#: src/lang.c:2087
+msgid	"# Should the leading and ending stars and dashes also be displayed,\n"
+	"# even when they are highlighting marks?\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = no\n"
+	"#   1 = yes, display mark\n"
+	"# * 2 = print a space instead\n"
+msgstr	""
+
+#: src/lang.c:2096
+msgid	"Enter column number to wrap article lines to in the pager. <CR> sets."
+msgstr	""
+
+#: src/lang.c:2097
+msgid	"Page line wrap column"
+msgstr	""
+
+#: src/lang.c:2098
+msgid	"# Wrap article lines at column\n"
+msgstr	""
+
+#: src/lang.c:2103
+msgid	"Wrap around threads on next unread"
+msgstr	""
+
+#: src/lang.c:2104
+msgid	"# If ON wrap around threads on searching next unread article\n"
+msgstr	""
+
+#: src/lang.c:2108
+msgid	"Enter default mail address (and fullname). <CR> sets."
+msgstr	""
+
+#: src/lang.c:2109
+msgid	"Mail address (and fullname)"
+msgstr	""
+
+#: src/lang.c:2110
+msgid	"# User's mail address (and fullname), if not username@host (fullname)\n"
+msgstr	""
+
+#: src/lang.c:2115
+msgid	"Show empty Followup-To in editor"
+msgstr	""
+
+#: src/lang.c:2116
+msgid	"# If ON show empty Followup-To header when editing an article\n"
+msgstr	""
+
+#: src/lang.c:2120
+msgid	"Enter path/! command/--none to create your default signature. <CR> sets."
+msgstr	""
+
+#: src/lang.c:2121
+msgid	"Create signature from path/command"
+msgstr	""
+
+#: src/lang.c:2122
+msgid	"# Signature path (random sigs)/file to be used when posting/replying\n"
+	"# default_sigfile=file       appends file as signature\n"
+	"# default_sigfile=!command   executes external command to generate a "
+	"signature\n"
+	"# default_sigfile=--none     don't append a signature\n"
+msgstr	""
+
+#: src/lang.c:2129
+msgid	"Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2130
+msgid	"Prepend signature with \"-- \""
+msgstr	""
+
+#: src/lang.c:2131
+msgid	"# If ON prepend the signature with dashes '\\n-- \\n'\n"
+msgstr	""
+
+#: src/lang.c:2135
+msgid	"Add signature when reposting articles. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2136
+msgid	"Add signature when reposting"
+msgstr	""
+
+#: src/lang.c:2137
+msgid	"# If ON add signature to reposted articles\n"
+msgstr	""
+
+#: src/lang.c:2141
+#, c-format
+msgid	"Enter quotation marks, %s or %S for author's initials."
+msgstr	""
+
+#: src/lang.c:2142
+msgid	"Characters used as quote-marks"
+msgstr	""
+
+#: src/lang.c:2143
+#, c-format
+msgid	"# Characters used in quoting to followups and replies.\n"
+	"# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
+msgstr	""
+
+#: src/lang.c:2149
+msgid	"Quoting behavior"
+msgstr	""
+
+#: src/lang.c:2150
+msgid	"# How quoting should be handled when following up or replying.\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = Nothing special\n"
+	"#   1 = Compress quotes\n"
+	"#   2 = Quote signatures\n"
+	"#   3 = Compress quotes, quote signatures\n"
+	"#   4 = Quote empty lines\n"
+	"# * 5 = Compress quotes, quote empty lines\n"
+	"#   6 = Quote signatures, quote empty lines\n"
+	"#   7 = Compress quotes, quote signatures, quote empty lines\n"
+msgstr	""
+
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
+msgid	"%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
+msgstr	""
+
+#: src/lang.c:2164
+msgid	"Quote line when following up"
+msgstr	""
+
+#: src/lang.c:2165
+#, c-format
+msgid	"# Format of quote line when mailing/posting/following-up an article\n"
+	"# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
+	"# %%N Full Name  %%C First Name   %%I Initials\n"
+msgstr	""
+
+#: src/lang.c:2172
+msgid	"Quote line when cross-posting"
+msgstr	""
+
+#: src/lang.c:2178
+msgid	"Quote line when mailing"
+msgstr	""
+
+#: src/lang.c:2183
+msgid	"If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2184
+msgid	"Insert 'User-Agent:'-header"
+msgstr	""
+
+#: src/lang.c:2185
+msgid	"# If ON include advertising User-Agent: header\n"
+msgstr	""
+
+#: src/lang.c:2190
+msgid	"Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
+msgstr	""
+
+#: src/lang.c:2191
+msgid	"MM_CHARSET"
+msgstr	""
+
+#: src/lang.c:2192
+msgid	"# Charset supported locally which is also used for MIME header and\n"
+	"# Content-Type header.\n"
+	"# If not set, the value of the environment variable MM_CHARSET is used.\n"
+	"# Set to US-ASCII or compile time default if neither of them is defined.\n"
+	"# If MIME_STRICT_CHARSET is defined at compile-time, charset other than\n"
+	"# mm_charset is considered not displayable and represented as '?'.\n"
+msgstr	""
+
+#: src/lang.c:2202
+msgid	"MM_NETWORK_CHARSET"
+msgstr	""
+
+#: src/lang.c:2203
+msgid	"# Charset used for MIME (Content-Type) header in postings.\n"
+msgstr	""
+
+#: src/lang.c:2209
+msgid	"Mailbox format"
+msgstr	""
+
+#: src/lang.c:2210
+msgid	"# Format of the mailbox.\n"
+msgstr	""
+
+#: src/lang.c:2215
+msgid	"MIME encoding in news messages"
+msgstr	""
+
+#: src/lang.c:2216
+msgid	"# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
+	"# for mails and posts, if necessary. QP is efficient for most European\n"
+	"# character sets (ISO-8859-X) with small fraction of non-US-ASCII chars,\n"
+	"# while Base64 is more efficient for most 8bit East Asian, Greek, and\n"
+	"# Russian charsets with a lot of 8bit characters.\n"
+msgstr	""
+
+#: src/lang.c:2224 src/lang.c:2245
+msgid	"Don't change unless you know what you are doing. <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:2225
+msgid	"Use 8bit characters in news headers"
+msgstr	""
+
+#: src/lang.c:2226
+msgid	"# If ON, 8bit characters in news headers are NOT encoded.\n"
+	"# default is OFF. Thus 8bit characters are encoded by default.\n"
+	"# 8bit chars in header are encoded regardless of the value of this\n"
+	"# parameter unless post_mime_encoding is 8bit as well.\n"
+msgstr	""
+
+#: src/lang.c:2233
+msgid	"Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:2234
+msgid	"View post-processed files"
+msgstr	""
+
+#: src/lang.c:2235
+msgid	"# If set, post processed files will be opened in a viewer\n"
+msgstr	""
+
+#: src/lang.c:2240
+msgid	"MIME encoding in mail messages"
+msgstr	""
+
+#: src/lang.c:2246
+msgid	"Use 8bit characters in mail headers"
+msgstr	""
+
+#: src/lang.c:2247
+msgid	"# If ON, 8bit characters in mail headers are NOT encoded.\n"
+	"# default is OFF. Thus 8bit characters are encoded by default.\n"
+	"# 8bit chars in headers are encoded regardless of the value of this "
+	"parameter\n"
+	"# unless mail_mime_encoding is 8bit as well. Note that RFC 2822\n"
+	"# prohibits 8bit characters in mail headers so that you are advised NOT to\n"
+	"# turn it ON unless you have some compelling reason.\n"
+msgstr	""
+
+#: src/lang.c:2257
+msgid	"Strip blanks from ends of lines"
+msgstr	""
+
+#: src/lang.c:2258
+msgid	"# If ON strip blanks from ends of lines for faster display on slow "
+	"terminals.\n"
+msgstr	""
+
+#: src/lang.c:2263
+msgid	"If ON, use transliteration. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2264
+msgid	"Transliteration"
+msgstr	""
+
+#: src/lang.c:2265
+msgid	"# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
+	"# be represented in the in the target character set, it can be approximated\n"
+	"# through one or several similarly looking characters.\n"
+msgstr	""
+
+#: src/lang.c:2272
+msgid	"Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2273
+msgid	"Send you a cc automatically"
+msgstr	""
+
+#: src/lang.c:2274
+msgid	"# If ON automatically put your name in the Cc: field when mailing an article\n"
+msgstr	""
+
+#: src/lang.c:2278
+msgid	"Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2279
+msgid	"Send you a blind cc automatically"
+msgstr	""
+
+#: src/lang.c:2280
+msgid	"# If ON automatically put your name in the Bcc: field when mailing an "
+	"article\n"
+msgstr	""
+
+#: src/lang.c:2284
+msgid	"Enter address elements about which you want to be warned. <CR> sets."
+msgstr	""
+
+#: src/lang.c:2285
+msgid	"Spamtrap warning address parts"
+msgstr	""
+
+#: src/lang.c:2286
+msgid	"# A comma-delimited list of address-parts you want to be warned\n"
+	"# about when trying to reply by email.\n"
+msgstr	""
+
+#: src/lang.c:2291
+msgid	"Enter default number of days a filter entry will be valid. <CR> sets."
+msgstr	""
+
+#: src/lang.c:2292
+msgid	"No. of days a filter entry is valid"
+msgstr	""
+
+#: src/lang.c:2293
+msgid	"# Number of days a short term filter will be active\n"
+msgstr	""
+
+#: src/lang.c:2297
+msgid	"Add posted articles to filter. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2298
+msgid	"Add posted articles to filter"
+msgstr	""
+
+#: src/lang.c:2299
+msgid	"# If ON add posted articles which start a new thread to filter for\n"
+	"# highlighting follow-ups\n"
+msgstr	""
+
+#: src/lang.c:2303
+msgid	"The directory where articles/threads are to be saved in mailbox format."
+msgstr	""
+
+#: src/lang.c:2304
+msgid	"Mail directory"
+msgstr	""
+
+#: src/lang.c:2305
+msgid	"# (-m) directory where articles/threads are saved in mailbox format\n"
+msgstr	""
+
+#: src/lang.c:2310
+msgid	"Save articles in batch mode (-S)"
+msgstr	""
+
+#: src/lang.c:2311
+msgid	"# If ON articles/threads will be saved in batch mode when save -S\n"
+	"# or mail (-M/-N) is specified on the command line\n"
+msgstr	""
+
+#: src/lang.c:2316
+msgid	"The directory where you want articles/threads saved."
+msgstr	""
+
+#: src/lang.c:2317
+msgid	"Directory to save arts/threads in"
+msgstr	""
+
+#: src/lang.c:2318
+msgid	"# Directory where articles/threads are saved\n"
+msgstr	""
+
+#: src/lang.c:2322
+msgid	"Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2323
+msgid	"Use Archive-name: header for save"
+msgstr	""
+
+#: src/lang.c:2324
+msgid	"# If ON articles/threads with Archive-name: in mail header will\n"
+	"# be automatically saved with the Archive-name & part/patch no.\n"
+msgstr	""
+
+#: src/lang.c:2329
+msgid	"Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
+	"cancels."
+msgstr	""
+
+#: src/lang.c:2330
+msgid	"Mark saved articles/threads as read"
+msgstr	""
+
+#: src/lang.c:2331
+msgid	"# If ON mark articles that are saved as read\n"
+msgstr	""
+
+#: src/lang.c:2335
+msgid	"Do post processing (eg. extract attachments) for saved articles."
+msgstr	""
+
+#: src/lang.c:2336
+msgid	"Post process saved articles"
+msgstr	""
+
+#: src/lang.c:2337
+msgid	"# Perform post processing (saving binary attachments) from saved articles.\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = no\n"
+	"#   1 = extract shell archives (shar) only\n"
+	"#   2 = yes\n"
+msgstr	""
+
+#: src/lang.c:2346
+msgid	"Process only unread articles"
+msgstr	""
+
+#: src/lang.c:2347
+msgid	"# If ON only save/print/pipe/mail unread articles (tagged articles excepted)\n"
+msgstr	""
+
+#: src/lang.c:2352
+msgid	"Print all or just part of header. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2353
+msgid	"Print all headers when printing"
+msgstr	""
+
+#: src/lang.c:2354
+msgid	"# If ON print all of article header otherwise just the important lines\n"
+msgstr	""
+
+#: src/lang.c:2358
+msgid	"The printer program with options that is to be used to print articles/threads."
+msgstr	""
+
+#: src/lang.c:2359
+msgid	"Printer program with options"
+msgstr	""
+
+#: src/lang.c:2360
+msgid	"# Print program with parameters used to print articles/threads\n"
+msgstr	""
+
+#: src/lang.c:2366
+msgid	"Force redraw after certain commands"
+msgstr	""
+
+#: src/lang.c:2367
+msgid	"# If ON a screen redraw will always be done after certain external commands\n"
+msgstr	""
+
+#: src/lang.c:2371
+msgid	"Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:2372
+msgid	"Start editor with line offset"
+msgstr	""
+
+#: src/lang.c:2373
+msgid	"# If ON editor will be started with cursor offset into the file\n"
+	"# otherwise the cursor will be positioned at the first line\n"
+msgstr	""
+
+#: src/lang.c:2378
+msgid	"Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
+msgstr	""
+
+#: src/lang.c:2379
+msgid	"Invocation of your editor"
+msgstr	""
+
+#: src/lang.c:2380
+#, c-format
+msgid	"# Format of editor line including parameters\n"
+	"# %%E Editor  %%F Filename  %%N Linenumber\n"
+msgstr	""
+
+#: src/lang.c:2385
+msgid	"Enter name and options for external-inews, --internal for internal inews"
+msgstr	""
+
+#: src/lang.c:2386
+msgid	"External inews"
+msgstr	""
+
+#: src/lang.c:2387
+msgid	"# If --internal use the built in mini inews for posting via NNTP\n"
+	"# otherwise use an external inews program\n"
+msgstr	""
+
+#: src/lang.c:2391
+msgid	"Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
+msgstr	""
+
+#: src/lang.c:2392
+msgid	"Invocation of your mail command"
+msgstr	""
+
+#: src/lang.c:2393
+#, c-format
+msgid	"# Format of mailer line including parameters\n"
+	"# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
+	"# ie. to use elm as your mailer:    elm -s \"%%S\" \"%%T\" < %%F\n"
+	"# ie. elm interactive          :    elm -i %%F -s \"%%S\" \"%%T\"\n"
+msgstr	""
+
+#: src/lang.c:2401
+msgid	"Use interactive mail reader"
+msgstr	""
+
+#: src/lang.c:2402
+msgid	"# Interactive mailreader\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = no interactive mailreader\n"
+	"#   1 = use interactive mailreader with headers in file\n"
+	"#   2 = use interactive mailreader without headers in file\n"
+msgstr	""
+
+#: src/lang.c:2411
+msgid	"Remove ~/.article after posting"
+msgstr	""
+
+#: src/lang.c:2412
+msgid	"# If ON remove ~/.article after posting.\n"
+msgstr	""
+
+#: src/lang.c:2416
+msgid	"Filename for all posted articles, <CR> sets, no filename=do not save."
+msgstr	""
+
+#: src/lang.c:2417
+msgid	"Filename for posted articles"
+msgstr	"éÍÑ ÆÁÊÌÁ ÄÌÑ ÏÔÐÒÁ×ÌÅÎÎÙÈ ÓÔÁÔÅÊ"
+
+#: src/lang.c:2418
+msgid	"# Filename where to keep all postings (default posted)\n"
+	"# If no filename is set then postings will not be saved\n"
+msgstr	""
+
+#: src/lang.c:2423
+msgid	"Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2424
+msgid	"Keep failed arts in ~/dead.articles"
+msgstr	""
+
+#: src/lang.c:2425
+msgid	"# If ON keep all failed postings in ~/dead.articles\n"
+msgstr	""
+
+#: src/lang.c:2429
+msgid	"Do you want to strip unsubscribed groups from .newsrc"
+msgstr	""
+
+#: src/lang.c:2430
+msgid	"No unsubscribed groups in newsrc"
+msgstr	""
+
+#: src/lang.c:2431
+msgid	"# If ON strip unsubscribed groups from newsrc\n"
+msgstr	""
+
+#: src/lang.c:2436
+msgid	"Remove bogus groups from newsrc"
+msgstr	""
+
+#: src/lang.c:2437
+msgid	"# What to do with bogus groups in newsrc file\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = keep\n"
+	"#   1 = remove\n"
+	"#   2 = highlight with D on selection screen\n"
+msgstr	""
+
+#: src/lang.c:2445
+msgid	"Enter number of seconds until active file will be reread. <CR> sets."
+msgstr	""
+
+#: src/lang.c:2446
+msgid	"Interval in secs to reread active"
+msgstr	""
+
+#: src/lang.c:2447
+msgid	"# Time interval in seconds between rereading the active file (0=never)\n"
+msgstr	""
+
+#: src/lang.c:2452
+msgid	"Reconnect to server automatically"
+msgstr	"óÏÅÄÉÎÉÔØÓÑ ÓÎÏ×Á Ó ÓÅÒ×ÅÒÏÍ Á×ÔÏÍÁÔÉÞÅÓËÉ"
+
+#: src/lang.c:2453
+msgid	"# If ON automatically reconnect to NNTP server if the connection is broken\n"
+msgstr	""
+
+#: src/lang.c:2457
+msgid	"Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:2458
+msgid	"Cache NNTP overview files locally"
+msgstr	""
+
+#: src/lang.c:2459
+msgid	"# If ON, create local copies of NNTP overview files.\n"
+msgstr	""
+
+#: src/lang.c:2463
+msgid	"Enter format string. <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:2464
+msgid	"Format string for display of dates"
+msgstr	""
+
+#: src/lang.c:2465
+msgid	"# Format string for date representation\n"
+msgstr	""
+
+#: src/lang.c:2471
+msgid	"Unicode normalization form"
+msgstr	""
+
+#: src/lang.c:2472
+msgid	"# Unicode normalization form\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = None\n"
+	"# * 1 = NFKC\n"
+	"#   2 = NFKD\n"
+	"#   3 = NFC\n"
+	"#   4 = NFD\n"
+msgstr	""
+
+#: src/lang.c:2484
+msgid	"Render BiDi"
+msgstr	""
+
+#: src/lang.c:2485
+msgid	"# If ON, bi-directional text is rendered by tin\n"
+msgstr	""
+
+#: src/misc.c:3728
+#, c-format
+msgid	"Version: %s %s release %s (\"%s\") %s %s\n"
+msgstr	""
+
+#: src/misc.c:3731
+#, c-format
+msgid	"Version: %s %s release %s (\"%s\")\n"
+msgstr	""
+
+#: src/newsrc.c:430
+msgid	"Unreachable?\n"
+msgstr	"îÅÄÏÓÔÕÐÎÏ?\n"
+
+#: src/nntplib.c:824
+#, c-format
+msgid	"\n"
+	"Server timed out, trying reconnect # %d\n"
+msgstr	"\n"
+	"óÅÒ×ÅÒ timed out, ÐÏÐÙÔËÁ ÓÏÅÄÉÎÉÔØÓÑ ÓÎÏ×Á # %d\n"
+
+#: src/nntplib.c:842
+msgid	"Rejoin current group\n"
+msgstr	"÷ÓÔÕÐÉÔØ ÓÎÏ×Á × ÔÅËÕÝÕÀ ÇÒÕÐÐÕ\n"
+
+#: src/nntplib.c:849
+#, c-format
+msgid	"Read (%s)\n"
+msgstr	"þÔÅÎÉÅ (%s)\n"
+
+#: src/nntplib.c:851
+#, c-format
+msgid	"Resend last command (%s)\n"
+msgstr	"ðÅÒÅÓÌÁÔØ ÐÏÓÌÅÄÎÀÀ ËÏÍÁÎÄÕ (%s)\n"
+
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid	"MOTD: "
+msgstr	""
+
+#: src/nrctbl.c:172
+#, c-format
+msgid	"couldn't expand %s\n"
+msgstr	"ÎÅ ÐÏÌÕÞÉÌÏÓØ ÒÁÓËÒÙÔØ %s\n"
+
+#: src/post.c:1152
+#, c-format
+msgid	"Line %d is longer than 998 octets and should be folded, but\n"
+	"encoding is neither set to %s nor to %s\n"
+msgstr	""
+
+#: src/post.c:1157
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+	"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr	""
+
+#: src/post.c:1159
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is not set to %s\n"
+msgstr	""
+
+#: src/post.c:1974
+#, c-format
+msgid	"Posting: %.*s ..."
+msgstr	"ïÔÐÒÁ×ÌÅÎÉÅ × ÇÒÕÐÐÕ %.*s ..."
+
+#. Check if okay to read
+#: src/read.c:214
+msgid	"Aborting read, please wait..."
+msgstr	"ðÒÅÒÙ×ÁÎÉÅ ÞÔÅÎÉÑ, ÐÏÄÏÖÄÉÔÅ..."
+
+#: src/read.c:361
+msgid	"Aborted read\n"
+msgstr	"þÔÅÎÉÅ ÐÒÅÒ×ÁÎÏ\n"
+
+#: src/read.c:417
+msgid	"Draining\n"
+msgstr	"ïÓÕÛÅÎÉÅ\n"
+
+#. Don't hash the initial '<'
+#: src/refs.c:251
+msgid	"unchanged"
+msgstr	"ÎÅÉÚÍÅÎÅÎÏ"
+
+#: src/refs.c:609
+msgid	"[- Unavailable -]"
+msgstr	"[- îÅÄÏÓÔÕÐÎÏ -]"
+
+#.
+#. * preamble
+#. * TODO: -> lang.c
+#.
+#: src/rfc2047.c:1203
+#, c-format
+msgid	"This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
+	"are reading this prefix, your mail reader probably has not yet been modified\n"
+	"to understand the new format, and some of what follows may look strange.\n"
+	"\n"
+msgstr	""
+
+#: src/save.c:978
+msgid	"bytes"
+msgstr	"ÂÁÊÔ"
+
+#: src/select.c:381
+msgid	"unread"
+msgstr	"ÎÅÐÒÏÞÉÔÁÎÎÙÅ"
+
+#: src/select.c:381
+msgid	"all"
+msgstr	"×ÓÅ"
+
+#: src/select.c:551 src/select.c:553
+msgid	" R"
+msgstr	""
+
+#. TODO: use tin global 'homedir' instead? or even rcdir?
+#: src/xface.c:91
+#, c-format
+msgid	"Can't run slrnface: Environment variable %s not found."
+msgstr	"îÅ ÍÏÇÕ ÚÁÐÕÓÔÉÔØ slrnface: ðÅÒÅÍÅÎÎÁÑ ÏËÒÕÖÅÎÉÑ %s ÎÅ ÎÁÊÄÅÎÁ."
+
+#: src/xface.c:99 src/xface.c:131
+#, c-format
+msgid	"Can't run slrnface: failed to create %s"
+msgstr	"îÅ ÍÏÇÕ ÚÁÐÕÓÔÉÔØ slrnface: ÏÛÉÂËÁ ÓÏÚÄÁÎÉÑ %s"
+
+#: src/xface.c:109
+msgid	"This directory is used to create named pipes for communication between\n"
+	"slrnface and its parent process. It should normally be empty because\n"
+	"the pipe is deleted right after it has been opened by both processes.\n"
+	"\n"
+	"File names generated by slrnface have the form \"hostname.pid\". It is\n"
+	"probably an error if they linger here longer than a fraction of a second.\n"
+	"\n"
+	"However, if the directory is mounted from an NFS server, you might see\n"
+	"special files created by your NFS server while slrnface is running.\n"
+	"Do not try to remove them.\n"
+msgstr	""
+
+#: src/xface.c:123
+msgid	"Can't run slrnface: couldn't construct fifo name."
+msgstr	"îÅ ÍÏÇÕ ÚÁÐÕÓÔÉÔØ slrnface: ÎÅ ÕÄÁÅÔÓÑ ÓÄÅÌÁÔØ ÉÍÑ fifo."
+
+#: src/xface.c:162
+#, c-format
+msgid	"Slrnface abnormally exited, code %d."
+msgstr	"Slrnface ÎÅÐÒÁ×ÉÌØÎÏ ÚÁ×ÅÒÛÅÎÏ Ó ËÏÄÏÍ %d."
+
+#: src/xface.c:206
+#, c-format
+msgid	"Slrnface failed: %s."
+msgstr	"Slrnface ÐÒÏ×ÁÌÉÌÏÓØ: %s."
Binary files tin-1.7.8/po/rw.gmo and tin-1.7.9/po/rw.gmo differ
diff -Nurp tin-1.7.8/po/rw.po tin-1.7.9/po/rw.po
--- tin-1.7.8/po/rw.po	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/po/rw.po	2005-06-28 10:31:29.775526018 +0200
@@ -0,0 +1,6952 @@
+# translation of tin to Kinyarwanda.
+# Copyright (C) 2005 Free Software Foundation, Inc.
+# This file is distributed under the same license as the tin package.
+# Steve Murphy <murf@e-tools.com>, 2005
+# Steve performed initial rough translation from compendium built from translations provided by the following translators:
+# Philibert Ndandali  <ndandali@yahoo.fr>, 2005.
+# Viateur MUGENZI <muvia1@yahoo.fr>, 2005.
+# Noëlla Mupole <s24211045@tuks.co.za>, 2005.
+# Carole Karema <karemacarole@hotmail.com>, 2005.
+# JEAN BAPTISTE NGENDAHAYO <ngenda_denis@yahoo.co.uk>, 2005.
+# Augustin KIBERWA  <akiberwa@yahoo.co.uk>, 2005.
+# Donatien NSENGIYUMVA <ndonatienuk@yahoo.co.uk>, 2005.
+# Antoine Bigirimana <antoine@e-tools.com>, 2005.
+#
+msgid	""
+msgstr	"Project-Id-Version: tin 1.7.8\n"
+	"Report-Msgid-Bugs-To: \n"
+	"POT-Creation-Date: 2005-06-22 20:13+0200\n"
+	"PO-Revision-Date: 2005-04-03 10:55-0700\n"
+	"Last-Translator: Steven Michael Murphy <murf@e-tools.com>\n"
+	"Language-Team: Kinyarwanda <translation-team-rw@lists.sourceforge.net>\n"
+	"MIME-Version: 1.0\n"
+	"Content-Type: text/plain; charset=ISO-8859-1\n"
+	"Content-Transfer-Encoding: 8bit\n"
+
+#: src/art.c:1553
+#, fuzzy, c-format
+msgid	"%d Bad overview record (%d fields) '%s'"
+msgstr	"%d Incamake Icyabitswe Imyanya"
+
+#: src/attrib.c:643
+#, fuzzy, c-format
+msgid	"# Do not edit this comment block\n"
+	"#\n"
+msgstr	"# O YA Guhindura iyi Icyo wongeraho\n"
+	"#\n"
+
+#: src/attrib.c:644
+#, fuzzy, c-format
+msgid	"#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
+msgstr	"#  Alt. Alt.\n"
+
+#: src/attrib.c:645
+#, c-format
+msgid	"#  maildir=STRING (ie. ~/Mail)\n"
+msgstr	""
+
+#: src/attrib.c:646
+#, fuzzy, c-format
+msgid	"#  savedir=STRING (ie. ~user/News)\n"
+msgstr	"#  Ukoresha:\n"
+
+#: src/attrib.c:647
+#, c-format
+msgid	"#  savefile=STRING (ie. =linux)\n"
+msgstr	""
+
+#: src/attrib.c:648
+#, fuzzy, c-format
+msgid	"#  sigfile=STRING (ie. $var/sig)\n"
+msgstr	"#  VAR\n"
+
+#: src/attrib.c:649
+#, fuzzy, c-format
+msgid	"#  organization=STRING (if beginning with '/' read from file)\n"
+msgstr	"#  Ihuzagahunda NIBA Itangiriro Na: Gusoma Bivuye IDOSIYE\n"
+
+#: src/attrib.c:650
+#, c-format
+msgid	"#  followup_to=STRING\n"
+msgstr	""
+
+#: src/attrib.c:651
+#, fuzzy, c-format
+msgid	"#  mailing_list=STRING (ie. majordomo@example.org)\n"
+msgstr	"#  Urutonde rwa Imeli Urugero org\n"
+
+#: src/attrib.c:652
+#, c-format
+msgid	"#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
+msgstr	""
+
+#: src/attrib.c:653
+#, c-format
+msgid	"#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
+msgstr	""
+
+#: src/attrib.c:654
+#, fuzzy, c-format
+msgid	"#  from=STRING (just append wanted From:-line, don't use quotes)\n"
+msgstr	"#  Bivuye Kongeraho... Umurongo Gukoresha\n"
+
+#: src/attrib.c:655
+#, c-format
+msgid	"#  news_quote_format=STRING\n"
+msgstr	""
+
+#: src/attrib.c:656
+#, fuzzy, c-format
+msgid	"#  quote_chars=STRING (%%s, %%S for initials)\n"
+msgstr	"#  kugirango Izibanza\n"
+
+#: src/attrib.c:657
+#, fuzzy, c-format
+msgid	"#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
+msgstr	"#  Ishusho Ishusho bmp\n"
+
+#: src/attrib.c:659
+#, c-format
+msgid	"#  ispell=STRING\n"
+msgstr	""
+
+#: src/attrib.c:661
+#, c-format
+msgid	"#  auto_select=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:662
+#, fuzzy, c-format
+msgid	"#  auto_save=ON/OFF\n"
+msgstr	"#  NyaMwishyingura\n"
+
+#: src/attrib.c:663
+#, c-format
+msgid	"#  batch_save=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:664
+#, c-format
+msgid	"#  delete_tmp_files=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:665
+#, c-format
+msgid	"#  show_only_unread=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:666
+#, c-format
+msgid	"#  thread_arts=NUM"
+msgstr	""
+
+#: src/attrib.c:673
+#, c-format
+msgid	"#  show_author=NUM\n"
+msgstr	""
+
+#: src/attrib.c:679
+#, c-format
+msgid	"#  show_info=NUM\n"
+msgstr	""
+
+#: src/attrib.c:685
+#, c-format
+msgid	"#  sort_art_type=NUM\n"
+msgstr	""
+
+#: src/attrib.c:703
+#, c-format
+msgid	"#  sort_threads_type=NUM\n"
+msgstr	""
+
+#: src/attrib.c:708
+#, c-format
+msgid	"#  post_proc_type=NUM\n"
+msgstr	""
+
+#: src/attrib.c:713
+#, c-format
+msgid	"#  quick_kill_scope=STRING (ie. talk.*)\n"
+msgstr	""
+
+#: src/attrib.c:714
+#, c-format
+msgid	"#  quick_kill_expire=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:715
+#, c-format
+msgid	"#  quick_kill_case=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:716
+#, c-format
+msgid	"#  quick_kill_header=NUM\n"
+msgstr	""
+
+#: src/attrib.c:717 src/attrib.c:724
+#, fuzzy, c-format
+msgid	"#    0=subj (case sensitive) 1=subj (ignore case)\n"
+msgstr	"#    0 1. Kwirengagiza\n"
+
+#: src/attrib.c:718 src/attrib.c:725
+#, fuzzy, c-format
+msgid	"#    2=from (case sensitive) 3=from (ignore case)\n"
+msgstr	"#    2. Bivuye 3. Bivuye Kwirengagiza\n"
+
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
+msgid	"#    4=msgid 5=lines\n"
+msgstr	""
+
+#: src/attrib.c:720
+#, c-format
+msgid	"#  quick_select_scope=STRING\n"
+msgstr	""
+
+#: src/attrib.c:721
+#, c-format
+msgid	"#  quick_select_expire=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:722
+#, c-format
+msgid	"#  quick_select_case=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:723
+#, c-format
+msgid	"#  quick_select_header=NUM\n"
+msgstr	""
+
+#: src/attrib.c:727
+#, c-format
+msgid	"#  x_comment_to=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:728
+#, c-format
+msgid	"#  fcc=STRING (eg. =mailbox)\n"
+msgstr	""
+
+#: src/attrib.c:729
+#, c-format
+msgid	"#  tex2iso_conv=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:730
+#, c-format
+msgid	"#  mime_forward=ON/OFF\n"
+msgstr	""
+
+#: src/attrib.c:732
+#, c-format
+msgid	"#  mm_network_charset=supported_charset"
+msgstr	""
+
+#: src/attrib.c:739
+#, fuzzy, c-format
+msgid	"#  undeclared_charset=STRING (default is US-ASCII)\n"
+msgstr	"#  Mburabuzi ni\n"
+
+#: src/attrib.c:741
+#, fuzzy, c-format
+msgid	"#\n"
+	"# Note that it is best to put general (global scoping)\n"
+msgstr	"#\n"
+	"# ni Kuri Gushyira Rusange\n"
+
+#: src/attrib.c:742
+#, fuzzy, c-format
+msgid	"# entries first followed by group specific entries.\n"
+	"#\n"
+msgstr	"# Ibyinjijwe Itangira ku Itsinda Ibyinjijwe\n"
+	"#\n"
+
+#: src/attrib.c:743
+#, c-format
+msgid	"############################################################################\n"
+	"\n"
+msgstr	""
+
+#: src/attrib.c:749
+#, fuzzy, c-format
+msgid	"# include extra headers\n"
+msgstr	"# Gushyiramo Birenga\n"
+
+#: src/attrib.c:757
+#, fuzzy, c-format
+msgid	"# in *sources* set post process type to shar only\n"
+msgstr	"# in Gushyiraho Iposita Ubwoko Kuri\n"
+
+#: src/attrib.c:761
+#, fuzzy, c-format
+msgid	"# in *binaries* do full post processing but no TeX2ISO conversion,\n"
+msgstr	"# in Iposita Inonosora Gukuraho...\n"
+
+#: src/attrib.c:762
+#, fuzzy, c-format
+msgid	"# remove tmp files and set Followup-To: poster\n"
+msgstr	"# Na Gushyiraho\n"
+
+#: src/cook.c:497
+#, fuzzy
+msgid	"(unknown)"
+msgstr	"(Itazwi)"
+
+#.
+#. * TODO: add to the right rule, give better explanation, -> lang.c
+#.
+#: src/filter.c:600 src/filter.c:608
+#, fuzzy
+msgid	"Removed from the previous rule: "
+msgstr	"Bivuye i Ibanjirije"
+
+#: src/lang.c:42
+#, fuzzy
+msgid	"1 Response"
+msgstr	"1."
+
+#: src/lang.c:46
+#, fuzzy, c-format
+msgid	"\n"
+	"%s contains no newsgroups. Exiting."
+msgstr	"\n"
+	"%sKirimo Oya Imbuga z'amakuru"
+
+#: src/lang.c:47
+#, fuzzy
+msgid	"all "
+msgstr	"Byose"
+
+#: src/lang.c:48
+msgid	"All groups"
+msgstr	"amatsinda yose"
+
+#: src/lang.c:49
+#, fuzzy, c-format
+msgid	"File %s exists. %s=append, %s=overwrite, %s=quit: "
+msgstr	"Idosiye Kongeraho... Guhindura Kuvamo"
+
+#: src/lang.c:50
+#, fuzzy
+msgid	"Article cancelled (deleted)."
+msgstr	"Kureka Cyasibwe"
+
+#: src/lang.c:51
+#, fuzzy
+msgid	"Article cannot be cancelled (deleted)."
+msgstr	"Kureka Cyasibwe"
+
+#: src/lang.c:52
+#, fuzzy
+msgid	"Article deleted."
+msgstr	"Cyasibwe"
+
+#: src/lang.c:53
+#, fuzzy, c-format
+msgid	"\n"
+	"Your article:\n"
+	"  \"%s\"\n"
+	"will be posted to the following %s:\n"
+msgstr	"Ingingo Kuri i"
+
+#: src/lang.c:54
+#, fuzzy
+msgid	"Article not posted!"
+msgstr	"OYA"
+
+#: src/lang.c:55
+#, fuzzy
+msgid	"Article not saved"
+msgstr	"OYA"
+
+#: src/lang.c:56
+msgid	"Article Level Commands"
+msgstr	""
+
+#: src/lang.c:57
+#, fuzzy
+msgid	"Article has no parent"
+msgstr	"Oya"
+
+#: src/lang.c:58
+#, fuzzy
+msgid	"Parent article has been killed"
+msgstr	"Ingingo"
+
+#: src/lang.c:59
+#, fuzzy
+msgid	"Parent article is unavailable"
+msgstr	"Ingingo ni"
+
+#: src/lang.c:60
+#, c-format
+msgid	"Article posted: %s"
+msgstr	""
+
+#: src/lang.c:61
+#, fuzzy, c-format
+msgid	"Article rejected (saved to %s)"
+msgstr	"Byanzwe Kuri"
+
+#: src/lang.c:62
+#, fuzzy, c-format
+msgid	"%s=article, %s=thread, %s=hot, %s=pattern, %s=tagged articles, %s=quit: "
+msgstr	"%s=Ingingo Urudodo Ishusho Kuvamo"
+
+#: src/lang.c:63
+msgid	"Article unavailable"
+msgstr	""
+
+#: src/lang.c:64
+msgid	"Article undeleted."
+msgstr	""
+
+#: src/lang.c:66
+msgid	"articles"
+msgstr	""
+
+#: src/lang.c:67
+#, fuzzy
+msgid	"This is a repost of the following article:"
+msgstr	"ni a Bya i Ingingo"
+
+#: src/lang.c:68
+#, fuzzy
+msgid	"article"
+msgstr	"Ingingo"
+
+#: src/lang.c:69
+msgid	"Article"
+msgstr	"Ingingo"
+
+#: src/lang.c:70
+#, c-format
+msgid	"-- %d %s mailed --"
+msgstr	""
+
+# 345
+#: src/lang.c:71
+#, fuzzy, c-format
+msgid	" at %s"
+msgstr	" ku %s"
+
+#: src/lang.c:72
+#, fuzzy, c-format
+msgid	"%*s[-- %s/%s, encoding %s%s%s, %d lines%s%s --]\n"
+msgstr	"%*s[--%s/%s,Imisobekere: Imirongo"
+
+#: src/lang.c:73
+msgid	", charset: "
+msgstr	""
+
+#: src/lang.c:74
+#, c-format
+msgid	"%*s[-- Description: %s --]\n"
+msgstr	""
+
+#: src/lang.c:75
+#, fuzzy, c-format
+msgid	"%d Authentication failed"
+msgstr	"%dByanze"
+
+#: src/lang.c:76
+msgid	"Server expects authentication.\n"
+msgstr	""
+
+#: src/lang.c:77
+#, fuzzy
+msgid	"    Please enter password: "
+msgstr	"Injiza Ijambobanga..."
+
+#: src/lang.c:78
+#, fuzzy
+msgid	"    Please enter username: "
+msgstr	"Injiza Izina ry'ukoresha"
+
+#: src/lang.c:79
+#, fuzzy, c-format
+msgid	"Author search backwards [%s]> "
+msgstr	"Gushaka Inyuma"
+
+#: src/lang.c:80
+#, fuzzy, c-format
+msgid	"Author search forwards [%s]> "
+msgstr	"Gushaka"
+
+#: src/lang.c:81
+#, fuzzy, c-format
+msgid	"Authorized for user: %s\n"
+msgstr	"kugirango Ukoresha:"
+
+#: src/lang.c:82
+#, fuzzy, c-format
+msgid	"Authorization failed for user: %s\n"
+msgstr	"Byanze kugirango Ukoresha:"
+
+#: src/lang.c:83
+#, fuzzy, c-format
+msgid	"\n"
+	"Autosubscribed to %s"
+msgstr	"Kuri"
+
+#: src/lang.c:84
+#, fuzzy
+msgid	"Autosubscribing groups...\n"
+msgstr	"Amatsinda"
+
+#: src/lang.c:85
+#, fuzzy, c-format
+msgid	"Autoselecting articles (use '%s' to see all unread) ..."
+msgstr	"Gukoresha Kuri Byose Bidasomye"
+
+#: src/lang.c:87
+#, fuzzy, c-format
+msgid	"Active file corrupt - %s"
+msgstr	"IDOSIYE"
+
+#: src/lang.c:88
+#, fuzzy, c-format
+msgid	"Article to be posted resulted in errors/warnings. %s=quit, %s=Menu, %s=edit: "
+msgstr	"Kuri in Amakosa Iburira Kuvamo Guhindura"
+
+#: src/lang.c:89
+#, fuzzy, c-format
+msgid	"Unrecognized attribute: %s"
+msgstr	"Ikiranga"
+
+#: src/lang.c:90
+#, fuzzy, c-format
+msgid	"Bad command. Type '%s' for help."
+msgstr	"Komandi: kugirango Ifashayobora"
+
+#: src/lang.c:92
+#, fuzzy
+msgid	"Base article"
+msgstr	"Base Ingingo"
+
+#: src/lang.c:93
+#, fuzzy
+msgid	"Base article range"
+msgstr	"Base Ingingo Urutonde"
+
+#: src/lang.c:94
+#, fuzzy, c-format
+msgid	"%s: Updating of index files not supported\n"
+msgstr	"%s:Bya Umubarendanga Idosiye OYA"
+
+#: src/lang.c:95
+#, fuzzy
+msgid	"*** Beginning of article ***"
+msgstr	"***Bya Ingingo"
+
+#: src/lang.c:97
+#, fuzzy, c-format
+msgid	"Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
+msgstr	"Gusiba Cyangwa Guhindura Ingingo"
+
+#: src/lang.c:98
+#, fuzzy
+msgid	"Cancelling article..."
+msgstr	"Ingingo"
+
+#: src/lang.c:100
+#, fuzzy, c-format
+msgid	"Cannot create %s"
+msgstr	"Kurema"
+
+#: src/lang.c:101
+#, fuzzy, c-format
+msgid	"Can't find base article %d"
+msgstr	"Gushaka SHINGIRO Ingingo"
+
+#: src/lang.c:102
+#, fuzzy, c-format
+msgid	"Can't open %s"
+msgstr	"Gufungura"
+
+#: src/lang.c:103
+#, fuzzy, c-format
+msgid	"Couldn't open %s for saving"
+msgstr	"Gufungura kugirango Mu kubika"
+
+#: src/lang.c:104
+#, fuzzy
+msgid	"*** Posting not allowed ***"
+msgstr	"***OYA"
+
+#: src/lang.c:105
+#, fuzzy, c-format
+msgid	"Posting is not allowed to %s"
+msgstr	"ni OYA Kuri"
+
+#: src/lang.c:106
+#, c-format
+msgid	"Can't retrieve %s"
+msgstr	""
+
+#: src/lang.c:107
+#, fuzzy, c-format
+msgid	"%s is a directory"
+msgstr	"%sni a bushyinguro"
+
+#: src/lang.c:108
+msgid	"Catchup"
+msgstr	""
+
+#: src/lang.c:109
+#, c-format
+msgid	"Catchup %s..."
+msgstr	""
+
+#: src/lang.c:110
+#, fuzzy
+msgid	"Catchup all groups entered during this session?"
+msgstr	"Byose Amatsinda iyi Umukoro"
+
+#: src/lang.c:111
+#, fuzzy
+msgid	"You have tagged articles in this group - catchup anyway?"
+msgstr	"in iyi Itsinda"
+
+#: src/lang.c:112
+#, fuzzy, c-format
+msgid	"%s %d %s in %lu seconds\n"
+msgstr	"%s%d%sin"
+
+#: src/lang.c:113
+msgid	"Caughtup"
+msgstr	""
+
+#: src/lang.c:114
+msgid	"Check Prepared Article"
+msgstr	""
+
+#: src/lang.c:115
+#, fuzzy
+msgid	"Checking for new groups... "
+msgstr	"kugirango Gishya Amatsinda"
+
+#: src/lang.c:116
+#, fuzzy
+msgid	"Checking for news..."
+msgstr	"kugirango Amakuru"
+
+#: src/lang.c:117
+#, fuzzy, c-format
+msgid	"Post-process %s=no, %s=yes, %s=shar, %s=quit: "
+msgstr	"Oya Yego Kuvamo"
+
+#: src/lang.c:119
+#, fuzzy
+msgid	"ANSI color disabled"
+msgstr	"Ibara Yahagaritswe"
+
+#: src/lang.c:120
+#, fuzzy
+msgid	"ANSI color enabled"
+msgstr	"Ibara Bikora"
+
+#: src/lang.c:122
+#, fuzzy, c-format
+msgid	"Command failed: %s"
+msgstr	"Byanze"
+
+#: src/lang.c:123
+#, fuzzy
+msgid	"Mark not selected articles read?"
+msgstr	"OYA Byahiswemo Gusoma"
+
+#: src/lang.c:124
+#, fuzzy, c-format
+msgid	"Connecting to %s..."
+msgstr	"Kwihuza na %s..."
+
+#: src/lang.c:125
+msgid	"<CR>"
+msgstr	""
+
+#: src/lang.c:126
+#, fuzzy
+msgid	"Creating active file for saved groups...\n"
+msgstr	"Gikora IDOSIYE kugirango Amatsinda"
+
+#: src/lang.c:127
+#, fuzzy
+msgid	"Creating newsrc file...\n"
+msgstr	"IDOSIYE"
+
+#: src/lang.c:129 src/lang.c:1147
+msgid	"Default"
+msgstr	"Mburabuzi"
+
+#: src/lang.c:130
+#, fuzzy
+msgid	"Delete saved files that have been post processed?"
+msgstr	"Idosiye Iposita"
+
+#: src/lang.c:131
+#, fuzzy
+msgid	"Deleting temporary files..."
+msgstr	"By'igihe gito Idosiye"
+
+#: src/lang.c:133
+#, fuzzy
+msgid	"*** End of article ***"
+msgstr	"***Impera Bya Ingingo"
+
+#: src/lang.c:134
+#, fuzzy
+msgid	"*** End of articles ***"
+msgstr	"***Impera Bya"
+
+#: src/lang.c:135
+#, fuzzy
+msgid	"*** End of groups ***"
+msgstr	"***Impera Bya Amatsinda"
+
+#: src/lang.c:136
+#, fuzzy
+msgid	"*** End of thread ***"
+msgstr	"***Impera Bya Urudodo"
+
+#: src/lang.c:137
+#, fuzzy
+msgid	"Enter limit of articles to get> "
+msgstr	"Bya Kuri Kubona"
+
+#: src/lang.c:138
+#, fuzzy
+msgid	"Enter Message-ID to go to> "
+msgstr	"Kuri Gyayo Kuri"
+
+#: src/lang.c:139
+#, fuzzy
+msgid	" and enter next unread thread"
+msgstr	"Na Injiza Komeza>> Bidasomye Urudodo"
+
+#: src/lang.c:140
+#, fuzzy
+msgid	" and enter next unread group"
+msgstr	"Na Injiza Komeza>> Bidasomye Itsinda"
+
+#: src/lang.c:141
+#, fuzzy
+msgid	"Enter option number> "
+msgstr	"Ihitamo Umubare"
+
+#: src/lang.c:142
+#, fuzzy, c-format
+msgid	"Enter range [%s]> "
+msgstr	"Urutonde"
+
+#: src/lang.c:143
+#, fuzzy
+msgid	"\n"
+	"Warning: Approved: header used.\n"
+msgstr	"Umutwempangano"
+
+#: src/lang.c:145
+#, fuzzy
+msgid	"\n"
+	"Error: Bad address in Approved: header.\n"
+msgstr	"Aderesi in Umutwempangano"
+
+#: src/lang.c:146
+#, fuzzy
+msgid	"\n"
+	"Error: Bad address in From: header.\n"
+msgstr	"Aderesi in Umutwempangano"
+
+#: src/lang.c:147
+#, fuzzy
+msgid	"\n"
+	"Error: Bad address in Reply-To: header.\n"
+msgstr	"Aderesi in Umutwempangano"
+
+#: src/lang.c:148
+#, fuzzy
+msgid	"\n"
+	"Error: Bad FQDN in Message-ID: header.\n"
+msgstr	"in Umutwempangano"
+
+#: src/lang.c:149
+#, c-format
+msgid	"Can't unlock %s"
+msgstr	""
+
+#: src/lang.c:151
+#, fuzzy, c-format
+msgid	"Corrupted file %s"
+msgstr	"IDOSIYE"
+
+#: src/lang.c:152
+#, fuzzy, c-format
+msgid	"Couldn't dotlock %s - article not appended!"
+msgstr	"Ingingo OYA"
+
+#: src/lang.c:153
+#, fuzzy, c-format
+msgid	"Couldn't lock %s - article not appended!"
+msgstr	"Ingingo OYA"
+
+#: src/lang.c:155
+#, fuzzy
+msgid	"Internal error in GNKSA routine - send bug report.\n"
+msgstr	"Ikosa in Kohereza Icyegeranyo"
+
+#: src/lang.c:156
+#, fuzzy
+msgid	"Left angle bracket missing in route address.\n"
+msgstr	"Imfuruka Ibuze in Aderesi"
+
+#: src/lang.c:157
+#, fuzzy
+msgid	"Left parenthesis missing in old-style address.\n"
+msgstr	"Ibuze in ki/ bishaje IMISUSIRE Aderesi"
+
+#: src/lang.c:158
+#, fuzzy
+msgid	"Right parenthesis missing in old-style address.\n"
+msgstr	"Ibuze in ki/ bishaje IMISUSIRE Aderesi"
+
+#: src/lang.c:159
+#, fuzzy
+msgid	"At-sign missing in mail address.\n"
+msgstr	"IKIMENYETSO Ibuze in Ubutumwa Aderesi"
+
+#: src/lang.c:160
+#, fuzzy
+msgid	"Single component FQDN is not allowed. Add your domain.\n"
+msgstr	"ni OYA Urwego"
+
+#: src/lang.c:161
+#, fuzzy
+msgid	"Invalid domain. Send bug report if your top level domain really exists.\n"
+	"Use .invalid as top level domain for munged addresses.\n"
+msgstr	"Urwego Icyegeranyo NIBA Hejuru: urwego Urwego Sibyo Nka Hejuru: urwego Urwego "
+	"kugirango Amaderesi"
+
+#: src/lang.c:162
+#, fuzzy
+msgid	"Illegal domain. Send bug report if your top level domain really exists.\n"
+	"Use .invalid as top level domain for munged addresses.\n"
+msgstr	"Urwego Icyegeranyo NIBA Hejuru: urwego Urwego Sibyo Nka Hejuru: urwego Urwego "
+	"kugirango Amaderesi"
+
+#: src/lang.c:163
+#, fuzzy
+msgid	"Unknown domain. Send bug report if your top level domain really exists.\n"
+	"Use .invalid as top level domain for munged addresses.\n"
+msgstr	"Urwego Icyegeranyo NIBA Hejuru: urwego Urwego Sibyo Nka Hejuru: urwego Urwego "
+	"kugirango Amaderesi"
+
+#: src/lang.c:164
+#, fuzzy
+msgid	"Illegal character in FQDN.\n"
+msgstr	"Inyuguti in"
+
+#: src/lang.c:165
+#, fuzzy
+msgid	"Zero length FQDN component not allowed.\n"
+msgstr	"Uburebure OYA"
+
+#: src/lang.c:166
+#, fuzzy
+msgid	"FQDN component exceeds maximum allowed length (63 chars).\n"
+msgstr	"Kinini Uburebure"
+
+#: src/lang.c:167
+#, fuzzy
+msgid	"FQDN component may not start or end with hyphen.\n"
+msgstr	"Gicurasi OYA Gutangira Cyangwa Impera Na:"
+
+#: src/lang.c:168
+#, fuzzy
+msgid	"FQDN component may not start with digit.\n"
+msgstr	"Gicurasi OYA Gutangira Na:"
+
+#: src/lang.c:169
+#, fuzzy
+msgid	"Domain literal has impossible numeric value.\n"
+msgstr	"Bikurikije umubare Agaciro"
+
+#: src/lang.c:170
+#, fuzzy
+msgid	"Domain literal is for private use only and not allowed for global use.\n"
+msgstr	"ni kugirango By'umwihariko Gukoresha Na OYA kugirango Gukoresha"
+
+#: src/lang.c:171
+#, fuzzy
+msgid	"Right bracket missing in domain literal.\n"
+msgstr	"Ibuze in Urwego"
+
+#: src/lang.c:172
+#, fuzzy
+msgid	"Missing localpart of mail address.\n"
+msgstr	"Bya Ubutumwa Aderesi"
+
+#: src/lang.c:173
+#, fuzzy
+msgid	"Illegal character in localpart of mail address.\n"
+msgstr	"Inyuguti in Bya Ubutumwa Aderesi"
+
+#: src/lang.c:174
+#, fuzzy
+msgid	"Zero length localpart component not allowed.\n"
+msgstr	"Uburebure OYA"
+
+#: src/lang.c:175
+#, fuzzy
+msgid	"Illegal character in realname.\n"
+	"Unquoted words may not contain '!()<>@,;:\\.[]' in route addresses.\n"
+msgstr	"Inyuguti in Amagambo Gicurasi OYA in Amaderesi"
+
+#: src/lang.c:176
+#, fuzzy
+msgid	"Illegal character in realname.\n"
+	"Quoted words may not contain '()<>\\'.\n"
+msgstr	"Inyuguti in Amagambo Gicurasi OYA"
+
+#: src/lang.c:177
+#, fuzzy
+msgid	"Illegal character in realname.\n"
+	"Encoded words may not contain '!()<>@,;:\"\\.[]/=' in parameter.\n"
+msgstr	"Inyuguti in Amagambo Gicurasi OYA in"
+
+#: src/lang.c:178
+#, fuzzy
+msgid	"Bad syntax in encoded word used in realname.\n"
+msgstr	"in ijambo in"
+
+#: src/lang.c:179
+#, fuzzy
+msgid	"Illegal character in realname.\n"
+	"Unquoted words may not contain '()<>\\' in old-style addresses.\n"
+msgstr	"Inyuguti in Amagambo Gicurasi OYA in ki/ bishaje IMISUSIRE Amaderesi"
+
+#: src/lang.c:180
+#, fuzzy
+msgid	"Illegal character in realname.\n"
+	"Control characters and unencoded 8bit characters > 127 are not allowed.\n"
+msgstr	"Inyuguti in Inyuguti Na Inyuguti OYA"
+
+#: src/lang.c:181
+#, fuzzy
+msgid	"\n"
+	"Error: No blank line found after header.\n"
+msgstr	"Ahatanditseho Umurongo Byabonetse Nyuma Umutwempangano"
+
+#. TODO: fixme, US-ASCII is not the only 7bit charset we know about
+#: src/lang.c:183
+#, fuzzy
+msgid	"\n"
+	"Error: Posting contains non-ASCII characters but MM_CHARSET is set to\n"
+	"       US-ASCII  - please change this setting to a suitable value for\n"
+	"       your language  using the  M)enu of configurable  options or by\n"
+	"       editing tinrc.\n"
+msgstr	"Kirimo Inyuguti ni Gushyiraho Guhindura>> iyi Igenamiterere Kuri a Agaciro "
+	"Ururimi ikoresha i Bya Amahitamo Cyangwa"
+
+#: src/lang.c:188
+#, fuzzy
+msgid	"\n"
+	"Error: Posting contains  non-ASCII characters  but the  MIME encoding\n"
+	"       for news  messages  is set  to \"7bit\"  -  please change this\n"
+	"       setting to \"8bit\" or \"quoted-printable\" depending  on what\n"
+	"       is more common  in your part  of the world.  This can  be done\n"
+	"       using the M)enu of configurable options or by editing tinrc.\n"
+msgstr	"Kirimo Inyuguti i kugirango Amakuru Ubutumwa ni Gushyiraho Kuri Guhindura>> "
+	"Igenamiterere Kuri Cyangwa Gicapika ku ni Birenzeho in Bya i ikoresha i Bya "
+	"Amahitamo Cyangwa ku"
+
+#: src/lang.c:194
+#, fuzzy
+msgid	"\n"
+	"Error: Article starts with blank line instead of header\n"
+msgstr	"Na: Ahatanditseho Umurongo Bya"
+
+#: src/lang.c:195
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: Header on line %d does not have a colon after the header name:\n"
+	"%s\n"
+msgstr	"ku Umurongo OYA a Nyuma i Umutwempangano Izina:"
+
+#: src/lang.c:196
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line is empty.\n"
+msgstr	"Umurongo ni ubusa"
+
+#: src/lang.c:197
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line is missing from the article header.\n"
+msgstr	"Umurongo ni Ibuze Bivuye i Ingingo Umutwempangano"
+
+#: src/lang.c:198
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: Header on line %d does not have a space after the colon:\n"
+	"%s\n"
+msgstr	"ku Umurongo OYA a Umwanya Nyuma i"
+
+#: src/lang.c:199
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: There are multiple (%d) \"%s:\" lines in the header.\n"
+msgstr	"Igikubo Imirongo in i Umutwempangano"
+
+#: src/lang.c:200
+#, fuzzy, c-format
+msgid	"Insecure permissions of %s (%o)"
+msgstr	"Uruhushya Bya"
+
+#: src/lang.c:201
+#, fuzzy, c-format
+msgid	"Invalid response to GROUP command, %s"
+msgstr	"Kuri Komandi:"
+
+#: src/lang.c:203
+#, fuzzy, c-format
+msgid	"MIME parse error: Unexpected end of %s/%s article"
+msgstr	"Ikosa Impera Bya Ingingo"
+
+#: src/lang.c:204
+#, fuzzy
+msgid	"MIME parse error: Start boundary whilst reading headers"
+msgstr	"Ikosa Gutangira Imitwe"
+
+#: src/lang.c:205
+#, fuzzy
+msgid	"Can't get a (fully-qualified) domain-name!"
+msgstr	"Kubona a Urwego Izina:"
+
+#: src/lang.c:206
+#, fuzzy, c-format
+msgid	"No permissions to go into %s\n"
+msgstr	"Uruhushya Kuri Gyayo"
+
+#: src/lang.c:207
+#, fuzzy
+msgid	"\n"
+	"Error: From: line missing.\n"
+msgstr	"Umurongo Ibuze"
+
+#: src/lang.c:208
+#, fuzzy, c-format
+msgid	"No read permissions for %s\n"
+msgstr	"Gusoma Uruhushya kugirango"
+
+#: src/lang.c:209
+#, fuzzy, c-format
+msgid	"File %s does not exist\n"
+msgstr	"Idosiye OYA"
+
+#: src/lang.c:210
+#, fuzzy, c-format
+msgid	"No write permissions for %s\n"
+msgstr	"Kwandika Uruhushya kugirango"
+
+#: src/lang.c:211
+#, fuzzy
+msgid	"Can't get user information (/etc/passwd missing?)"
+msgstr	"Kubona Ukoresha: Ibisobanuro Ibuze"
+
+#: src/lang.c:212
+#, fuzzy
+msgid	"errors"
+msgstr	"Amakosa"
+
+#: src/lang.c:213
+#, fuzzy, c-format
+msgid	"\n"
+	"Error on line %d: \"Sender:\" header not allowed (it will be added for you)\n"
+msgstr	"ku Umurongo Umutwempangano OYA Kyongewe kugirango"
+
+#: src/lang.c:214
+#, fuzzy, c-format
+msgid	"Server has non of the groups listed in %s"
+msgstr	"Bya i Amatsinda in"
+
+#: src/lang.c:215
+#, fuzzy
+msgid	"error"
+msgstr	"Ikosa"
+
+#: src/lang.c:216
+#, fuzzy
+msgid	"Unknown display level"
+msgstr	"Kugaragaza urwego"
+
+#: src/lang.c:217
+msgid	"<ESC>"
+msgstr	""
+
+#: src/lang.c:218
+msgid	"Exiting..."
+msgstr	""
+
+#: src/lang.c:219
+#, fuzzy
+msgid	"leaving external mail-reader"
+msgstr	"external Ubutumwa"
+
+#: src/lang.c:220
+#, c-format
+msgid	"Extracting %s..."
+msgstr	""
+
+#: src/lang.c:222
+#, fuzzy, c-format
+msgid	"Error writing %s file. Filesystem full? File reset to previous state."
+msgstr	"IDOSIYE Idosiye Kugarura Kuri Ibanjirije Leta"
+
+#: src/lang.c:223
+#, fuzzy, c-format
+msgid	"Error making backup of %s file. Filesystem full?"
+msgstr	"Inyibutsa Bya IDOSIYE"
+
+#: src/lang.c:224
+#, c-format
+msgid	"Filtering global rules (%d/%d)..."
+msgstr	""
+
+#: src/lang.c:225
+#, fuzzy
+msgid	"Rule created by: "
+msgstr	"Byaremwe ku"
+
+#: src/lang.c:226
+#, fuzzy, c-format
+msgid	"Enter pattern [%s]> "
+msgstr	"Ishusho"
+
+#: src/lang.c:227
+#, fuzzy, c-format
+msgid	"\n"
+	"You requested followups to your article to go to the following %s:\n"
+msgstr	"Kuri Ingingo Kuri Gyayo Kuri i"
+
+#: src/lang.c:228
+#, fuzzy, c-format
+msgid	"  %s\t Answers will be directed to you by mail.\n"
+msgstr	"%sKuri ku Ubutumwa"
+
+#: src/lang.c:229
+#, fuzzy
+msgid	"-- forwarded message --\n"
+msgstr	"--Ubutumwa"
+
+#: src/lang.c:230
+#, fuzzy
+msgid	"-- end of forwarded message --\n"
+msgstr	"--Impera Bya Ubutumwa"
+
+#: src/lang.c:231
+#, fuzzy
+msgid	"# Format:\n"
+	"#   comment=STRING    Optional. Multiple lines allowed. Comments must be "
+	"placed\n"
+	"#                     at the beginning of a rule, or they will be moved to "
+	"the\n"
+	"#                     next rule. '#' is not a valid keyword for a comment!\n"
+	"#   group=STRING      Mandatory. Newsgroups list (e.g. comp.*,!*sources*).\n"
+	"#   case=NUM          Mandatory. Compare=0 / ignore=1 case when filtering.\n"
+	"#   score=NUM|STRING  Mandatory. Score to give. Either:\n"
+	"#     score=NUM         A number (e.g. 70). Or:\n"
+	"#     score=STRING      One of the two keywords: 'hot' or 'kill'.\n"
+	"#   subj=STRING       Optional. Subject: line (e.g. How to be a wizard).\n"
+	"#   from=STRING       Optional. From: line (e.g. *Craig Shergold*).\n"
+	"#   msgid=STRING      Optional. Message-ID: line (e.g. <123@ether.net>) with\n"
+	"#                     full references.\n"
+	"#   msgid_last=STRING Optional. Like above, but with last reference only.\n"
+	"#   msgid_only=STRING Optional. Like above, but without references.\n"
+	"#   refs_only=STRING  Optional. References: line (e.g. <123@ether.net>) "
+	"without\n"
+	"#                     Message-ID:\n"
+	"#   lines=[<>]?NUM    Optional. Lines: line. '<' or '>' are optional.\n"
+	"#   gnksa=[<>]?NUM    Optional. GNKSA parse_from() return code. '<' or '>' "
+	"opt.\n"
+	"#   xref=PATTERN      Optional. Kill pattern (e.g. alt.flame*)\n"
+	"#   time=NUM          Optional. time_t value when rule expires\n"
+	"#\n"
+msgstr	"#g. g. g. g. g. g. g. Alt."
+
+#: src/lang.c:252
+#, fuzzy, c-format
+msgid	"Enter score for rule (default=%d): "
+msgstr	"kugirango Mburabuzi"
+
+#: src/lang.c:253
+#, fuzzy, c-format
+msgid	"Enter the score weight (range 0 < score <= %d)"
+msgstr	"i Uburemere Urutonde 0"
+
+#. SCORE_MAX
+#: src/lang.c:254
+msgid	"Full"
+msgstr	""
+
+#: src/lang.c:255
+#, fuzzy
+msgid	"Comment (optional)  : "
+msgstr	"Bitari ngombwa"
+
+#: src/lang.c:256
+#, fuzzy
+msgid	"Apply pattern to    : "
+msgstr	"Ishusho Kuri"
+
+#: src/lang.c:257
+#, fuzzy
+msgid	"From: line (ignore case)      "
+msgstr	"Umurongo Kwirengagiza"
+
+#: src/lang.c:258
+#, fuzzy
+msgid	"From: line (case sensitive)   "
+msgstr	"Umurongo"
+
+#: src/lang.c:260
+#, fuzzy, c-format
+msgid	"%s%s: Unknown host.\n"
+msgstr	"%s%s:Ubuturo"
+
+#: src/lang.c:261
+msgid	"global "
+msgstr	""
+
+#: src/lang.c:262
+#, fuzzy, c-format
+msgid	"Please use %.100s instead"
+msgstr	"Gukoresha"
+
+#: src/lang.c:263
+#, fuzzy, c-format
+msgid	"%s is bogus"
+msgstr	"%sni"
+
+#: src/lang.c:264
+#, fuzzy, c-format
+msgid	"Group %s is moderated. Continue?"
+msgstr	"Dukomeza."
+
+#: src/lang.c:265
+#, fuzzy
+msgid	"groups"
+msgstr	"Amatsinda"
+
+#: src/lang.c:266
+#, c-format
+msgid	"Rereading %s..."
+msgstr	""
+
+#: src/lang.c:267
+msgid	"Top Level Commands"
+msgstr	""
+
+#: src/lang.c:268
+msgid	"Group Selection"
+msgstr	""
+
+#: src/lang.c:269
+#, fuzzy
+msgid	"group"
+msgstr	"Itsinda"
+
+#: src/lang.c:271
+#, fuzzy
+msgid	"One or more lines of comment. <CR> to add a line or proceed if line is empty."
+msgstr	"Cyangwa Birenzeho Imirongo Bya Icyo wongeraho Kuri Kongeramo a Umurongo "
+	"Cyangwa NIBA Umurongo ni ubusa"
+
+#: src/lang.c:272
+#, fuzzy
+msgid	"From: line to add to filter file. <SPACE> toggles & <CR> sets."
+msgstr	"Umurongo Kuri Kongeramo Kuri Muyunguruzi... IDOSIYE"
+
+#: src/lang.c:273
+#, fuzzy
+msgid	"Linecount of articles to be filtered. < for less, > for more, = for equal."
+msgstr	"Bya Kuri kugirango Birutwa kugirango Birenzeho kugirango bingana"
+
+#: src/lang.c:274
+#, fuzzy
+msgid	"Message-ID: line to add to filter file. <SPACE> toggles & <CR> sets."
+msgstr	"Umurongo Kuri Kongeramo Kuri Muyunguruzi... IDOSIYE"
+
+#: src/lang.c:275
+#, fuzzy
+msgid	"Subject: line to add to filter file. <SPACE> toggles & <CR> sets."
+msgstr	"Umurongo Kuri Kongeramo Kuri Muyunguruzi... IDOSIYE"
+
+#: src/lang.c:276
+#, fuzzy
+msgid	"Enter text pattern to filter if Subject: & From: lines are not what you want."
+msgstr	"Umwandiko Ishusho Kuri Muyunguruzi... NIBA Imirongo OYA"
+
+#: src/lang.c:277
+#, fuzzy
+msgid	"Select where text pattern should be applied. <SPACE> toggles & <CR> sets."
+msgstr	"Umwandiko Ishusho Byashyizweho"
+
+#: src/lang.c:278
+#, fuzzy
+msgid	"Expiration time in days for the entered filter. <SPACE> toggles & <CR> sets."
+msgstr	"Igihe in Iminsi kugirango i Muyunguruzi..."
+
+#: src/lang.c:279
+#, fuzzy
+msgid	"Apply kill only to current group or all groups. <SPACE> toggles & <CR> sets."
+msgstr	"Kuri KIGEZWEHO Itsinda Cyangwa Byose Amatsinda"
+
+#: src/lang.c:280
+#, fuzzy
+msgid	"Apply select to current group or all groups. <SPACE> toggles & <CR> sets."
+msgstr	"Guhitamo Kuri KIGEZWEHO Itsinda Cyangwa Byose Amatsinda"
+
+#: src/lang.c:281
+#, fuzzy
+msgid	"kill an article via a menu"
+msgstr	"Ingingo Biturutse a Ibikubiyemo"
+
+#: src/lang.c:282
+#, fuzzy
+msgid	"auto-select (hot) an article via a menu"
+msgstr	"Ikiyega Guhitamo Ingingo Biturutse a Ibikubiyemo"
+
+#: src/lang.c:283
+#, fuzzy
+msgid	"Browse URLs in article"
+msgstr	"in Ingingo"
+
+#: src/lang.c:284
+#, fuzzy
+msgid	"0 - 9\t  display article by number in current thread"
+msgstr	"0 Kugaragaza Ingingo ku Umubare in KIGEZWEHO Urudodo"
+
+#: src/lang.c:285
+#, fuzzy
+msgid	"cancel (delete) or supersede (overwrite) current article"
+msgstr	"Kureka Gusiba Cyangwa Guhindura KIGEZWEHO Ingingo"
+
+#: src/lang.c:286
+#, fuzzy
+msgid	"edit article (mail-groups only)"
+msgstr	"Guhindura Ingingo Ubutumwa Amatsinda"
+
+#: src/lang.c:287
+#, fuzzy
+msgid	"display first article in current thread"
+msgstr	"Kugaragaza Itangira Ingingo in KIGEZWEHO Urudodo"
+
+#: src/lang.c:288
+#, fuzzy
+msgid	"display first page of article"
+msgstr	"Kugaragaza Itangira Ipaji Bya Ingingo"
+
+#: src/lang.c:289
+#, fuzzy
+msgid	"post followup to current article"
+msgstr	"Iposita Kuri KIGEZWEHO Ingingo"
+
+#: src/lang.c:290
+#, fuzzy
+msgid	"post followup (don't copy text) to current article"
+msgstr	"Iposita Gukoporora Umwandiko Kuri KIGEZWEHO Ingingo"
+
+#: src/lang.c:291
+#, fuzzy
+msgid	"post followup to current article quoting complete headers"
+msgstr	"Iposita Kuri KIGEZWEHO Ingingo Byuzuye Imitwe"
+
+#: src/lang.c:292
+#, fuzzy
+msgid	"display last article in current thread"
+msgstr	"Kugaragaza Iheruka Ingingo in KIGEZWEHO Urudodo"
+
+#: src/lang.c:293
+#, fuzzy
+msgid	"display last page of article"
+msgstr	"Kugaragaza Iheruka Ipaji Bya Ingingo"
+
+#: src/lang.c:294
+#, fuzzy
+msgid	"mark rest of thread as read and advance to next unread"
+msgstr	"Ikimenyetso Bya Urudodo Nka Gusoma Na Kuri Komeza>> Bidasomye"
+
+#: src/lang.c:295
+#, fuzzy
+msgid	"display next article"
+msgstr	"Kugaragaza Komeza>> Ingingo"
+
+#: src/lang.c:296
+#, fuzzy
+msgid	"display first article in next thread"
+msgstr	"Kugaragaza Itangira Ingingo in Komeza>> Urudodo"
+
+#: src/lang.c:297
+#, fuzzy
+msgid	"display next unread article"
+msgstr	"Kugaragaza Komeza>> Bidasomye Ingingo"
+
+#: src/lang.c:298
+#, fuzzy
+msgid	"go to the article that this one followed up"
+msgstr	"Gyayo Kuri i Ingingo iyi Hejuru"
+
+#: src/lang.c:299
+#, fuzzy
+msgid	"display previous article"
+msgstr	"Kugaragaza Ibanjirije Ingingo"
+
+#: src/lang.c:300
+#, fuzzy
+msgid	"display previous unread article"
+msgstr	"Kugaragaza Ibanjirije Bidasomye Ingingo"
+
+#: src/lang.c:301
+#, fuzzy
+msgid	"quickly kill an article using defaults"
+msgstr	"Ingingo ikoresha"
+
+#: src/lang.c:302
+#, fuzzy
+msgid	"quickly auto-select (hot) an article using defaults"
+msgstr	"Ikiyega Guhitamo Ingingo ikoresha"
+
+#: src/lang.c:303
+#, fuzzy
+msgid	"return to group selection level"
+msgstr	"Garuka Kuri Itsinda Ihitamo urwego"
+
+#: src/lang.c:304
+#, fuzzy
+msgid	"reply through mail to author"
+msgstr	"Subiza Gihinguranya Ubutumwa Kuri Umwanditsi"
+
+#: src/lang.c:305
+#, fuzzy
+msgid	"reply through mail (don't copy text) to author"
+msgstr	"Subiza Gihinguranya Ubutumwa Gukoporora Umwandiko Kuri Umwanditsi"
+
+#: src/lang.c:306
+#, fuzzy
+msgid	"reply through mail to author quoting complete headers"
+msgstr	"Subiza Gihinguranya Ubutumwa Kuri Umwanditsi Byuzuye Imitwe"
+
+#: src/lang.c:307
+#, fuzzy
+msgid	"repost chosen article to another group"
+msgstr	"Ingingo Kuri Itsinda"
+
+#: src/lang.c:308
+#, fuzzy
+msgid	"search backwards within this article"
+msgstr	"Gushaka Inyuma muri iyi Ingingo"
+
+#: src/lang.c:309
+#, fuzzy
+msgid	"search forwards within this article"
+msgstr	"Gushaka muri iyi Ingingo"
+
+#: src/lang.c:310
+#, fuzzy
+msgid	"show article in raw-mode (including all headers)"
+msgstr	"Garagaza Ingingo in Ubwoko Byose Imitwe"
+
+#: src/lang.c:311
+#, fuzzy
+msgid	"skip next block of included text"
+msgstr	"Komeza>> Funga Bya Umwandiko"
+
+#: src/lang.c:312
+#, fuzzy
+msgid	"toggle display of sections hidden by a form-feed (^L) on/off"
+msgstr	"Mukomatanya Kugaragaza Bya Ibyatoranyijwe gihishwe ku a Ifishi ku Bidakora"
+
+#: src/lang.c:313
+#, fuzzy
+msgid	"toggle word highlighting on/off"
+msgstr	"Mukomatanya ijambo Igaragaza cyane ku Bidakora"
+
+#: src/lang.c:314
+#, fuzzy
+msgid	"toggle ROT-13 (basic decode) for current article"
+msgstr	"Mukomatanya BASIC kugirango KIGEZWEHO Ingingo"
+
+#: src/lang.c:315
+#, fuzzy
+msgid	"toggle tabwidth 4 <-> 8"
+msgstr	"Mukomatanya 4. 8"
+
+#: src/lang.c:316
+#, fuzzy
+msgid	"toggle german TeX style decoding for current article"
+msgstr	"Mukomatanya Ikidage IMISUSIRE kugirango KIGEZWEHO Ingingo"
+
+#: src/lang.c:317
+#, fuzzy
+msgid	"toggle display of uuencoded sections"
+msgstr	"Mukomatanya Kugaragaza Bya Ibyatoranyijwe"
+
+#: src/lang.c:318
+#, fuzzy
+msgid	"View/save multimedia attachments"
+msgstr	"Kubika Imigereka"
+
+#: src/lang.c:319
+#, fuzzy, c-format
+msgid	"report bug or comment via mail to %s"
+msgstr	"Icyegeranyo Cyangwa Icyo wongeraho Biturutse Ubutumwa Kuri"
+
+#: src/lang.c:320
+#, fuzzy
+msgid	"choose range of articles to be affected by next command"
+msgstr	"Guhitamo Urutonde Bya Kuri ku Komeza>> Komandi:"
+
+#: src/lang.c:321
+#, fuzzy
+msgid	"escape from command prompt"
+msgstr	"Bivuye Komandi: Urwinjiriro"
+
+#: src/lang.c:322
+#, fuzzy
+msgid	"edit filter file"
+msgstr	"Guhindura Muyunguruzi... IDOSIYE"
+
+#: src/lang.c:323
+#, fuzzy
+msgid	"get help"
+msgstr	"Kubona Ifashayobora"
+
+#: src/lang.c:324
+#, fuzzy
+msgid	"display last article viewed"
+msgstr	"Kugaragaza Iheruka Ingingo"
+
+#: src/lang.c:325
+#, fuzzy
+msgid	"down one line"
+msgstr	"Hasi Umurongo"
+
+#: src/lang.c:326
+#, fuzzy
+msgid	"up one line"
+msgstr	"Hejuru Umurongo"
+
+#: src/lang.c:327
+#, fuzzy
+msgid	"go to article chosen by Message-ID"
+msgstr	"Gyayo Kuri Ingingo ku"
+
+#: src/lang.c:328
+#, fuzzy
+msgid	"mail article/thread/hot/pattern/tagged articles to someone"
+msgstr	"Ubutumwa Ingingo Urudodo Ishusho Kuri"
+
+#: src/lang.c:329
+#, fuzzy
+msgid	"menu of configurable options"
+msgstr	"Ibikubiyemo Bya Amahitamo"
+
+#: src/lang.c:330
+#, fuzzy
+msgid	"down one page"
+msgstr	"Hasi Ipaji"
+
+#: src/lang.c:331
+#, fuzzy
+msgid	"up one page"
+msgstr	"Hejuru Ipaji"
+
+#: src/lang.c:332
+#, fuzzy
+msgid	"post (write) article to current group"
+msgstr	"Iposita Kwandika Ingingo Kuri KIGEZWEHO Itsinda"
+
+#: src/lang.c:333
+#, fuzzy
+msgid	"post postponed articles"
+msgstr	"Iposita"
+
+#: src/lang.c:334
+#, fuzzy
+msgid	"list articles posted by you (from posted file)"
+msgstr	"Urutonde ku Bivuye IDOSIYE"
+
+#: src/lang.c:335
+#, fuzzy
+msgid	"return to previous menu"
+msgstr	"Garuka Kuri Ibanjirije Ibikubiyemo"
+
+#: src/lang.c:336
+#, fuzzy
+msgid	"quit tin immediately"
+msgstr	"Kuvamo Ako kanya"
+
+#: src/lang.c:337
+#, fuzzy
+msgid	"redraw page"
+msgstr	"Kongera Gushushanya Ipaji"
+
+#: src/lang.c:338
+#, fuzzy
+msgid	"save article/thread/hot/pattern/tagged articles to file"
+msgstr	"Kubika Ingingo Urudodo Ishusho Kuri IDOSIYE"
+
+#: src/lang.c:339
+#, fuzzy
+msgid	"save marked articles automatically without user prompts"
+msgstr	"Kubika cy/ byagarajwe ku buryo bwikora Ukoresha:"
+
+#: src/lang.c:340
+#, fuzzy
+msgid	"scroll the screen one line down"
+msgstr	"i Mugaragaza Umurongo Hasi"
+
+#: src/lang.c:341
+#, fuzzy
+msgid	"scroll the screen one line up"
+msgstr	"i Mugaragaza Umurongo Hejuru"
+
+#: src/lang.c:342
+#, fuzzy
+msgid	"search for articles by author backwards"
+msgstr	"Gushaka kugirango ku Umwanditsi Inyuma"
+
+#: src/lang.c:343
+#, fuzzy
+msgid	"search for articles by author forwards"
+msgstr	"Gushaka kugirango ku Umwanditsi"
+
+#: src/lang.c:344
+#, fuzzy
+msgid	"search all articles for a given string (this may take some time)"
+msgstr	"Gushaka Byose kugirango a Ikurikiranyanyuguti iyi Gicurasi Igihe"
+
+#: src/lang.c:345
+#, fuzzy
+msgid	" \t  (searches are case-insensitive and wrap around to all articles)"
+msgstr	"(Na Gufunika Kuri Byose"
+
+#: src/lang.c:346
+#, fuzzy
+msgid	"search for articles by Subject line backwards"
+msgstr	"Gushaka kugirango ku Umurongo Inyuma"
+
+#: src/lang.c:347
+#, fuzzy
+msgid	"search for articles by Subject line forwards"
+msgstr	"Gushaka kugirango ku Umurongo"
+
+#: src/lang.c:348
+#, fuzzy
+msgid	"repeat last search"
+msgstr	"Gusubiramo Iheruka Gushaka"
+
+#: src/lang.c:349
+#, fuzzy
+msgid	"tag current article for reposting/mailing/piping/printing/saving"
+msgstr	"Itagi: KIGEZWEHO Ingingo kugirango Icapa... Mu kubika"
+
+#: src/lang.c:350
+#, fuzzy
+msgid	"toggle info message in last line (subject/description)"
+msgstr	"Mukomatanya Ibisobanuro Ubutumwa in Iheruka Umurongo Ikivugwaho "
+	"Isobanuramiterere"
+
+#: src/lang.c:351
+#, fuzzy
+msgid	"toggle inverse video"
+msgstr	"Mukomatanya Videwo..."
+
+#: src/lang.c:352
+#, fuzzy
+msgid	"toggle mini help menu display"
+msgstr	"Mukomatanya Ifashayobora Ibikubiyemo Kugaragaza"
+
+#: src/lang.c:353
+#, fuzzy
+msgid	"cycle the display of authors email address, real name, both or neither"
+msgstr	"Uruziga i Kugaragaza Bya Abahanzi imeli Aderesi Izina: Byombi Cyangwa"
+
+#: src/lang.c:354
+#, fuzzy
+msgid	"show version information"
+msgstr	"Garagaza Verisiyo Ibisobanuro"
+
+#: src/lang.c:355
+#, fuzzy
+msgid	"mark all articles as read and return to group selection menu"
+msgstr	"Ikimenyetso Byose Nka Gusoma Na Garuka Kuri Itsinda Ihitamo Ibikubiyemo"
+
+#: src/lang.c:356
+#, fuzzy
+msgid	"mark all articles as read and enter next group with unread articles"
+msgstr	"Ikimenyetso Byose Nka Gusoma Na Injiza Komeza>> Itsinda Na: Bidasomye"
+
+#: src/lang.c:357
+#, fuzzy
+msgid	"choose first thread in list"
+msgstr	"Guhitamo Itangira Urudodo in Urutonde"
+
+#: src/lang.c:358
+#, fuzzy
+msgid	"choose last thread in list"
+msgstr	"Guhitamo Iheruka Urudodo in Urutonde"
+
+#: src/lang.c:359
+#, fuzzy
+msgid	"list articles within current thread (bring up Thread sub-menu)"
+msgstr	"Urutonde muri KIGEZWEHO Urudodo Hejuru Ibikubiyemo"
+
+#: src/lang.c:360
+#, fuzzy
+msgid	"mark article as unread"
+msgstr	"Ikimenyetso Ingingo Nka Bidasomye"
+
+#: src/lang.c:361
+#, fuzzy
+msgid	"mark current thread or tagged threads as read"
+msgstr	"Ikimenyetso KIGEZWEHO Urudodo Cyangwa Nka Gusoma"
+
+#: src/lang.c:362
+#, fuzzy
+msgid	"mark thread as unread"
+msgstr	"Ikimenyetso Urudodo Nka Bidasomye"
+
+#: src/lang.c:363
+#, fuzzy
+msgid	"toggle display of all/selected articles"
+msgstr	"Mukomatanya Kugaragaza Bya Byose Byahiswemo"
+
+#: src/lang.c:364
+#, fuzzy
+msgid	"display next group"
+msgstr	"Kugaragaza Komeza>> Itsinda"
+
+#: src/lang.c:365
+#, fuzzy
+msgid	"display previous group"
+msgstr	"Kugaragaza Ibanjirije Itsinda"
+
+#: src/lang.c:366
+#, fuzzy
+msgid	"toggle all selections (all articles)"
+msgstr	"Mukomatanya Byose Byose"
+
+#: src/lang.c:367
+#, fuzzy
+msgid	"select group (make \"hot\")"
+msgstr	"Guhitamo Itsinda Ubwoko"
+
+#: src/lang.c:368
+#, fuzzy
+msgid	"select thread"
+msgstr	"Guhitamo Urudodo"
+
+#: src/lang.c:369
+#, fuzzy
+msgid	"select threads if at least one unread article is selected"
+msgstr	"Guhitamo NIBA ku Bidasomye Ingingo ni Byahiswemo"
+
+#: src/lang.c:370
+#, fuzzy
+msgid	"select threads that match user specified pattern"
+msgstr	"Guhitamo BIHUYE Ukoresha: Ishusho"
+
+#: src/lang.c:371
+#, fuzzy
+msgid	"tag all parts of current multipart-message in order"
+msgstr	"Itagi: Byose Bya KIGEZWEHO Ubutumwa in Itondekanya"
+
+#: src/lang.c:372
+#, fuzzy
+msgid	"0 - 9\t  choose thread by number"
+msgstr	"0 Guhitamo Urudodo ku Umubare"
+
+#: src/lang.c:373
+#, fuzzy
+msgid	"toggle limit number of articles to get, and reload"
+msgstr	"Mukomatanya Umubare Bya Kuri Kubona Na Kongera Gutangiza"
+
+#: src/lang.c:374
+#, fuzzy
+msgid	"toggle display of all/unread articles"
+msgstr	"Mukomatanya Kugaragaza Bya Byose Bidasomye"
+
+#: src/lang.c:375
+#, fuzzy
+msgid	"toggle selection of thread"
+msgstr	"Mukomatanya Ihitamo Bya Urudodo"
+
+#: src/lang.c:376
+#, fuzzy
+msgid	"cycle through threading options available"
+msgstr	"Uruziga Gihinguranya Amahitamo Bihari"
+
+#: src/lang.c:377
+#, fuzzy
+msgid	"undo all selections (all articles)"
+msgstr	"Isubiranyuma Byose Byose"
+
+#: src/lang.c:378
+#, fuzzy
+msgid	"untag all tagged threads"
+msgstr	"Byose"
+
+#: src/lang.c:379
+#, fuzzy
+msgid	"mark all articles in group as read"
+msgstr	"Ikimenyetso Byose in Itsinda Nka Gusoma"
+
+#: src/lang.c:380
+#, fuzzy
+msgid	"mark all articles in group as read and move to next unread group"
+msgstr	"Ikimenyetso Byose in Itsinda Nka Gusoma Na Kwimura Kuri Komeza>> Bidasomye "
+	"Itsinda"
+
+#: src/lang.c:381
+#, fuzzy
+msgid	"choose first group in list"
+msgstr	"Guhitamo Itangira Itsinda in Urutonde"
+
+#: src/lang.c:382
+#, fuzzy
+msgid	"choose group by name"
+msgstr	"Guhitamo Itsinda ku Izina:"
+
+#: src/lang.c:383
+#, fuzzy
+msgid	"0 - 9\t  choose group by number"
+msgstr	"0 Guhitamo Itsinda ku Umubare"
+
+#: src/lang.c:384
+#, fuzzy
+msgid	"choose range of groups to be affected by next command"
+msgstr	"Guhitamo Urutonde Bya Amatsinda Kuri ku Komeza>> Komandi:"
+
+#: src/lang.c:385
+#, fuzzy
+msgid	"choose last group in list"
+msgstr	"Guhitamo Iheruka Itsinda in Urutonde"
+
+#: src/lang.c:386
+#, fuzzy
+msgid	"mark all articles in chosen group unread"
+msgstr	"Ikimenyetso Byose in Itsinda Bidasomye"
+
+#: src/lang.c:387
+#, fuzzy
+msgid	"move chosen group within list"
+msgstr	"Kwimura Itsinda muri Urutonde"
+
+#: src/lang.c:388
+#, fuzzy
+msgid	"choose next group with unread news"
+msgstr	"Guhitamo Komeza>> Itsinda Na: Bidasomye Amakuru"
+
+#: src/lang.c:389 src/lang.c:1194
+#, fuzzy
+msgid	"quit"
+msgstr	"Kuvamo"
+
+#: src/lang.c:390
+#, fuzzy
+msgid	"quit without saving configuration changes"
+msgstr	"Kuvamo Mu kubika Iboneza Amahinduka"
+
+#: src/lang.c:391
+#, fuzzy
+msgid	"read chosen group"
+msgstr	"Gusoma Itsinda"
+
+#: src/lang.c:392
+#, fuzzy
+msgid	"reset .newsrc (all available articles in groups marked unread)"
+msgstr	"Kugarura."
+
+#: src/lang.c:393
+#, fuzzy
+msgid	"search backwards for a group name"
+msgstr	"Gushaka Inyuma kugirango a Itsinda Izina:"
+
+#: src/lang.c:394
+#, fuzzy
+msgid	" \t  (all searches are case-insensitive and wrap around)"
+msgstr	"(Byose Na Gufunika"
+
+#: src/lang.c:395
+#, fuzzy
+msgid	"search forwards for a group name"
+msgstr	"Gushaka kugirango a Itsinda Izina:"
+
+#: src/lang.c:396
+#, fuzzy
+msgid	"subscribe to chosen group"
+msgstr	"Kwiyandikisha Kuri Itsinda"
+
+#: src/lang.c:397
+#, fuzzy
+msgid	"subscribe to groups that match pattern"
+msgstr	"Kwiyandikisha Kuri Amatsinda BIHUYE Ishusho"
+
+#: src/lang.c:398
+#, fuzzy
+msgid	"reread active file to check for any new news"
+msgstr	"Gikora IDOSIYE Kuri Kugenzura... kugirango Gishya Amakuru"
+
+#: src/lang.c:399
+#, fuzzy
+msgid	"toggle display of group name only or group name plus description"
+msgstr	"Mukomatanya Kugaragaza Bya Itsinda Izina: Cyangwa Itsinda Izina: Guteranya "
+	"Isobanuramiterere"
+
+#: src/lang.c:400
+#, fuzzy
+msgid	"toggle display to show all/unread subscribed groups"
+msgstr	"Mukomatanya Kugaragaza Kuri Garagaza Byose Bidasomye yanditswe/ byemewe "
+	"Amatsinda"
+
+#: src/lang.c:401
+#, fuzzy
+msgid	"unsubscribe from chosen group"
+msgstr	"Kwivana aho wiyandikishe Bivuye Itsinda"
+
+#: src/lang.c:402
+#, fuzzy
+msgid	"unsubscribe from groups that match pattern"
+msgstr	"Kwivana aho wiyandikishe Bivuye Amatsinda BIHUYE Ishusho"
+
+#: src/lang.c:403
+#, fuzzy
+msgid	"sort the list of groups"
+msgstr	"Ishungura i Urutonde Bya Amatsinda"
+
+#: src/lang.c:404
+#, fuzzy
+msgid	"toggle display to show all/subscribed groups"
+msgstr	"Mukomatanya Kugaragaza Kuri Garagaza Byose yanditswe/ byemewe Amatsinda"
+
+#: src/lang.c:405
+#, fuzzy
+msgid	"0 - 9\t  choose article by number"
+msgstr	"0 Guhitamo Ingingo ku Umubare"
+
+#: src/lang.c:406
+#, fuzzy
+msgid	"mark thread as read and return to group index page"
+msgstr	"Ikimenyetso Urudodo Nka Gusoma Na Garuka Kuri Itsinda Umubarendanga Ipaji"
+
+#: src/lang.c:407
+#, fuzzy
+msgid	"mark thread as read and enter next unread thread or group"
+msgstr	"Ikimenyetso Urudodo Nka Gusoma Na Injiza Komeza>> Bidasomye Urudodo Cyangwa "
+	"Itsinda"
+
+#: src/lang.c:408
+#, fuzzy
+msgid	"choose first article in list"
+msgstr	"Guhitamo Itangira Ingingo in Urutonde"
+
+#: src/lang.c:409
+#, fuzzy
+msgid	"choose last article in list"
+msgstr	"Guhitamo Iheruka Ingingo in Urutonde"
+
+#: src/lang.c:410
+#, fuzzy
+msgid	"mark article or tagged articles as read and move cursor to next unread article"
+msgstr	"Ikimenyetso Ingingo Cyangwa Nka Gusoma Na Kwimura indanga Kuri Komeza>> "
+	"Bidasomye Ingingo"
+
+#: src/lang.c:411
+#, fuzzy
+msgid	"read chosen article"
+msgstr	"Gusoma Ingingo"
+
+#: src/lang.c:412
+msgid	"Display properties\n"
+	"------------------"
+msgstr	""
+
+#: src/lang.c:413
+msgid	"Miscellaneous\n"
+	"-------------"
+msgstr	""
+
+#: src/lang.c:414
+msgid	"Moving around\n"
+	"-------------"
+msgstr	""
+
+#: src/lang.c:415
+#, fuzzy
+msgid	"Group/thread/article operations\n"
+	"-------------------------------"
+msgstr	"Urudodo Ingingo"
+
+#: src/lang.c:417
+msgid	"Group Level Commands"
+msgstr	""
+
+#: src/lang.c:418
+#, fuzzy
+msgid	"Kill filter added"
+msgstr	"Muyunguruzi... Kyongewe"
+
+#: src/lang.c:419
+#, fuzzy
+msgid	"Auto-selection filter added"
+msgstr	"Ihitamo Muyunguruzi... Kyongewe"
+
+#: src/lang.c:420
+msgid	"All parts tagged"
+msgstr	""
+
+#: src/lang.c:421
+#, fuzzy
+msgid	"Storing article for later posting"
+msgstr	"Ingingo kugirango"
+
+#: src/lang.c:422
+#, fuzzy
+msgid	"Please enter a valid character"
+msgstr	"Injiza a Byemewe Inyuguti"
+
+#: src/lang.c:423
+#, c-format
+msgid	"Missing part #%d"
+msgstr	""
+
+#: src/lang.c:424
+msgid	"*** No postponed articles ***"
+msgstr	""
+
+#: src/lang.c:425
+#, fuzzy
+msgid	"Not a multi-part message"
+msgstr	"a Ubutumwa"
+
+#: src/lang.c:426
+#, fuzzy
+msgid	"You are not subscribed to this group"
+msgstr	"OYA yanditswe/ byemewe Kuri iyi Itsinda"
+
+#: src/lang.c:427
+#, fuzzy
+msgid	"No previous expression"
+msgstr	"Ibanjirije imvugo"
+
+#: src/lang.c:428
+#, fuzzy
+msgid	"Operation disabled in no-overwrite mode"
+msgstr	"Yahagaritswe in Oya Guhindura Ubwoko"
+
+#. TODO: replace hardcoded key-name in txt_info_postponed
+#: src/lang.c:430
+#, fuzzy, c-format
+msgid	"%d postponed %s, reuse with ^O...\n"
+msgstr	"%dNa:"
+
+#: src/lang.c:431
+#, fuzzy
+msgid	"X-Conversion-Note: multipart/alternative contents have been removed.\n"
+	"  To get the whole article, turn alternative handling OFF in the Option Menu\n"
+msgstr	"Ibigize Cyavanyweho Kubona i Ingingo in i"
+
+#: src/lang.c:433
+#, fuzzy, c-format
+msgid	"Save filename for %s/%s is a mailbox. Attachment not saved"
+msgstr	"Kubika Izina ry'idosiye: kugirango ni a OYA"
+
+#: src/lang.c:434
+#, fuzzy
+msgid	"TeX2Iso encoded article"
+msgstr	"Ingingo"
+
+#: src/lang.c:435
+msgid	"incomplete "
+msgstr	""
+
+#. TODO: replace hardcoded key-names
+#: src/lang.c:437
+#, fuzzy, c-format
+msgid	"\n"
+	"Welcome to %s, a full screen threaded Netnews reader. It can read news "
+	"locally\n"
+	"(ie. <spool>/news) or remotely (-r option)  from a NNTP (Network News "
+	"Transport\n"
+	"Protocol) server. -h lists the available command line options.\n"
+	"\n"
+	"%s  has four newsreading levels, the newsgroup selection page, the group "
+	"index\n"
+	"page, the thread listing page and the article viewer. Help is available at "
+	"each\n"
+	"level by pressing the 'h' command.\n"
+	"\n"
+	"Move up/down by using the terminal arrow keys or 'j' and 'k'.  Use PgUp/PgDn "
+	"or\n"
+	"Ctrl-U and Ctrl-D to page up/down. Enter a newsgroup by pressing RETURN/TAB.\n"
+	"\n"
+	"Articles, threads, tagged articles or articles matching a pattern can be "
+	"mailed\n"
+	"('m' command), printed ('o' command), saved ('s' command), piped ('|' "
+	"command).\n"
+	"Use  the 'w' command  to post a  news article,  the 'f'/'F' commands  to post "
+	"a\n"
+	"follow-up to  an existing  news article  and the 'r'/'R' commands  to reply "
+	"via\n"
+	"mail to an  existing news article author.  The 'M' command allows the "
+	"operation\n"
+	"of %s to be configured via a menu.\n"
+	"\n"
+	"For more information read the manual page, README, INSTALL, TODO and FTP "
+	"files.\n"
+	"Please send bug-reports/comments to %s with the 'R' command.\n"
+msgstr	"Kuri a Mugaragaza Gusoma Amakuru Amakuru Cyangwa R Ihitamo Bivuye a Seriveri "
+	"h Intonde i Bihari Komandi: Umurongo Amahitamo Intera i Urubuga rw'amakuru "
+	"Ihitamo Ipaji i Itsinda i Urudodo Ipaji Na i Ingingo ni Bihari ku ku i "
+	"Komandi: Hejuru Hasi ku ikoresha i Akambi Utubuto Cyangwa Na U Na Kuri Ipaji "
+	"Hejuru Hasi a Urubuga rw'amakuru ku Cyangwa a Ishusho Komandi: Byacapwe "
+	"Komandi: Komandi: Komandi: i Komandi: Kuri Iposita a Amakuru Ingingo i "
+	"Amabwiriza Kuri Iposita Hejuru Kuri Amakuru Ingingo Na i Amabwiriza Kuri "
+	"Subiza Kuri Amakuru Ingingo Umwanditsi Komandi: i Kuri Biturutse a "
+	"Ibikubiyemo Birenzeho Ibisobanuro Gusoma i Bikorwa Ipaji Na Idosiye Kohereza "
+	"Raporo Ibisobanuro Kuri Na: i Komandi:"
+
+#: src/lang.c:453
+#, fuzzy, c-format
+msgid	"Invalid  From: %s  line. Read the INSTALL file again."
+msgstr	"Umurongo i IDOSIYE"
+
+#: src/lang.c:454
+#, fuzzy, c-format
+msgid	"Invalid  Sender:-header %s"
+msgstr	"Umutwempangano"
+
+#: src/lang.c:455
+#, fuzzy
+msgid	"Inverse video disabled"
+msgstr	"Videwo... Yahagaritswe"
+
+#: src/lang.c:456
+#, fuzzy
+msgid	"Inverse video enabled"
+msgstr	"Videwo... Bikora"
+
+#: src/lang.c:458
+#, fuzzy, c-format
+msgid	"Missing definition for %s\n"
+msgstr	"Insobanuro kugirango"
+
+#: src/lang.c:459
+#, fuzzy, c-format
+msgid	"Invalid key definition '%s'\n"
+msgstr	"Urufunguzo Insobanuro"
+
+#: src/lang.c:460
+#, c-format
+msgid	"Invalid keyname '%s'\n"
+msgstr	""
+
+#: src/lang.c:461
+#, fuzzy, c-format
+msgid	"Keymap file was upgraded to version %s\n"
+msgstr	"IDOSIYE Kuri Verisiyo"
+
+#: src/lang.c:462
+#, c-format
+msgid	"Kill From:     [%s] (y/n): "
+msgstr	""
+
+#: src/lang.c:463
+msgid	"Kill Lines: (</>num): "
+msgstr	""
+
+#: src/lang.c:464
+msgid	"Kill Article Menu"
+msgstr	""
+
+#: src/lang.c:465
+#, c-format
+msgid	"Kill Msg-Id:   [%s] (f/l/o/n): "
+msgstr	""
+
+#: src/lang.c:466
+#, fuzzy
+msgid	"Kill pattern scope  : "
+msgstr	"Ishusho Ingano:"
+
+#: src/lang.c:467
+#, c-format
+msgid	"Kill Subject:  [%s] (y/n): "
+msgstr	""
+
+#: src/lang.c:468
+#, fuzzy
+msgid	"Kill text pattern   : "
+msgstr	"Umwandiko Ishusho"
+
+#: src/lang.c:469
+#, fuzzy
+msgid	"Kill time in days   : "
+msgstr	"Igihe in Iminsi"
+
+#: src/lang.c:471
+msgid	"Last"
+msgstr	"Iheruka"
+
+#: src/lang.c:472
+msgid	"-- Last response --"
+msgstr	""
+
+#: src/lang.c:473
+#, fuzzy, c-format
+msgid	"Lines %s  "
+msgstr	"Imirongo."
+
+#: src/lang.c:475
+#, fuzzy
+msgid	"Message-ID: line              "
+msgstr	"Umurongo"
+
+# sfx2/source\appl\app.src:STR_MAIL.text
+#: src/lang.c:476
+msgid	"Mail"
+msgstr	"Ubutumwa"
+
+#: src/lang.c:477
+msgid	"mailbox "
+msgstr	""
+
+#: src/lang.c:478
+#, fuzzy, c-format
+msgid	"Mail article(s) to [%.*s]> "
+msgstr	"Ingingo S Kuri S"
+
+#: src/lang.c:479
+#, fuzzy, c-format
+msgid	"Mailing log to %s\n"
+msgstr	"LOG Kuri %s\n"
+
+#: src/lang.c:480
+#, fuzzy
+msgid	"Mail bug report..."
+msgstr	"Icyegeranyo"
+
+#: src/lang.c:481
+#, fuzzy, c-format
+msgid	"Mail BUG REPORT to %s?"
+msgstr	"Kuri"
+
+#: src/lang.c:482
+msgid	"Mailed"
+msgstr	""
+
+#: src/lang.c:483
+#, fuzzy, c-format
+msgid	"Mailing to %s..."
+msgstr	"Kuri %s"
+
+#: src/lang.c:484
+#, fuzzy
+msgid	"# [Mail/Save] active file. Format is like news active file:\n"
+	"#   groupname  max.artnum  min.artnum  /dir\n"
+	"# The 4th field is the basedir (ie. ~/Mail or ~/News)\n"
+	"#\n"
+msgstr	"#[Kubika Gikora IDOSIYE ni nka Amakuru Gikora IDOSIYE KININI GITO Umwanya ni "
+	"i Cyangwa"
+
+#: src/lang.c:487
+#, fuzzy, c-format
+msgid	"%s marked as unread"
+msgstr	"%scy/ byagarajwe Nka Bidasomye"
+
+#: src/lang.c:488
+#, fuzzy, c-format
+msgid	"Marked %d of %d tagged %s as read"
+msgstr	"Bya Nka Gusoma"
+
+#: src/lang.c:489
+#, fuzzy, c-format
+msgid	"Mark all articles as read%s?"
+msgstr	"Byose Nka Gusoma"
+
+#: src/lang.c:490
+#, fuzzy, c-format
+msgid	"Mark %s=tagged articles, %s=current article, %s=quit: "
+msgstr	"KIGEZWEHO Ingingo Kuvamo"
+
+#: src/lang.c:491
+#, fuzzy, c-format
+msgid	"Mark group %s as read?"
+msgstr	"Itsinda Nka Gusoma"
+
+#: src/lang.c:492
+#, fuzzy, c-format
+msgid	"Mark thread as read%s?"
+msgstr	"Urudodo Nka Gusoma"
+
+#: src/lang.c:493
+#, fuzzy, c-format
+msgid	"Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
+msgstr	"KIGEZWEHO Urudodo Kuvamo"
+
+#: src/lang.c:494
+#, fuzzy, c-format
+msgid	"Matching %s groups..."
+msgstr	"Amatsinda"
+
+#: src/lang.c:495 src/lang.c:499
+#, fuzzy, c-format
+msgid	"<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
+msgstr	"<N Gushyiraho KIGEZWEHO Kuri N Komeza>> Bidasomye Gushaka Ishusho Guhitamo"
+
+#: src/lang.c:496
+#, fuzzy, c-format
+msgid	"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %s=list "
+	"thread"
+msgstr	"%s=Umwanditsi Gushaka Umurongo Hasi Umurongo Hejuru Ikimenyetso Gusoma "
+	"Urutonde Urudodo"
+
+#: src/lang.c:497
+#, fuzzy, c-format
+msgid	"%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
+msgstr	"%s=Umurongo Hejuru Umurongo Hasi Ipaji Hejuru Ipaji Hasi Hejuru: Hasi:"
+
+#: src/lang.c:498
+#, fuzzy, c-format
+msgid	"%s=search forwards; %s=search backwards; %s=quit"
+msgstr	"%s=Gushaka Gushaka Inyuma Kuvamo"
+
+#: src/lang.c:500
+#, fuzzy, c-format
+msgid	"%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
+msgstr	"%s=Umwanditsi Gushaka Umubiri Gushaka Ikimenyetso Gusoma"
+
+#: src/lang.c:501
+#, fuzzy, c-format
+msgid	"<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
+msgstr	"<N Gushyiraho KIGEZWEHO Kuri N Komeza>> Bidasomye Gushaka Ishusho"
+
+#: src/lang.c:502
+#, fuzzy, c-format
+msgid	"%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
+msgstr	"%s=Umurongo Hasi Umurongo Hejuru Ifashayobora Kwimura Kuvamo Mukomatanya "
+	"Byose Bidasomye"
+
+#: src/lang.c:503
+#, fuzzy, c-format
+msgid	"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/out"
+msgstr	"%s=Kwiyandikisha Ishusho Kwivana aho wiyandikishe Ishusho in Inyuma"
+
+#: src/lang.c:504
+#, fuzzy, c-format
+msgid	"<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
+msgstr	"<N Gushyiraho KIGEZWEHO Kuri N Komeza>> Bidasomye Kugaragaza Mukomatanya"
+
+#: src/lang.c:505
+#, fuzzy, c-format
+msgid	"%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
+msgstr	"%s=Ifashayobora Umurongo Hasi Umurongo Hejuru Kuvamo Itagi: Ikimenyetso "
+	"Bidasomye"
+
+#: src/lang.c:506
+msgid	"--More--"
+msgstr	""
+
+#: src/lang.c:507
+#, c-format
+msgid	"Moving %s..."
+msgstr	""
+
+#: src/lang.c:509
+#, fuzzy
+msgid	", name: "
+msgstr	",IZINA! "
+
+#: src/lang.c:510
+#, fuzzy, c-format
+msgid	"Goto newsgroup [%s]> "
+msgstr	"Urubuga rw'amakuru"
+
+# svtools/source\misc\mediatyp.src:STR_SVT_MIMETYPE_CNT_BBBOX.text
+#: src/lang.c:511
+#, fuzzy
+msgid	"newsgroups"
+msgstr	"Imbuga z'amakuru"
+
+#: src/lang.c:512
+#, c-format
+msgid	"Position %s in group list (1,2,..,$) [%d]> "
+msgstr	""
+
+#: src/lang.c:513
+#, fuzzy
+msgid	"newsgroup"
+msgstr	"Urubuga rw'amakuru"
+
+#: src/lang.c:514
+#, fuzzy
+msgid	"Try and save newsrc file again?"
+msgstr	"Na Kubika IDOSIYE"
+
+#: src/lang.c:515
+#, fuzzy
+msgid	"Warning: No newsgroups were written to your newsrc file. Save aborted."
+msgstr	"Imbuga z'amakuru Kuri IDOSIYE Kubika"
+
+#: src/lang.c:516
+#, fuzzy
+msgid	"newsrc file saved successfully.\n"
+msgstr	"IDOSIYE"
+
+#: src/lang.c:517
+msgid	"-- Next response --"
+msgstr	""
+
+#: src/lang.c:518
+#, fuzzy, c-format
+msgid	"NNTP authorization password not found for %s"
+msgstr	"Ijambobanga... OYA Byabonetse kugirango"
+
+#: src/lang.c:519
+#, fuzzy
+msgid	"No  "
+msgstr	"Oya"
+
+#: src/lang.c:520
+msgid	"*** No articles ***"
+msgstr	""
+
+#: src/lang.c:521
+msgid	"No articles have been posted"
+msgstr	""
+
+#: src/lang.c:522
+#, fuzzy
+msgid	"*** No description ***"
+msgstr	"*** Isobanuramiterere ***"
+
+#: src/lang.c:523
+#, fuzzy
+msgid	"No filename"
+msgstr	"Izina ry'idosiye:"
+
+#: src/lang.c:524
+#, fuzzy
+msgid	"No group"
+msgstr	"Itsinda"
+
+#: src/lang.c:525
+#, fuzzy
+msgid	"*** No groups ***"
+msgstr	"*** Amatsinda ***"
+
+#: src/lang.c:526
+#, fuzzy
+msgid	"No more groups to read"
+msgstr	"Birenzeho Amatsinda Kuri Gusoma"
+
+#: src/lang.c:527
+#, fuzzy
+msgid	"No last message"
+msgstr	"Iheruka Ubutumwa"
+
+#: src/lang.c:528
+#, fuzzy
+msgid	"No mail address"
+msgstr	"Ubutumwa Aderesi"
+
+#: src/lang.c:529
+#, fuzzy
+msgid	"No articles marked for saving"
+msgstr	"cy/ byagarajwe kugirango Mu kubika"
+
+#: src/lang.c:530
+#, fuzzy
+msgid	"No match"
+msgstr	"BIHUYE"
+
+#: src/lang.c:531
+#, fuzzy
+msgid	"No more groups"
+msgstr	"Birenzeho Amatsinda"
+
+#: src/lang.c:532
+#, fuzzy
+msgid	"No newsgroups"
+msgstr	"Imbuga z'amakuru"
+
+#: src/lang.c:533
+#, fuzzy
+msgid	"No next unread article"
+msgstr	"Komeza>> Bidasomye Ingingo"
+
+#: src/lang.c:534
+#, fuzzy
+msgid	"No previous group"
+msgstr	"Ibanjirije Itsinda"
+
+#: src/lang.c:535
+#, fuzzy
+msgid	"No previous unread article"
+msgstr	"Ibanjirije Bidasomye Ingingo"
+
+#: src/lang.c:536
+msgid	"No responses"
+msgstr	""
+
+#: src/lang.c:537
+#, fuzzy
+msgid	"No responses to list in current thread"
+msgstr	"Kuri Urutonde in KIGEZWEHO Urudodo"
+
+#: src/lang.c:538
+#, fuzzy
+msgid	"No search string"
+msgstr	"Gushaka Ikurikiranyanyuguti"
+
+#: src/lang.c:539
+msgid	"No subject"
+msgstr	"Nta kivugwaho"
+
+#: src/lang.c:541
+#, fuzzy, c-format
+msgid	"%s: Terminal must have clear to end-of-line (ce)\n"
+msgstr	"%s:Gusiba Kuri Impera Bya Umurongo"
+
+#: src/lang.c:542
+#, fuzzy, c-format
+msgid	"%s: Terminal must have clear to end-of-screen (cd)\n"
+msgstr	"%s:Gusiba Kuri Impera Bya Mugaragaza"
+
+#: src/lang.c:543
+#, c-format
+msgid	"%s: Terminal must have clearscreen (cl) capability\n"
+msgstr	""
+
+#: src/lang.c:544
+#, fuzzy, c-format
+msgid	"%s: Terminal must have cursor motion (cm)\n"
+msgstr	"%s:indanga cm"
+
+#: src/lang.c:545
+#, fuzzy, c-format
+msgid	"%s: TERM variable must be set to use screen capabilities\n"
+msgstr	"%s:IMPINDURAGACIRO Gushyiraho Kuri Gukoresha Mugaragaza"
+
+#: src/lang.c:547
+#, fuzzy, c-format
+msgid	"No viewer found for %s/%s\n"
+msgstr	"Byabonetse kugirango"
+
+#: src/lang.c:548
+#, fuzzy
+msgid	"Newsgroup does not exist on this server"
+msgstr	"OYA ku iyi Seriveri"
+
+#: src/lang.c:549
+#, fuzzy, c-format
+msgid	"Group %s not found in active file"
+msgstr	"OYA Byabonetse in Gikora IDOSIYE"
+
+#: src/lang.c:550
+#, fuzzy
+msgid	"c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
+msgstr	"C Gukoresha a Izina: Gukoresha D Q"
+
+#: src/lang.c:551
+#, fuzzy
+msgid	"use a)lternative name, use d)efault .newsrc, q)uit tin: "
+msgstr	"Gukoresha a Izina: Gukoresha D Q"
+
+#: src/lang.c:552
+#, c-format
+msgid	"# NNTP-server -> newsrc translation table and NNTP-server\n"
+	"# shortname list for %s %s\n"
+	"#\n"
+	"# the format of this file is\n"
+	"#   <FQDN of NNTP-server> <newsrc file> <shortname> ...\n"
+	"#\n"
+	"# if <newsrc file> is given without path, $HOME is assumed as its location\n"
+	"#\n"
+	"# examples:\n"
+	"#   news.tin.org  .newsrc-tin.org  tinorg\n"
+	"#   news.ka.nu    /tmp/nrc-nu      kanu    nu\n"
+	"#\n"
+msgstr	""
+
+#: src/lang.c:559
+msgid	"Only"
+msgstr	""
+
+#: src/lang.c:560
+#, fuzzy, c-format
+msgid	"Option not enabled. Recompile with %s."
+msgstr	"OYA Bikora Na:"
+
+#: src/lang.c:561
+msgid	"Options Menu"
+msgstr	""
+
+#: src/lang.c:564
+#, fuzzy, c-format
+msgid	"Error in regex: %s at pos. %d '%s'"
+msgstr	"in ku"
+
+#: src/lang.c:565
+#, fuzzy, c-format
+msgid	"Error in regex: pcre internal error %d"
+msgstr	"in By'imbere Ikosa"
+
+#: src/lang.c:566
+#, fuzzy, c-format
+msgid	"Error in regex: study - pcre internal error %s"
+msgstr	"in By'imbere Ikosa"
+
+#: src/lang.c:567
+msgid	"Post a followup..."
+msgstr	""
+
+#. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
+#: src/lang.c:569
+#, fuzzy
+msgid	"An error has occurred while posting the article. If you think that this\n"
+	"error is temporary or otherwise correctable, you can postpone the article\n"
+	"and pick it up again with ^O later.\n"
+msgstr	"Ikosa i Ingingo ni By'igihe gito Cyangwa i Hejuru Na:"
+
+#: src/lang.c:572
+#, fuzzy
+msgid	"Posted articles history"
+msgstr	"Urutonde"
+
+#: src/lang.c:573
+#, fuzzy, c-format
+msgid	"Post to newsgroup(s) [%s]> "
+msgstr	"Kuri Urubuga rw'amakuru S"
+
+#: src/lang.c:574
+#, fuzzy
+msgid	"-- post processing started --"
+msgstr	"--Iposita Inonosora--"
+
+#: src/lang.c:575
+#, fuzzy
+msgid	"-- post processing completed --"
+msgstr	"--Iposita Inonosora--"
+
+#: src/lang.c:576
+#, fuzzy, c-format
+msgid	"Post subject [%s]> "
+msgstr	"Ikivugwaho"
+
+#: src/lang.c:577
+#, fuzzy
+msgid	"# Summary of mailed/posted messages viewable by 'W' command from within tin.\n"
+msgstr	"# Bya Ubutumwa ku Komandi: Bivuye muri"
+
+#: src/lang.c:578
+#, fuzzy
+msgid	"Posting article..."
+msgstr	"Ingingo"
+
+#: src/lang.c:579
+#, c-format
+msgid	"Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
+msgstr	""
+
+#: src/lang.c:580
+#, c-format
+msgid	"Hot %s"
+msgstr	""
+
+#: src/lang.c:581
+#, c-format
+msgid	"Tagged %s"
+msgstr	""
+
+#: src/lang.c:582
+#, c-format
+msgid	"Untagged %s"
+msgstr	""
+
+#: src/lang.c:583
+#, fuzzy
+msgid	"Processing mail messages marked for deletion."
+msgstr	"Ubutumwa Ubutumwa cy/ byagarajwe kugirango Isibwa"
+
+#: src/lang.c:584
+#, fuzzy
+msgid	"Processing saved articles marked for deletion."
+msgstr	"cy/ byagarajwe kugirango Isibwa"
+
+#: src/lang.c:585
+#, fuzzy, c-format
+msgid	"Accept Followup-To? %s=post, %s=ignore, %s=quit: "
+msgstr	"Iposita Kwirengagiza Kuvamo"
+
+#: src/lang.c:586
+#, fuzzy
+msgid	"Article unchanged, abort mailing?"
+msgstr	"Kureka"
+
+#: src/lang.c:587
+#, fuzzy, c-format
+msgid	"Do you want to see postponed articles (%d)?"
+msgstr	"Kuri"
+
+#: src/lang.c:589
+#, fuzzy
+msgid	"Add quick kill filter?"
+msgstr	"Muyunguruzi..."
+
+#: src/lang.c:590
+#, fuzzy
+msgid	"Add quick selection filter?"
+msgstr	"Ihitamo Muyunguruzi..."
+
+#: src/lang.c:591
+#, fuzzy
+msgid	"Do you really want to quit?"
+msgstr	"Kuri Kuvamo"
+
+#: src/lang.c:592
+#, fuzzy, c-format
+msgid	"%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
+msgstr	"%s=Guhindura Kureka Ubutumwa Kuvamo Gusiba Kureka"
+
+#: src/lang.c:593
+#, fuzzy
+msgid	"You have tagged articles in this group - quit anyway?"
+msgstr	"in iyi Itsinda Kuvamo"
+
+#: src/lang.c:594
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=postpone: "
+msgstr	"%s=Kuvamo Guhindura"
+
+#: src/lang.c:595
+#, fuzzy, c-format
+msgid	"%s=quit %s=edit %s=save kill description: "
+msgstr	"%s=Kuvamo Guhindura Kubika Isobanuramiterere"
+
+#: src/lang.c:596
+#, fuzzy, c-format
+msgid	"%s=quit %s=edit %s=save select description: "
+msgstr	"%s=Kuvamo Guhindura Kubika Guhitamo Isobanuramiterere"
+
+#: src/lang.c:597
+#, fuzzy
+msgid	"Do you really want to quit without saving your configuration?"
+msgstr	"Kuri Kuvamo Mu kubika Iboneza"
+
+#: src/lang.c:600
+#, fuzzy
+msgid	"Invalid range - valid are '0-9.$' eg. 1-$"
+msgstr	"Urutonde Byemewe 0 9 1."
+
+#: src/lang.c:601
+#, fuzzy
+msgid	"Do you want to abort this operation?"
+msgstr	"Kuri Kureka iyi"
+
+#: src/lang.c:602
+#, fuzzy
+msgid	"Do you want to exit tin immediately?"
+msgstr	"Kuri Gusohoka Ako kanya"
+
+#: src/lang.c:603
+msgid	"Read response> "
+msgstr	""
+
+#: src/lang.c:604
+#, fuzzy
+msgid	"Reading ('q' to quit)..."
+msgstr	"Kuri Kuvamo"
+
+#: src/lang.c:605
+#, c-format
+msgid	"Reading %sarticles..."
+msgstr	""
+
+#: src/lang.c:606
+#, fuzzy, c-format
+msgid	"Reading %sattributes file...\n"
+msgstr	"IDOSIYE"
+
+#: src/lang.c:607
+#, fuzzy, c-format
+msgid	"Reading %sconfig file...\n"
+msgstr	"IDOSIYE"
+
+#: src/lang.c:608
+#, fuzzy
+msgid	"Reading filter file...\n"
+msgstr	"Muyunguruzi... IDOSIYE"
+
+#: src/lang.c:609
+#, fuzzy, c-format
+msgid	"Reading %s groups..."
+msgstr	"Amatsinda"
+
+#: src/lang.c:610
+#, fuzzy
+msgid	"Reading input history file...\n"
+msgstr	"Iyinjiza Urutonde IDOSIYE"
+
+#: src/lang.c:611
+#, fuzzy
+msgid	"Reading keymap file...\n"
+msgstr	"IDOSIYE"
+
+#: src/lang.c:612
+#, fuzzy
+msgid	"Reading groups from active file... "
+msgstr	"Amatsinda Bivuye Gikora IDOSIYE"
+
+#: src/lang.c:613
+#, fuzzy
+msgid	"Reading groups from newsrc file... "
+msgstr	"Amatsinda Bivuye IDOSIYE"
+
+#: src/lang.c:614
+#, fuzzy
+msgid	"Reading newsgroups file... "
+msgstr	"Imbuga z'amakuru IDOSIYE"
+
+#: src/lang.c:615
+#, fuzzy
+msgid	"Reading newsrc file..."
+msgstr	"IDOSIYE"
+
+#: src/lang.c:617
+#, c-format
+msgid	"(%d:%02d remaining)"
+msgstr	""
+
+#: src/lang.c:619
+#, fuzzy, c-format
+msgid	"Bogus group %s removed."
+msgstr	"Itsinda Cyavanyweho"
+
+#: src/lang.c:620
+#, fuzzy, c-format
+msgid	"Error: rename %s to %s"
+msgstr	"Guhindura izina Kuri"
+
+#: src/lang.c:621
+#, fuzzy
+msgid	"Reply to author..."
+msgstr	"Kuri Umwanditsi"
+
+#: src/lang.c:622
+msgid	"Repost"
+msgstr	""
+
+#: src/lang.c:623
+#, fuzzy
+msgid	"Reposting article..."
+msgstr	"Ingingo"
+
+#: src/lang.c:624
+#, fuzzy, c-format
+msgid	"Repost article(s) to group(s) [%s]> "
+msgstr	"Ingingo S Kuri Itsinda S"
+
+#: src/lang.c:625
+msgid	"Reset newsrc?"
+msgstr	""
+
+#: src/lang.c:626
+#, fuzzy
+msgid	"Responses have been directed to the following newsgroups"
+msgstr	"Kuri i Imbuga z'amakuru"
+
+#: src/lang.c:627
+#, fuzzy, c-format
+msgid	"Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
+msgstr	"Kuri Umuteguro Ubutumwa Iposita Kuvamo"
+
+#: src/lang.c:628
+#, fuzzy, c-format
+msgid	"RespNo %4d of %4d"
+msgstr	"Bya"
+
+#: src/lang.c:629
+#, fuzzy
+msgid	"Press <RETURN> to continue..."
+msgstr	"Kuri urifuzagukomeza"
+
+#: src/lang.c:631
+#, fuzzy, c-format
+msgid	"Select From    [%s] (y/n): "
+msgstr	"Y N"
+
+#: src/lang.c:632
+msgid	"Select Lines: (</>num): "
+msgstr	""
+
+#: src/lang.c:633
+#, fuzzy
+msgid	"Auto-select Article Menu"
+msgstr	"Guhitamo"
+
+#: src/lang.c:634
+#, fuzzy, c-format
+msgid	"Select Msg-Id  [%s] (f/l/o/n): "
+msgstr	"F L o N"
+
+#: src/lang.c:635
+#, fuzzy
+msgid	"Select pattern scope: "
+msgstr	"Ishusho Ingano:"
+
+#: src/lang.c:636
+#, fuzzy, c-format
+msgid	"Select Subject [%s] (y/n): "
+msgstr	"Y N"
+
+#: src/lang.c:637
+#, fuzzy
+msgid	"Select text pattern : "
+msgstr	"Umwandiko Ishusho"
+
+#: src/lang.c:638
+#, fuzzy
+msgid	"Select time in days   : "
+msgstr	"Igihe in Iminsi"
+
+#: src/lang.c:639
+#, fuzzy, c-format
+msgid	"# %s server configuration file\n"
+	"# This file was automatically saved by %s %s %s (\"%s\")\n"
+	"#\n"
+	"# Do not edit while %s is running, since all your changes to this file\n"
+	"# will be overwritten when you leave %s.\n"
+	"# Do not edit at all if you don't know what you do.\n"
+	"############################################################################\n"
+	"\n"
+msgstr	"#%sSeriveri Iboneza IDOSIYE ku buryo bwikora ku OYA Guhindura ni guhera Byose "
+	"Amahinduka Kuri iyi Ryari: OYA Guhindura ku Byose NIBA"
+
+#: src/lang.c:645
+#, fuzzy
+msgid	"Showing unread groups only"
+msgstr	"Bidasomye Amatsinda"
+
+#: src/lang.c:646
+#, fuzzy
+msgid	"Subject: line (ignore case)   "
+msgstr	"Umurongo Kwirengagiza"
+
+#: src/lang.c:647
+#, fuzzy
+msgid	"Subject: line (case sensitive)"
+msgstr	"Umurongo"
+
+#: src/lang.c:648
+msgid	"Save"
+msgstr	"Kubika"
+
+#: src/lang.c:649
+#, fuzzy, c-format
+msgid	"Save '%s' (%s/%s)?"
+msgstr	"Kubika"
+
+#: src/lang.c:650
+#, fuzzy
+msgid	"Save configuration before continuing?"
+msgstr	"Kubika Iboneza Mbere"
+
+#: src/lang.c:651
+#, fuzzy
+msgid	"Save filename> "
+msgstr	"Kubika Izina ry'idosiye:"
+
+#: src/lang.c:652
+msgid	"Saved"
+msgstr	""
+
+#: src/lang.c:653
+#, fuzzy, c-format
+msgid	"%4d unread (%4d hot) %s in %s\n"
+msgstr	"%4dBidasomye in"
+
+#: src/lang.c:654
+#, c-format
+msgid	"Saved %s...\n"
+msgstr	""
+
+#: src/lang.c:655
+msgid	"Nothing was saved"
+msgstr	""
+
+#: src/lang.c:656
+#, fuzzy, c-format
+msgid	"\n"
+	"%s %d %s from %d %s\n"
+msgstr	"%s%d%sBivuye"
+
+#: src/lang.c:657
+#, fuzzy, c-format
+msgid	"-- %s saved to %s%s --"
+msgstr	"--%sKuri"
+
+#: src/lang.c:658
+#, fuzzy, c-format
+msgid	"-- %s saved to %s - %s --"
+msgstr	"--%sKuri"
+
+#: src/lang.c:659
+#, fuzzy
+msgid	"Saving..."
+msgstr	"Kubika%S"
+
+#: src/lang.c:660
+#, fuzzy, c-format
+msgid	"%s: Screen initialization failed"
+msgstr	"%s:Byanze"
+
+#: src/lang.c:662
+#, fuzzy, c-format
+msgid	"%s: screen is too small\n"
+msgstr	"%s:Mugaragaza ni"
+
+#: src/lang.c:664
+#, fuzzy, c-format
+msgid	"screen is too small, %s is exiting\n"
+msgstr	"Mugaragaza ni Gitoya ni"
+
+# svx/source\form\fmsearch.src:RID_SVXDLG_SEARCHFORM.CB_BACKWARD.text
+#: src/lang.c:665
+#, fuzzy, c-format
+msgid	"Search backwards [%s]> "
+msgstr	"Gushakisha inyuma"
+
+#: src/lang.c:666
+#, fuzzy, c-format
+msgid	"Search body [%s]> "
+msgstr	"Umubiri"
+
+#: src/lang.c:667
+#, c-format
+msgid	"Search forwards [%s]> "
+msgstr	""
+
+# 5374
+#: src/lang.c:668
+msgid	"Searching..."
+msgstr	"Gushakisha..."
+
+#: src/lang.c:669
+#, fuzzy, c-format
+msgid	"Searching article %d of %d ('q' to abort)..."
+msgstr	"Ingingo Bya Kuri Kureka"
+
+#: src/lang.c:670
+#, fuzzy
+msgid	"Select article> "
+msgstr	"Ingingo"
+
+#: src/lang.c:671
+#, fuzzy
+msgid	"Select option number before text or use arrow keys and <CR>. 'q' to quit."
+msgstr	"Ihitamo Umubare Mbere Umwandiko Cyangwa Gukoresha Akambi Utubuto Na Kuri "
+	"Kuvamo"
+
+#: src/lang.c:672
+#, fuzzy
+msgid	"Select group> "
+msgstr	"Itsinda"
+
+#: src/lang.c:673
+#, fuzzy, c-format
+msgid	"Enter selection pattern [%s]> "
+msgstr	"Ihitamo Ishusho"
+
+#: src/lang.c:674
+#, fuzzy
+msgid	"Select thread > "
+msgstr	"Urudodo"
+
+#: src/lang.c:675
+#, fuzzy, c-format
+msgid	"%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
+msgstr	"%s%s%s(\"%s\")[%s]:Kohereza a Icyegeranyo Kuri"
+
+#: src/lang.c:676
+#, fuzzy
+msgid	"servers active-file"
+msgstr	"Gikora IDOSIYE"
+
+#: src/lang.c:677
+#, fuzzy
+msgid	"Cannot move into new newsgroups. Subscribe first..."
+msgstr	"Kwimura Gishya Imbuga z'amakuru Itangira"
+
+#: src/lang.c:678
+msgid	"<SPACE>"
+msgstr	""
+
+#: src/lang.c:679
+#, c-format
+msgid	"Starting: (%s)"
+msgstr	""
+
+#: src/lang.c:680
+#, fuzzy, c-format
+msgid	"List Thread (%d of %d)"
+msgstr	"Bya"
+
+#: src/lang.c:681
+#, fuzzy, c-format
+msgid	"Thread (%.*s)"
+msgstr	"S"
+
+#: src/lang.c:682
+#, fuzzy
+msgid	"Enter wildcard subscribe pattern> "
+msgstr	"Kwiyandikisha Ishusho"
+
+#: src/lang.c:683
+#, fuzzy, c-format
+msgid	"subscribed to %d groups"
+msgstr	"yanditswe/ byemewe Kuri Amatsinda"
+
+#: src/lang.c:684
+#, fuzzy, c-format
+msgid	"Subscribed to %s"
+msgstr	"Kuri"
+
+#: src/lang.c:685
+msgid	"Subscribing... "
+msgstr	""
+
+#: src/lang.c:686
+#, fuzzy, c-format
+msgid	"Repost or supersede article(s) [%%s]? (%s/%s/%s): "
+msgstr	"Cyangwa Ingingo S"
+
+#: src/lang.c:687
+#, fuzzy, c-format
+msgid	"Supersede article(s) to group(s) [%s]> "
+msgstr	"Ingingo S Kuri Itsinda S"
+
+#: src/lang.c:688
+#, fuzzy
+msgid	"Superseding article ..."
+msgstr	"Ingingo"
+
+#: src/lang.c:689
+#, fuzzy, c-format
+msgid	"\n"
+	"Stopped. Type 'fg' to restart %s\n"
+msgstr	"Kuri Ongera utangire"
+
+#: src/lang.c:691
+#, fuzzy, c-format
+msgid	"%d days"
+msgstr	"%dIminsi"
+
+#: src/lang.c:692
+msgid	"<TAB>"
+msgstr	""
+
+#: src/lang.c:693
+msgid	"TeX "
+msgstr	""
+
+#: src/lang.c:694
+#, fuzzy
+msgid	"# Default action/prompt strings\n"
+msgstr	"#Igikorwa Urwinjiriro"
+
+#: src/lang.c:695
+#, fuzzy
+msgid	"# Defaults for quick (1 key) kill & auto-selection filters\n"
+	"# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
+	"#             5=Message-ID: & last References: entry only\n"
+	"#             6=Message-ID: entry only 7=Lines:\n"
+	"# global=ON/OFF  ON=apply to all groups OFF=apply to current group\n"
+	"# case=ON/OFF    ON=filter case sensitive OFF=ignore case\n"
+	"# expire=ON/OFF  ON=limit to default_filter_days OFF=don't ever expire\n"
+msgstr	"#kugirango 1. Urufunguzo Ikiyega Ihitamo Umutwempangano 0 1. 2. 3. 4. 5 "
+	"Iheruka Icyinjijwe 6 Icyinjijwe 7 Gukurikiza Kuri Byose Amatsinda Gukurikiza "
+	"Kuri KIGEZWEHO Muyunguruzi... Kwirengagiza Kuri"
+
+#: src/lang.c:708
+#, fuzzy
+msgid	"# If ON use print current subject or newsgroup description in the last line\n"
+msgstr	"#Gukoresha Gucapa KIGEZWEHO Ikivugwaho Cyangwa Urubuga rw'amakuru "
+	"Isobanuramiterere in i Iheruka"
+
+#: src/lang.c:709
+#, fuzzy
+msgid	"# Host & time info used for detecting new groups (don't touch)\n"
+msgstr	"#Igihe Ibisobanuro kugirango Gishya Amatsinda"
+
+#: src/lang.c:710
+#, fuzzy
+msgid	"There is no news\n"
+msgstr	"ni Oya"
+
+#: src/lang.c:711
+msgid	"Thread"
+msgstr	"Urudodo"
+
+#: src/lang.c:712
+msgid	"Thread Level Commands"
+msgstr	""
+
+#: src/lang.c:713
+msgid	"Thread deselected"
+msgstr	""
+
+#: src/lang.c:714
+#, fuzzy
+msgid	"Thread selected"
+msgstr	"Byahiswemo"
+
+#: src/lang.c:716
+msgid	"threads"
+msgstr	""
+
+#: src/lang.c:718
+#, fuzzy
+msgid	"Thread range"
+msgstr	"Urutonde"
+
+#: src/lang.c:719
+#, fuzzy
+msgid	"thread"
+msgstr	"Urudodo"
+
+#: src/lang.c:720
+#, fuzzy, c-format
+msgid	"Thread %4s of %4s"
+msgstr	"Bya"
+
+#: src/lang.c:721
+msgid	"Threading articles..."
+msgstr	""
+
+#: src/lang.c:722
+#, fuzzy, c-format
+msgid	"Toggled word highlighting %s"
+msgstr	"ijambo Igaragaza cyane"
+
+#: src/lang.c:723
+#, fuzzy
+msgid	"Toggled rot13 encoding"
+msgstr	"ROT13 Imisobekere:"
+
+#: src/lang.c:724
+#, fuzzy, c-format
+msgid	"Toggled german TeX encoding %s"
+msgstr	"Ikidage Imisobekere:"
+
+#: src/lang.c:725
+#, fuzzy, c-format
+msgid	"Toggled tab-width to %d"
+msgstr	"Isunika Ubugari Kuri"
+
+#: src/lang.c:726
+#, fuzzy, c-format
+msgid	"%d Trying to dotlock %s"
+msgstr	"%dKuri"
+
+#: src/lang.c:727
+#, fuzzy, c-format
+msgid	"%d Trying to lock %s"
+msgstr	"%dKuri"
+
+#: src/lang.c:728
+#, fuzzy
+msgid	"           h=help\n"
+msgstr	"h"
+
+#: src/lang.c:730
+msgid	"Unlimited"
+msgstr	""
+
+#: src/lang.c:731
+#, fuzzy
+msgid	"Enter wildcard unsubscribe pattern> "
+msgstr	"Kwivana aho wiyandikishe Ishusho"
+
+#: src/lang.c:732
+#, c-format
+msgid	"Error decoding %s : %s"
+msgstr	""
+
+#: src/lang.c:733
+#, fuzzy
+msgid	"No end."
+msgstr	"Impera"
+
+#: src/lang.c:734
+#, c-format
+msgid	"%s successfully decoded."
+msgstr	""
+
+#: src/lang.c:735
+#, fuzzy, c-format
+msgid	"%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
+	"\n"
+msgstr	"%*s[--%s/%s,%suuencodedIDOSIYE Imirongo Izina:"
+
+#: src/lang.c:736
+#, fuzzy
+msgid	"unread "
+msgstr	"Bidasomye"
+
+#: src/lang.c:737
+#, fuzzy, c-format
+msgid	"unsubscribed from %d groups"
+msgstr	"Bivuye Amatsinda"
+
+#: src/lang.c:738
+#, fuzzy, c-format
+msgid	"Unsubscribed from %s"
+msgstr	"Bivuye"
+
+#: src/lang.c:739
+msgid	"Unsubscribing... "
+msgstr	""
+
+#: src/lang.c:740
+msgid	"Unthreading articles..."
+msgstr	""
+
+#: src/lang.c:741
+msgid	"Updated"
+msgstr	""
+
+#: src/lang.c:742
+msgid	"Updating"
+msgstr	"Ivugurura"
+
+#: src/lang.c:743
+#, fuzzy, c-format
+msgid	"Opening %s\n"
+msgstr	"Gufungura %s%S"
+
+#: src/lang.c:744
+#, fuzzy
+msgid	"No more URL's in this article"
+msgstr	"Birenzeho in iyi Ingingo"
+
+#: src/lang.c:745
+#, fuzzy
+msgid	"Use MIME display program for this message?"
+msgstr	"Kugaragaza Porogaramu kugirango iyi Ubutumwa"
+
+#: src/lang.c:746
+#, fuzzy
+msgid	"  -c       mark all news as read in subscribed newsgroups (batch mode)"
+msgstr	"-C Ikimenyetso Byose Amakuru Nka Gusoma in yanditswe/ byemewe Imbuga "
+	"z'amakuru Ubwoko"
+
+#: src/lang.c:747
+#, fuzzy
+msgid	"  -Z       return status indicating if any unread news (batch mode)"
+msgstr	"-Garuka Imimerere NIBA Bidasomye Amakuru Ubwoko"
+
+#: src/lang.c:748
+#, fuzzy
+msgid	"  -q       don't check for new newsgroups"
+msgstr	"-Q Kugenzura... kugirango Gishya Imbuga z'amakuru"
+
+#: src/lang.c:749
+#, fuzzy
+msgid	"  -X       don't save any files on quit"
+msgstr	"-Kubika Idosiye ku Kuvamo"
+
+#: src/lang.c:750
+#, fuzzy
+msgid	"  -d       don't show newsgroup descriptions"
+msgstr	"-D Garagaza Urubuga rw'amakuru"
+
+#: src/lang.c:751
+#, fuzzy
+msgid	"  -G limit get only limit articles/group"
+msgstr	"-Kubona Itsinda"
+
+#: src/lang.c:752
+#, fuzzy, c-format
+msgid	"  -H       help information about %s"
+msgstr	"-H Ifashayobora Ibisobanuro Ibyerekeye"
+
+#: src/lang.c:753
+#, fuzzy
+msgid	"  -h       this help message"
+msgstr	"-h iyi Ifashayobora Ubutumwa"
+
+#: src/lang.c:754
+#, fuzzy, c-format
+msgid	"  -I dir   news index file directory [default=%s]"
+msgstr	"-Amakuru Umubarendanga IDOSIYE bushyinguro Mburabuzi"
+
+#: src/lang.c:755
+#, fuzzy
+msgid	"  -u       update index files (batch mode)"
+msgstr	"-u Kuvugurura Umubarendanga Idosiye Ubwoko"
+
+#: src/lang.c:756
+#, fuzzy, c-format
+msgid	"  -m dir   mailbox directory [default=%s]"
+msgstr	"-M bushyinguro Mburabuzi"
+
+#: src/lang.c:757
+#, fuzzy, c-format
+msgid	"\n"
+	"Mail bug reports/comments to %s"
+msgstr	"Raporo Ibisobanuro Kuri"
+
+#: src/lang.c:758
+#, fuzzy
+msgid	"  -N       mail new news to your posts (batch mode)"
+msgstr	"-Ubutumwa Gishya Amakuru Kuri Ubwoko"
+
+#: src/lang.c:759
+#, fuzzy
+msgid	"  -M user  mail new news to specified user (batch mode)"
+msgstr	"-Ukoresha: Ubutumwa Gishya Amakuru Kuri Ukoresha: Ubwoko"
+
+#: src/lang.c:760
+#, fuzzy, c-format
+msgid	"  -f file  subscribed to newsgroups file [default=%s]"
+msgstr	"-F IDOSIYE yanditswe/ byemewe Kuri Imbuga z'amakuru IDOSIYE Mburabuzi"
+
+#: src/lang.c:761
+#, fuzzy
+msgid	"  -x       no posting mode"
+msgstr	"-X Oya Ubwoko"
+
+#: src/lang.c:762
+#, fuzzy
+msgid	"  -w       post an article and exit"
+msgstr	"-W Iposita Ingingo Na Gusohoka"
+
+#: src/lang.c:763
+#, fuzzy
+msgid	"  -o       post all postponed articles and exit"
+msgstr	"-o Iposita Byose Na Gusohoka"
+
+#: src/lang.c:764
+#, fuzzy
+msgid	"  -r       read news remotely from default NNTP server"
+msgstr	"-R Gusoma Amakuru Bivuye Mburabuzi Seriveri"
+
+#: src/lang.c:765
+#, fuzzy
+msgid	"  -R       read news saved by -S option"
+msgstr	"-Gusoma Amakuru ku Ihitamo"
+
+#: src/lang.c:766
+#, fuzzy, c-format
+msgid	"  -s dir   save news directory [default=%s]"
+msgstr	"-S Kubika Amakuru bushyinguro Mburabuzi"
+
+#: src/lang.c:767
+#, fuzzy
+msgid	"  -S       save new news for later reading (batch mode)"
+msgstr	"-Kubika Gishya Amakuru kugirango Ubwoko"
+
+#: src/lang.c:768
+#, fuzzy
+msgid	"  -z       start if any unread news"
+msgstr	"-Z Gutangira NIBA Bidasomye Amakuru"
+
+#: src/lang.c:769
+#, fuzzy, c-format
+msgid	"A Usenet reader.\n"
+	"\n"
+	"Usage: %s [options] [newsgroup[,...]]"
+msgstr	"A Amahitamo Urubuga rw'amakuru"
+
+#: src/lang.c:770
+#, fuzzy
+msgid	"  -v       verbose output for batch mode options"
+msgstr	"-v Ibisohoka kugirango Ubwoko Amahitamo"
+
+#: src/lang.c:771
+#, fuzzy
+msgid	"  -V       print version & date information"
+msgstr	"-V Gucapa Verisiyo Itariki Ibisobanuro"
+
+#: src/lang.c:772
+#, fuzzy, c-format
+msgid	"%s only useful without batch mode operations\n"
+msgstr	"%sUbwoko"
+
+#: src/lang.c:773
+#, fuzzy, c-format
+msgid	"%s only useful for batch mode operations\n"
+msgstr	"%skugirango Ubwoko"
+
+#: src/lang.c:775
+#, fuzzy, c-format
+msgid	"\n"
+	"%s%d out of range (0 - %d). Reset to 0"
+msgstr	"%s%dInyuma Bya Urutonde 0 Kuri 0"
+
+#: src/lang.c:776
+#, fuzzy, c-format
+msgid	"View '%s' (%s/%s)?"
+msgstr	"Kureba"
+
+#: src/lang.c:778
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: posting exceeds %d columns. Line %d is the first long one:\n"
+	"%-100s\n"
+msgstr	"Inkingi ni i Itangira"
+
+#: src/lang.c:779
+#, fuzzy
+msgid	"\n"
+	"Warning: article unchanged after editing\n"
+msgstr	"Ingingo Nyuma"
+
+#: src/lang.c:780
+#, fuzzy
+msgid	"\n"
+	"Warning: \"Subject:\" contains only whitespaces.\n"
+msgstr	"Kirimo"
+
+#: src/lang.c:781
+#, fuzzy
+msgid	"\n"
+	"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:\".\n"
+msgstr	"Na: Oya"
+
+#: src/lang.c:783
+#, fuzzy
+msgid	"\n"
+	"Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
+	"         with \"Re: \" and does not contain \"(was:\".\n"
+msgstr	"OYA Na: Na OYA"
+
+#: src/lang.c:786
+#, fuzzy
+msgid	"Read carefully!\n"
+	"\n"
+	"  You are about to cancel an article seemingly written by you. This will "
+	"wipe\n"
+	"  the article from most  news servers  throughout the world,  but there is "
+	"no\n"
+	"  guarantee that it will work.\n"
+	"\n"
+	"This is the article you are about to cancel:\n"
+	"\n"
+msgstr	"Ibyerekeye Kuri Kureka Ingingo ku i Ingingo Bivuye Amakuru i ni Akazi ni i "
+	"Ingingo Ibyerekeye Kuri Kureka"
+
+#: src/lang.c:790
+#, fuzzy
+msgid	"\n"
+	"Warning: You are using a non-plain transfer encoding (such as base64 or\n"
+	"         quoted-printable) and an external inews program to submit your\n"
+	"         article. If a signature is appended by that inews program it will\n"
+	"         not be encoded properly.\n"
+msgstr	"ikoresha a Byuzuye Imisobekere: Nka Gicapika Na external Porogaramu Kuri "
+	"Tanga Ingingo a Isinya ni ku Porogaramu OYA"
+
+#: src/lang.c:795
+#, fuzzy, c-format
+msgid	"\n"
+	"\n"
+	"You are upgrading to tin %s from an earlier version.\n"
+	"Some values in your %s file have changed!\n"
+	"Read WHATSNEW, etc...\n"
+msgstr	"Kuri Bivuye Verisiyo Uduciro in IDOSIYE Byahinduwe"
+
+#: src/lang.c:797
+#, fuzzy, c-format
+msgid	"\n"
+	"\n"
+	"You are downgrading to tin %s from a more recent version!\n"
+	"Some values in your %s file may be ignored, others might have changed!\n"
+msgstr	"Kuri Bivuye a Birenzeho Verisiyo Uduciro in IDOSIYE Gicurasi Ibindi Byahinduwe"
+
+#: src/lang.c:800
+#, fuzzy, c-format
+msgid	"Warning: tin wrote fewer groups to your\n"
+	"\t%s\n"
+	"than it read at startup. If you didn't unsubscribe from %ld %s during\n"
+	"this session this indicates an error and you should backup your %s\n"
+	"before you start tin once again!\n"
+msgstr	"Bike Amatsinda Kuri Gusoma ku Kwivana aho wiyandikishe Bivuye Umukoro iyi "
+	"Ikosa Na Inyibutsa Mbere Gutangira Rimwe"
+
+#: src/lang.c:804
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
+msgstr	"Imirongo iyi Gicurasi Abantu"
+
+#: src/lang.c:805
+#, fuzzy, c-format
+msgid	"Warning: Only %d out of %d articles were saved"
+msgstr	"Inyuma Bya"
+
+#: src/lang.c:806
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: Your signature  is longer than %d lines.  Since signatures usually "
+	"do\n"
+	"         not  transport any  useful information,  they should be as  short "
+	"as\n"
+	"         possible.\n"
+msgstr	"Isinya ni Imirongo OYA Ibisobanuro Nka"
+
+#: src/lang.c:810
+#, fuzzy, c-format
+msgid	"Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
+msgstr	"iyi Ubutumwa Aderesi Gicurasi a urifuzagukomeza Kureka"
+
+#: src/lang.c:811
+#, fuzzy
+msgid	"\n"
+	"Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
+msgstr	"Gutangira Na: OYA Na:"
+
+#: src/lang.c:812
+#, fuzzy
+msgid	"Writing attributes file..."
+msgstr	"Ibiranga IDOSIYE"
+
+#: src/lang.c:814
+#, c-format
+msgid	"%d Responses"
+msgstr	""
+
+#: src/lang.c:816
+#, fuzzy, c-format
+msgid	"Added %d %s"
+msgstr	"Kyongewe"
+
+#: src/lang.c:817
+#, fuzzy
+msgid	"No unsubscribed groups to show"
+msgstr	"Amatsinda Kuri Garagaza"
+
+#: src/lang.c:818
+#, fuzzy
+msgid	"Showing subscribed to groups only"
+msgstr	"yanditswe/ byemewe Kuri Amatsinda"
+
+#: src/lang.c:819
+#, fuzzy
+msgid	"Yes "
+msgstr	"Yego"
+
+#: src/lang.c:820
+msgid	"    You have mail\n"
+msgstr	""
+
+#: src/lang.c:825
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: Posting is in %s and contains characters which are not\n"
+	"         in your selected MM_NETWORK_CHARSET: %s.\n"
+	"         These characters will be replaced by '?' if you post this\n"
+	"         article unchanged. To avoid garbling your article please either\n"
+	"         edit it and remove those characters or change the setting of\n"
+	"         MM_NETWORK_CHARSET to a suitable value for your posting via the\n"
+	"         M)enu option.\n"
+msgstr	"ni in Na Kirimo Inyuguti in Byahiswemo Inyuguti ku NIBA Iposita Ingingo "
+	"Ingingo Guhindura Na Gukuraho... Inyuguti Cyangwa Guhindura>> i Igenamiterere "
+	"Kuri a Agaciro kugirango Biturutse Ihitamo"
+
+#: src/lang.c:836
+#, fuzzy
+msgid	"  -D       debug mode 1=NNTP 2=ALL"
+msgstr	"-Kosora amakosa Ubwoko 1. 2."
+
+#: src/lang.c:840
+#, fuzzy
+msgid	"Read carefully!\n"
+	"\n"
+	"  You are about to cancel an article seemingly not written by you.  This "
+	"will\n"
+	"  wipe the article from lots of news servers throughout the world;\n"
+	"  Usenet's majority  considers this  rather inappropriate,  to say the "
+	"least.\n"
+	"  Only press 'd'  if you are  absolutely positive  that you are ready to "
+	"take\n"
+	"  the rap.\n"
+	"\n"
+	"This is the article you are about to cancel:\n"
+	"\n"
+msgstr	"Ibyerekeye Kuri Kureka Ingingo OYA ku Guhanagura i Ingingo Bivuye Bya Amakuru "
+	"i iyi Kuri i Kanda NIBA Cyiteguye Kuri i ni i Ingingo Ibyerekeye Kuri Kureka"
+
+#: src/lang.c:849
+#, fuzzy
+msgid	"toggle color"
+msgstr	"Mukomatanya Ibara"
+
+#: src/lang.c:850
+#, fuzzy
+msgid	"# Changing colors of several screen parts\n"
+	"# Possible values are:\n"
+	"#  -1 = default (white for foreground and black for background)\n"
+	"#   0 = black\n"
+	"#   1 = red\n"
+	"#   2 = green\n"
+	"#   3 = brown\n"
+	"#   4 = blue\n"
+	"#   5 = pink\n"
+	"#   6 = cyan\n"
+	"#   7 = white\n"
+	"# These are *only* for foreground:\n"
+	"#   8 = gray\n"
+	"#   9 = light red\n"
+	"#  10 = light green\n"
+	"#  11 = yellow\n"
+	"#  12 = light blue\n"
+	"#  13 = light pink\n"
+	"#  14 = light cyan\n"
+	"#  15 = light white\n"
+	"\n"
+msgstr	"#Amabara Bya Mugaragaza Uduciro 1. Mburabuzi Umweru kugirango Na umukara "
+	"kugirango Mbuganyuma 0 1. 2. 3. 4. 5 6 7 kugirango 8 9 kimurika 10 kimurika "
+	"12 kimurika kimurika 14 kimurika 15 kimurika"
+
+#: src/lang.c:870
+#, fuzzy
+msgid	"  -a       toggle color flag"
+msgstr	"-a Mukomatanya Ibara Ibendera"
+
+#: src/lang.c:874
+#, fuzzy
+msgid	"\n"
+	"Error: Followup-To set to more than one newsgroup!\n"
+msgstr	"Gushyiraho Kuri Birenzeho Urubuga rw'amakuru"
+
+#: src/lang.c:875
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: cross-posting to %d newsgroups and no Followup-To line!\n"
+msgstr	"Kwambukiranya Kuri Imbuga z'amakuru Na Oya Umurongo"
+
+#: src/lang.c:876
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: \"%s\" is not a valid newsgroup!\n"
+msgstr	"ni OYA a Byemewe Urubuga rw'amakuru"
+
+#: src/lang.c:878
+#, fuzzy
+msgid	"\n"
+	"Warning: Followup-To set to more than one newsgroup!\n"
+msgstr	"Gushyiraho Kuri Birenzeho Urubuga rw'amakuru"
+
+#: src/lang.c:879
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
+msgstr	"Kwambukiranya Kuri Imbuga z'amakuru Na Oya Umurongo"
+
+#: src/lang.c:880
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
+msgstr	"ni OYA in Gicurasi Sibyo ku iyi Ipaji"
+
+#: src/lang.c:881
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: \"%s\" is not a valid newsgroup at this site!\n"
+msgstr	"ni OYA a Byemewe Urubuga rw'amakuru ku iyi Ipaji"
+
+#: src/lang.c:885
+#, fuzzy, c-format
+msgid	"%d files successfully written from %d articles. %d %s occurred."
+msgstr	"%dIdosiye Bivuye"
+
+#: src/lang.c:886
+msgid	"Missing parts."
+msgstr	""
+
+#: src/lang.c:887
+#, fuzzy
+msgid	"No beginning."
+msgstr	"Itangiriro"
+
+#: src/lang.c:888
+#, fuzzy
+msgid	"No data."
+msgstr	"Ibyatanzwe"
+
+# # @name OTHER
+# # @loc none
+#: src/lang.c:889
+#, fuzzy
+msgid	"Unknown error."
+msgstr	"Ikosa itazwi"
+
+#: src/lang.c:892
+#, fuzzy, c-format
+msgid	"\tChecksum of %s (%ld %s)"
+msgstr	"Bya"
+
+#: src/lang.c:897
+#, fuzzy
+msgid	"Reading mail active file... "
+msgstr	"Ubutumwa Gikora IDOSIYE"
+
+#: src/lang.c:898
+#, fuzzy
+msgid	"Reading mailgroups file... "
+msgstr	"IDOSIYE"
+
+#: src/lang.c:902
+#, fuzzy
+msgid	"perform PGP operations on article"
+msgstr	"Ibikorwa: ku Ingingo"
+
+#: src/lang.c:903
+#, fuzzy
+msgid	"Add key(s) to public keyring?"
+msgstr	"Urufunguzo S Kuri Rusange"
+
+#: src/lang.c:904
+#, fuzzy, c-format
+msgid	"%s=encrypt, %s=sign, %s=both, %s=quit: "
+msgstr	"%s=Shyiraho Umutekano IKIMENYETSO Byombi Kuvamo"
+
+#: src/lang.c:905
+#, fuzzy, c-format
+msgid	"%s=sign, %s=sign & include public key, %s=quit: "
+msgstr	"%s=IKIMENYETSO IKIMENYETSO Gushyiramo Rusange Urufunguzo Kuvamo"
+
+#: src/lang.c:906
+#, fuzzy, c-format
+msgid	"PGP has not been set up (can't open %s)"
+msgstr	"OYA Gushyiraho Hejuru Gufungura"
+
+#: src/lang.c:907
+#, fuzzy
+msgid	"Article not signed and no public keys found"
+msgstr	"OYA Na Oya Rusange Utubuto Byabonetse"
+
+#: src/lang.c:909
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:910
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Kohereza"
+
+#: src/lang.c:911
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:913
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:914
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Kohereza"
+
+#: src/lang.c:915
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:919
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:920
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Kohereza"
+
+#: src/lang.c:921
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:923
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:924
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=send [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Kohereza"
+
+#: src/lang.c:925
+#, fuzzy, c-format
+msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
+msgstr	"%s=Kuvamo Guhindura Ibikubiyemo Iposita"
+
+#: src/lang.c:934
+#, fuzzy
+msgid	"Try cache_overview_files to speed up things.\n"
+msgstr	"Kuri Umuvuduko Hejuru"
+
+#: src/lang.c:935
+#, fuzzy
+msgid	"Tin will use local index files instead.\n"
+msgstr	"Gukoresha Umubarendanga Idosiye"
+
+#: src/lang.c:936
+#, fuzzy
+msgid	"Cannot find NNTP server name"
+msgstr	"Gushaka Seriveri Izina:"
+
+#: src/lang.c:937
+#, fuzzy, c-format
+msgid	"Connecting to %s:%d..."
+msgstr	"Kwihuza na\"\"..."
+
+#: src/lang.c:938
+#, fuzzy
+msgid	"Disconnecting from server...\n"
+msgstr	"Bivuye Seriveri"
+
+#: src/lang.c:939
+#, fuzzy, c-format
+msgid	"Wrong newsgroup name in response of GROUP command, %s for %s"
+msgstr	"Urubuga rw'amakuru Izina: in Bya Komandi: kugirango"
+
+#: src/lang.c:940
+#, fuzzy, c-format
+msgid	"Failed to connect to NNTP server %s. Exiting..."
+msgstr	"Kuri Kwihuza Kuri Seriveri"
+
+#: src/lang.c:941
+#, fuzzy
+msgid	"205  Closing connection"
+msgstr	"Ukwihuza"
+
+#: src/lang.c:942
+#, fuzzy
+msgid	"Your server does not support the NNTP XOVER or OVER command.\n"
+msgstr	"Seriveri OYA Gushigikira i Cyangwa Komandi:"
+
+#: src/lang.c:943
+#, fuzzy
+msgid	"Connection to news server has timed out. Reconnect?"
+msgstr	"Kongerakwihuza."
+
+#: src/lang.c:944
+#, fuzzy, c-format
+msgid	"Put the server name in the file %s,\n"
+	"or set the environment variable NNTPSERVER"
+msgstr	"i Seriveri Izina: in i IDOSIYE Cyangwa Gushyiraho i IMPINDURAGACIRO"
+
+#: src/lang.c:945
+#, fuzzy
+msgid	"  -A       force authentication on connect"
+msgstr	"-A ku Kwihuza"
+
+#: src/lang.c:946
+#, fuzzy, c-format
+msgid	"  -g serv  read news from NNTP server serv [default=%s]"
+msgstr	"-g Gusoma Amakuru Bivuye Seriveri Mburabuzi"
+
+#: src/lang.c:947
+#, fuzzy, c-format
+msgid	"  -p port  use port as NNTP port [default=%d]"
+msgstr	"-P Umuyoboro Gukoresha Umuyoboro Nka Umuyoboro Mburabuzi"
+
+#: src/lang.c:948
+#, fuzzy
+msgid	"  -Q       quick start. Same as -nqd"
+msgstr	"-Gutangira Nka"
+
+#: src/lang.c:949
+#, fuzzy
+msgid	"  -l       use only LIST instead of GROUP (-n) command"
+msgstr	"-L Gukoresha Bya N Komandi:"
+
+#: src/lang.c:950
+#, fuzzy
+msgid	"  -n       only read subscribed .newsrc groups from NNTP server"
+msgstr	"-N Gusoma yanditswe/ byemewe Amatsinda Bivuye Seriveri"
+
+#: src/lang.c:952
+#, fuzzy, c-format
+msgid	"%s/tcp: Unknown service.\n"
+msgstr	"%s/Serivisi"
+
+#: src/lang.c:955
+#, fuzzy
+msgid	"\n"
+	"socket or connect problem\n"
+msgstr	"Cyangwa Kwihuza"
+
+#: src/lang.c:957
+#, fuzzy, c-format
+msgid	"\n"
+	"Connection to %s: "
+msgstr	"Kuri"
+
+#: src/lang.c:958
+#, fuzzy
+msgid	"Giving up...\n"
+msgstr	"Hejuru"
+
+#: src/lang.c:961
+#, fuzzy
+msgid	"Your server does not have Xref: in its XOVER information.\n"
+	"Tin will try to use XHDR XREF instead (slows down things a bit).\n"
+msgstr	"Seriveri OYA in Ibisobanuro Kuri Gukoresha Hasi a"
+
+#: src/lang.c:964
+#, fuzzy
+msgid	"Your server does not have Xref: in its XOVER information.\n"
+msgstr	"Seriveri OYA in Ibisobanuro"
+
+#: src/lang.c:967
+#, fuzzy, c-format
+msgid	"Can't open %s. Try %s -r to read news via NNTP.\n"
+msgstr	"Gufungura R Kuri Gusoma Amakuru Biturutse"
+
+#: src/lang.c:970
+#, fuzzy
+msgid	"  -Q       quick start. Same as -qd"
+msgstr	"-Gutangira Nka"
+
+#: src/lang.c:971
+#, fuzzy
+msgid	"  -l       read only active file instead of scanning spool (-n) command"
+msgstr	"-L Gusoma Gikora IDOSIYE Bya N Komandi:"
+
+#: src/lang.c:972
+#, fuzzy
+msgid	"  -n       only read subscribed .newsrc groups from spool"
+msgstr	"-N Gusoma yanditswe/ byemewe Amatsinda Bivuye"
+
+#: src/lang.c:973
+#, fuzzy
+msgid	"Your server does not have Xref: in its NOV-files.\n"
+msgstr	"Seriveri OYA in Idosiye"
+
+#: src/lang.c:977
+#, fuzzy
+msgid	"Posting using external inews failed. Use built in inews instead?"
+msgstr	"ikoresha external Byanze in"
+
+#: src/lang.c:978
+#, fuzzy
+msgid	"It worked! Should I always use my built in inews from now on?"
+msgstr	"Buri gihe Gukoresha in Bivuye NONEAHA ku"
+
+#: src/lang.c:986
+#, fuzzy, c-format
+msgid	"%d %s printed"
+msgstr	"%d%sByacapwe"
+
+#: src/lang.c:987
+#, fuzzy
+msgid	"output article/thread/hot/pattern/tagged articles to printer"
+msgstr	"Ibisohoka Ingingo Urudodo Ishusho Kuri Mucapyi"
+
+#: src/lang.c:988
+msgid	"Print"
+msgstr	"Gucapa"
+
+#: src/lang.c:989
+msgid	"Printing..."
+msgstr	"Icapa..."
+
+#: src/lang.c:993
+#, fuzzy
+msgid	"pipe article/thread/hot/pattern/tagged articles into command"
+msgstr	"Ingingo Urudodo Ishusho Komandi:"
+
+#: src/lang.c:994
+#, fuzzy
+msgid	"No command"
+msgstr	"Komandi:"
+
+#: src/lang.c:995
+msgid	"Pipe"
+msgstr	""
+
+#: src/lang.c:996
+#, fuzzy, c-format
+msgid	"Pipe to command [%.*s]> "
+msgstr	"Kuri Komandi: S"
+
+#: src/lang.c:997
+msgid	"Piping..."
+msgstr	""
+
+#: src/lang.c:999
+#, fuzzy
+msgid	"Piping not enabled."
+msgstr	"OYA Bikora"
+
+#: src/lang.c:1003
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line has spaces  in it that MUST be removed.\n"
+	"       The only allowable  space is the one  separating the colon (:)\n"
+	"       from  the  contents.  Use a  comma  (,)  to separate  multiple\n"
+	"       newsgroup names.\n"
+msgstr	"Umurongo Imyanya in Cyavanyweho Umwanya ni i i Bivuye i Ibigize a Akitso Kuri "
+	"Urubuga rw'amakuru Amazina"
+
+#: src/lang.c:1008
+#, fuzzy, c-format
+msgid	"\n"
+	"Error: The \"%s:\" line is  continued in  the next line.  Since\n"
+	"       the line  may not  contain  whitespace,  this is  not allowed.\n"
+	"       Please write all newsgroups into a single line.\n"
+msgstr	"Umurongo ni in i Komeza>> Umurongo i Umurongo Gicurasi OYA iyi ni OYA "
+	"Kwandika Byose Imbuga z'amakuru a UMWE Umurongo"
+
+#: src/lang.c:1013
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: The \"%s:\" line is continued in the next line.\n"
+	"         This is a very new feature and may not be accepted by all servers.\n"
+	"         To avoid trouble please write all newsgroups into a single line.\n"
+msgstr	"Umurongo ni in i Komeza>> Umurongo ni a Gishya Na Gicurasi OYA Byemewe ku "
+	"Byose Kwandika Byose Imbuga z'amakuru a UMWE Umurongo"
+
+#: src/lang.c:1017
+#, fuzzy, c-format
+msgid	"\n"
+	"Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
+msgstr	"Umurongo Imyanya in Cyavanyweho"
+
+#: src/lang.c:1022
+#, fuzzy
+msgid	"\n"
+	"  If your article contains quoted text  please take some time to pare it "
+	"down\n"
+	"  to just the  key points to which you are  responding,  or people will "
+	"think\n"
+	"  you are a dweeb!  Many people have the habit of skipping any article  "
+	"whose\n"
+	"  first page is largely  quoted material.  Format your article to fit in "
+	"less\n"
+	"  then 80 chars,  since that's the conventional size  (72 is a good choice "
+	"as\n"
+	"  it allows quoting without exceeding the limit).  If your lines are too "
+	"long\n"
+	"  they'll wrap  around  ugly and  people won't  read what you  write.  If "
+	"you\n"
+	"  aren't  careful  and considerate  in  formatting  your posting, people  "
+	"are\n"
+	"  likely to ignore it completely.  It's a crowded net out there.\n"
+msgstr	"Ingingo Kirimo Umwandiko Igihe Kuri Kuri i Urufunguzo Utudomo Kuri Cyangwa "
+	"Abantu a Abantu i Bya Gusimbuka:%s Ingingo Itangira Ipaji ni Ibikoresho "
+	"Ingingo Kuri in Hanyuma guhera i Ingano ni a i Imirongo Gufunika Na Abantu "
+	"Gusoma Kwandika Na in Ihinduramiterere Abantu Kuri Kwirengagiza a Cyuzuye "
+	"Inyuma"
+
+#: src/lang.c:1035
+#, fuzzy
+msgid	"shell escape"
+msgstr	"Igikonoshwa"
+
+#: src/lang.c:1036
+#, c-format
+msgid	"Shell Command (%s)"
+msgstr	""
+
+#: src/lang.c:1037
+#, fuzzy, c-format
+msgid	"Enter shell command [%s]> "
+msgstr	"Igikonoshwa Komandi:"
+
+#: src/lang.c:1041
+#, fuzzy, c-format
+msgid	"%s: Can't get entry for TERM\n"
+msgstr	"%s:Kubona Icyinjijwe kugirango"
+
+#: src/lang.c:1045
+#, fuzzy, c-format
+msgid	"Group %.*s ('q' to quit)..."
+msgstr	"S Kuri Kuvamo"
+
+#: src/lang.c:1047
+#, fuzzy, c-format
+msgid	"Group %.*s..."
+msgstr	"S"
+
+#: src/lang.c:1051
+msgid	"Server unavailable\n"
+msgstr	""
+
+#: src/lang.c:1057
+#, fuzzy, c-format
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+	"s=post"
+msgstr	"%s=Ubutumwa Gucapa Kuvamo Mukomatanya Byose Bidasomye Kubika Itagi: Iposita"
+
+#: src/lang.c:1058
+#, fuzzy, c-format
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	"%s=Ubutumwa Gucapa Kuvamo Subiza Ubutumwa Kubika Itagi: Iposita"
+
+#: src/lang.c:1060
+#, fuzzy, c-format
+msgid	"%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
+msgstr	"%s=Ubutumwa Gucapa Kuvamo Mukomatanya Byose Bidasomye Kubika Itagi: Iposita"
+
+#: src/lang.c:1061
+#, fuzzy, c-format
+msgid	"%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	"%s=Ubutumwa Gucapa Kuvamo Subiza Ubutumwa Kubika Itagi: Iposita"
+
+#: src/lang.c:1065
+#, fuzzy, c-format
+msgid	"%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
+msgstr	"%s=Ubutumwa Kuvamo Mukomatanya Byose Bidasomye Kubika Itagi: Iposita"
+
+#: src/lang.c:1066
+#, fuzzy, c-format
+msgid	"%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	"%s=Ubutumwa Kuvamo Subiza Ubutumwa Kubika Itagi: Iposita"
+
+#: src/lang.c:1068
+#, fuzzy, c-format
+msgid	"%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
+msgstr	"%s=Ubutumwa Kuvamo Mukomatanya Byose Bidasomye Kubika Itagi: Iposita"
+
+#: src/lang.c:1069
+#, fuzzy, c-format
+msgid	"%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
+msgstr	"%s=Ubutumwa Kuvamo Subiza Ubutumwa Kubika Itagi: Iposita"
+
+#: src/lang.c:1075
+#, fuzzy
+msgid	"Terminal does not support color"
+msgstr	"OYA Gushigikira Ibara"
+
+#: src/lang.c:1080
+#, c-format
+msgid	"Trying %s"
+msgstr	""
+
+# goodies/source\filter.vcl\eps\dlgeps.src:DLG_EXPORT_EPS.RB_COMPRESSION_NONE.text
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315 src/refs.c:296
+msgid	"None"
+msgstr	"Nta na kimwe"
+
+#: src/lang.c:1095
+msgid	"Subject"
+msgstr	"Ikivugwaho"
+
+#: src/lang.c:1096
+msgid	"References"
+msgstr	"Indango"
+
+#: src/lang.c:1097
+#, fuzzy
+msgid	"Both Subject and References"
+msgstr	"Na"
+
+#: src/lang.c:1098
+msgid	"Multipart Subject"
+msgstr	""
+
+#: src/lang.c:1099
+msgid	"Percentage Match"
+msgstr	""
+
+#: src/lang.c:1111 src/lang.c:1222
+msgid	"No"
+msgstr	"Oya"
+
+#: src/lang.c:1112 src/lang.c:1224
+msgid	"Yes"
+msgstr	"Yego"
+
+#: src/lang.c:1113
+#, fuzzy
+msgid	"Hide All"
+msgstr	"Guhisha byose"
+
+#: src/lang.c:1121
+msgid	"Address"
+msgstr	"Aderesi"
+
+#: src/lang.c:1122
+msgid	"Full Name"
+msgstr	""
+
+#: src/lang.c:1123
+#, fuzzy
+msgid	"Address and Name"
+msgstr	"Na"
+
+#: src/lang.c:1130
+msgid	"Max"
+msgstr	"Kinini"
+
+#: src/lang.c:1131
+msgid	"Sum"
+msgstr	"Igiteranyo"
+
+#: src/lang.c:1132
+msgid	"Average"
+msgstr	"Impuzandengo"
+
+#: src/lang.c:1137
+msgid	"Lines"
+msgstr	"Imirongo"
+
+#: src/lang.c:1138
+msgid	"Score"
+msgstr	""
+
+#: src/lang.c:1139
+msgid	"Lines & Score"
+msgstr	""
+
+#: src/lang.c:1148
+msgid	"Black"
+msgstr	"Umukara"
+
+#: src/lang.c:1149
+msgid	"Red"
+msgstr	"Umutuku"
+
+#: src/lang.c:1150
+msgid	"Green"
+msgstr	"Icyatsi"
+
+#: src/lang.c:1151
+msgid	"Brown"
+msgstr	"Igihogo"
+
+#: src/lang.c:1152
+msgid	"Blue"
+msgstr	"Ubururu"
+
+#: src/lang.c:1153
+msgid	"Pink"
+msgstr	""
+
+#: src/lang.c:1154
+msgid	"Cyan"
+msgstr	"Ubururu bukeye"
+
+#: src/lang.c:1155
+msgid	"White"
+msgstr	"Umweru"
+
+#: src/lang.c:1156
+msgid	"Gray"
+msgstr	"Ikigina"
+
+#: src/lang.c:1157
+msgid	"Light Red"
+msgstr	"Umutuku Werurutse"
+
+#: src/lang.c:1158
+msgid	"Light Green"
+msgstr	"Icyatsi Cyerurutse"
+
+#: src/lang.c:1159
+msgid	"Yellow"
+msgstr	"Umuhondo"
+
+#: src/lang.c:1160
+msgid	"Light Blue"
+msgstr	"Ubururu Bwerurutse"
+
+#: src/lang.c:1161
+msgid	"Light Pink"
+msgstr	""
+
+#: src/lang.c:1162
+msgid	"Light Cyan"
+msgstr	"Ubururu Bwerurutse"
+
+#: src/lang.c:1163
+msgid	"Light White"
+msgstr	""
+
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
+msgid	"Nothing"
+msgstr	""
+
+# 3737
+#: src/lang.c:1172
+msgid	"Mark"
+msgstr	"garagaza"
+
+#: src/lang.c:1173
+msgid	"Space"
+msgstr	"Umwanya"
+
+#: src/lang.c:1180
+msgid	"Normal"
+msgstr	"Bisanzwe"
+
+#: src/lang.c:1181
+#, fuzzy
+msgid	"Best highlighting"
+msgstr	"Igaragaza cyane"
+
+#: src/lang.c:1182
+msgid	"Underline"
+msgstr	"Gucaho umurongo"
+
+#: src/lang.c:1183
+#, fuzzy
+msgid	"Reverse video"
+msgstr	"Videwo..."
+
+#: src/lang.c:1184
+msgid	"Blinking"
+msgstr	"Kinyoteera"
+
+#: src/lang.c:1185
+#, fuzzy
+msgid	"Half bright"
+msgstr	"Bibonerana"
+
+#: src/lang.c:1186
+msgid	"Bold"
+msgstr	"Bitsindagiye"
+
+#: src/lang.c:1191
+msgid	"none"
+msgstr	"ntacyo"
+
+# sfx2/source\doc\docvor.src:DLG_ORGANIZE.BTN_EDIT.text
+#: src/lang.c:1192
+#, fuzzy
+msgid	"commands"
+msgstr	"Amabwiriza"
+
+#: src/lang.c:1193
+msgid	"select"
+msgstr	"guhitamo"
+
+#: src/lang.c:1195
+#, fuzzy
+msgid	"commands & quit"
+msgstr	"Amabwiriza Kuvamo"
+
+#: src/lang.c:1196
+#, fuzzy
+msgid	"commands & select"
+msgstr	"Amabwiriza Guhitamo"
+
+#: src/lang.c:1197
+#, fuzzy
+msgid	"quit & select"
+msgstr	"Kuvamo Guhitamo"
+
+#: src/lang.c:1198
+#, fuzzy
+msgid	"commands & quit & select"
+msgstr	"Amabwiriza Kuvamo Guhitamo"
+
+#: src/lang.c:1223
+msgid	"Shell archive"
+msgstr	""
+
+#: src/lang.c:1229
+#, fuzzy
+msgid	"Subject: (descending)"
+msgstr	"Ubujyesi"
+
+#: src/lang.c:1230
+#, fuzzy
+msgid	"Subject: (ascending)"
+msgstr	"Ubujyejuru"
+
+#: src/lang.c:1231
+#, fuzzy
+msgid	"From: (descending)"
+msgstr	"Ubujyesi"
+
+#: src/lang.c:1232
+#, fuzzy
+msgid	"From: (ascending)"
+msgstr	"Ubujyejuru"
+
+#: src/lang.c:1233
+#, fuzzy
+msgid	"Date: (descending)"
+msgstr	"Ubujyesi"
+
+#: src/lang.c:1234
+#, fuzzy
+msgid	"Date: (ascending)"
+msgstr	"Ubujyejuru"
+
+#: src/lang.c:1235 src/lang.c:1243
+#, fuzzy
+msgid	"Score (descending)"
+msgstr	"Ubujyesi"
+
+#: src/lang.c:1236 src/lang.c:1244
+#, fuzzy
+msgid	"Score (ascending)"
+msgstr	"Ubujyejuru"
+
+#: src/lang.c:1237
+#, fuzzy
+msgid	"Lines: (descending)"
+msgstr	"Ubujyesi"
+
+#: src/lang.c:1238
+#, fuzzy
+msgid	"Lines: (ascending)"
+msgstr	"Ubujyejuru"
+
+#: src/lang.c:1249
+msgid	"Always Keep"
+msgstr	""
+
+#: src/lang.c:1250
+msgid	"Always Remove"
+msgstr	""
+
+#: src/lang.c:1251
+#, fuzzy
+msgid	"Mark with D on selection screen"
+msgstr	"Na: ku Ihitamo Mugaragaza"
+
+#: src/lang.c:1256
+#, fuzzy
+msgid	"Kill only unread arts"
+msgstr	"Bidasomye"
+
+#: src/lang.c:1257
+#, fuzzy
+msgid	"Kill all arts & show with K"
+msgstr	"Byose Garagaza Na:"
+
+#. TODO: s/K/art_marked_killed/
+#: src/lang.c:1258
+#, fuzzy
+msgid	"Kill all arts and never show"
+msgstr	"Byose Na Nta narimwe Garagaza"
+
+#: src/lang.c:1263
+#, fuzzy
+msgid	"Nothing special"
+msgstr	"Bidasanzwe"
+
+#: src/lang.c:1264
+msgid	"Compress quotes"
+msgstr	""
+
+#: src/lang.c:1265
+msgid	"Quote signatures"
+msgstr	""
+
+#: src/lang.c:1266
+#, fuzzy
+msgid	"Compress quotes, quote sigs"
+msgstr	"Gushyiraho akugarizo"
+
+#: src/lang.c:1267
+#, fuzzy
+msgid	"Quote empty lines"
+msgstr	"ubusa Imirongo"
+
+#: src/lang.c:1268
+#, fuzzy
+msgid	"Compress quotes, quote empty lines"
+msgstr	"Gushyiraho akugarizo ubusa Imirongo"
+
+#: src/lang.c:1269
+#, fuzzy
+msgid	"Quote sigs & empty lines"
+msgstr	"ubusa Imirongo"
+
+#: src/lang.c:1270
+#, fuzzy
+msgid	"Comp. q., quote sigs & empty lines"
+msgstr	"Q."
+
+#: src/lang.c:1308
+#, fuzzy
+msgid	"no"
+msgstr	"Oya"
+
+#: src/lang.c:1309
+#, fuzzy
+msgid	"with headers"
+msgstr	"Na: Imitwe"
+
+#: src/lang.c:1310
+#, fuzzy
+msgid	"without headers"
+msgstr	"Imitwe"
+
+#: src/lang.c:1317 src/lang.c:1323
+msgid	"NFKC"
+msgstr	""
+
+#: src/lang.c:1318
+msgid	"NFKD"
+msgstr	""
+
+#: src/lang.c:1319
+msgid	"NFC"
+msgstr	""
+
+#: src/lang.c:1320
+msgid	"NFD"
+msgstr	""
+
+#: src/lang.c:1331
+msgid	"Display Options"
+msgstr	""
+
+#: src/lang.c:1338
+msgid	"Color Options"
+msgstr	""
+
+#: src/lang.c:1345
+msgid	"Article-Limiting Options"
+msgstr	""
+
+#: src/lang.c:1351
+msgid	"Posting/Mailing Options"
+msgstr	""
+
+#: src/lang.c:1357
+msgid	"Saving/Printing Options"
+msgstr	""
+
+#: src/lang.c:1363
+msgid	"Expert Options"
+msgstr	""
+
+#: src/lang.c:1369
+msgid	"Filtering Options"
+msgstr	""
+
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437 src/lang.c:1487
+#: src/lang.c:1493 src/lang.c:1503 src/lang.c:1523 src/lang.c:1598 src/lang.c:1768
+#: src/lang.c:1774 src/lang.c:1780 src/lang.c:1786 src/lang.c:1798 src/lang.c:1805
+#: src/lang.c:1859 src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916 src/lang.c:1923
+#: src/lang.c:1930 src/lang.c:1937 src/lang.c:1944 src/lang.c:1951 src/lang.c:1958
+#: src/lang.c:1965 src/lang.c:1972 src/lang.c:1979 src/lang.c:1986 src/lang.c:1993
+#: src/lang.c:2000 src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066 src/lang.c:2073
+#: src/lang.c:2079 src/lang.c:2085 src/lang.c:2102 src/lang.c:2114 src/lang.c:2148
+#: src/lang.c:2201 src/lang.c:2208 src/lang.c:2214 src/lang.c:2239 src/lang.c:2256
+#: src/lang.c:2309 src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
+msgid	"<SPACE> toggles, <CR> sets, <ESC> cancels."
+msgstr	""
+
+#: src/lang.c:1375
+#, fuzzy
+msgid	"Show mini menu & posting etiquette"
+msgstr	"Ibikubiyemo"
+
+#: src/lang.c:1376
+#, fuzzy
+msgid	"# If ON show a mini menu of useful commands at each level\n"
+	"# and posting etiquette after composing an article\n"
+msgstr	"#Garagaza a Ibikubiyemo Bya Amabwiriza ku Na Nyuma"
+
+#: src/lang.c:1381
+#, fuzzy
+msgid	"Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
+msgstr	"Isobanuramiterere kugirango Urubuga rw'amakuru"
+
+#: src/lang.c:1382
+#, fuzzy
+msgid	"Show description of each newsgroup"
+msgstr	"Isobanuramiterere Bya Urubuga rw'amakuru"
+
+#: src/lang.c:1383
+#, fuzzy
+msgid	"# If ON show group description text after newsgroup name at\n"
+	"# group selection level\n"
+msgstr	"#Garagaza Itsinda Isobanuramiterere Umwandiko Nyuma Urubuga rw'amakuru Izina: "
+	"Itsinda Ihitamo"
+
+#: src/lang.c:1388
+#, fuzzy
+msgid	"Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
+	"sets."
+msgstr	"Umwanditsi Imyanya in Itsinda Ibikubiyemo"
+
+#: src/lang.c:1389
+#, fuzzy
+msgid	"In group menu, show author by"
+msgstr	"Itsinda Ibikubiyemo Garagaza Umwanditsi ku"
+
+#: src/lang.c:1390
+#, fuzzy
+msgid	"# Part of from field to display\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = none\n"
+	"#   1 = address\n"
+	"# * 2 = full name\n"
+	"#   3 = both\n"
+msgstr	"#Bya Bivuye Umwanya Kuri Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2. 3."
+
+#: src/lang.c:1399
+#, fuzzy
+msgid	"Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
+msgstr	"Cyangwa kugirango Ihitamo"
+
+#: src/lang.c:1400
+#, fuzzy
+msgid	"Draw -> instead of highlighted bar"
+msgstr	"Bya"
+
+#: src/lang.c:1401
+#, fuzzy
+msgid	"# If ON use -> otherwise highlighted bar for selection\n"
+msgstr	"#Gukoresha kugirango"
+
+#: src/lang.c:1406
+#, fuzzy
+msgid	"Use inverse video for page headers"
+msgstr	"Videwo... kugirango Ipaji Imitwe"
+
+#: src/lang.c:1407
+#, fuzzy
+msgid	"# If ON use inverse video for page headers at different levels\n"
+msgstr	"#Gukoresha Videwo... kugirango Ipaji Imitwe ku"
+
+#: src/lang.c:1412
+#, fuzzy
+msgid	"Thread articles by"
+msgstr	"ku"
+
+#: src/lang.c:1413
+#, fuzzy
+msgid	"# Thread articles by ...\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"#   1 = Subject\n"
+	"#   2 = References\n"
+	"# * 3 = Both (Subject and References)\n"
+	"#   4 = Multipart Subject\n"
+	"#   5 = Percentage Match\n"
+msgstr	"# ku Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2. 3. Na 4."
+
+#: src/lang.c:1424
+msgid	"Enter percentage match required to thread together. <CR> sets."
+msgstr	""
+
+#: src/lang.c:1425
+#, fuzzy
+msgid	"Thread percentage match"
+msgstr	""
+
+#: src/lang.c:1426
+#, c-format
+msgid	"# Thread percentage match...\n"
+	"# the percentage of characters in the subject of an article that must match\n"
+	"# a base article for both those articles to be considered to belong to the\n"
+	"# same thread. This option is an integer percentage, eg. 80, no decimals may\n"
+	"# follow. If 80 is used here, then 80%% of the characters must match "
+	"exactly,\n"
+	"# no insertion of a character, for the two articles to be put in the same\n"
+	"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+	"# 'harppy' would be threaded separately from 'happy'\n"
+msgstr	""
+
+#: src/lang.c:1438
+#, fuzzy
+msgid	"Score of a thread"
+msgstr	"Bya a Urudodo"
+
+#: src/lang.c:1439
+#, fuzzy
+msgid	"# Thread score\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = max\n"
+	"#   1 = sum\n"
+	"#   2 = average\n"
+msgstr	"#Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2."
+
+#: src/lang.c:1447
+#, fuzzy
+msgid	"Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
+msgstr	"ku Cyangwa"
+
+#: src/lang.c:1448
+#, fuzzy
+msgid	"Sort articles by"
+msgstr	"ku"
+
+#: src/lang.c:1449
+#, fuzzy
+msgid	"# Sort articles by ...\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"#   1 = Subject descending\n"
+	"#   2 = Subject ascending\n"
+	"#   3 = From descending\n"
+	"#   4 = From ascending\n"
+	"#   5 = Date descending\n"
+	"# * 6 = Date ascending\n"
+	"#   7 = Score descending\n"
+	"#   8 = Score ascending\n"
+	"#   9 = Lines descending\n"
+	"#  10 = Lines ascending\n"
+msgstr	"#ku Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2. 3. 4. 5 6 7 8 9 10"
+
+#: src/lang.c:1465
+#, fuzzy
+msgid	"Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
+msgstr	"ku Cyangwa"
+
+#: src/lang.c:1466
+#, fuzzy
+msgid	"Sort threads by"
+msgstr	"ku"
+
+#: src/lang.c:1467
+#, fuzzy
+msgid	"# Sort thread by ...\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"# * 1 = Score descending\n"
+	"#   2 = Score ascending\n"
+msgstr	"#Urudodo ku Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2."
+
+#: src/lang.c:1475
+#, fuzzy
+msgid	"Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
+msgstr	"indanga ku Itangira Iheruka Bidasomye in Amatsinda"
+
+#: src/lang.c:1476
+#, fuzzy
+msgid	"Goto first unread article in group"
+msgstr	"Itangira Bidasomye Ingingo in Itsinda"
+
+#: src/lang.c:1477
+#, fuzzy
+msgid	"# If ON put cursor at first unread art in group otherwise last art\n"
+msgstr	"#Gushyira indanga ku Itangira Bidasomye in Itsinda Iheruka"
+
+#: src/lang.c:1481
+#, fuzzy
+msgid	"Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
+msgstr	"Byose Cyangwa Bidasomye"
+
+#: src/lang.c:1482
+#, fuzzy
+msgid	"Show only unread articles"
+msgstr	"Bidasomye"
+
+#: src/lang.c:1483
+#, fuzzy
+msgid	"# If ON show only new/unread articles otherwise show all.\n"
+msgstr	"#Garagaza Gishya Bidasomye Garagaza Byose"
+
+#: src/lang.c:1488
+#, fuzzy
+msgid	"Show only groups with unread arts"
+msgstr	"Amatsinda Na: Bidasomye"
+
+#: src/lang.c:1489
+#, fuzzy
+msgid	"# If ON show only subscribed to groups that contain unread articles.\n"
+msgstr	"#Garagaza yanditswe/ byemewe Kuri Amatsinda Bidasomye"
+
+#: src/lang.c:1494
+msgid	"Filter which articles"
+msgstr	""
+
+#: src/lang.c:1495
+#, fuzzy
+msgid	"# Filter which articles\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = only kill unread articles\n"
+	"#   1 = kill all articles and show in threads marked with K\n"
+	"#   2 = kill all articles and never show them\n"
+msgstr	"#Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 Bidasomye 1. Byose Na Garagaza "
+	"in cy/ byagarajwe Na: 2. Byose Na Nta narimwe Garagaza"
+
+#: src/lang.c:1504
+#, fuzzy
+msgid	"Tab goes to next unread article"
+msgstr	"Kuri Komeza>> Bidasomye Ingingo"
+
+#: src/lang.c:1505
+#, fuzzy
+msgid	"# If ON the TAB command will go to next unread article at article viewer "
+	"level\n"
+msgstr	"#i Komandi: Gyayo Kuri Komeza>> Bidasomye Ingingo ku Ingingo"
+
+#: src/lang.c:1509
+#, fuzzy
+msgid	"Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
+msgstr	"Na: i Impera Bya Kuri i Komeza>> Bidasomye"
+
+#: src/lang.c:1510
+#, fuzzy
+msgid	"Space goes to next unread article"
+msgstr	"Kuri Komeza>> Bidasomye Ingingo"
+
+#: src/lang.c:1511
+#, fuzzy
+msgid	"# If ON the SPACE command will go to next unread article at article viewer\n"
+	"# level when the end of the article is reached (rn-style pager)\n"
+msgstr	"#i Komandi: Gyayo Kuri Komeza>> Bidasomye Ingingo ku Ingingo urwego Ryari: i "
+	"Impera Bya i Ingingo ni IMISUSIRE Peja"
+
+#: src/lang.c:1516
+#, fuzzy
+msgid	"Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
+msgstr	"Na: i Impera Bya Kuri i Bidasomye"
+
+#: src/lang.c:1517
+#, fuzzy
+msgid	"PgDn goes to next unread article"
+msgstr	"Kuri Komeza>> Bidasomye Ingingo"
+
+#: src/lang.c:1518
+#, fuzzy
+msgid	"# If ON the PGDN or DOWN command will go to next unread article when\n"
+	"# pressed at end of message\n"
+msgstr	"#i Cyangwa Komandi: Gyayo Kuri Komeza>> Bidasomye Ingingo ku Impera Bya"
+
+#: src/lang.c:1524
+#, fuzzy
+msgid	"List thread using right arrow key"
+msgstr	"Urudodo ikoresha Iburyo: Akambi Urufunguzo"
+
+#: src/lang.c:1525
+#, fuzzy
+msgid	"# If ON automatically list thread when entering it using right arrow key.\n"
+msgstr	"#ku buryo bwikora Urutonde Urudodo Ryari: ikoresha Iburyo: Akambi Urufunguzo"
+
+#: src/lang.c:1529
+#, fuzzy
+msgid	"Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri Cyasibwe"
+
+#: src/lang.c:1530
+#, fuzzy
+msgid	"Character to show deleted articles"
+msgstr	"Kuri Garagaza Cyasibwe"
+
+#: src/lang.c:1531
+#, fuzzy
+msgid	"# Character used to show that an art was deleted (default 'D')\n"
+	"# _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza Cyasibwe Mburabuzi ni"
+
+#: src/lang.c:1536
+#, fuzzy
+msgid	"Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri in a Urutonde"
+
+#: src/lang.c:1537
+#, fuzzy
+msgid	"Character to show inrange articles"
+msgstr	"Kuri Garagaza"
+
+#: src/lang.c:1538
+#, fuzzy
+msgid	"# Character used to show that an art is in a range (default '#')\n"
+	"# _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza ni in a Urutonde Mburabuzi ni"
+
+#: src/lang.c:1543
+#, fuzzy
+msgid	"Enter character to indicate that article will return. <CR> sets, <ESC> "
+	"cancels."
+msgstr	"Inyuguti Kuri Ingingo Garuka"
+
+#: src/lang.c:1544
+#, fuzzy
+msgid	"Character to show returning arts"
+msgstr	"Kuri Garagaza"
+
+#: src/lang.c:1545
+#, fuzzy
+msgid	"# Character used to show that an art will return (default '-')\n"
+	"# _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza Garuka Mburabuzi ni"
+
+#: src/lang.c:1550
+#, fuzzy
+msgid	"Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri Byahiswemo"
+
+#: src/lang.c:1551
+#, fuzzy
+msgid	"Character to show selected articles"
+msgstr	"Kuri Garagaza Byahiswemo"
+
+#: src/lang.c:1552
+#, fuzzy
+msgid	"# Character used to show that an art was auto-selected (default '*')\n"
+	"# _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza Ikiyega Byahiswemo Mburabuzi ni"
+
+#: src/lang.c:1557
+#, fuzzy
+msgid	"Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri"
+
+#: src/lang.c:1558
+#, fuzzy
+msgid	"Character to show recent articles"
+msgstr	"Kuri Garagaza"
+
+#: src/lang.c:1559
+#, fuzzy
+msgid	"# Character used to show that an art is recent (default 'o')\n"
+	"# _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza ni Mburabuzi ni"
+
+#: src/lang.c:1564
+#, fuzzy
+msgid	"Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri Bidasomye"
+
+#: src/lang.c:1565
+#, fuzzy
+msgid	"Character to show unread articles"
+msgstr	"Kuri Garagaza Bidasomye"
+
+#: src/lang.c:1566
+#, fuzzy
+msgid	"# Character used to show that an art is unread (default '+')\n"
+	"# _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza ni Bidasomye Mburabuzi ni"
+
+#: src/lang.c:1571
+#, fuzzy
+msgid	"Enter character to indicate read articles. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri Gusoma"
+
+#: src/lang.c:1572
+#, fuzzy
+msgid	"Character to show read articles"
+msgstr	"Kuri Garagaza Gusoma"
+
+#: src/lang.c:1573
+#, fuzzy
+msgid	"# Character used to show that an art was read (default ' ')\n"
+	"# _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza Gusoma Mburabuzi ni"
+
+#: src/lang.c:1578
+#, fuzzy
+msgid	"Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri"
+
+#: src/lang.c:1579
+#, fuzzy
+msgid	"Character to show killed articles"
+msgstr	"Kuri Garagaza"
+
+#: src/lang.c:1580
+#, fuzzy
+msgid	"# Character used to show that an art was killed (default 'K')\n"
+	"# kill_level must be set accordingly, _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza Mburabuzi Gushyiraho ni"
+
+#: src/lang.c:1585
+#, fuzzy
+msgid	"Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
+msgstr	"Inyuguti Kuri Gusoma Byahiswemo"
+
+#: src/lang.c:1586
+#, fuzzy
+msgid	"Character to show readselected arts"
+msgstr	"Kuri Garagaza"
+
+#: src/lang.c:1587
+#, fuzzy
+msgid	"# Character used to show that an art was selected before read (default ':')\n"
+	"# kill_level must be set accordingly, _ is turned into ' '\n"
+msgstr	"#Kuri Garagaza Byahiswemo Mbere Gusoma Mburabuzi Gushyiraho ni"
+
+#: src/lang.c:1592
+#, fuzzy
+msgid	"Enter maximum length of newsgroup names displayed. <CR> sets."
+msgstr	"Kinini Uburebure Bya Urubuga rw'amakuru Amazina"
+
+#: src/lang.c:1593
+#, fuzzy
+msgid	"Max. length of group names shown"
+msgstr	"Uburebure Bya Itsinda Amazina"
+
+#: src/lang.c:1594
+#, fuzzy
+msgid	"# Maximum length of the names of newsgroups displayed\n"
+msgstr	"#Uburebure Bya i Amazina Bya Imbuga z'amakuru"
+
+#: src/lang.c:1599
+#, fuzzy
+msgid	"Show lines/score in listings"
+msgstr	"Imirongo in"
+
+#: src/lang.c:1600
+#, fuzzy
+msgid	"# What informations should be displayed in article/thread listing\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = nothing\n"
+	"# * 1 = lines\n"
+	"#   2 = score\n"
+	"#   3 = lines & score\n"
+msgstr	"#in Ingingo Urudodo Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2. 3. "
+	"Imirongo"
+
+#: src/lang.c:1609
+#, fuzzy
+msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, -"
+	"2 = half page"
+msgstr	"0 Ipaji 1. Garagaza Ibanjirije Iheruka Umurongo Nka Itangira ku Komeza>> "
+	"Ipaji 2. Ipaji"
+
+#: src/lang.c:1610
+#, fuzzy
+msgid	"Number of lines to scroll in pager"
+msgstr	"Bya Imirongo Kuri in Peja"
+
+#: src/lang.c:1611
+#, fuzzy
+msgid	"# Number of lines that cursor-up/down will scroll in article pager\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#  -2 = half-page scrolling\n"
+	"#  -1 = the top/bottom line is carried over onto the next page\n"
+	"#   0 = page-by-page (traditional behavior)\n"
+	"# * 1 = line-by-line\n"
+	"#   2 or greater = scroll by 2 or more lines (only in the pager)\n"
+msgstr	"#Bya Imirongo indanga Hejuru Hasi in Ingingo Uduciro i Mburabuzi ni cy/ "
+	"byagarajwe Na: 2. Ipaji 1. i Hejuru: Hasi: Umurongo ni KURI i Komeza>> 0 "
+	"Ipaji ku Ipaji imyitwarire 1. Umurongo ku 2. Cyangwa Biruta ku 2. Cyangwa "
+	"Birenzeho Imirongo in i Peja"
+
+#: src/lang.c:1621
+msgid	"Display signatures. <SPACE> toggles & <CR> sets."
+msgstr	""
+
+#: src/lang.c:1622
+msgid	"Display signatures"
+msgstr	""
+
+#: src/lang.c:1623
+#, fuzzy
+msgid	"# If OFF don't show signatures when displaying articles\n"
+msgstr	"#Garagaza Ryari:"
+
+#: src/lang.c:1627
+#, fuzzy
+msgid	"Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
+msgstr	"Ibyatanzwe Nka Imigereka"
+
+#: src/lang.c:1628
+#, fuzzy
+msgid	"Display uue data as an attachment"
+msgstr	"Ibyatanzwe Nka umugereka"
+
+#: src/lang.c:1629
+#, fuzzy
+msgid	"# Handling of uuencoded data in the pager\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = no, display raw uuencoded data\n"
+	"#   1 = yes, uuencoded data will be condensed to a single tag line showing\n"
+	"#       size and filename, similar to how MIME attachments are displayed\n"
+	"#   2 = hide all, as for 1, but any line that looks like uuencoded data will\n"
+	"#       be folded into a tag line.\n"
+msgstr	"#Bya Ibyatanzwe in i Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 Oya "
+	"Kugaragaza 1. Yego Ibyatanzwe Cyegeranye Kuri a UMWE Itagi: Umurongo Ingano "
+	"Na Izina ry'idosiye: Kuri Imigereka 2. Gushisha Byose Nka kugirango 1. "
+	"Umurongo nka Ibyatanzwe a Itagi: Umurongo"
+
+#: src/lang.c:1639
+#, fuzzy
+msgid	"Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
+msgstr	"IMISUSIRE Kuri"
+
+#: src/lang.c:1640
+#, fuzzy
+msgid	"Display \"a as Umlaut-a"
+msgstr	"a Nka a"
+
+#: src/lang.c:1641
+#, fuzzy
+msgid	"# If ON decode German style TeX umlaut codes to ISO and\n"
+	"# show \"a as Umlaut-a, etc.\n"
+msgstr	"#IMISUSIRE Kuri Garagaza a Nka a"
+
+#: src/lang.c:1646 src/lang.c:1656
+#, fuzzy
+msgid	"Space separated list of header fields"
+msgstr	"Urutonde Bya Umutwempangano Imyanya"
+
+#: src/lang.c:1647
+#, fuzzy
+msgid	"Display these header fields (or *)"
+msgstr	"Umutwempangano Imyanya Cyangwa"
+
+#: src/lang.c:1648
+#, fuzzy
+msgid	"# Which news headers you wish to see. If you want to see _all_ the headers,\n"
+	"# place an '*' as this value. This is the only way a wildcard can be used.\n"
+	"# If you enter 'X-' as the value, you will see all headers beginning with\n"
+	"# 'X-' (like X-Alan or X-Pape). You can list more than one by delimiting "
+	"with\n"
+	"# spaces. Not defining anything turns off this option.\n"
+msgstr	"#Amakuru Imitwe Kuri Kuri Byose i Imitwe Nka iyi Agaciro ni i a Injiza Nka i "
+	"Agaciro Byose Imitwe Itangiriro nka Cyangwa Urutonde Birenzeho ku Imyanya "
+	"Bidakora iyi Ihitamo"
+
+#: src/lang.c:1657
+#, fuzzy
+msgid	"Do not display these header fields"
+msgstr	"OYA Kugaragaza Umutwempangano Imyanya"
+
+#: src/lang.c:1658
+#, fuzzy
+msgid	"# Same as 'news_headers_to_display' except it denotes the opposite.\n"
+	"# An example of using both options might be if you thought X- headers were\n"
+	"# A Good Thing(tm), but thought Alan and Pape were miscreants...well then "
+	"you\n"
+	"# would do something like this:\n"
+	"# news_headers_to_display=X-\n"
+	"# news_headers_to_not_display=X-Alan X-Pape\n"
+	"# Not defining anything turns off this option.\n"
+msgstr	"#Nka i Urugero Bya ikoresha Byombi Amahitamo NIBA Imitwe A Na Hanyuma nka iyi "
+	"Bidakora iyi Ihitamo"
+
+#: src/lang.c:1668
+#, fuzzy
+msgid	"Do you want to enable automatic handling of multipart/alternative articles?"
+msgstr	"Kuri Gushoboza Byikoresha Bya"
+
+#: src/lang.c:1669
+msgid	"Skip multipart/alternative parts"
+msgstr	""
+
+#: src/lang.c:1670
+#, fuzzy
+msgid	"# If ON strip multipart/alternative messages automatically\n"
+msgstr	"#Ubutumwa"
+
+#: src/lang.c:1675
+#, fuzzy
+msgid	"A regex used to decide which lines to show in col_quote."
+msgstr	"A Kuri Imirongo Kuri Garagaza in"
+
+#: src/lang.c:1676
+#, fuzzy
+msgid	"Regex used to show quoted lines"
+msgstr	"Kuri Garagaza Imirongo"
+
+#: src/lang.c:1677
+#, fuzzy
+msgid	"# A regular expression that tin will use to decide which lines are\n"
+	"# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri Imirongo Ryari: Imirongo in iyi "
+	"Ahatanditseho Gukoresha a in Mburabuzi"
+
+#: src/lang.c:1683
+#, fuzzy
+msgid	"A regex used to decide which lines to show in col_quote2."
+msgstr	"A Kuri Imirongo Kuri Garagaza in"
+
+#: src/lang.c:1684
+#, fuzzy
+msgid	"Regex used to show twice quoted l."
+msgstr	"Kuri Garagaza L"
+
+#: src/lang.c:1685
+#, fuzzy
+msgid	"# A regular expression that tin will use to decide which lines are\n"
+	"# quoted twice. Twice quoted lines are shown in col_quote2.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri Imirongo Imirongo in iyi Ahatanditseho "
+	"Gukoresha a in Mburabuzi"
+
+#: src/lang.c:1691
+#, fuzzy
+msgid	"A regex used to decide which lines to show in col_quote3."
+msgstr	"A Kuri Imirongo Kuri Garagaza in"
+
+#: src/lang.c:1692
+#, fuzzy
+msgid	"Regex used to show >= 3 times q.l."
+msgstr	"L."
+
+#: src/lang.c:1693
+#, fuzzy
+msgid	"# A regular expression that tin will use to decide which lines are\n"
+	"# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri Imirongo 3. Times 3. Times Imirongo in iyi "
+	"Ahatanditseho Gukoresha a in Mburabuzi"
+
+#: src/lang.c:1700
+#, fuzzy
+msgid	"A regex used to decide which words to show in col_markslashes."
+msgstr	"A Kuri Amagambo Kuri Garagaza in"
+
+#: src/lang.c:1701
+#, fuzzy
+msgid	"Regex used to highlight /slashes/"
+msgstr	"Kuri garagaza cyane"
+
+#: src/lang.c:1702
+#, fuzzy
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '/' are to be shown in col_markslashes.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri ku Kuri in iyi Ahatanditseho Gukoresha a "
+	"in Mburabuzi"
+
+#: src/lang.c:1708
+#, fuzzy
+msgid	"A regex used to decide which words to show in col_markstars."
+msgstr	"A Kuri Amagambo Kuri Garagaza in"
+
+#: src/lang.c:1709
+#, fuzzy
+msgid	"Regex used to highlight *stars*"
+msgstr	"Kuri garagaza cyane Inyenyeri"
+
+#: src/lang.c:1710
+#, fuzzy
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '*' are to be shown in col_markstars.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri ku Kuri in iyi Ahatanditseho Gukoresha a "
+	"in Mburabuzi"
+
+#: src/lang.c:1716
+#, fuzzy
+msgid	"A regex used to decide which words to show in col_markstroke."
+msgstr	"A Kuri Amagambo Kuri Garagaza in"
+
+#: src/lang.c:1717
+#, fuzzy
+msgid	"Regex used to highlight -strokes-"
+msgstr	"Kuri garagaza cyane"
+
+#: src/lang.c:1718
+#, fuzzy
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '-' are to be shown in col_markstroke.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri ku Kuri in iyi Ahatanditseho Gukoresha a "
+	"in Mburabuzi"
+
+#: src/lang.c:1724
+#, fuzzy
+msgid	"A regex used to decide which words to show in col_markdash."
+msgstr	"A Kuri Amagambo Kuri Garagaza in"
+
+#: src/lang.c:1725
+#, fuzzy
+msgid	"Regex used to highlight _underline_"
+msgstr	"Kuri garagaza cyane Gucaho umurongo"
+
+#: src/lang.c:1726
+#, fuzzy
+msgid	"# A regular expression that tin will use to decide which words\n"
+	"# bounded by '_' are to be shown in col_markdash.\n"
+	"# If you leave this blank, tin will use a built in default.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri ku Kuri in iyi Ahatanditseho Gukoresha a "
+	"in Mburabuzi"
+
+#: src/lang.c:1732
+#, fuzzy
+msgid	"A regex used to find Subject prefixes to remove.  Use '|' as separator."
+msgstr	"A Kuri Gushaka Kuri Gukuraho... Nka Mutandukanya"
+
+#: src/lang.c:1733
+#, fuzzy
+msgid	"Regex with Subject prefixes"
+msgstr	"Na:"
+
+#: src/lang.c:1734
+#, fuzzy
+msgid	"# A regular expression that tin will use to find Subject prefixes\n"
+	"# which will be removed before showing the header.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri Gushaka Cyavanyweho Mbere i Umutwempangano"
+
+#: src/lang.c:1739
+#, fuzzy
+msgid	"A regex used to find Subject suffixes to remove.  Use '|' as separator."
+msgstr	"A Kuri Gushaka Imigereka Kuri Gukuraho... Nka Mutandukanya"
+
+#: src/lang.c:1740
+#, fuzzy
+msgid	"Regex with Subject suffixes"
+msgstr	"Na: Imigereka"
+
+#: src/lang.c:1741
+#, fuzzy
+msgid	"# A regular expression that tin will use to find Subject suffixes\n"
+	"# which will be removed when replying or posting followup.\n"
+msgstr	"#A Ibisanzwe imvugo Gukoresha Kuri Gushaka Cyavanyweho Ryari: Cyangwa"
+
+#: src/lang.c:1746
+#, fuzzy
+msgid	"Enter name and options for external MIME viewer, --internal for built-in "
+	"viewer"
+msgstr	"Izina: Na Amahitamo kugirango external By'imbere kugirango in"
+
+#: src/lang.c:1747
+#, fuzzy
+msgid	"MIME binary content viewer"
+msgstr	"Nyabibiri Ibikubiyemo"
+
+#: src/lang.c:1748
+#, fuzzy
+msgid	"# If --internal automatically use the built in MIME viewer for non-text\n"
+	"# parts of articles.\n"
+	"# Otherwise specify an external viewer program (eg, metamail) or leave blank\n"
+	"# for no automatic viewing\n"
+msgstr	"#By'imbere ku buryo bwikora Gukoresha i in kugirango Bya external Porogaramu "
+	"Cyangwa kugirango Oya Byikoresha"
+
+#: src/lang.c:1755
+#, fuzzy
+msgid	"Confirm before starting non-text viewing program"
+msgstr	"Mbere Umwandiko Porogaramu"
+
+#: src/lang.c:1756
+#, fuzzy
+msgid	"Ask before using MIME viewer"
+msgstr	"Mbere ikoresha"
+
+#: src/lang.c:1757
+#, fuzzy
+msgid	"# If ON tin will ask before using metamail to display MIME messages\n"
+	"# this only happens if metamail_prog is set to something\n"
+msgstr	"#Mbere ikoresha Kuri Kugaragaza iyi NIBA ni Gushyiraho Kuri"
+
+#: src/lang.c:1762
+#, fuzzy
+msgid	"Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
+msgstr	"Kuri Ikimenyetso Amatsinda Gusoma Ryari:"
+
+#: src/lang.c:1763
+#, fuzzy
+msgid	"Catchup read groups when quitting"
+msgstr	"Gusoma Amatsinda Ryari:"
+
+#: src/lang.c:1764
+#, fuzzy
+msgid	"# If ON ask user if read groups should all be marked read\n"
+msgstr	"#Ukoresha: NIBA Gusoma Amatsinda Byose cy/ byagarajwe"
+
+#: src/lang.c:1769
+#, fuzzy
+msgid	"Catchup group using left key"
+msgstr	"Itsinda ikoresha Ibumoso: Urufunguzo"
+
+#: src/lang.c:1770
+#, fuzzy
+msgid	"# If ON catchup group/thread when leaving with the left arrow key.\n"
+msgstr	"#Itsinda Urudodo Ryari: Na: i Ibumoso: Akambi Urufunguzo"
+
+#: src/lang.c:1775
+#, fuzzy
+msgid	"Catchup thread by using left key"
+msgstr	"Urudodo ku ikoresha Ibumoso: Urufunguzo"
+
+#: src/lang.c:1781
+#, fuzzy
+msgid	"Which actions require confirmation"
+msgstr	"Iyemeza"
+
+#: src/lang.c:1782
+#, fuzzy
+msgid	"# What should we ask confirmation for.\n"
+msgstr	"#Twebwe Iyemeza kugirango"
+
+#: src/lang.c:1787
+#, fuzzy
+msgid	"'Mark article read' ignores tags"
+msgstr	"'Ingingo"
+
+#: src/lang.c:1788
+#, fuzzy
+msgid	"# If ON the 'Mark article read' function marks only the current article.\n"
+msgstr	"#i Ingingo Umumaro i KIGEZWEHO Ingingo"
+
+#: src/lang.c:1792
+#, fuzzy
+msgid	"Program to run to open URL's, <CR> sets, <ESC> cancels."
+msgstr	"Kuri Gukoresha Kuri Gufungura"
+
+#: src/lang.c:1793
+msgid	"Program that opens URL's"
+msgstr	""
+
+#: src/lang.c:1794
+#, fuzzy
+msgid	"# The program used to open URL's. The actual URL will be appended\n"
+msgstr	"#Porogaramu Kuri Gufungura"
+
+#: src/lang.c:1799
+#, fuzzy
+msgid	"Use mouse in xterm"
+msgstr	"Imbeba in"
+
+#: src/lang.c:1800
+#, fuzzy
+msgid	"# If ON enable mouse key support on xterm terminals\n"
+msgstr	"#Gushoboza Imbeba Urufunguzo Gushigikira ku"
+
+#: src/lang.c:1806
+#, fuzzy
+msgid	"Use scroll keys on keypad"
+msgstr	"Utubuto ku"
+
+#: src/lang.c:1807
+#, fuzzy
+msgid	"# If ON enable scroll keys on terminals that support it\n"
+msgstr	"#Gushoboza Utubuto ku Gushigikira"
+
+#: src/lang.c:1812
+#, fuzzy
+msgid	"Enter maximum number of article to get. <CR> sets."
+msgstr	"Kinini Umubare Bya Ingingo Kuri Kubona"
+
+#: src/lang.c:1813
+#, fuzzy
+msgid	"Number of articles to get"
+msgstr	"Bya Kuri Kubona"
+
+#: src/lang.c:1814
+#, fuzzy
+msgid	"# Number of articles to get (0=no limit), if negative sets maximum number\n"
+	"# of already read articles to be read before first unread one\n"
+msgstr	"#Bya Kuri Kubona 0 Oya NIBA Kinini Bya Gusoma Kuri Gusoma Mbere Itangira "
+	"Bidasomye"
+
+#: src/lang.c:1819
+#, fuzzy
+msgid	"Enter number of days article is considered recent. <CR> sets."
+msgstr	"Umubare Bya Iminsi Ingingo ni"
+
+#: src/lang.c:1820
+#, fuzzy
+msgid	"Article recentness time limit"
+msgstr	"Igihe"
+
+#: src/lang.c:1821
+#, fuzzy
+msgid	"# Number of days in which article is considered recent, (0=OFF)\n"
+msgstr	"#Bya Iminsi in Ingingo ni 0"
+
+#: src/lang.c:1825
+#, fuzzy
+msgid	"WILDMAT for normal wildcards, REGEX for full regular expression matching."
+msgstr	"kugirango Bisanzwe kugirango Ibisanzwe imvugo"
+
+#: src/lang.c:1826
+msgid	"Wildcard matching"
+msgstr	""
+
+#: src/lang.c:1827
+#, fuzzy
+msgid	"# Wildcard matching\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = wildmat\n"
+	"#   1 = regex\n"
+msgstr	"#Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1."
+
+#: src/lang.c:1834
+#, fuzzy
+msgid	"Enter minimal score before an article is marked killed. <CR> sets."
+msgstr	"Mbere Ingingo ni cy/ byagarajwe"
+
+#: src/lang.c:1835
+msgid	"Score limit (kill)"
+msgstr	""
+
+#: src/lang.c:1836
+#, fuzzy
+msgid	"# Score limit before an article is marked killed\n"
+msgstr	"#Mbere Ingingo ni cy/ byagarajwe"
+
+#: src/lang.c:1840
+#, fuzzy
+msgid	"Enter default score to kill articles. <CR> sets."
+msgstr	"Mburabuzi Kuri"
+
+#: src/lang.c:1841
+#, fuzzy
+msgid	"Default score to kill articles"
+msgstr	"Kuri"
+
+#: src/lang.c:1842
+#, fuzzy
+msgid	"# Default score to kill articles\n"
+msgstr	"#Kuri"
+
+#: src/lang.c:1846
+#, fuzzy
+msgid	"Enter minimal score before an article is marked hot. <CR> sets."
+msgstr	"Mbere Ingingo ni cy/ byagarajwe"
+
+#: src/lang.c:1847
+#, fuzzy
+msgid	"Score limit (select)"
+msgstr	"Guhitamo"
+
+#: src/lang.c:1848
+#, fuzzy
+msgid	"# Score limit before an article is marked hot\n"
+msgstr	"#Mbere Ingingo ni cy/ byagarajwe"
+
+#: src/lang.c:1852
+#, fuzzy
+msgid	"Enter default score to select articles. <CR> sets."
+msgstr	"Mburabuzi Kuri Guhitamo"
+
+#: src/lang.c:1853
+#, fuzzy
+msgid	"Default score to select articles"
+msgstr	"Kuri Guhitamo"
+
+#: src/lang.c:1854
+#, fuzzy
+msgid	"# Default score to select articles\n"
+msgstr	"#Kuri Guhitamo"
+
+#: src/lang.c:1860
+#, fuzzy
+msgid	"Use slrnface to show ''X-Face:''s"
+msgstr	"Kuri Garagaza S"
+
+#: src/lang.c:1861
+#, fuzzy
+msgid	"# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
+	"# Only useful when running in an xterm.\n"
+msgstr	"#ikoresha 1. Kuri i Umutwempangano Ryari: in"
+
+#: src/lang.c:1869
+#, fuzzy
+msgid	"Use ANSI color"
+msgstr	"Ibara"
+
+#: src/lang.c:1870
+#, fuzzy
+msgid	"# If ON using ANSI-color\n"
+msgstr	"#ikoresha"
+
+#: src/lang.c:1875
+#, fuzzy
+msgid	"Standard foreground color"
+msgstr	"Ibara"
+
+#: src/lang.c:1876
+#, fuzzy
+msgid	"# Standard foreground color\n"
+	"# Default: -1 (default color)\n"
+msgstr	"#1. Mburabuzi Ibara"
+
+#: src/lang.c:1882
+#, fuzzy
+msgid	"Standard background color"
+msgstr	"Mbuganyuma Ibara"
+
+#: src/lang.c:1883
+#, fuzzy
+msgid	"# Standard background color\n"
+	"# Default: -1 (default color)\n"
+msgstr	"#Mbuganyuma 1. Mburabuzi Ibara"
+
+#: src/lang.c:1889
+#, fuzzy
+msgid	"Color for inverse text (background)"
+msgstr	"kugirango Umwandiko Mbuganyuma"
+
+#: src/lang.c:1890
+#, fuzzy
+msgid	"# Color of background for inverse text\n"
+	"# Default: 4 (blue)\n"
+msgstr	"#Bya Mbuganyuma kugirango 4. Ubururu"
+
+#: src/lang.c:1896
+#, fuzzy
+msgid	"Color for inverse text (foreground)"
+msgstr	"kugirango Umwandiko"
+
+#: src/lang.c:1897
+#, fuzzy
+msgid	"# Color of foreground for inverse text\n"
+	"# Default: 7 (white)\n"
+msgstr	"#Bya kugirango 7 Umweru"
+
+#: src/lang.c:1903
+#, fuzzy
+msgid	"Color of text lines"
+msgstr	"Bya Umwandiko Imirongo"
+
+#: src/lang.c:1904
+#, fuzzy
+msgid	"# Color of text lines\n"
+	"# Default: -1 (default color)\n"
+msgstr	"#Bya Umwandiko 1. Mburabuzi Ibara"
+
+#: src/lang.c:1910
+#, fuzzy
+msgid	"Color of mini help menu"
+msgstr	"Bya Ifashayobora Ibikubiyemo"
+
+#: src/lang.c:1911
+#, fuzzy
+msgid	"# Color of mini help menu\n"
+	"# Default: 3 (brown)\n"
+msgstr	"#Bya Ifashayobora 3. Igihogo"
+
+#: src/lang.c:1917
+#, fuzzy
+msgid	"Color of help text"
+msgstr	"Bya Ifashayobora Umwandiko"
+
+#: src/lang.c:1918
+#, fuzzy
+msgid	"# Color of help pages\n"
+	"# Default: -1 (default color)\n"
+msgstr	"#Bya Ifashayobora 1. Mburabuzi Ibara"
+
+#: src/lang.c:1924
+#, fuzzy
+msgid	"Color of status messages"
+msgstr	"Bya Imimerere Ubutumwa"
+
+#: src/lang.c:1925
+#, fuzzy
+msgid	"# Color of messages in last line\n"
+	"# Default: 6 (cyan)\n"
+msgstr	"#Bya Ubutumwa in Iheruka 6 Ubururu bukeye"
+
+#: src/lang.c:1931
+#, fuzzy
+msgid	"Color of quoted lines"
+msgstr	"Bya Imirongo"
+
+#: src/lang.c:1932
+#, fuzzy
+msgid	"# Color of quote-lines\n"
+	"# Default: 2 (green)\n"
+msgstr	"#Bya Gushyiraho akugarizo 2. Icyatsi"
+
+#: src/lang.c:1938
+#, fuzzy
+msgid	"Color of twice quoted line"
+msgstr	"Bya Umurongo"
+
+#: src/lang.c:1939
+#, fuzzy
+msgid	"# Color of twice quoted lines\n"
+	"# Default: 3 (brown)\n"
+msgstr	"#Bya 3. Igihogo"
+
+#: src/lang.c:1945
+#, fuzzy
+msgid	"Color of =>3 times quoted line"
+msgstr	"Bya 3. Times Umurongo"
+
+#: src/lang.c:1946
+#, fuzzy
+msgid	"# Color of >=3 times quoted lines\n"
+	"# Default: 4 (blue)\n"
+msgstr	"#Bya 3. Times 4. Ubururu"
+
+#: src/lang.c:1952
+#, fuzzy
+msgid	"Color of article header lines"
+msgstr	"Bya Ingingo Umutwempangano Imirongo"
+
+#: src/lang.c:1953
+#, fuzzy
+msgid	"# Color of header-lines\n"
+	"# Default: 2 (green)\n"
+msgstr	"#Bya Umutwempangano 2. Icyatsi"
+
+#: src/lang.c:1959
+#, fuzzy
+msgid	"Color of actual news header fields"
+msgstr	"Bya Amakuru Umutwempangano Imyanya"
+
+#: src/lang.c:1960
+#, fuzzy
+msgid	"# Color of actual news header fields\n"
+	"# Default: 9 (light red)\n"
+msgstr	"#Bya Amakuru Umutwempangano 9 kimurika Umutuku"
+
+#: src/lang.c:1966
+#, fuzzy
+msgid	"Color of article subject lines"
+msgstr	"Bya Ingingo Ikivugwaho Imirongo"
+
+#: src/lang.c:1967
+#, fuzzy
+msgid	"# Color of article subject\n"
+	"# Default: 6 (cyan)\n"
+msgstr	"#Bya Ingingo 6 Ubururu bukeye"
+
+#: src/lang.c:1973
+#, fuzzy
+msgid	"Color of response counter"
+msgstr	"Bya"
+
+#: src/lang.c:1974
+#, fuzzy
+msgid	"# Color of response counter\n"
+	"# Default: 2 (green)\n"
+msgstr	"#Bya 2. Icyatsi"
+
+#: src/lang.c:1980
+#, fuzzy
+msgid	"Color of sender (From:)"
+msgstr	"Bya Uwohereza"
+
+#: src/lang.c:1981
+#, fuzzy
+msgid	"# Color of sender (From:)\n"
+	"# Default: 2 (green)\n"
+msgstr	"#Bya Uwohereza 2. Icyatsi"
+
+#: src/lang.c:1987
+#, fuzzy
+msgid	"Color of help/mail sign"
+msgstr	"Bya Ifashayobora Ubutumwa IKIMENYETSO"
+
+#: src/lang.c:1988
+#, fuzzy
+msgid	"# Color of Help/Mail-Sign\n"
+	"# Default: 4 (blue)\n"
+msgstr	"#Bya 4. Ubururu"
+
+#: src/lang.c:1994
+#, fuzzy
+msgid	"Color of signatures"
+msgstr	"Bya"
+
+#: src/lang.c:1995
+#, fuzzy
+msgid	"# Color of signature\n"
+	"# Default: 4 (blue)\n"
+msgstr	"#Bya 4. Ubururu"
+
+#: src/lang.c:2001
+#, fuzzy
+msgid	"Color of highlighted URLs"
+msgstr	"Bya"
+
+#: src/lang.c:2002
+#, fuzzy
+msgid	"# Color of highlighted URLs\n"
+	"# Default: -1 (default color)\n"
+msgstr	"#Bya 1. Mburabuzi Ibara"
+
+#: src/lang.c:2008
+#, fuzzy
+msgid	"Color of highlighting with *stars*"
+msgstr	"Bya Igaragaza cyane Na: Inyenyeri"
+
+#: src/lang.c:2009
+#, fuzzy
+msgid	"# Color of word highlighting with *stars*\n"
+	"# Default: 11 (yellow)\n"
+msgstr	"#Bya ijambo Igaragaza cyane Na: Inyenyeri Umuhondo"
+
+#: src/lang.c:2015
+#, fuzzy
+msgid	"Color of highlighting with _dash_"
+msgstr	"Bya Igaragaza cyane Na: AKANYEREZO"
+
+#: src/lang.c:2016
+#, fuzzy
+msgid	"# Color of word highlighting with _dash_\n"
+	"# Default: 13 (light pink)\n"
+msgstr	"#Bya ijambo Igaragaza cyane Na: kimurika"
+
+#: src/lang.c:2022
+#, fuzzy
+msgid	"Color of highlighting with /slash/"
+msgstr	"Bya Igaragaza cyane Na: AKARONGOKABERAMYE"
+
+#: src/lang.c:2023
+#, fuzzy
+msgid	"# Color of word highlighting with /slash/\n"
+	"# Default: 14 (light cyan)\n"
+msgstr	"#Bya ijambo Igaragaza cyane Na: AKARONGOKABERAMYE 14 kimurika Ubururu bukeye"
+
+#: src/lang.c:2029
+#, fuzzy
+msgid	"Color of highlighting with -stroke-"
+msgstr	"Bya Igaragaza cyane Na: Akarongo"
+
+#: src/lang.c:2030
+#, fuzzy
+msgid	"# Color of word highlighting with -stroke-\n"
+	"# Default: 12 (light blue)\n"
+msgstr	"#Bya ijambo Igaragaza cyane Na: Akarongo 12 kimurika Ubururu"
+
+#: src/lang.c:2037
+#, fuzzy
+msgid	"Attr. of highlighting with *stars*"
+msgstr	"Bya Igaragaza cyane Na: Inyenyeri"
+
+#: src/lang.c:2038
+#, fuzzy
+msgid	"# Attributes of word highlighting on mono terminals\n"
+	"# Possible values are:\n"
+	"#   0 = Normal\n"
+	"#   1 = Underline\n"
+	"#   2 = Best highlighting\n"
+	"#   3 = Reverse video\n"
+	"#   4 = Blinking\n"
+	"#   5 = Half bright\n"
+	"#   6 = Bold\n"
+	"\n"
+	"# Attribute of word highlighting with *stars*\n"
+	"# Default: 6 (bold)\n"
+msgstr	"#Bya ijambo Igaragaza cyane ku Uduciro 0 1. 2. 3. 4. 5 6 Bya ijambo Igaragaza "
+	"cyane Na: Inyenyeri 6 UTSINDAGIYE"
+
+#: src/lang.c:2053
+#, fuzzy
+msgid	"Attr. of highlighting with _dash_"
+msgstr	"Bya Igaragaza cyane Na: AKANYEREZO"
+
+#: src/lang.c:2054
+#, fuzzy
+msgid	"# Attribute of word highlighting with _dash_\n"
+	"# Default: 2 (best highlighting)\n"
+msgstr	"#Bya ijambo Igaragaza cyane Na: 2. Igaragaza cyane"
+
+#: src/lang.c:2060
+#, fuzzy
+msgid	"Attr. of highlighting with /slash/"
+msgstr	"Bya Igaragaza cyane Na: AKARONGOKABERAMYE"
+
+#: src/lang.c:2061
+#, fuzzy
+msgid	"# Attribute of word highlighting with /slash/\n"
+	"# Default: 5 (half bright)\n"
+msgstr	"#Bya ijambo Igaragaza cyane Na: AKARONGOKABERAMYE 5 Bibonerana"
+
+#: src/lang.c:2067
+#, fuzzy
+msgid	"Attr. of highlighting with -stroke-"
+msgstr	"Bya Igaragaza cyane Na: Akarongo"
+
+#: src/lang.c:2068
+#, fuzzy
+msgid	"# Attribute of word highlighting with -stroke-\n"
+	"# Default: 3 (reverse video)\n"
+msgstr	"#Bya ijambo Igaragaza cyane Na: Akarongo 3. Ihindurakerekezo Videwo..."
+
+#: src/lang.c:2074
+#, fuzzy
+msgid	"URL highlighting in message body"
+msgstr	"Igaragaza cyane in Ubutumwa Umubiri"
+
+#: src/lang.c:2075
+#, fuzzy
+msgid	"# Enable URL highlighting?\n"
+msgstr	"#Igaragaza cyane"
+
+#: src/lang.c:2080
+#, fuzzy
+msgid	"Word highlighting in message body"
+msgstr	"Igaragaza cyane in Ubutumwa Umubiri"
+
+#: src/lang.c:2081
+#, fuzzy
+msgid	"# Enable word highlighting?\n"
+msgstr	"#ijambo Igaragaza cyane"
+
+#: src/lang.c:2086
+#, fuzzy
+msgid	"What to display instead of mark"
+msgstr	"Kuri Kugaragaza Bya Ikimenyetso"
+
+#: src/lang.c:2087
+#, fuzzy
+msgid	"# Should the leading and ending stars and dashes also be displayed,\n"
+	"# even when they are highlighting marks?\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = no\n"
+	"#   1 = yes, display mark\n"
+	"# * 2 = print a space instead\n"
+msgstr	"#i Nyobora Na Inyenyeri Na Utunyerezo ATARIIGIHARWE Ryari: Igaragaza cyane "
+	"Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. Yego Kugaragaza 2. Gucapa a "
+	"Umwanya"
+
+#: src/lang.c:2096
+#, fuzzy
+msgid	"Enter column number to wrap article lines to in the pager. <CR> sets."
+msgstr	"Inkingi Umubare Kuri Gufunika Ingingo Imirongo Kuri in i Peja"
+
+#: src/lang.c:2097
+#, fuzzy
+msgid	"Page line wrap column"
+msgstr	"Umurongo Gufunika Inkingi"
+
+#: src/lang.c:2098
+#, fuzzy
+msgid	"# Wrap article lines at column\n"
+msgstr	"#Ingingo Imirongo ku"
+
+#: src/lang.c:2103
+#, fuzzy
+msgid	"Wrap around threads on next unread"
+msgstr	"ku Komeza>> Bidasomye"
+
+#: src/lang.c:2104
+#, fuzzy
+msgid	"# If ON wrap around threads on searching next unread article\n"
+msgstr	"#Gufunika ku Ishakisha Komeza>> Bidasomye"
+
+#: src/lang.c:2108
+#, fuzzy
+msgid	"Enter default mail address (and fullname). <CR> sets."
+msgstr	"Mburabuzi Ubutumwa Aderesi Na"
+
+#: src/lang.c:2109
+#, fuzzy
+msgid	"Mail address (and fullname)"
+msgstr	"Aderesi Na"
+
+#: src/lang.c:2110
+#, fuzzy
+msgid	"# User's mail address (and fullname), if not username@host (fullname)\n"
+msgstr	"#Ubutumwa Aderesi Na NIBA OYA Izina ry'ukoresha Ubuturo"
+
+#: src/lang.c:2115
+#, fuzzy
+msgid	"Show empty Followup-To in editor"
+msgstr	"ubusa in Muhinduzi"
+
+#: src/lang.c:2116
+#, fuzzy
+msgid	"# If ON show empty Followup-To header when editing an article\n"
+msgstr	"#Garagaza ubusa Umutwempangano Ryari:"
+
+#: src/lang.c:2120
+#, fuzzy
+msgid	"Enter path/! command/--none to create your default signature. <CR> sets."
+msgstr	"Inzira Komandi: Ntacyo Kuri Kurema Mburabuzi Isinya"
+
+#: src/lang.c:2121
+#, fuzzy
+msgid	"Create signature from path/command"
+msgstr	"Isinya Bivuye Inzira Komandi:"
+
+#: src/lang.c:2122
+#, fuzzy
+msgid	"# Signature path (random sigs)/file to be used when posting/replying\n"
+	"# default_sigfile=file       appends file as signature\n"
+	"# default_sigfile=!command   executes external command to generate a "
+	"signature\n"
+	"# default_sigfile=--none     don't append a signature\n"
+msgstr	"#Inzira IDOSIYE Kuri Ryari: IDOSIYE IDOSIYE Nka Komandi: external Komandi: "
+	"Kuri a Ntacyo Kongeraho... a"
+
+#: src/lang.c:2129
+#, fuzzy
+msgid	"Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
+msgstr	"Isinya Na: ku Umurongo"
+
+#: src/lang.c:2130
+#, fuzzy
+msgid	"Prepend signature with \"-- \""
+msgstr	"Isinya Na:"
+
+#: src/lang.c:2131
+#, fuzzy
+msgid	"# If ON prepend the signature with dashes '\\n-- \\n'\n"
+msgstr	"#i Isinya Na: Utunyerezo N"
+
+#: src/lang.c:2135
+#, fuzzy
+msgid	"Add signature when reposting articles. <SPACE> toggles & <CR> sets."
+msgstr	"Isinya Ryari:"
+
+#: src/lang.c:2136
+#, fuzzy
+msgid	"Add signature when reposting"
+msgstr	"Isinya Ryari:"
+
+#: src/lang.c:2137
+#, fuzzy
+msgid	"# If ON add signature to reposted articles\n"
+msgstr	"#Kongeramo Isinya Kuri"
+
+#: src/lang.c:2141
+#, fuzzy, c-format
+msgid	"Enter quotation marks, %s or %S for author's initials."
+msgstr	"Gusubiramo ibyavuzwe Cyangwa kugirango Izibanza"
+
+#: src/lang.c:2142
+#, fuzzy
+msgid	"Characters used as quote-marks"
+msgstr	"Nka Gushyiraho akugarizo"
+
+#: src/lang.c:2143
+#, fuzzy, c-format
+msgid	"# Characters used in quoting to followups and replies.\n"
+	"# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
+msgstr	"#in Kuri Na ni ku ku Izibanza"
+
+#: src/lang.c:2149
+#, fuzzy
+msgid	"Quoting behavior"
+msgstr	"imyitwarire"
+
+#: src/lang.c:2150
+#, fuzzy
+msgid	"# How quoting should be handled when following up or replying.\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = Nothing special\n"
+	"#   1 = Compress quotes\n"
+	"#   2 = Quote signatures\n"
+	"#   3 = Compress quotes, quote signatures\n"
+	"#   4 = Quote empty lines\n"
+	"# * 5 = Compress quotes, quote empty lines\n"
+	"#   6 = Quote signatures, quote empty lines\n"
+	"#   7 = Compress quotes, quote signatures, quote empty lines\n"
+msgstr	"#Ryari: Hejuru Cyangwa Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2. 3. "
+	"Gushyiraho akugarizo 4. ubusa 5 Gushyiraho akugarizo ubusa 6 Gushyiraho "
+	"akugarizo ubusa 7 Gushyiraho akugarizo Gushyiraho akugarizo ubusa"
+
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
+msgid	"%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
+msgstr	""
+
+#: src/lang.c:2164
+#, fuzzy
+msgid	"Quote line when following up"
+msgstr	"Umurongo Ryari: Hejuru"
+
+#: src/lang.c:2165
+#, fuzzy, c-format
+msgid	"# Format of quote line when mailing/posting/following-up an article\n"
+	"# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
+	"# %%N Full Name  %%C First Name   %%I Initials\n"
+msgstr	"#Bya Gushyiraho akugarizo Umurongo Ryari: Hejuru"
+
+#: src/lang.c:2172
+#, fuzzy
+msgid	"Quote line when cross-posting"
+msgstr	"Umurongo Ryari: Kwambukiranya"
+
+#: src/lang.c:2178
+#, fuzzy
+msgid	"Quote line when mailing"
+msgstr	"Umurongo Ryari:"
+
+#: src/lang.c:2183
+#, fuzzy
+msgid	"If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
+msgstr	"Gushyiramo Umutwempangano"
+
+#: src/lang.c:2184
+#, fuzzy
+msgid	"Insert 'User-Agent:'-header"
+msgstr	"Umutwempangano"
+
+#: src/lang.c:2185
+#, fuzzy
+msgid	"# If ON include advertising User-Agent: header\n"
+msgstr	"#Gushyiramo"
+
+#: src/lang.c:2190
+#, fuzzy
+msgid	"Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
+msgstr	"g."
+
+#: src/lang.c:2191
+msgid	"MM_CHARSET"
+msgstr	""
+
+#: src/lang.c:2192
+#, fuzzy
+msgid	"# Charset supported locally which is also used for MIME header and\n"
+	"# Content-Type header.\n"
+	"# If not set, the value of the environment variable MM_CHARSET is used.\n"
+	"# Set to US-ASCII or compile time default if neither of them is defined.\n"
+	"# If MIME_STRICT_CHARSET is defined at compile-time, charset other than\n"
+	"# mm_charset is considered not displayable and represented as '?'.\n"
+msgstr	"#Project- Id- Version: basctl\n"
+	"POT- Creation- Date: 2003- 12- 07 17: 13+ 02\n"
+	"PO- Revision- Date: 2004- 11- 04 10: 13- 0700\n"
+	"Last- Translator: Language- Team:< en@ li. org> MIME- Version: 1. 0\n"
+	"Content- Type: text/ plain; charset= UTF- 8\n"
+	"Content- Transfer- Encoding: 8bit\n"
+	"X- Generator: KBabel 1. 0\n"
+	"."
+
+#: src/lang.c:2202
+msgid	"MM_NETWORK_CHARSET"
+msgstr	""
+
+#: src/lang.c:2203
+#, fuzzy
+msgid	"# Charset used for MIME (Content-Type) header in postings.\n"
+msgstr	"#kugirango Umutwempangano in"
+
+#: src/lang.c:2209
+#, fuzzy
+msgid	"Mailbox format"
+msgstr	"Imiterere"
+
+#: src/lang.c:2210
+#, fuzzy
+msgid	"# Format of the mailbox.\n"
+msgstr	"#Bya i"
+
+#: src/lang.c:2215
+#, fuzzy
+msgid	"MIME encoding in news messages"
+msgstr	"Imisobekere: in Amakuru Ubutumwa"
+
+#: src/lang.c:2216
+#, fuzzy
+msgid	"# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
+	"# for mails and posts, if necessary. QP is efficient for most European\n"
+	"# character sets (ISO-8859-X) with small fraction of non-US-ASCII chars,\n"
+	"# while Base64 is more efficient for most 8bit East Asian, Greek, and\n"
+	"# Russian charsets with a lot of 8bit characters.\n"
+msgstr	"#Imisobekere: Gicapika Bya i kugirango Na NIBA ni kugirango Inyuguti Na: "
+	"Gitoya Imigabane Bya ni Birenzeho kugirango Na: a Bya Inyuguti"
+
+#: src/lang.c:2224 src/lang.c:2245
+#, fuzzy
+msgid	"Don't change unless you know what you are doing. <ESC> cancels."
+msgstr	"Guhindura>>"
+
+#: src/lang.c:2225
+#, fuzzy
+msgid	"Use 8bit characters in news headers"
+msgstr	"Inyuguti in Amakuru Imitwe"
+
+#: src/lang.c:2226
+#, fuzzy
+msgid	"# If ON, 8bit characters in news headers are NOT encoded.\n"
+	"# default is OFF. Thus 8bit characters are encoded by default.\n"
+	"# 8bit chars in header are encoded regardless of the value of this\n"
+	"# parameter unless post_mime_encoding is 8bit as well.\n"
+msgstr	"#Inyuguti in Amakuru Imitwe Mburabuzi ni Inyuguti ku Mburabuzi in "
+	"Umutwempangano Bya i Agaciro Bya ni Nka"
+
+#: src/lang.c:2233
+#, fuzzy
+msgid	"Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
+msgstr	"Kureba Iposita Idosiye"
+
+#: src/lang.c:2234
+#, fuzzy
+msgid	"View post-processed files"
+msgstr	"Iposita Idosiye"
+
+#: src/lang.c:2235
+#, fuzzy
+msgid	"# If set, post processed files will be opened in a viewer\n"
+msgstr	"#Gushyiraho Iposita Idosiye in a"
+
+#: src/lang.c:2240
+#, fuzzy
+msgid	"MIME encoding in mail messages"
+msgstr	"Imisobekere: in Ubutumwa Ubutumwa"
+
+#: src/lang.c:2246
+#, fuzzy
+msgid	"Use 8bit characters in mail headers"
+msgstr	"Inyuguti in Ubutumwa Imitwe"
+
+#: src/lang.c:2247
+#, fuzzy
+msgid	"# If ON, 8bit characters in mail headers are NOT encoded.\n"
+	"# default is OFF. Thus 8bit characters are encoded by default.\n"
+	"# 8bit chars in headers are encoded regardless of the value of this "
+	"parameter\n"
+	"# unless mail_mime_encoding is 8bit as well. Note that RFC 2822\n"
+	"# prohibits 8bit characters in mail headers so that you are advised NOT to\n"
+	"# turn it ON unless you have some compelling reason.\n"
+msgstr	"#Inyuguti in Ubutumwa Imitwe Mburabuzi ni Inyuguti ku Mburabuzi in Imitwe Bya "
+	"i Agaciro Bya iyi ni Nka Inyuguti in Ubutumwa Imitwe"
+
+#: src/lang.c:2257
+#, fuzzy
+msgid	"Strip blanks from ends of lines"
+msgstr	"Bivuye Bya Imirongo"
+
+#: src/lang.c:2258
+#, fuzzy
+msgid	"# If ON strip blanks from ends of lines for faster display on slow "
+	"terminals.\n"
+msgstr	"#Bivuye Bya Imirongo kugirango Kugaragaza ku Buhoro"
+
+#: src/lang.c:2263
+#, fuzzy
+msgid	"If ON, use transliteration. <SPACE> toggles & <CR> sets."
+msgstr	"Gukoresha"
+
+#: src/lang.c:2264
+msgid	"Transliteration"
+msgstr	""
+
+#: src/lang.c:2265
+#, fuzzy
+msgid	"# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
+	"# be represented in the in the target character set, it can be approximated\n"
+	"# through one or several similarly looking characters.\n"
+msgstr	"#Gukoresha Umugereka Ryari: a Inyuguti in i in i Intego Inyuguti Gushyiraho "
+	"Gihinguranya Cyangwa Inyuguti"
+
+#: src/lang.c:2272
+#, fuzzy
+msgid	"Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
+msgstr	"a Gukoporora ku buryo bwikora"
+
+#: src/lang.c:2273
+#, fuzzy
+msgid	"Send you a cc automatically"
+msgstr	"a KopiKubandi ku buryo bwikora"
+
+#: src/lang.c:2274
+#, fuzzy
+msgid	"# If ON automatically put your name in the Cc: field when mailing an article\n"
+msgstr	"#ku buryo bwikora Gushyira Izina: in i Umwanya Ryari:"
+
+#: src/lang.c:2278
+#, fuzzy
+msgid	"Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
+msgstr	"a Gukoporora ku buryo bwikora"
+
+#: src/lang.c:2279
+#, fuzzy
+msgid	"Send you a blind cc automatically"
+msgstr	"a KopiKubandi ku buryo bwikora"
+
+#: src/lang.c:2280
+#, fuzzy
+msgid	"# If ON automatically put your name in the Bcc: field when mailing an "
+	"article\n"
+msgstr	"#ku buryo bwikora Gushyira Izina: in i Umwanya Ryari:"
+
+#: src/lang.c:2284
+#, fuzzy
+msgid	"Enter address elements about which you want to be warned. <CR> sets."
+msgstr	"Aderesi Ibintu Ibyerekeye Kuri"
+
+#: src/lang.c:2285
+#, fuzzy
+msgid	"Spamtrap warning address parts"
+msgstr	"Iburira Aderesi"
+
+#: src/lang.c:2286
+#, fuzzy
+msgid	"# A comma-delimited list of address-parts you want to be warned\n"
+	"# about when trying to reply by email.\n"
+msgstr	"#A Akitso Urutonde Bya Aderesi Kuri Ibyerekeye Ryari: Kuri Subiza ku imeli"
+
+#: src/lang.c:2291
+#, fuzzy
+msgid	"Enter default number of days a filter entry will be valid. <CR> sets."
+msgstr	"Mburabuzi Umubare Bya Iminsi a Muyunguruzi... Icyinjijwe Byemewe"
+
+#: src/lang.c:2292
+#, fuzzy
+msgid	"No. of days a filter entry is valid"
+msgstr	"Bya Iminsi a Muyunguruzi... Icyinjijwe ni Byemewe"
+
+#: src/lang.c:2293
+#, fuzzy
+msgid	"# Number of days a short term filter will be active\n"
+msgstr	"#Bya Iminsi a Ijambo Muyunguruzi..."
+
+#: src/lang.c:2297
+#, fuzzy
+msgid	"Add posted articles to filter. <SPACE> toggles & <CR> sets."
+msgstr	"Kuri Muyunguruzi..."
+
+#: src/lang.c:2298
+#, fuzzy
+msgid	"Add posted articles to filter"
+msgstr	"Kuri Muyunguruzi..."
+
+#: src/lang.c:2299
+#, fuzzy
+msgid	"# If ON add posted articles which start a new thread to filter for\n"
+	"# highlighting follow-ups\n"
+msgstr	"#Kongeramo Gutangira a Gishya Urudodo Kuri Muyunguruzi... Igaragaza cyane"
+
+#: src/lang.c:2303
+#, fuzzy
+msgid	"The directory where articles/threads are to be saved in mailbox format."
+msgstr	"bushyinguro Kuri in Imiterere"
+
+#: src/lang.c:2304
+#, fuzzy
+msgid	"Mail directory"
+msgstr	"bushyinguro"
+
+#: src/lang.c:2305
+#, fuzzy
+msgid	"# (-m) directory where articles/threads are saved in mailbox format\n"
+msgstr	"#(-M bushyinguro in"
+
+#: src/lang.c:2310
+#, fuzzy
+msgid	"Save articles in batch mode (-S)"
+msgstr	"Kubika in Ubwoko"
+
+#: src/lang.c:2311
+#, fuzzy
+msgid	"# If ON articles/threads will be saved in batch mode when save -S\n"
+	"# or mail (-M/-N) is specified on the command line\n"
+msgstr	"#in Ubwoko Ryari: Kubika Cyangwa Ubutumwa ni ku i Komandi:"
+
+#: src/lang.c:2316
+#, fuzzy
+msgid	"The directory where you want articles/threads saved."
+msgstr	"bushyinguro"
+
+#: src/lang.c:2317
+#, fuzzy
+msgid	"Directory to save arts/threads in"
+msgstr	"Kuri Kubika in"
+
+#: src/lang.c:2318
+msgid	"# Directory where articles/threads are saved\n"
+msgstr	""
+
+#: src/lang.c:2322
+#, fuzzy
+msgid	"Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> sets."
+msgstr	"Kubika Ingingo Urudodo ku Izina: Umutwempangano"
+
+#: src/lang.c:2323
+#, fuzzy
+msgid	"Use Archive-name: header for save"
+msgstr	"Izina: Umutwempangano kugirango Kubika"
+
+#: src/lang.c:2324
+#, fuzzy
+msgid	"# If ON articles/threads with Archive-name: in mail header will\n"
+	"# be automatically saved with the Archive-name & part/patch no.\n"
+msgstr	"#Na: Izina: in Ubutumwa Umutwempangano ku buryo bwikora Na: i Izina: Oya"
+
+#: src/lang.c:2329
+#, fuzzy
+msgid	"Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
+	"cancels."
+msgstr	"Nka Gusoma"
+
+#: src/lang.c:2330
+#, fuzzy
+msgid	"Mark saved articles/threads as read"
+msgstr	"Nka Gusoma"
+
+#: src/lang.c:2331
+#, fuzzy
+msgid	"# If ON mark articles that are saved as read\n"
+msgstr	"#Ikimenyetso Nka"
+
+#: src/lang.c:2335
+#, fuzzy
+msgid	"Do post processing (eg. extract attachments) for saved articles."
+msgstr	"Iposita Inonosora Imigereka kugirango"
+
+#: src/lang.c:2336
+msgid	"Post process saved articles"
+msgstr	""
+
+#: src/lang.c:2337
+#, fuzzy
+msgid	"# Perform post processing (saving binary attachments) from saved articles.\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = no\n"
+	"#   1 = extract shell archives (shar) only\n"
+	"#   2 = yes\n"
+msgstr	"#Iposita Inonosora Mu kubika Nyabibiri Imigereka Bivuye Uduciro i Mburabuzi "
+	"ni cy/ byagarajwe Na: 0 1. Igikonoshwa Ubushyinguro 2."
+
+#: src/lang.c:2346
+#, fuzzy
+msgid	"Process only unread articles"
+msgstr	"Bidasomye"
+
+#: src/lang.c:2347
+#, fuzzy
+msgid	"# If ON only save/print/pipe/mail unread articles (tagged articles excepted)\n"
+msgstr	"#Kubika Gucapa Ubutumwa Bidasomye"
+
+#: src/lang.c:2352
+#, fuzzy
+msgid	"Print all or just part of header. <SPACE> toggles & <CR> sets."
+msgstr	"Byose Cyangwa Bya Umutwempangano"
+
+#: src/lang.c:2353
+#, fuzzy
+msgid	"Print all headers when printing"
+msgstr	"Byose Imitwe Ryari: Icapa..."
+
+#: src/lang.c:2354
+#, fuzzy
+msgid	"# If ON print all of article header otherwise just the important lines\n"
+msgstr	"#Gucapa Byose Bya Ingingo Umutwempangano i By'ingirakamaro"
+
+#: src/lang.c:2358
+#, fuzzy
+msgid	"The printer program with options that is to be used to print articles/threads."
+msgstr	"Mucapyi Porogaramu Na: Amahitamo ni Kuri Kuri Gucapa"
+
+#: src/lang.c:2359
+#, fuzzy
+msgid	"Printer program with options"
+msgstr	"Porogaramu Na: Amahitamo"
+
+#: src/lang.c:2360
+#, fuzzy
+msgid	"# Print program with parameters used to print articles/threads\n"
+msgstr	"#Porogaramu Na: Ibigenga Kuri Gucapa"
+
+#: src/lang.c:2366
+#, fuzzy
+msgid	"Force redraw after certain commands"
+msgstr	"Kongera Gushushanya Nyuma Amabwiriza"
+
+#: src/lang.c:2367
+#, fuzzy
+msgid	"# If ON a screen redraw will always be done after certain external commands\n"
+msgstr	"#a Mugaragaza Kongera Gushushanya Buri gihe Byakozwe Nyuma external"
+
+#: src/lang.c:2371
+#, fuzzy
+msgid	"Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
+msgstr	"Gutangira Muhinduzi Na: Umurongo Nta- boneza"
+
+#: src/lang.c:2372
+#, fuzzy
+msgid	"Start editor with line offset"
+msgstr	"Gutangira Muhinduzi Na: Umurongo Nta- boneza"
+
+#: src/lang.c:2373
+#, fuzzy
+msgid	"# If ON editor will be started with cursor offset into the file\n"
+	"# otherwise the cursor will be positioned at the first line\n"
+msgstr	"#Muhinduzi Na: indanga Nta- boneza i i indanga ku i Itangira"
+
+#: src/lang.c:2378
+#, fuzzy
+msgid	"Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
+msgstr	"kugirango Muhinduzi kugirango Izina ry'idosiye: kugirango Umurongo Umubare "
+	"Kuri Gushyiraho"
+
+#: src/lang.c:2379
+#, fuzzy
+msgid	"Invocation of your editor"
+msgstr	"Bya Muhinduzi"
+
+#: src/lang.c:2380
+#, fuzzy, c-format
+msgid	"# Format of editor line including parameters\n"
+	"# %%E Editor  %%F Filename  %%N Linenumber\n"
+msgstr	"#Bya Muhinduzi Umurongo"
+
+#: src/lang.c:2385
+#, fuzzy
+msgid	"Enter name and options for external-inews, --internal for internal inews"
+msgstr	"Izina: Na Amahitamo kugirango external By'imbere kugirango By'imbere"
+
+#: src/lang.c:2386
+msgid	"External inews"
+msgstr	""
+
+#: src/lang.c:2387
+#, fuzzy
+msgid	"# If --internal use the built in mini inews for posting via NNTP\n"
+	"# otherwise use an external inews program\n"
+msgstr	"#By'imbere Gukoresha i in kugirango Biturutse Gukoresha external"
+
+#: src/lang.c:2391
+#, fuzzy
+msgid	"Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
+msgstr	"kugirango Uwanditse kugirango Ikivugwaho kugirango Kuri kugirango Izina "
+	"ry'idosiye: Kuri Gushyiraho"
+
+#: src/lang.c:2392
+#, fuzzy
+msgid	"Invocation of your mail command"
+msgstr	"Bya Ubutumwa Komandi:"
+
+#: src/lang.c:2393
+#, fuzzy, c-format
+msgid	"# Format of mailer line including parameters\n"
+	"# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
+	"# ie. to use elm as your mailer:    elm -s \"%%S\" \"%%T\" < %%F\n"
+	"# ie. elm interactive          :    elm -i %%F -s \"%%S\" \"%%T\"\n"
+msgstr	"#Bya Uwanditse Umurongo Kuri Gukoresha Nka Uwanditse S Biganira i S"
+
+#: src/lang.c:2401
+#, fuzzy
+msgid	"Use interactive mail reader"
+msgstr	"Biganira Ubutumwa"
+
+#: src/lang.c:2402
+#, fuzzy
+msgid	"# Interactive mailreader\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = no interactive mailreader\n"
+	"#   1 = use interactive mailreader with headers in file\n"
+	"#   2 = use interactive mailreader without headers in file\n"
+msgstr	"#Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 Oya Biganira 1. Gukoresha "
+	"Biganira Na: Imitwe in 2. Gukoresha Biganira Imitwe in"
+
+#: src/lang.c:2411
+#, fuzzy
+msgid	"Remove ~/.article after posting"
+msgstr	"Ingingo Nyuma"
+
+#: src/lang.c:2412
+#, fuzzy
+msgid	"# If ON remove ~/.article after posting.\n"
+msgstr	"#Gukuraho... Ingingo Nyuma"
+
+#: src/lang.c:2416
+#, fuzzy
+msgid	"Filename for all posted articles, <CR> sets, no filename=do not save."
+msgstr	"kugirango Byose Oya Izina ry'idosiye: OYA Kubika"
+
+#: src/lang.c:2417
+#, fuzzy
+msgid	"Filename for posted articles"
+msgstr	"kugirango"
+
+#: src/lang.c:2418
+#, fuzzy
+msgid	"# Filename where to keep all postings (default posted)\n"
+	"# If no filename is set then postings will not be saved\n"
+msgstr	"#Kuri Gumana: Byose Mburabuzi Oya Izina ry'idosiye: ni Gushyiraho Hanyuma OYA"
+
+#: src/lang.c:2423
+#, fuzzy
+msgid	"Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
+msgstr	"Byose Byanze in"
+
+#: src/lang.c:2424
+#, fuzzy
+msgid	"Keep failed arts in ~/dead.articles"
+msgstr	"Byanze in"
+
+#: src/lang.c:2425
+#, fuzzy
+msgid	"# If ON keep all failed postings in ~/dead.articles\n"
+msgstr	"#Gumana: Byose Byanze in"
+
+#: src/lang.c:2429
+#, fuzzy
+msgid	"Do you want to strip unsubscribed groups from .newsrc"
+msgstr	"Kuri Amatsinda Bivuye"
+
+#: src/lang.c:2430
+#, fuzzy
+msgid	"No unsubscribed groups in newsrc"
+msgstr	"Amatsinda in"
+
+#: src/lang.c:2431
+#, fuzzy
+msgid	"# If ON strip unsubscribed groups from newsrc\n"
+msgstr	"#Amatsinda Bivuye"
+
+#: src/lang.c:2436
+#, fuzzy
+msgid	"Remove bogus groups from newsrc"
+msgstr	"Amatsinda Bivuye"
+
+#: src/lang.c:2437
+#, fuzzy
+msgid	"# What to do with bogus groups in newsrc file\n"
+	"# Possible values are (the default is marked with *):\n"
+	"# * 0 = keep\n"
+	"#   1 = remove\n"
+	"#   2 = highlight with D on selection screen\n"
+msgstr	"#Kuri Na: Amatsinda in Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2. "
+	"garagaza cyane Na: ku Ihitamo"
+
+#: src/lang.c:2445
+#, fuzzy
+msgid	"Enter number of seconds until active file will be reread. <CR> sets."
+msgstr	"Umubare Bya amasogonda Gikora IDOSIYE"
+
+#: src/lang.c:2446
+#, fuzzy
+msgid	"Interval in secs to reread active"
+msgstr	"in Kuri Gikora"
+
+#: src/lang.c:2447
+#, fuzzy
+msgid	"# Time interval in seconds between rereading the active file (0=never)\n"
+msgstr	"#Intera in amasogonda hagati i Gikora IDOSIYE 0 Nta narimwe"
+
+#: src/lang.c:2452
+#, fuzzy
+msgid	"Reconnect to server automatically"
+msgstr	"Kongerakwihuza Kuri Seriveri ku buryo bwikora"
+
+#: src/lang.c:2453
+#, fuzzy
+msgid	"# If ON automatically reconnect to NNTP server if the connection is broken\n"
+msgstr	"#ku buryo bwikora Kuri Seriveri NIBA i Ukwihuza ni"
+
+#: src/lang.c:2457
+#, fuzzy
+msgid	"Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
+msgstr	"Amakopi Bya Incamake Idosiye"
+
+#: src/lang.c:2458
+#, fuzzy
+msgid	"Cache NNTP overview files locally"
+msgstr	"Incamake Idosiye"
+
+#: src/lang.c:2459
+#, fuzzy
+msgid	"# If ON, create local copies of NNTP overview files.\n"
+msgstr	"#Kurema Amakopi Bya Incamake Idosiye"
+
+#: src/lang.c:2463
+#, fuzzy
+msgid	"Enter format string. <CR> sets, <ESC> cancels."
+msgstr	"Imiterere Ikurikiranyanyuguti"
+
+#: src/lang.c:2464
+#, fuzzy
+msgid	"Format string for display of dates"
+msgstr	"Ikurikiranyanyuguti kugirango Kugaragaza Bya Amatariki"
+
+#: src/lang.c:2465
+#, fuzzy
+msgid	"# Format string for date representation\n"
+msgstr	"#Ikurikiranyanyuguti kugirango Itariki"
+
+#: src/lang.c:2471
+#, fuzzy
+msgid	"Unicode normalization form"
+msgstr	"Ifishi"
+
+#: src/lang.c:2472
+#, fuzzy
+msgid	"# Unicode normalization form\n"
+	"# Possible values are (the default is marked with *):\n"
+	"#   0 = None\n"
+	"# * 1 = NFKC\n"
+	"#   2 = NFKD\n"
+	"#   3 = NFC\n"
+	"#   4 = NFD\n"
+msgstr	"#Uduciro i Mburabuzi ni cy/ byagarajwe Na: 0 1. 2. 3. 4."
+
+#: src/lang.c:2484
+msgid	"Render BiDi"
+msgstr	""
+
+#: src/lang.c:2485
+#, fuzzy
+msgid	"# If ON, bi-directional text is rendered by tin\n"
+msgstr	"#Umwandiko ni ku"
+
+#: src/misc.c:3728
+#, c-format
+msgid	"Version: %s %s release %s (\"%s\") %s %s\n"
+msgstr	""
+
+#: src/misc.c:3731
+#, c-format
+msgid	"Version: %s %s release %s (\"%s\")\n"
+msgstr	""
+
+#: src/newsrc.c:430
+msgid	"Unreachable?\n"
+msgstr	""
+
+#: src/nntplib.c:824
+#, fuzzy, c-format
+msgid	"\n"
+	"Server timed out, trying reconnect # %d\n"
+msgstr	"Inyuma"
+
+#: src/nntplib.c:842
+#, fuzzy
+msgid	"Rejoin current group\n"
+msgstr	"KIGEZWEHO"
+
+# svx/inc\globlmn.hrc:ITEM_FILE_MAIL_INBOX.text
+#: src/nntplib.c:849
+#, fuzzy, c-format
+msgid	"Read (%s)\n"
+msgstr	"Gusoma"
+
+#: src/nntplib.c:851
+#, fuzzy, c-format
+msgid	"Resend last command (%s)\n"
+msgstr	"Iheruka Komandi:"
+
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid	"MOTD: "
+msgstr	""
+
+#: src/nrctbl.c:172
+#, fuzzy, c-format
+msgid	"couldn't expand %s\n"
+msgstr	"Kwagura"
+
+#: src/post.c:1152
+#, c-format
+msgid	"Line %d is longer than 998 octets and should be folded, but\n"
+	"encoding is neither set to %s nor to %s\n"
+msgstr	""
+
+#: src/post.c:1157
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+	"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr	""
+
+#: src/post.c:1159
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is not set to %s\n"
+msgstr	""
+
+#: src/post.c:1974
+#, fuzzy, c-format
+msgid	"Posting: %.*s ..."
+msgstr	"S"
+
+#. Check if okay to read
+#: src/read.c:214
+#, fuzzy
+msgid	"Aborting read, please wait..."
+msgstr	"Gusoma Tegereza"
+
+#: src/read.c:361
+msgid	"Aborted read\n"
+msgstr	""
+
+#: src/read.c:417
+msgid	"Draining\n"
+msgstr	""
+
+#. Don't hash the initial '<'
+#: src/refs.c:251
+msgid	"unchanged"
+msgstr	""
+
+#: src/refs.c:609
+msgid	"[- Unavailable -]"
+msgstr	""
+
+#.
+#. * preamble
+#. * TODO: -> lang.c
+#.
+#: src/rfc2047.c:1203
+#, fuzzy, c-format
+msgid	"This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
+	"are reading this prefix, your mail reader probably has not yet been modified\n"
+	"to understand the new format, and some of what follows may look strange.\n"
+	"\n"
+msgstr	"Ubutumwa in i Imiterere iyi Imbanziriza Ubutumwa OYA i Gishya Imiterere Na "
+	"Bya Gicurasi"
+
+#: src/save.c:978
+#, fuzzy
+msgid	"bytes"
+msgstr	"Bayite"
+
+#: src/select.c:381
+#, fuzzy
+msgid	"unread"
+msgstr	"Bidasomye"
+
+#: src/select.c:381
+#, fuzzy
+msgid	"all"
+msgstr	"Byose"
+
+#: src/select.c:551 src/select.c:553
+#, fuzzy
+msgid	" R"
+msgstr	" R"
+
+#. TODO: use tin global 'homedir' instead? or even rcdir?
+#: src/xface.c:91
+#, fuzzy, c-format
+msgid	"Can't run slrnface: Environment variable %s not found."
+msgstr	"Gukoresha IMPINDURAGACIRO OYA Byabonetse"
+
+#: src/xface.c:99 src/xface.c:131
+#, fuzzy, c-format
+msgid	"Can't run slrnface: failed to create %s"
+msgstr	"Gukoresha Byanze Kuri Kurema"
+
+#: src/xface.c:109
+#, fuzzy
+msgid	"This directory is used to create named pipes for communication between\n"
+	"slrnface and its parent process. It should normally be empty because\n"
+	"the pipe is deleted right after it has been opened by both processes.\n"
+	"\n"
+	"File names generated by slrnface have the form \"hostname.pid\". It is\n"
+	"probably an error if they linger here longer than a fraction of a second.\n"
+	"\n"
+	"However, if the directory is mounted from an NFS server, you might see\n"
+	"special files created by your NFS server while slrnface is running.\n"
+	"Do not try to remove them.\n"
+msgstr	"bushyinguro ni Kuri Kurema kugirango Itumanaho Na ubusa ni Cyasibwe Iburyo: "
+	"Nyuma ku Byombi Idosiye Amazina ku i Ifishi Izina ry'inturo: Ikosa NIBA a "
+	"Imigabane Bya a ISEGONDA NIBA i bushyinguro ni Bivuye Seriveri Idosiye "
+	"Byaremwe ku Seriveri ni OYA Kuri Gukuraho..."
+
+#: src/xface.c:123
+#, fuzzy
+msgid	"Can't run slrnface: couldn't construct fifo name."
+msgstr	"Gukoresha Izina:"
+
+#: src/xface.c:162
+#, fuzzy, c-format
+msgid	"Slrnface abnormally exited, code %d."
+msgstr	"ITEGEKONGENGA"
+
+#: src/xface.c:206
+#, fuzzy, c-format
+msgid	"Slrnface failed: %s."
+msgstr	"Byanze"
diff -Nurp tin-1.7.8/po/tin.pot tin-1.7.9/po/tin.pot
--- tin-1.7.8/po/tin.pot	2005-03-21 11:42:52.000000000 +0100
+++ tin-1.7.9/po/tin.pot	2005-06-28 10:31:29.327608471 +0200
@@ -1,234 +1,286 @@
 # SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR Free Software Foundation, Inc.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
 # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2005-03-21 11:42+0100\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2005-06-22 20:13+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: ENCODING\n"
+"Content-Transfer-Encoding: 8bit\n"
 
-#: src/art.c:1455
+#: src/art.c:1553
 #, c-format
 msgid "%d Bad overview record (%d fields) '%s'"
 msgstr ""
 
-#: src/attrib.c:604
+#: src/attrib.c:643
+#, c-format
 msgid ""
 "# Do not edit this comment block\n"
 "#\n"
 msgstr ""
 
-#: src/attrib.c:605
+#: src/attrib.c:644
+#, c-format
 msgid "#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
 msgstr ""
 
-#: src/attrib.c:606
+#: src/attrib.c:645
+#, c-format
 msgid "#  maildir=STRING (ie. ~/Mail)\n"
 msgstr ""
 
-#: src/attrib.c:607
+#: src/attrib.c:646
+#, c-format
 msgid "#  savedir=STRING (ie. ~user/News)\n"
 msgstr ""
 
-#: src/attrib.c:608
+#: src/attrib.c:647
+#, c-format
 msgid "#  savefile=STRING (ie. =linux)\n"
 msgstr ""
 
-#: src/attrib.c:609
+#: src/attrib.c:648
+#, c-format
 msgid "#  sigfile=STRING (ie. $var/sig)\n"
 msgstr ""
 
-#: src/attrib.c:610
+#: src/attrib.c:649
+#, c-format
 msgid "#  organization=STRING (if beginning with '/' read from file)\n"
 msgstr ""
 
-#: src/attrib.c:611
+#: src/attrib.c:650
+#, c-format
 msgid "#  followup_to=STRING\n"
 msgstr ""
 
-#: src/attrib.c:612
+#: src/attrib.c:651
+#, c-format
 msgid "#  mailing_list=STRING (ie. majordomo@example.org)\n"
 msgstr ""
 
-#: src/attrib.c:613
+#: src/attrib.c:652
+#, c-format
 msgid "#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
 msgstr ""
 
-#: src/attrib.c:614
+#: src/attrib.c:653
+#, c-format
 msgid "#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
 msgstr ""
 
-#: src/attrib.c:615
+#: src/attrib.c:654
+#, c-format
 msgid "#  from=STRING (just append wanted From:-line, don't use quotes)\n"
 msgstr ""
 
-#: src/attrib.c:616
+#: src/attrib.c:655
+#, c-format
 msgid "#  news_quote_format=STRING\n"
 msgstr ""
 
-#: src/attrib.c:617
+#: src/attrib.c:656
+#, c-format
 msgid "#  quote_chars=STRING (%%s, %%S for initials)\n"
 msgstr ""
 
-#: src/attrib.c:618
+#: src/attrib.c:657
+#, c-format
 msgid "#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
 msgstr ""
 
-#: src/attrib.c:620
+#: src/attrib.c:659
+#, c-format
 msgid "#  ispell=STRING\n"
 msgstr ""
 
-#: src/attrib.c:622
+#: src/attrib.c:661
+#, c-format
 msgid "#  auto_select=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:623
+#: src/attrib.c:662
+#, c-format
 msgid "#  auto_save=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:624
+#: src/attrib.c:663
+#, c-format
 msgid "#  batch_save=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:625
+#: src/attrib.c:664
+#, c-format
 msgid "#  delete_tmp_files=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:626
+#: src/attrib.c:665
+#, c-format
 msgid "#  show_only_unread=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:627
+#: src/attrib.c:666
+#, c-format
 msgid "#  thread_arts=NUM"
 msgstr ""
 
-#: src/attrib.c:634
+#: src/attrib.c:673
+#, c-format
 msgid "#  show_author=NUM\n"
 msgstr ""
 
-#: src/attrib.c:640
+#: src/attrib.c:679
+#, c-format
 msgid "#  show_info=NUM\n"
 msgstr ""
 
-#: src/attrib.c:646
+#: src/attrib.c:685
+#, c-format
 msgid "#  sort_art_type=NUM\n"
 msgstr ""
 
-#: src/attrib.c:664
+#: src/attrib.c:703
+#, c-format
 msgid "#  sort_threads_type=NUM\n"
 msgstr ""
 
-#: src/attrib.c:669
+#: src/attrib.c:708
+#, c-format
 msgid "#  post_proc_type=NUM\n"
 msgstr ""
 
-#: src/attrib.c:674
+#: src/attrib.c:713
+#, c-format
 msgid "#  quick_kill_scope=STRING (ie. talk.*)\n"
 msgstr ""
 
-#: src/attrib.c:675
+#: src/attrib.c:714
+#, c-format
 msgid "#  quick_kill_expire=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:676
+#: src/attrib.c:715
+#, c-format
 msgid "#  quick_kill_case=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:677
+#: src/attrib.c:716
+#, c-format
 msgid "#  quick_kill_header=NUM\n"
 msgstr ""
 
-#: src/attrib.c:678 src/attrib.c:685
+#: src/attrib.c:717 src/attrib.c:724
+#, c-format
 msgid "#    0=subj (case sensitive) 1=subj (ignore case)\n"
 msgstr ""
 
-#: src/attrib.c:679 src/attrib.c:686
+#: src/attrib.c:718 src/attrib.c:725
+#, c-format
 msgid "#    2=from (case sensitive) 3=from (ignore case)\n"
 msgstr ""
 
-#: src/attrib.c:680 src/attrib.c:687
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
 msgid "#    4=msgid 5=lines\n"
 msgstr ""
 
-#: src/attrib.c:681
+#: src/attrib.c:720
+#, c-format
 msgid "#  quick_select_scope=STRING\n"
 msgstr ""
 
-#: src/attrib.c:682
+#: src/attrib.c:721
+#, c-format
 msgid "#  quick_select_expire=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:683
+#: src/attrib.c:722
+#, c-format
 msgid "#  quick_select_case=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:684
+#: src/attrib.c:723
+#, c-format
 msgid "#  quick_select_header=NUM\n"
 msgstr ""
 
-#: src/attrib.c:688
+#: src/attrib.c:727
+#, c-format
 msgid "#  x_comment_to=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:689
+#: src/attrib.c:728
+#, c-format
 msgid "#  fcc=STRING (eg. =mailbox)\n"
 msgstr ""
 
-#: src/attrib.c:690
+#: src/attrib.c:729
+#, c-format
 msgid "#  tex2iso_conv=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:691
+#: src/attrib.c:730
+#, c-format
 msgid "#  mime_forward=ON/OFF\n"
 msgstr ""
 
-#: src/attrib.c:693
+#: src/attrib.c:732
+#, c-format
 msgid "#  mm_network_charset=supported_charset"
 msgstr ""
 
-#: src/attrib.c:700
+#: src/attrib.c:739
+#, c-format
 msgid "#  undeclared_charset=STRING (default is US-ASCII)\n"
 msgstr ""
 
-#: src/attrib.c:702
+#: src/attrib.c:741
+#, c-format
 msgid ""
 "#\n"
 "# Note that it is best to put general (global scoping)\n"
 msgstr ""
 
-#: src/attrib.c:703
+#: src/attrib.c:742
+#, c-format
 msgid ""
 "# entries first followed by group specific entries.\n"
 "#\n"
 msgstr ""
 
-#: src/attrib.c:704
+#: src/attrib.c:743
+#, c-format
 msgid ""
-"############################################################################"
-"\n"
+"############################################################################\n"
 "\n"
 msgstr ""
 
-#: src/attrib.c:710
+#: src/attrib.c:749
+#, c-format
 msgid "# include extra headers\n"
 msgstr ""
 
-#: src/attrib.c:718
+#: src/attrib.c:757
+#, c-format
 msgid "# in *sources* set post process type to shar only\n"
 msgstr ""
 
-#: src/attrib.c:722
-msgid "# in *binaries* do full post processing, remove tmp files\n"
+#: src/attrib.c:761
+#, c-format
+msgid "# in *binaries* do full post processing but no TeX2ISO conversion,\n"
 msgstr ""
 
-#: src/attrib.c:723
-msgid "# and set Followup-To: poster\n"
+#: src/attrib.c:762
+#, c-format
+msgid "# remove tmp files and set Followup-To: poster\n"
 msgstr ""
 
 #: src/cook.c:497
@@ -467,6 +519,7 @@ msgid "*** Beginning of article ***"
 msgstr ""
 
 #: src/lang.c:97
+#, c-format
 msgid "Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
 msgstr ""
 
@@ -590,7 +643,7 @@ msgstr ""
 msgid "Creating newsrc file...\n"
 msgstr ""
 
-#: src/lang.c:129 src/lang.c:1150
+#: src/lang.c:129 src/lang.c:1147
 msgid "Default"
 msgstr ""
 
@@ -1608,7 +1661,7 @@ msgstr ""
 msgid "choose next group with unread news"
 msgstr ""
 
-#: src/lang.c:389 src/lang.c:1197
+#: src/lang.c:389 src/lang.c:1194
 msgid "quit"
 msgstr ""
 
@@ -1820,8 +1873,8 @@ msgid ""
 "\n"
 "Move up/down by using the terminal arrow keys or 'j' and 'k'.  Use PgUp/PgDn "
 "or\n"
-"Ctrl-U and Ctrl-D to page up/down. Enter a newsgroup by pressing "
-"RETURN/TAB.\n"
+"Ctrl-U and Ctrl-D to page up/down. Enter a newsgroup by pressing RETURN/"
+"TAB.\n"
 "\n"
 "Articles, threads, tagged articles or articles matching a pattern can be "
 "mailed\n"
@@ -1873,105 +1926,100 @@ msgstr ""
 msgid "Invalid keyname '%s'\n"
 msgstr ""
 
-#: src/lang.c:462
-#, c-format
-msgid "Key '%s' is defined for both %s%s and %s%s\n"
-msgstr ""
-
-#: src/lang.c:464
+#: src/lang.c:461
 #, c-format
 msgid "Keymap file was upgraded to version %s\n"
 msgstr ""
 
-#: src/lang.c:465
+#: src/lang.c:462
 #, c-format
 msgid "Kill From:     [%s] (y/n): "
 msgstr ""
 
-#: src/lang.c:466
+#: src/lang.c:463
 msgid "Kill Lines: (</>num): "
 msgstr ""
 
-#: src/lang.c:467
+#: src/lang.c:464
 msgid "Kill Article Menu"
 msgstr ""
 
-#: src/lang.c:468
+#: src/lang.c:465
 #, c-format
 msgid "Kill Msg-Id:   [%s] (f/l/o/n): "
 msgstr ""
 
-#: src/lang.c:469
+#: src/lang.c:466
 msgid "Kill pattern scope  : "
 msgstr ""
 
-#: src/lang.c:470
+#: src/lang.c:467
 #, c-format
 msgid "Kill Subject:  [%s] (y/n): "
 msgstr ""
 
-#: src/lang.c:471
+#: src/lang.c:468
 msgid "Kill text pattern   : "
 msgstr ""
 
-#: src/lang.c:472
+#: src/lang.c:469
 msgid "Kill time in days   : "
 msgstr ""
 
-#: src/lang.c:474
+#: src/lang.c:471
 msgid "Last"
 msgstr ""
 
-#: src/lang.c:475
+#: src/lang.c:472
 msgid "-- Last response --"
 msgstr ""
 
-#: src/lang.c:476
+#: src/lang.c:473
 #, c-format
 msgid "Lines %s  "
 msgstr ""
 
-#: src/lang.c:478
+#: src/lang.c:475
 msgid "Message-ID: line              "
 msgstr ""
 
-#: src/lang.c:479
+#: src/lang.c:476
 msgid "Mail"
 msgstr ""
 
-#: src/lang.c:480
+#: src/lang.c:477
 msgid "mailbox "
 msgstr ""
 
-#: src/lang.c:481
+#: src/lang.c:478
 #, c-format
 msgid "Mail article(s) to [%.*s]> "
 msgstr ""
 
-#: src/lang.c:482
+#: src/lang.c:479
 #, c-format
 msgid "Mailing log to %s\n"
 msgstr ""
 
-#: src/lang.c:483
+#: src/lang.c:480
 msgid "Mail bug report..."
 msgstr ""
 
-#: src/lang.c:484
+#: src/lang.c:481
 #, c-format
 msgid "Mail BUG REPORT to %s?"
 msgstr ""
 
-#: src/lang.c:485
+#: src/lang.c:482
 msgid "Mailed"
 msgstr ""
 
-#: src/lang.c:486
+#: src/lang.c:483
 #, c-format
 msgid "Mailing to %s..."
 msgstr ""
 
-#: src/lang.c:487
+#: src/lang.c:484
 msgid ""
 "# [Mail/Save] active file. Format is like news active file:\n"
 "#   groupname  max.artnum  min.artnum  /dir\n"
@@ -1979,285 +2027,285 @@ msgid ""
 "#\n"
 msgstr ""
 
-#: src/lang.c:490
+#: src/lang.c:487
 #, c-format
 msgid "%s marked as unread"
 msgstr ""
 
-#: src/lang.c:491
+#: src/lang.c:488
 #, c-format
 msgid "Marked %d of %d tagged %s as read"
 msgstr ""
 
-#: src/lang.c:492
+#: src/lang.c:489
 #, c-format
 msgid "Mark all articles as read%s?"
 msgstr ""
 
-#: src/lang.c:493
+#: src/lang.c:490
 #, c-format
 msgid "Mark %s=tagged articles, %s=current article, %s=quit: "
 msgstr ""
 
-#: src/lang.c:494
+#: src/lang.c:491
 #, c-format
 msgid "Mark group %s as read?"
 msgstr ""
 
-#: src/lang.c:495
+#: src/lang.c:492
 #, c-format
 msgid "Mark thread as read%s?"
 msgstr ""
 
-#: src/lang.c:496
+#: src/lang.c:493
 #, c-format
 msgid "Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
 msgstr ""
 
-#: src/lang.c:497
+#: src/lang.c:494
 #, c-format
 msgid "Matching %s groups..."
 msgstr ""
 
-#: src/lang.c:498 src/lang.c:502
+#: src/lang.c:495 src/lang.c:499
 #, c-format
 msgid "<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
 msgstr ""
 
-#: src/lang.c:499
+#: src/lang.c:496
 #, c-format
 msgid ""
-"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; "
-"%s=list thread"
+"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %"
+"s=list thread"
 msgstr ""
 
-#: src/lang.c:500
+#: src/lang.c:497
 #, c-format
 msgid "%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
 msgstr ""
 
-#: src/lang.c:501
+#: src/lang.c:498
 #, c-format
 msgid "%s=search forwards; %s=search backwards; %s=quit"
 msgstr ""
 
-#: src/lang.c:503
+#: src/lang.c:500
 #, c-format
 msgid "%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
 msgstr ""
 
-#: src/lang.c:504
+#: src/lang.c:501
 #, c-format
 msgid "<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
 msgstr ""
 
-#: src/lang.c:505
+#: src/lang.c:502
 #, c-format
 msgid ""
 "%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
 msgstr ""
 
-#: src/lang.c:506
+#: src/lang.c:503
 #, c-format
 msgid ""
-"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank "
-"in/out"
+"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/"
+"out"
 msgstr ""
 
-#: src/lang.c:507
+#: src/lang.c:504
 #, c-format
 msgid "<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
 msgstr ""
 
-#: src/lang.c:508
+#: src/lang.c:505
 #, c-format
 msgid "%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
 msgstr ""
 
-#: src/lang.c:509
+#: src/lang.c:506
 msgid "--More--"
 msgstr ""
 
-#: src/lang.c:510
+#: src/lang.c:507
 #, c-format
 msgid "Moving %s..."
 msgstr ""
 
-#: src/lang.c:512
+#: src/lang.c:509
 msgid ", name: "
 msgstr ""
 
-#: src/lang.c:513
+#: src/lang.c:510
 #, c-format
 msgid "Goto newsgroup [%s]> "
 msgstr ""
 
-#: src/lang.c:514
+#: src/lang.c:511
 msgid "newsgroups"
 msgstr ""
 
-#: src/lang.c:515
+#: src/lang.c:512
 #, c-format
 msgid "Position %s in group list (1,2,..,$) [%d]> "
 msgstr ""
 
-#: src/lang.c:516
+#: src/lang.c:513
 msgid "newsgroup"
 msgstr ""
 
-#: src/lang.c:517
+#: src/lang.c:514
 msgid "Try and save newsrc file again?"
 msgstr ""
 
-#: src/lang.c:518
+#: src/lang.c:515
 msgid "Warning: No newsgroups were written to your newsrc file. Save aborted."
 msgstr ""
 
-#: src/lang.c:519
+#: src/lang.c:516
 msgid "newsrc file saved successfully.\n"
 msgstr ""
 
-#: src/lang.c:520
+#: src/lang.c:517
 msgid "-- Next response --"
 msgstr ""
 
-#: src/lang.c:521
+#: src/lang.c:518
 #, c-format
 msgid "NNTP authorization password not found for %s"
 msgstr ""
 
-#: src/lang.c:522
+#: src/lang.c:519
 msgid "No  "
 msgstr ""
 
-#: src/lang.c:523
+#: src/lang.c:520
 msgid "*** No articles ***"
 msgstr ""
 
-#: src/lang.c:524
+#: src/lang.c:521
 msgid "No articles have been posted"
 msgstr ""
 
-#: src/lang.c:525
+#: src/lang.c:522
 msgid "*** No description ***"
 msgstr ""
 
-#: src/lang.c:526
+#: src/lang.c:523
 msgid "No filename"
 msgstr ""
 
-#: src/lang.c:527
+#: src/lang.c:524
 msgid "No group"
 msgstr ""
 
-#: src/lang.c:528
+#: src/lang.c:525
 msgid "*** No groups ***"
 msgstr ""
 
-#: src/lang.c:529
+#: src/lang.c:526
 msgid "No more groups to read"
 msgstr ""
 
-#: src/lang.c:530
+#: src/lang.c:527
 msgid "No last message"
 msgstr ""
 
-#: src/lang.c:531
+#: src/lang.c:528
 msgid "No mail address"
 msgstr ""
 
-#: src/lang.c:532
+#: src/lang.c:529
 msgid "No articles marked for saving"
 msgstr ""
 
-#: src/lang.c:533
+#: src/lang.c:530
 msgid "No match"
 msgstr ""
 
-#: src/lang.c:534
+#: src/lang.c:531
 msgid "No more groups"
 msgstr ""
 
-#: src/lang.c:535
+#: src/lang.c:532
 msgid "No newsgroups"
 msgstr ""
 
-#: src/lang.c:536
+#: src/lang.c:533
 msgid "No next unread article"
 msgstr ""
 
-#: src/lang.c:537
+#: src/lang.c:534
 msgid "No previous group"
 msgstr ""
 
-#: src/lang.c:538
+#: src/lang.c:535
 msgid "No previous unread article"
 msgstr ""
 
-#: src/lang.c:539
+#: src/lang.c:536
 msgid "No responses"
 msgstr ""
 
-#: src/lang.c:540
+#: src/lang.c:537
 msgid "No responses to list in current thread"
 msgstr ""
 
-#: src/lang.c:541
+#: src/lang.c:538
 msgid "No search string"
 msgstr ""
 
-#: src/lang.c:542
+#: src/lang.c:539
 msgid "No subject"
 msgstr ""
 
-#: src/lang.c:544
+#: src/lang.c:541
 #, c-format
 msgid "%s: Terminal must have clear to end-of-line (ce)\n"
 msgstr ""
 
-#: src/lang.c:545
+#: src/lang.c:542
 #, c-format
 msgid "%s: Terminal must have clear to end-of-screen (cd)\n"
 msgstr ""
 
-#: src/lang.c:546
+#: src/lang.c:543
 #, c-format
 msgid "%s: Terminal must have clearscreen (cl) capability\n"
 msgstr ""
 
-#: src/lang.c:547
+#: src/lang.c:544
 #, c-format
 msgid "%s: Terminal must have cursor motion (cm)\n"
 msgstr ""
 
-#: src/lang.c:548
+#: src/lang.c:545
 #, c-format
 msgid "%s: TERM variable must be set to use screen capabilities\n"
 msgstr ""
 
-#: src/lang.c:550
+#: src/lang.c:547
 #, c-format
 msgid "No viewer found for %s/%s\n"
 msgstr ""
 
-#: src/lang.c:551
+#: src/lang.c:548
 msgid "Newsgroup does not exist on this server"
 msgstr ""
 
-#: src/lang.c:552
+#: src/lang.c:549
 #, c-format
 msgid "Group %s not found in active file"
 msgstr ""
 
-#: src/lang.c:553
+#: src/lang.c:550
 msgid "c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr ""
 
-#: src/lang.c:554
+#: src/lang.c:551
 msgid "use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr ""
 
-#: src/lang.c:555
+#: src/lang.c:552
 #, c-format
 msgid ""
 "# NNTP-server -> newsrc translation table and NNTP-server\n"
@@ -2274,316 +2322,318 @@ msgid ""
 "#\n"
 msgstr ""
 
-#: src/lang.c:562
+#: src/lang.c:559
 msgid "Only"
 msgstr ""
 
-#: src/lang.c:563
+#: src/lang.c:560
 #, c-format
 msgid "Option not enabled. Recompile with %s."
 msgstr ""
 
-#: src/lang.c:564
+#: src/lang.c:561
 msgid "Options Menu"
 msgstr ""
 
-#: src/lang.c:567
+#: src/lang.c:564
 #, c-format
 msgid "Error in regex: %s at pos. %d '%s'"
 msgstr ""
 
-#: src/lang.c:568
+#: src/lang.c:565
 #, c-format
 msgid "Error in regex: pcre internal error %d"
 msgstr ""
 
-#: src/lang.c:569
+#: src/lang.c:566
 #, c-format
 msgid "Error in regex: study - pcre internal error %s"
 msgstr ""
 
-#: src/lang.c:570
+#: src/lang.c:567
 msgid "Post a followup..."
 msgstr ""
 
 #. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
-#: src/lang.c:572
+#: src/lang.c:569
 msgid ""
 "An error has occurred while posting the article. If you think that this\n"
 "error is temporary or otherwise correctable, you can postpone the article\n"
 "and pick it up again with ^O later.\n"
 msgstr ""
 
-#: src/lang.c:575
+#: src/lang.c:572
 msgid "Posted articles history"
 msgstr ""
 
-#: src/lang.c:576
+#: src/lang.c:573
 #, c-format
 msgid "Post to newsgroup(s) [%s]> "
 msgstr ""
 
-#: src/lang.c:577
+#: src/lang.c:574
 msgid "-- post processing started --"
 msgstr ""
 
-#: src/lang.c:578
+#: src/lang.c:575
 msgid "-- post processing completed --"
 msgstr ""
 
-#: src/lang.c:579
+#: src/lang.c:576
 #, c-format
 msgid "Post subject [%s]> "
 msgstr ""
 
-#: src/lang.c:580
+#: src/lang.c:577
 msgid ""
 "# Summary of mailed/posted messages viewable by 'W' command from within "
 "tin.\n"
 msgstr ""
 
-#: src/lang.c:581
+#: src/lang.c:578
 msgid "Posting article..."
 msgstr ""
 
-#: src/lang.c:582
+#: src/lang.c:579
+#, c-format
 msgid "Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
 msgstr ""
 
-#: src/lang.c:583
+#: src/lang.c:580
 #, c-format
 msgid "Hot %s"
 msgstr ""
 
-#: src/lang.c:584
+#: src/lang.c:581
 #, c-format
 msgid "Tagged %s"
 msgstr ""
 
-#: src/lang.c:585
+#: src/lang.c:582
 #, c-format
 msgid "Untagged %s"
 msgstr ""
 
-#: src/lang.c:586
+#: src/lang.c:583
 msgid "Processing mail messages marked for deletion."
 msgstr ""
 
-#: src/lang.c:587
+#: src/lang.c:584
 msgid "Processing saved articles marked for deletion."
 msgstr ""
 
-#: src/lang.c:588
+#: src/lang.c:585
 #, c-format
 msgid "Accept Followup-To? %s=post, %s=ignore, %s=quit: "
 msgstr ""
 
-#: src/lang.c:589
+#: src/lang.c:586
 msgid "Article unchanged, abort mailing?"
 msgstr ""
 
-#: src/lang.c:590
+#: src/lang.c:587
 #, c-format
 msgid "Do you want to see postponed articles (%d)?"
 msgstr ""
 
-#: src/lang.c:592
+#: src/lang.c:589
 msgid "Add quick kill filter?"
 msgstr ""
 
-#: src/lang.c:593
+#: src/lang.c:590
 msgid "Add quick selection filter?"
 msgstr ""
 
-#: src/lang.c:594
+#: src/lang.c:591
 msgid "Do you really want to quit?"
 msgstr ""
 
-#: src/lang.c:595
+#: src/lang.c:592
+#, c-format
 msgid "%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
 msgstr ""
 
-#: src/lang.c:596
+#: src/lang.c:593
 msgid "You have tagged articles in this group - quit anyway?"
 msgstr ""
 
-#: src/lang.c:597
+#: src/lang.c:594
 #, c-format
 msgid "%s=quit, %s=edit, %s=postpone: "
 msgstr ""
 
-#: src/lang.c:598
+#: src/lang.c:595
 #, c-format
 msgid "%s=quit %s=edit %s=save kill description: "
 msgstr ""
 
-#: src/lang.c:599
+#: src/lang.c:596
 #, c-format
 msgid "%s=quit %s=edit %s=save select description: "
 msgstr ""
 
-#: src/lang.c:600
+#: src/lang.c:597
 msgid "Do you really want to quit without saving your configuration?"
 msgstr ""
 
-#: src/lang.c:603
+#: src/lang.c:600
 msgid "Invalid range - valid are '0-9.$' eg. 1-$"
 msgstr ""
 
-#: src/lang.c:604
+#: src/lang.c:601
 msgid "Do you want to abort this operation?"
 msgstr ""
 
-#: src/lang.c:605
+#: src/lang.c:602
 msgid "Do you want to exit tin immediately?"
 msgstr ""
 
-#: src/lang.c:606
+#: src/lang.c:603
 msgid "Read response> "
 msgstr ""
 
-#: src/lang.c:607
+#: src/lang.c:604
 msgid "Reading ('q' to quit)..."
 msgstr ""
 
-#: src/lang.c:608
+#: src/lang.c:605
 #, c-format
 msgid "Reading %sarticles..."
 msgstr ""
 
-#: src/lang.c:609
+#: src/lang.c:606
 #, c-format
 msgid "Reading %sattributes file...\n"
 msgstr ""
 
-#: src/lang.c:610
+#: src/lang.c:607
 #, c-format
 msgid "Reading %sconfig file...\n"
 msgstr ""
 
-#: src/lang.c:611
+#: src/lang.c:608
 msgid "Reading filter file...\n"
 msgstr ""
 
-#: src/lang.c:612
+#: src/lang.c:609
 #, c-format
 msgid "Reading %s groups..."
 msgstr ""
 
-#: src/lang.c:613
+#: src/lang.c:610
 msgid "Reading input history file...\n"
 msgstr ""
 
-#: src/lang.c:614
+#: src/lang.c:611
 msgid "Reading keymap file...\n"
 msgstr ""
 
-#: src/lang.c:615
+#: src/lang.c:612
 msgid "Reading groups from active file... "
 msgstr ""
 
-#: src/lang.c:616
+#: src/lang.c:613
 msgid "Reading groups from newsrc file... "
 msgstr ""
 
-#: src/lang.c:617
+#: src/lang.c:614
 msgid "Reading newsgroups file... "
 msgstr ""
 
-#: src/lang.c:618
+#: src/lang.c:615
 msgid "Reading newsrc file..."
 msgstr ""
 
-#: src/lang.c:620
+#: src/lang.c:617
 #, c-format
 msgid "(%d:%02d remaining)"
 msgstr ""
 
-#: src/lang.c:622
+#: src/lang.c:619
 #, c-format
 msgid "Bogus group %s removed."
 msgstr ""
 
-#: src/lang.c:623
+#: src/lang.c:620
 #, c-format
 msgid "Error: rename %s to %s"
 msgstr ""
 
-#: src/lang.c:624
+#: src/lang.c:621
 msgid "Reply to author..."
 msgstr ""
 
-#: src/lang.c:625
+#: src/lang.c:622
 msgid "Repost"
 msgstr ""
 
-#: src/lang.c:626
+#: src/lang.c:623
 msgid "Reposting article..."
 msgstr ""
 
-#: src/lang.c:627
+#: src/lang.c:624
 #, c-format
 msgid "Repost article(s) to group(s) [%s]> "
 msgstr ""
 
-#: src/lang.c:628
+#: src/lang.c:625
 msgid "Reset newsrc?"
 msgstr ""
 
-#: src/lang.c:629
+#: src/lang.c:626
 msgid "Responses have been directed to the following newsgroups"
 msgstr ""
 
-#: src/lang.c:630
+#: src/lang.c:627
 #, c-format
 msgid "Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
 msgstr ""
 
-#: src/lang.c:631
+#: src/lang.c:628
 #, c-format
 msgid "RespNo %4d of %4d"
 msgstr ""
 
-#: src/lang.c:632
+#: src/lang.c:629
 msgid "Press <RETURN> to continue..."
 msgstr ""
 
-#: src/lang.c:634
+#: src/lang.c:631
 #, c-format
 msgid "Select From    [%s] (y/n): "
 msgstr ""
 
-#: src/lang.c:635
+#: src/lang.c:632
 msgid "Select Lines: (</>num): "
 msgstr ""
 
-#: src/lang.c:636
+#: src/lang.c:633
 msgid "Auto-select Article Menu"
 msgstr ""
 
-#: src/lang.c:637
+#: src/lang.c:634
 #, c-format
 msgid "Select Msg-Id  [%s] (f/l/o/n): "
 msgstr ""
 
-#: src/lang.c:638
+#: src/lang.c:635
 msgid "Select pattern scope: "
 msgstr ""
 
-#: src/lang.c:639
+#: src/lang.c:636
 #, c-format
 msgid "Select Subject [%s] (y/n): "
 msgstr ""
 
-#: src/lang.c:640
+#: src/lang.c:637
 msgid "Select text pattern : "
 msgstr ""
 
-#: src/lang.c:641
+#: src/lang.c:638
 msgid "Select time in days   : "
 msgstr ""
 
-#: src/lang.c:642
+#: src/lang.c:639
 #, c-format
 msgid ""
 "# %s server configuration file\n"
@@ -2592,228 +2642,228 @@ msgid ""
 "# Do not edit while %s is running, since all your changes to this file\n"
 "# will be overwritten when you leave %s.\n"
 "# Do not edit at all if you don't know what you do.\n"
-"############################################################################"
-"\n"
+"############################################################################\n"
 "\n"
 msgstr ""
 
-#: src/lang.c:648
+#: src/lang.c:645
 msgid "Showing unread groups only"
 msgstr ""
 
-#: src/lang.c:649
+#: src/lang.c:646
 msgid "Subject: line (ignore case)   "
 msgstr ""
 
-#: src/lang.c:650
+#: src/lang.c:647
 msgid "Subject: line (case sensitive)"
 msgstr ""
 
-#: src/lang.c:651
+#: src/lang.c:648
 msgid "Save"
 msgstr ""
 
-#: src/lang.c:652
+#: src/lang.c:649
 #, c-format
 msgid "Save '%s' (%s/%s)?"
 msgstr ""
 
-#: src/lang.c:653
+#: src/lang.c:650
 msgid "Save configuration before continuing?"
 msgstr ""
 
-#: src/lang.c:654
+#: src/lang.c:651
 msgid "Save filename> "
 msgstr ""
 
-#: src/lang.c:655
+#: src/lang.c:652
 msgid "Saved"
 msgstr ""
 
-#: src/lang.c:656
+#: src/lang.c:653
 #, c-format
 msgid "%4d unread (%4d hot) %s in %s\n"
 msgstr ""
 
-#: src/lang.c:657
+#: src/lang.c:654
 #, c-format
 msgid "Saved %s...\n"
 msgstr ""
 
-#: src/lang.c:658
+#: src/lang.c:655
 msgid "Nothing was saved"
 msgstr ""
 
-#: src/lang.c:659
+#: src/lang.c:656
 #, c-format
 msgid ""
 "\n"
 "%s %d %s from %d %s\n"
 msgstr ""
 
-#: src/lang.c:660
+#: src/lang.c:657
 #, c-format
 msgid "-- %s saved to %s%s --"
 msgstr ""
 
-#: src/lang.c:661
+#: src/lang.c:658
 #, c-format
 msgid "-- %s saved to %s - %s --"
 msgstr ""
 
-#: src/lang.c:662
+#: src/lang.c:659
 msgid "Saving..."
 msgstr ""
 
-#: src/lang.c:663
+#: src/lang.c:660
 #, c-format
 msgid "%s: Screen initialization failed"
 msgstr ""
 
-#: src/lang.c:665
+#: src/lang.c:662
 #, c-format
 msgid "%s: screen is too small\n"
 msgstr ""
 
-#: src/lang.c:667
+#: src/lang.c:664
 #, c-format
 msgid "screen is too small, %s is exiting\n"
 msgstr ""
 
-#: src/lang.c:668
+#: src/lang.c:665
 #, c-format
 msgid "Search backwards [%s]> "
 msgstr ""
 
-#: src/lang.c:669
+#: src/lang.c:666
 #, c-format
 msgid "Search body [%s]> "
 msgstr ""
 
-#: src/lang.c:670
+#: src/lang.c:667
 #, c-format
 msgid "Search forwards [%s]> "
 msgstr ""
 
-#: src/lang.c:671
+#: src/lang.c:668
 msgid "Searching..."
 msgstr ""
 
-#: src/lang.c:672
+#: src/lang.c:669
 #, c-format
 msgid "Searching article %d of %d ('q' to abort)..."
 msgstr ""
 
-#: src/lang.c:673
+#: src/lang.c:670
 msgid "Select article> "
 msgstr ""
 
-#: src/lang.c:674
+#: src/lang.c:671
 msgid ""
 "Select option number before text or use arrow keys and <CR>. 'q' to quit."
 msgstr ""
 
-#: src/lang.c:675
+#: src/lang.c:672
 msgid "Select group> "
 msgstr ""
 
-#: src/lang.c:676
+#: src/lang.c:673
 #, c-format
 msgid "Enter selection pattern [%s]> "
 msgstr ""
 
-#: src/lang.c:677
+#: src/lang.c:674
 msgid "Select thread > "
 msgstr ""
 
-#: src/lang.c:678
+#: src/lang.c:675
 #, c-format
 msgid "%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
 msgstr ""
 
-#: src/lang.c:679
+#: src/lang.c:676
 msgid "servers active-file"
 msgstr ""
 
-#: src/lang.c:680
+#: src/lang.c:677
 msgid "Cannot move into new newsgroups. Subscribe first..."
 msgstr ""
 
-#: src/lang.c:681
+#: src/lang.c:678
 msgid "<SPACE>"
 msgstr ""
 
-#: src/lang.c:682
+#: src/lang.c:679
 #, c-format
 msgid "Starting: (%s)"
 msgstr ""
 
-#: src/lang.c:683
+#: src/lang.c:680
 #, c-format
 msgid "List Thread (%d of %d)"
 msgstr ""
 
-#: src/lang.c:684
+#: src/lang.c:681
 #, c-format
 msgid "Thread (%.*s)"
 msgstr ""
 
-#: src/lang.c:685
+#: src/lang.c:682
 msgid "Enter wildcard subscribe pattern> "
 msgstr ""
 
-#: src/lang.c:686
+#: src/lang.c:683
 #, c-format
 msgid "subscribed to %d groups"
 msgstr ""
 
-#: src/lang.c:687
+#: src/lang.c:684
 #, c-format
 msgid "Subscribed to %s"
 msgstr ""
 
-#: src/lang.c:688
+#: src/lang.c:685
 msgid "Subscribing... "
 msgstr ""
 
-#: src/lang.c:689
+#: src/lang.c:686
+#, c-format
 msgid "Repost or supersede article(s) [%%s]? (%s/%s/%s): "
 msgstr ""
 
-#: src/lang.c:690
+#: src/lang.c:687
 #, c-format
 msgid "Supersede article(s) to group(s) [%s]> "
 msgstr ""
 
-#: src/lang.c:691
+#: src/lang.c:688
 msgid "Superseding article ..."
 msgstr ""
 
-#: src/lang.c:692
+#: src/lang.c:689
 #, c-format
 msgid ""
 "\n"
 "Stopped. Type 'fg' to restart %s\n"
 msgstr ""
 
-#: src/lang.c:694
+#: src/lang.c:691
 #, c-format
 msgid "%d days"
 msgstr ""
 
-#: src/lang.c:695
+#: src/lang.c:692
 msgid "<TAB>"
 msgstr ""
 
-#: src/lang.c:696
+#: src/lang.c:693
 msgid "TeX "
 msgstr ""
 
-#: src/lang.c:697
+#: src/lang.c:694
 msgid "# Default action/prompt strings\n"
 msgstr ""
 
-#: src/lang.c:698
+#: src/lang.c:695
 msgid ""
 "# Defaults for quick (1 key) kill & auto-selection filters\n"
 "# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
@@ -2824,262 +2874,262 @@ msgid ""
 "# expire=ON/OFF  ON=limit to default_filter_days OFF=don't ever expire\n"
 msgstr ""
 
-#: src/lang.c:711
+#: src/lang.c:708
 msgid ""
 "# If ON use print current subject or newsgroup description in the last line\n"
 msgstr ""
 
-#: src/lang.c:712
+#: src/lang.c:709
 msgid "# Host & time info used for detecting new groups (don't touch)\n"
 msgstr ""
 
-#: src/lang.c:713
+#: src/lang.c:710
 msgid "There is no news\n"
 msgstr ""
 
-#: src/lang.c:714
+#: src/lang.c:711
 msgid "Thread"
 msgstr ""
 
-#: src/lang.c:715
+#: src/lang.c:712
 msgid "Thread Level Commands"
 msgstr ""
 
-#: src/lang.c:716
+#: src/lang.c:713
 msgid "Thread deselected"
 msgstr ""
 
-#: src/lang.c:717
+#: src/lang.c:714
 msgid "Thread selected"
 msgstr ""
 
-#: src/lang.c:719
+#: src/lang.c:716
 msgid "threads"
 msgstr ""
 
-#: src/lang.c:721
+#: src/lang.c:718
 msgid "Thread range"
 msgstr ""
 
-#: src/lang.c:722
+#: src/lang.c:719
 msgid "thread"
 msgstr ""
 
-#: src/lang.c:723
+#: src/lang.c:720
 #, c-format
 msgid "Thread %4s of %4s"
 msgstr ""
 
-#: src/lang.c:724
+#: src/lang.c:721
 msgid "Threading articles..."
 msgstr ""
 
-#: src/lang.c:725
+#: src/lang.c:722
 #, c-format
 msgid "Toggled word highlighting %s"
 msgstr ""
 
-#: src/lang.c:726
+#: src/lang.c:723
 msgid "Toggled rot13 encoding"
 msgstr ""
 
-#: src/lang.c:727
+#: src/lang.c:724
 #, c-format
 msgid "Toggled german TeX encoding %s"
 msgstr ""
 
-#: src/lang.c:728
+#: src/lang.c:725
 #, c-format
 msgid "Toggled tab-width to %d"
 msgstr ""
 
-#: src/lang.c:729
+#: src/lang.c:726
 #, c-format
 msgid "%d Trying to dotlock %s"
 msgstr ""
 
-#: src/lang.c:730
+#: src/lang.c:727
 #, c-format
 msgid "%d Trying to lock %s"
 msgstr ""
 
-#: src/lang.c:731
+#: src/lang.c:728
 msgid "           h=help\n"
 msgstr ""
 
-#: src/lang.c:733
+#: src/lang.c:730
 msgid "Unlimited"
 msgstr ""
 
-#: src/lang.c:734
+#: src/lang.c:731
 msgid "Enter wildcard unsubscribe pattern> "
 msgstr ""
 
-#: src/lang.c:735
+#: src/lang.c:732
 #, c-format
 msgid "Error decoding %s : %s"
 msgstr ""
 
-#: src/lang.c:736
+#: src/lang.c:733
 msgid "No end."
 msgstr ""
 
-#: src/lang.c:737
+#: src/lang.c:734
 #, c-format
 msgid "%s successfully decoded."
 msgstr ""
 
-#: src/lang.c:738
+#: src/lang.c:735
 #, c-format
 msgid ""
 "%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
 "\n"
 msgstr ""
 
-#: src/lang.c:739
+#: src/lang.c:736
 msgid "unread "
 msgstr ""
 
-#: src/lang.c:740
+#: src/lang.c:737
 #, c-format
 msgid "unsubscribed from %d groups"
 msgstr ""
 
-#: src/lang.c:741
+#: src/lang.c:738
 #, c-format
 msgid "Unsubscribed from %s"
 msgstr ""
 
-#: src/lang.c:742
+#: src/lang.c:739
 msgid "Unsubscribing... "
 msgstr ""
 
-#: src/lang.c:743
+#: src/lang.c:740
 msgid "Unthreading articles..."
 msgstr ""
 
-#: src/lang.c:744
+#: src/lang.c:741
 msgid "Updated"
 msgstr ""
 
-#: src/lang.c:745
+#: src/lang.c:742
 msgid "Updating"
 msgstr ""
 
-#: src/lang.c:746
+#: src/lang.c:743
 #, c-format
 msgid "Opening %s\n"
 msgstr ""
 
-#: src/lang.c:747
+#: src/lang.c:744
 msgid "No more URL's in this article"
 msgstr ""
 
-#: src/lang.c:748
+#: src/lang.c:745
 msgid "Use MIME display program for this message?"
 msgstr ""
 
-#: src/lang.c:749
+#: src/lang.c:746
 msgid "  -c       mark all news as read in subscribed newsgroups (batch mode)"
 msgstr ""
 
-#: src/lang.c:750
+#: src/lang.c:747
 msgid "  -Z       return status indicating if any unread news (batch mode)"
 msgstr ""
 
-#: src/lang.c:751
+#: src/lang.c:748
 msgid "  -q       don't check for new newsgroups"
 msgstr ""
 
-#: src/lang.c:752
+#: src/lang.c:749
 msgid "  -X       don't save any files on quit"
 msgstr ""
 
-#: src/lang.c:753
+#: src/lang.c:750
 msgid "  -d       don't show newsgroup descriptions"
 msgstr ""
 
-#: src/lang.c:754
+#: src/lang.c:751
 msgid "  -G limit get only limit articles/group"
 msgstr ""
 
-#: src/lang.c:755
+#: src/lang.c:752
 #, c-format
 msgid "  -H       help information about %s"
 msgstr ""
 
-#: src/lang.c:756
+#: src/lang.c:753
 msgid "  -h       this help message"
 msgstr ""
 
-#: src/lang.c:757
+#: src/lang.c:754
 #, c-format
 msgid "  -I dir   news index file directory [default=%s]"
 msgstr ""
 
-#: src/lang.c:758
+#: src/lang.c:755
 msgid "  -u       update index files (batch mode)"
 msgstr ""
 
-#: src/lang.c:759
+#: src/lang.c:756
 #, c-format
 msgid "  -m dir   mailbox directory [default=%s]"
 msgstr ""
 
-#: src/lang.c:760
+#: src/lang.c:757
 #, c-format
 msgid ""
 "\n"
 "Mail bug reports/comments to %s"
 msgstr ""
 
-#: src/lang.c:761
+#: src/lang.c:758
 msgid "  -N       mail new news to your posts (batch mode)"
 msgstr ""
 
-#: src/lang.c:762
+#: src/lang.c:759
 msgid "  -M user  mail new news to specified user (batch mode)"
 msgstr ""
 
-#: src/lang.c:763
+#: src/lang.c:760
 #, c-format
 msgid "  -f file  subscribed to newsgroups file [default=%s]"
 msgstr ""
 
-#: src/lang.c:764
+#: src/lang.c:761
 msgid "  -x       no posting mode"
 msgstr ""
 
-#: src/lang.c:765
+#: src/lang.c:762
 msgid "  -w       post an article and exit"
 msgstr ""
 
-#: src/lang.c:766
+#: src/lang.c:763
 msgid "  -o       post all postponed articles and exit"
 msgstr ""
 
-#: src/lang.c:767
+#: src/lang.c:764
 msgid "  -r       read news remotely from default NNTP server"
 msgstr ""
 
-#: src/lang.c:768
+#: src/lang.c:765
 msgid "  -R       read news saved by -S option"
 msgstr ""
 
-#: src/lang.c:769
+#: src/lang.c:766
 #, c-format
 msgid "  -s dir   save news directory [default=%s]"
 msgstr ""
 
-#: src/lang.c:770
+#: src/lang.c:767
 msgid "  -S       save new news for later reading (batch mode)"
 msgstr ""
 
-#: src/lang.c:771
+#: src/lang.c:768
 msgid "  -z       start if any unread news"
 msgstr ""
 
-#: src/lang.c:772
+#: src/lang.c:769
 #, c-format
 msgid ""
 "A Usenet reader.\n"
@@ -3087,37 +3137,37 @@ msgid ""
 "Usage: %s [options] [newsgroup[,...]]"
 msgstr ""
 
-#: src/lang.c:773
+#: src/lang.c:770
 msgid "  -v       verbose output for batch mode options"
 msgstr ""
 
-#: src/lang.c:774
+#: src/lang.c:771
 msgid "  -V       print version & date information"
 msgstr ""
 
-#: src/lang.c:775
+#: src/lang.c:772
 #, c-format
 msgid "%s only useful without batch mode operations\n"
 msgstr ""
 
-#: src/lang.c:776
+#: src/lang.c:773
 #, c-format
 msgid "%s only useful for batch mode operations\n"
 msgstr ""
 
-#: src/lang.c:778
+#: src/lang.c:775
 #, c-format
 msgid ""
 "\n"
 "%s%d out of range (0 - %d). Reset to 0"
 msgstr ""
 
-#: src/lang.c:779
+#: src/lang.c:776
 #, c-format
 msgid "View '%s' (%s/%s)?"
 msgstr ""
 
-#: src/lang.c:781
+#: src/lang.c:778
 #, c-format
 msgid ""
 "\n"
@@ -3125,33 +3175,33 @@ msgid ""
 "%-100s\n"
 msgstr ""
 
-#: src/lang.c:782
+#: src/lang.c:779
 msgid ""
 "\n"
 "Warning: article unchanged after editing\n"
 msgstr ""
 
-#: src/lang.c:783
+#: src/lang.c:780
 msgid ""
 "\n"
 "Warning: \"Subject:\" contains only whitespaces.\n"
 msgstr ""
 
-#: src/lang.c:784
+#: src/lang.c:781
 msgid ""
 "\n"
-"Warning: \"Subject:\" begins with \"Re: \" but there are no "
-"\"References:\".\n"
+"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:"
+"\".\n"
 msgstr ""
 
-#: src/lang.c:786
+#: src/lang.c:783
 msgid ""
 "\n"
 "Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
 "         with \"Re: \" and does not contain \"(was:\".\n"
 msgstr ""
 
-#: src/lang.c:789
+#: src/lang.c:786
 msgid ""
 "Read carefully!\n"
 "\n"
@@ -3165,7 +3215,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: src/lang.c:793
+#: src/lang.c:790
 msgid ""
 "\n"
 "Warning: You are using a non-plain transfer encoding (such as base64 or\n"
@@ -3174,7 +3224,7 @@ msgid ""
 "         not be encoded properly.\n"
 msgstr ""
 
-#: src/lang.c:798
+#: src/lang.c:795
 #, c-format
 msgid ""
 "\n"
@@ -3184,7 +3234,7 @@ msgid ""
 "Read WHATSNEW, etc...\n"
 msgstr ""
 
-#: src/lang.c:800
+#: src/lang.c:797
 #, c-format
 msgid ""
 "\n"
@@ -3193,7 +3243,7 @@ msgid ""
 "Some values in your %s file may be ignored, others might have changed!\n"
 msgstr ""
 
-#: src/lang.c:803
+#: src/lang.c:800
 #, c-format
 msgid ""
 "Warning: tin wrote fewer groups to your\n"
@@ -3203,19 +3253,19 @@ msgid ""
 "before you start tin once again!\n"
 msgstr ""
 
-#: src/lang.c:807
+#: src/lang.c:804
 #, c-format
 msgid ""
 "\n"
 "Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
 msgstr ""
 
-#: src/lang.c:808
+#: src/lang.c:805
 #, c-format
 msgid "Warning: Only %d out of %d articles were saved"
 msgstr ""
 
-#: src/lang.c:809
+#: src/lang.c:806
 #, c-format
 msgid ""
 "\n"
@@ -3226,49 +3276,49 @@ msgid ""
 "         possible.\n"
 msgstr ""
 
-#: src/lang.c:813
+#: src/lang.c:810
 #, c-format
 msgid ""
 "Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
 msgstr ""
 
-#: src/lang.c:814
+#: src/lang.c:811
 msgid ""
 "\n"
 "Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
 msgstr ""
 
-#: src/lang.c:815
+#: src/lang.c:812
 msgid "Writing attributes file..."
 msgstr ""
 
-#: src/lang.c:817
+#: src/lang.c:814
 #, c-format
 msgid "%d Responses"
 msgstr ""
 
-#: src/lang.c:819
+#: src/lang.c:816
 #, c-format
 msgid "Added %d %s"
 msgstr ""
 
-#: src/lang.c:820
+#: src/lang.c:817
 msgid "No unsubscribed groups to show"
 msgstr ""
 
-#: src/lang.c:821
+#: src/lang.c:818
 msgid "Showing subscribed to groups only"
 msgstr ""
 
-#: src/lang.c:822
+#: src/lang.c:819
 msgid "Yes "
 msgstr ""
 
-#: src/lang.c:823
+#: src/lang.c:820
 msgid "    You have mail\n"
 msgstr ""
 
-#: src/lang.c:828
+#: src/lang.c:825
 #, c-format
 msgid ""
 "\n"
@@ -3281,16 +3331,11 @@ msgid ""
 "         M)enu option.\n"
 msgstr ""
 
-#: src/lang.c:839
-#, c-format
-msgid "Redefined key %s '%s' -> '%s'\n"
-msgstr ""
-
-#: src/lang.c:840
+#: src/lang.c:836
 msgid "  -D       debug mode 1=NNTP 2=ALL"
 msgstr ""
 
-#: src/lang.c:844
+#: src/lang.c:840
 msgid ""
 "Read carefully!\n"
 "\n"
@@ -3307,11 +3352,11 @@ msgid ""
 "\n"
 msgstr ""
 
-#: src/lang.c:853
+#: src/lang.c:849
 msgid "toggle color"
 msgstr ""
 
-#: src/lang.c:854
+#: src/lang.c:850
 msgid ""
 "# Changing colors of several screen parts\n"
 "# Possible values are:\n"
@@ -3336,351 +3381,359 @@ msgid ""
 "\n"
 msgstr ""
 
-#: src/lang.c:874
+#: src/lang.c:870
 msgid "  -a       toggle color flag"
 msgstr ""
 
-#: src/lang.c:878
+#: src/lang.c:874
 msgid ""
 "\n"
 "Error: Followup-To set to more than one newsgroup!\n"
 msgstr ""
 
-#: src/lang.c:879
+#: src/lang.c:875
 #, c-format
 msgid ""
 "\n"
 "Error: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr ""
 
-#: src/lang.c:880
+#: src/lang.c:876
 #, c-format
 msgid ""
 "\n"
 "Error: \"%s\" is not a valid newsgroup!\n"
 msgstr ""
 
-#: src/lang.c:882
+#: src/lang.c:878
 msgid ""
 "\n"
 "Warning: Followup-To set to more than one newsgroup!\n"
 msgstr ""
 
-#: src/lang.c:883
+#: src/lang.c:879
 #, c-format
 msgid ""
 "\n"
 "Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr ""
 
-#: src/lang.c:884
+#: src/lang.c:880
 #, c-format
 msgid ""
 "\n"
 "Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
 msgstr ""
 
-#: src/lang.c:885
+#: src/lang.c:881
 #, c-format
 msgid ""
 "\n"
 "Warning: \"%s\" is not a valid newsgroup at this site!\n"
 msgstr ""
 
-#: src/lang.c:889
+#: src/lang.c:885
 #, c-format
 msgid "%d files successfully written from %d articles. %d %s occurred."
 msgstr ""
 
-#: src/lang.c:890
+#: src/lang.c:886
 msgid "Missing parts."
 msgstr ""
 
-#: src/lang.c:891
+#: src/lang.c:887
 msgid "No beginning."
 msgstr ""
 
-#: src/lang.c:892
+#: src/lang.c:888
 msgid "No data."
 msgstr ""
 
-#: src/lang.c:893
+#: src/lang.c:889
 msgid "Unknown error."
 msgstr ""
 
-#: src/lang.c:896
+#: src/lang.c:892
 #, c-format
 msgid "\tChecksum of %s (%ld %s)"
 msgstr ""
 
-#: src/lang.c:901
+#: src/lang.c:897
 msgid "Reading mail active file... "
 msgstr ""
 
-#: src/lang.c:902
+#: src/lang.c:898
 msgid "Reading mailgroups file... "
 msgstr ""
 
-#: src/lang.c:906
+#: src/lang.c:902
 msgid "perform PGP operations on article"
 msgstr ""
 
-#: src/lang.c:907
+#: src/lang.c:903
 msgid "Add key(s) to public keyring?"
 msgstr ""
 
-#: src/lang.c:908
+#: src/lang.c:904
 #, c-format
 msgid "%s=encrypt, %s=sign, %s=both, %s=quit: "
 msgstr ""
 
-#: src/lang.c:909
+#: src/lang.c:905
 #, c-format
 msgid "%s=sign, %s=sign & include public key, %s=quit: "
 msgstr ""
 
-#: src/lang.c:910
+#: src/lang.c:906
 #, c-format
 msgid "PGP has not been set up (can't open %s)"
 msgstr ""
 
-#: src/lang.c:911
+#: src/lang.c:907
 msgid "Article not signed and no public keys found"
 msgstr ""
 
-#: src/lang.c:913
+#: src/lang.c:909
 #, c-format
 msgid "%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr ""
 
-#: src/lang.c:914
+#: src/lang.c:910
+#, c-format
 msgid "%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
 msgstr ""
 
-#: src/lang.c:915
+#: src/lang.c:911
+#, c-format
 msgid ""
 "%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr ""
 
-#: src/lang.c:917
+#: src/lang.c:913
 #, c-format
 msgid "%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr ""
 
-#: src/lang.c:918
+#: src/lang.c:914
+#, c-format
 msgid "%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
 msgstr ""
 
-#: src/lang.c:919
+#: src/lang.c:915
+#, c-format
 msgid "%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr ""
 
-#: src/lang.c:923
+#: src/lang.c:919
 #, c-format
 msgid "%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
 msgstr ""
 
-#: src/lang.c:924
+#: src/lang.c:920
+#, c-format
 msgid "%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
 msgstr ""
 
-#: src/lang.c:925
+#: src/lang.c:921
+#, c-format
 msgid "%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr ""
 
-#: src/lang.c:927
+#: src/lang.c:923
 #, c-format
 msgid "%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
 msgstr ""
 
-#: src/lang.c:928
+#: src/lang.c:924
+#, c-format
 msgid "%s=quit, %s=edit, %s=send [%%s]: "
 msgstr ""
 
-#: src/lang.c:929
+#: src/lang.c:925
+#, c-format
 msgid "%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr ""
 
-#: src/lang.c:938
+#: src/lang.c:934
 msgid "Try cache_overview_files to speed up things.\n"
 msgstr ""
 
-#: src/lang.c:939
+#: src/lang.c:935
 msgid "Tin will use local index files instead.\n"
 msgstr ""
 
-#: src/lang.c:940
+#: src/lang.c:936
 msgid "Cannot find NNTP server name"
 msgstr ""
 
-#: src/lang.c:941
+#: src/lang.c:937
 #, c-format
 msgid "Connecting to %s:%d..."
 msgstr ""
 
-#: src/lang.c:942
+#: src/lang.c:938
 msgid "Disconnecting from server...\n"
 msgstr ""
 
-#: src/lang.c:943
+#: src/lang.c:939
 #, c-format
 msgid "Wrong newsgroup name in response of GROUP command, %s for %s"
 msgstr ""
 
-#: src/lang.c:944
+#: src/lang.c:940
 #, c-format
 msgid "Failed to connect to NNTP server %s. Exiting..."
 msgstr ""
 
-#: src/lang.c:945
+#: src/lang.c:941
 msgid "205  Closing connection"
 msgstr ""
 
-#: src/lang.c:946
+#: src/lang.c:942
 msgid "Your server does not support the NNTP XOVER or OVER command.\n"
 msgstr ""
 
-#: src/lang.c:947
+#: src/lang.c:943
 msgid "Connection to news server has timed out. Reconnect?"
 msgstr ""
 
-#: src/lang.c:948
+#: src/lang.c:944
 #, c-format
 msgid ""
 "Put the server name in the file %s,\n"
 "or set the environment variable NNTPSERVER"
 msgstr ""
 
-#: src/lang.c:949
+#: src/lang.c:945
 msgid "  -A       force authentication on connect"
 msgstr ""
 
-#: src/lang.c:950
+#: src/lang.c:946
 #, c-format
 msgid "  -g serv  read news from NNTP server serv [default=%s]"
 msgstr ""
 
-#: src/lang.c:951
+#: src/lang.c:947
 #, c-format
 msgid "  -p port  use port as NNTP port [default=%d]"
 msgstr ""
 
-#: src/lang.c:952
+#: src/lang.c:948
 msgid "  -Q       quick start. Same as -nqd"
 msgstr ""
 
-#: src/lang.c:953
+#: src/lang.c:949
 msgid "  -l       use only LIST instead of GROUP (-n) command"
 msgstr ""
 
-#: src/lang.c:954
+#: src/lang.c:950
 msgid "  -n       only read subscribed .newsrc groups from NNTP server"
 msgstr ""
 
-#: src/lang.c:956
+#: src/lang.c:952
 #, c-format
 msgid "%s/tcp: Unknown service.\n"
 msgstr ""
 
-#: src/lang.c:959
+#: src/lang.c:955
 msgid ""
 "\n"
 "socket or connect problem\n"
 msgstr ""
 
-#: src/lang.c:961
+#: src/lang.c:957
 #, c-format
 msgid ""
 "\n"
 "Connection to %s: "
 msgstr ""
 
-#: src/lang.c:962
+#: src/lang.c:958
 msgid "Giving up...\n"
 msgstr ""
 
-#: src/lang.c:965
+#: src/lang.c:961
 msgid ""
 "Your server does not have Xref: in its XOVER information.\n"
 "Tin will try to use XHDR XREF instead (slows down things a bit).\n"
 msgstr ""
 
-#: src/lang.c:968
+#: src/lang.c:964
 msgid "Your server does not have Xref: in its XOVER information.\n"
 msgstr ""
 
-#: src/lang.c:971
+#: src/lang.c:967
 #, c-format
 msgid "Can't open %s. Try %s -r to read news via NNTP.\n"
 msgstr ""
 
-#: src/lang.c:974
+#: src/lang.c:970
 msgid "  -Q       quick start. Same as -qd"
 msgstr ""
 
-#: src/lang.c:975
+#: src/lang.c:971
 msgid "  -l       read only active file instead of scanning spool (-n) command"
 msgstr ""
 
-#: src/lang.c:976
+#: src/lang.c:972
 msgid "  -n       only read subscribed .newsrc groups from spool"
 msgstr ""
 
-#: src/lang.c:977
+#: src/lang.c:973
 msgid "Your server does not have Xref: in its NOV-files.\n"
 msgstr ""
 
-#: src/lang.c:981
+#: src/lang.c:977
 msgid "Posting using external inews failed. Use built in inews instead?"
 msgstr ""
 
-#: src/lang.c:982
+#: src/lang.c:978
 msgid "It worked! Should I always use my built in inews from now on?"
 msgstr ""
 
-#: src/lang.c:990
+#: src/lang.c:986
 #, c-format
 msgid "%d %s printed"
 msgstr ""
 
-#: src/lang.c:991
+#: src/lang.c:987
 msgid "output article/thread/hot/pattern/tagged articles to printer"
 msgstr ""
 
-#: src/lang.c:992
+#: src/lang.c:988
 msgid "Print"
 msgstr ""
 
-#: src/lang.c:993
+#: src/lang.c:989
 msgid "Printing..."
 msgstr ""
 
-#: src/lang.c:997
+#: src/lang.c:993
 msgid "pipe article/thread/hot/pattern/tagged articles into command"
 msgstr ""
 
-#: src/lang.c:998
+#: src/lang.c:994
 msgid "No command"
 msgstr ""
 
-#: src/lang.c:999
+#: src/lang.c:995
 msgid "Pipe"
 msgstr ""
 
-#: src/lang.c:1000
+#: src/lang.c:996
 #, c-format
 msgid "Pipe to command [%.*s]> "
 msgstr ""
 
-#: src/lang.c:1001
+#: src/lang.c:997
 msgid "Piping..."
 msgstr ""
 
-#: src/lang.c:1003
+#: src/lang.c:999
 msgid "Piping not enabled."
 msgstr ""
 
-#: src/lang.c:1007
+#: src/lang.c:1003
 #, c-format
 msgid ""
 "\n"
@@ -3690,7 +3743,7 @@ msgid ""
 "       newsgroup names.\n"
 msgstr ""
 
-#: src/lang.c:1012
+#: src/lang.c:1008
 #, c-format
 msgid ""
 "\n"
@@ -3699,7 +3752,7 @@ msgid ""
 "       Please write all newsgroups into a single line.\n"
 msgstr ""
 
-#: src/lang.c:1017
+#: src/lang.c:1013
 #, c-format
 msgid ""
 "\n"
@@ -3708,14 +3761,14 @@ msgid ""
 "         To avoid trouble please write all newsgroups into a single line.\n"
 msgstr ""
 
-#: src/lang.c:1021
+#: src/lang.c:1017
 #, c-format
 msgid ""
 "\n"
 "Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
 msgstr ""
 
-#: src/lang.c:1026
+#: src/lang.c:1022
 msgid ""
 "\n"
 "  If your article contains quoted text  please take some time to pare it "
@@ -3737,505 +3790,509 @@ msgid ""
 "  likely to ignore it completely.  It's a crowded net out there.\n"
 msgstr ""
 
-#: src/lang.c:1039
+#: src/lang.c:1035
 msgid "shell escape"
 msgstr ""
 
-#: src/lang.c:1040
+#: src/lang.c:1036
 #, c-format
 msgid "Shell Command (%s)"
 msgstr ""
 
-#: src/lang.c:1041
+#: src/lang.c:1037
 #, c-format
 msgid "Enter shell command [%s]> "
 msgstr ""
 
-#: src/lang.c:1045
+#: src/lang.c:1041
 #, c-format
 msgid "%s: Can't get entry for TERM\n"
 msgstr ""
 
-#: src/lang.c:1049
+#: src/lang.c:1045
 #, c-format
 msgid "Group %.*s ('q' to quit)..."
 msgstr ""
 
-#: src/lang.c:1051
+#: src/lang.c:1047
 #, c-format
 msgid "Group %.*s..."
 msgstr ""
 
-#: src/lang.c:1055
+#: src/lang.c:1051
 msgid "Server unavailable\n"
 msgstr ""
 
-#: src/lang.c:1061
+#: src/lang.c:1057
 #, c-format
 msgid ""
-"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; "
-"%s=post"
+"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+"s=post"
 msgstr ""
 
-#: src/lang.c:1062
+#: src/lang.c:1058
 #, c-format
 msgid ""
 "%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr ""
 
-#: src/lang.c:1064
+#: src/lang.c:1060
 #, c-format
 msgid ""
 "%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr ""
 
-#: src/lang.c:1065
+#: src/lang.c:1061
 #, c-format
 msgid "%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr ""
 
-#: src/lang.c:1069
+#: src/lang.c:1065
 #, c-format
 msgid ""
 "%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr ""
 
-#: src/lang.c:1070
+#: src/lang.c:1066
 #, c-format
 msgid "%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr ""
 
-#: src/lang.c:1072
+#: src/lang.c:1068
 #, c-format
 msgid "%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
 msgstr ""
 
-#: src/lang.c:1073
+#: src/lang.c:1069
 #, c-format
 msgid "%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr ""
 
-#: src/lang.c:1079
+#: src/lang.c:1075
 msgid "Terminal does not support color"
 msgstr ""
 
-#: src/lang.c:1084
+#: src/lang.c:1080
 #, c-format
 msgid "Trying %s"
 msgstr ""
 
-#: src/lang.c:1098 src/lang.c:1123 src/lang.c:1139 src/lang.c:1318
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315
 #: src/refs.c:296
 msgid "None"
 msgstr ""
 
-#: src/lang.c:1099
+#: src/lang.c:1095
 msgid "Subject"
 msgstr ""
 
-#: src/lang.c:1100
+#: src/lang.c:1096
 msgid "References"
 msgstr ""
 
-#: src/lang.c:1101
+#: src/lang.c:1097
 msgid "Both Subject and References"
 msgstr ""
 
-#: src/lang.c:1102
+#: src/lang.c:1098
 msgid "Multipart Subject"
 msgstr ""
 
-#: src/lang.c:1114 src/lang.c:1225
+#: src/lang.c:1099
+msgid "Percentage Match"
+msgstr ""
+
+#: src/lang.c:1111 src/lang.c:1222
 msgid "No"
 msgstr ""
 
-#: src/lang.c:1115 src/lang.c:1227
+#: src/lang.c:1112 src/lang.c:1224
 msgid "Yes"
 msgstr ""
 
-#: src/lang.c:1116
+#: src/lang.c:1113
 msgid "Hide All"
 msgstr ""
 
-#: src/lang.c:1124
+#: src/lang.c:1121
 msgid "Address"
 msgstr ""
 
-#: src/lang.c:1125
+#: src/lang.c:1122
 msgid "Full Name"
 msgstr ""
 
-#: src/lang.c:1126
+#: src/lang.c:1123
 msgid "Address and Name"
 msgstr ""
 
-#: src/lang.c:1133
+#: src/lang.c:1130
 msgid "Max"
 msgstr ""
 
-#: src/lang.c:1134
+#: src/lang.c:1131
 msgid "Sum"
 msgstr ""
 
-#: src/lang.c:1135
+#: src/lang.c:1132
 msgid "Average"
 msgstr ""
 
-#: src/lang.c:1140
+#: src/lang.c:1137
 msgid "Lines"
 msgstr ""
 
-#: src/lang.c:1141
+#: src/lang.c:1138
 msgid "Score"
 msgstr ""
 
-#: src/lang.c:1142
+#: src/lang.c:1139
 msgid "Lines & Score"
 msgstr ""
 
-#: src/lang.c:1151
+#: src/lang.c:1148
 msgid "Black"
 msgstr ""
 
-#: src/lang.c:1152
+#: src/lang.c:1149
 msgid "Red"
 msgstr ""
 
-#: src/lang.c:1153
+#: src/lang.c:1150
 msgid "Green"
 msgstr ""
 
-#: src/lang.c:1154
+#: src/lang.c:1151
 msgid "Brown"
 msgstr ""
 
-#: src/lang.c:1155
+#: src/lang.c:1152
 msgid "Blue"
 msgstr ""
 
-#: src/lang.c:1156
+#: src/lang.c:1153
 msgid "Pink"
 msgstr ""
 
-#: src/lang.c:1157
+#: src/lang.c:1154
 msgid "Cyan"
 msgstr ""
 
-#: src/lang.c:1158
+#: src/lang.c:1155
 msgid "White"
 msgstr ""
 
-#: src/lang.c:1159
+#: src/lang.c:1156
 msgid "Gray"
 msgstr ""
 
-#: src/lang.c:1160
+#: src/lang.c:1157
 msgid "Light Red"
 msgstr ""
 
-#: src/lang.c:1161
+#: src/lang.c:1158
 msgid "Light Green"
 msgstr ""
 
-#: src/lang.c:1162
+#: src/lang.c:1159
 msgid "Yellow"
 msgstr ""
 
-#: src/lang.c:1163
+#: src/lang.c:1160
 msgid "Light Blue"
 msgstr ""
 
-#: src/lang.c:1164
+#: src/lang.c:1161
 msgid "Light Pink"
 msgstr ""
 
-#: src/lang.c:1165
+#: src/lang.c:1162
 msgid "Light Cyan"
 msgstr ""
 
-#: src/lang.c:1166
+#: src/lang.c:1163
 msgid "Light White"
 msgstr ""
 
-#: src/lang.c:1174 src/lang.c:1231 src/lang.c:1245
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
 msgid "Nothing"
 msgstr ""
 
-#: src/lang.c:1175
+#: src/lang.c:1172
 msgid "Mark"
 msgstr ""
 
-#: src/lang.c:1176
+#: src/lang.c:1173
 msgid "Space"
 msgstr ""
 
-#: src/lang.c:1183
+#: src/lang.c:1180
 msgid "Normal"
 msgstr ""
 
-#: src/lang.c:1184
+#: src/lang.c:1181
 msgid "Best highlighting"
 msgstr ""
 
-#: src/lang.c:1185
+#: src/lang.c:1182
 msgid "Underline"
 msgstr ""
 
-#: src/lang.c:1186
+#: src/lang.c:1183
 msgid "Reverse video"
 msgstr ""
 
-#: src/lang.c:1187
+#: src/lang.c:1184
 msgid "Blinking"
 msgstr ""
 
-#: src/lang.c:1188
+#: src/lang.c:1185
 msgid "Half bright"
 msgstr ""
 
-#: src/lang.c:1189
+#: src/lang.c:1186
 msgid "Bold"
 msgstr ""
 
-#: src/lang.c:1194
+#: src/lang.c:1191
 msgid "none"
 msgstr ""
 
-#: src/lang.c:1195
+#: src/lang.c:1192
 msgid "commands"
 msgstr ""
 
-#: src/lang.c:1196
+#: src/lang.c:1193
 msgid "select"
 msgstr ""
 
-#: src/lang.c:1198
+#: src/lang.c:1195
 msgid "commands & quit"
 msgstr ""
 
-#: src/lang.c:1199
+#: src/lang.c:1196
 msgid "commands & select"
 msgstr ""
 
-#: src/lang.c:1200
+#: src/lang.c:1197
 msgid "quit & select"
 msgstr ""
 
-#: src/lang.c:1201
+#: src/lang.c:1198
 msgid "commands & quit & select"
 msgstr ""
 
-#: src/lang.c:1226
+#: src/lang.c:1223
 msgid "Shell archive"
 msgstr ""
 
-#: src/lang.c:1232
+#: src/lang.c:1229
 msgid "Subject: (descending)"
 msgstr ""
 
-#: src/lang.c:1233
+#: src/lang.c:1230
 msgid "Subject: (ascending)"
 msgstr ""
 
-#: src/lang.c:1234
+#: src/lang.c:1231
 msgid "From: (descending)"
 msgstr ""
 
-#: src/lang.c:1235
+#: src/lang.c:1232
 msgid "From: (ascending)"
 msgstr ""
 
-#: src/lang.c:1236
+#: src/lang.c:1233
 msgid "Date: (descending)"
 msgstr ""
 
-#: src/lang.c:1237
+#: src/lang.c:1234
 msgid "Date: (ascending)"
 msgstr ""
 
-#: src/lang.c:1238 src/lang.c:1246
+#: src/lang.c:1235 src/lang.c:1243
 msgid "Score (descending)"
 msgstr ""
 
-#: src/lang.c:1239 src/lang.c:1247
+#: src/lang.c:1236 src/lang.c:1244
 msgid "Score (ascending)"
 msgstr ""
 
-#: src/lang.c:1240
+#: src/lang.c:1237
 msgid "Lines: (descending)"
 msgstr ""
 
-#: src/lang.c:1241
+#: src/lang.c:1238
 msgid "Lines: (ascending)"
 msgstr ""
 
-#: src/lang.c:1252
+#: src/lang.c:1249
 msgid "Always Keep"
 msgstr ""
 
-#: src/lang.c:1253
+#: src/lang.c:1250
 msgid "Always Remove"
 msgstr ""
 
-#: src/lang.c:1254
+#: src/lang.c:1251
 msgid "Mark with D on selection screen"
 msgstr ""
 
-#: src/lang.c:1259
+#: src/lang.c:1256
 msgid "Kill only unread arts"
 msgstr ""
 
-#: src/lang.c:1260
+#: src/lang.c:1257
 msgid "Kill all arts & show with K"
 msgstr ""
 
 #. TODO: s/K/art_marked_killed/
-#: src/lang.c:1261
+#: src/lang.c:1258
 msgid "Kill all arts and never show"
 msgstr ""
 
-#: src/lang.c:1266
+#: src/lang.c:1263
 msgid "Nothing special"
 msgstr ""
 
-#: src/lang.c:1267
+#: src/lang.c:1264
 msgid "Compress quotes"
 msgstr ""
 
-#: src/lang.c:1268
+#: src/lang.c:1265
 msgid "Quote signatures"
 msgstr ""
 
-#: src/lang.c:1269
+#: src/lang.c:1266
 msgid "Compress quotes, quote sigs"
 msgstr ""
 
-#: src/lang.c:1270
+#: src/lang.c:1267
 msgid "Quote empty lines"
 msgstr ""
 
-#: src/lang.c:1271
+#: src/lang.c:1268
 msgid "Compress quotes, quote empty lines"
 msgstr ""
 
-#: src/lang.c:1272
+#: src/lang.c:1269
 msgid "Quote sigs & empty lines"
 msgstr ""
 
-#: src/lang.c:1273
+#: src/lang.c:1270
 msgid "Comp. q., quote sigs & empty lines"
 msgstr ""
 
-#: src/lang.c:1311
+#: src/lang.c:1308
 msgid "no"
 msgstr ""
 
-#: src/lang.c:1312
+#: src/lang.c:1309
 msgid "with headers"
 msgstr ""
 
-#: src/lang.c:1313
+#: src/lang.c:1310
 msgid "without headers"
 msgstr ""
 
-#: src/lang.c:1320 src/lang.c:1326
+#: src/lang.c:1317 src/lang.c:1323
 msgid "NFKC"
 msgstr ""
 
-#: src/lang.c:1321
+#: src/lang.c:1318
 msgid "NFKD"
 msgstr ""
 
-#: src/lang.c:1322
+#: src/lang.c:1319
 msgid "NFC"
 msgstr ""
 
-#: src/lang.c:1323
+#: src/lang.c:1320
 msgid "NFD"
 msgstr ""
 
-#: src/lang.c:1334
+#: src/lang.c:1331
 msgid "Display Options"
 msgstr ""
 
-#: src/lang.c:1341
+#: src/lang.c:1338
 msgid "Color Options"
 msgstr ""
 
-#: src/lang.c:1348
+#: src/lang.c:1345
 msgid "Article-Limiting Options"
 msgstr ""
 
-#: src/lang.c:1354
+#: src/lang.c:1351
 msgid "Posting/Mailing Options"
 msgstr ""
 
-#: src/lang.c:1360
+#: src/lang.c:1357
 msgid "Saving/Printing Options"
 msgstr ""
 
-#: src/lang.c:1366
+#: src/lang.c:1363
 msgid "Expert Options"
 msgstr ""
 
-#: src/lang.c:1372
+#: src/lang.c:1369
 msgid "Filtering Options"
 msgstr ""
 
-#: src/lang.c:1377 src/lang.c:1408 src/lang.c:1414 src/lang.c:1426
-#: src/lang.c:1476 src/lang.c:1482 src/lang.c:1492 src/lang.c:1512
-#: src/lang.c:1587 src/lang.c:1757 src/lang.c:1763 src/lang.c:1769
-#: src/lang.c:1775 src/lang.c:1787 src/lang.c:1794 src/lang.c:1848
-#: src/lang.c:1857 src/lang.c:1863 src/lang.c:1870 src/lang.c:1877
-#: src/lang.c:1884 src/lang.c:1891 src/lang.c:1898 src/lang.c:1905
-#: src/lang.c:1912 src/lang.c:1919 src/lang.c:1926 src/lang.c:1933
-#: src/lang.c:1940 src/lang.c:1947 src/lang.c:1954 src/lang.c:1961
-#: src/lang.c:1968 src/lang.c:1975 src/lang.c:1982 src/lang.c:1989
-#: src/lang.c:1996 src/lang.c:2003 src/lang.c:2010 src/lang.c:2017
-#: src/lang.c:2025 src/lang.c:2041 src/lang.c:2048 src/lang.c:2055
-#: src/lang.c:2062 src/lang.c:2068 src/lang.c:2074 src/lang.c:2091
-#: src/lang.c:2103 src/lang.c:2137 src/lang.c:2190 src/lang.c:2197
-#: src/lang.c:2203 src/lang.c:2228 src/lang.c:2245 src/lang.c:2298
-#: src/lang.c:2334 src/lang.c:2354 src/lang.c:2389 src/lang.c:2399
-#: src/lang.c:2424 src/lang.c:2440 src/lang.c:2459 src/lang.c:2472
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437
+#: src/lang.c:1487 src/lang.c:1493 src/lang.c:1503 src/lang.c:1523
+#: src/lang.c:1598 src/lang.c:1768 src/lang.c:1774 src/lang.c:1780
+#: src/lang.c:1786 src/lang.c:1798 src/lang.c:1805 src/lang.c:1859
+#: src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916
+#: src/lang.c:1923 src/lang.c:1930 src/lang.c:1937 src/lang.c:1944
+#: src/lang.c:1951 src/lang.c:1958 src/lang.c:1965 src/lang.c:1972
+#: src/lang.c:1979 src/lang.c:1986 src/lang.c:1993 src/lang.c:2000
+#: src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066
+#: src/lang.c:2073 src/lang.c:2079 src/lang.c:2085 src/lang.c:2102
+#: src/lang.c:2114 src/lang.c:2148 src/lang.c:2201 src/lang.c:2208
+#: src/lang.c:2214 src/lang.c:2239 src/lang.c:2256 src/lang.c:2309
+#: src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
 msgid "<SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1378
+#: src/lang.c:1375
 msgid "Show mini menu & posting etiquette"
 msgstr ""
 
-#: src/lang.c:1379
+#: src/lang.c:1376
 msgid ""
 "# If ON show a mini menu of useful commands at each level\n"
 "# and posting etiquette after composing an article\n"
 msgstr ""
 
-#: src/lang.c:1384
+#: src/lang.c:1381
 msgid "Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1385
+#: src/lang.c:1382
 msgid "Show description of each newsgroup"
 msgstr ""
 
-#: src/lang.c:1386
+#: src/lang.c:1383
 msgid ""
 "# If ON show group description text after newsgroup name at\n"
 "# group selection level\n"
 msgstr ""
 
-#: src/lang.c:1391
+#: src/lang.c:1388
 msgid ""
 "Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
 "sets."
 msgstr ""
 
-#: src/lang.c:1392
+#: src/lang.c:1389
 msgid "In group menu, show author by"
 msgstr ""
 
-#: src/lang.c:1393
+#: src/lang.c:1390
 msgid ""
 "# Part of from field to display\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4245,31 +4302,31 @@ msgid ""
 "#   3 = both\n"
 msgstr ""
 
-#: src/lang.c:1402
+#: src/lang.c:1399
 msgid "Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1403
+#: src/lang.c:1400
 msgid "Draw -> instead of highlighted bar"
 msgstr ""
 
-#: src/lang.c:1404
+#: src/lang.c:1401
 msgid "# If ON use -> otherwise highlighted bar for selection\n"
 msgstr ""
 
-#: src/lang.c:1409
+#: src/lang.c:1406
 msgid "Use inverse video for page headers"
 msgstr ""
 
-#: src/lang.c:1410
+#: src/lang.c:1407
 msgid "# If ON use inverse video for page headers at different levels\n"
 msgstr ""
 
-#: src/lang.c:1415
+#: src/lang.c:1412
 msgid "Thread articles by"
 msgstr ""
 
-#: src/lang.c:1416
+#: src/lang.c:1413
 msgid ""
 "# Thread articles by ...\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4278,13 +4335,37 @@ msgid ""
 "#   2 = References\n"
 "# * 3 = Both (Subject and References)\n"
 "#   4 = Multipart Subject\n"
+"#   5 = Percentage Match\n"
+msgstr ""
+
+#: src/lang.c:1424
+msgid "Enter percentage match required to thread together. <CR> sets."
+msgstr ""
+
+#: src/lang.c:1425
+msgid "Thread percentage match"
+msgstr ""
+
+#: src/lang.c:1426
+#, c-format
+msgid ""
+"# Thread percentage match...\n"
+"# the percentage of characters in the subject of an article that must match\n"
+"# a base article for both those articles to be considered to belong to the\n"
+"# same thread. This option is an integer percentage, eg. 80, no decimals "
+"may\n"
+"# follow. If 80 is used here, then 80%% of the characters must match "
+"exactly,\n"
+"# no insertion of a character, for the two articles to be put in the same\n"
+"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+"# 'harppy' would be threaded separately from 'happy'\n"
 msgstr ""
 
-#: src/lang.c:1427
+#: src/lang.c:1438
 msgid "Score of a thread"
 msgstr ""
 
-#: src/lang.c:1428
+#: src/lang.c:1439
 msgid ""
 "# Thread score\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4293,16 +4374,16 @@ msgid ""
 "#   2 = average\n"
 msgstr ""
 
-#: src/lang.c:1436
+#: src/lang.c:1447
 msgid ""
 "Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1437
+#: src/lang.c:1448
 msgid "Sort articles by"
 msgstr ""
 
-#: src/lang.c:1438
+#: src/lang.c:1449
 msgid ""
 "# Sort articles by ...\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4319,15 +4400,15 @@ msgid ""
 "#  10 = Lines ascending\n"
 msgstr ""
 
-#: src/lang.c:1454
+#: src/lang.c:1465
 msgid "Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1455
+#: src/lang.c:1466
 msgid "Sort threads by"
 msgstr ""
 
-#: src/lang.c:1456
+#: src/lang.c:1467
 msgid ""
 "# Sort thread by ...\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4336,44 +4417,44 @@ msgid ""
 "#   2 = Score ascending\n"
 msgstr ""
 
-#: src/lang.c:1464
+#: src/lang.c:1475
 msgid ""
 "Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1465
+#: src/lang.c:1476
 msgid "Goto first unread article in group"
 msgstr ""
 
-#: src/lang.c:1466
+#: src/lang.c:1477
 msgid "# If ON put cursor at first unread art in group otherwise last art\n"
 msgstr ""
 
-#: src/lang.c:1470
+#: src/lang.c:1481
 msgid "Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1471
+#: src/lang.c:1482
 msgid "Show only unread articles"
 msgstr ""
 
-#: src/lang.c:1472
+#: src/lang.c:1483
 msgid "# If ON show only new/unread articles otherwise show all.\n"
 msgstr ""
 
-#: src/lang.c:1477
+#: src/lang.c:1488
 msgid "Show only groups with unread arts"
 msgstr ""
 
-#: src/lang.c:1478
+#: src/lang.c:1489
 msgid "# If ON show only subscribed to groups that contain unread articles.\n"
 msgstr ""
 
-#: src/lang.c:1483
+#: src/lang.c:1494
 msgid "Filter which articles"
 msgstr ""
 
-#: src/lang.c:1484
+#: src/lang.c:1495
 msgid ""
 "# Filter which articles\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4382,203 +4463,203 @@ msgid ""
 "#   2 = kill all articles and never show them\n"
 msgstr ""
 
-#: src/lang.c:1493
+#: src/lang.c:1504
 msgid "Tab goes to next unread article"
 msgstr ""
 
-#: src/lang.c:1494
+#: src/lang.c:1505
 msgid ""
 "# If ON the TAB command will go to next unread article at article viewer "
 "level\n"
 msgstr ""
 
-#: src/lang.c:1498
+#: src/lang.c:1509
 msgid ""
 "Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
 msgstr ""
 
-#: src/lang.c:1499
+#: src/lang.c:1510
 msgid "Space goes to next unread article"
 msgstr ""
 
-#: src/lang.c:1500
+#: src/lang.c:1511
 msgid ""
 "# If ON the SPACE command will go to next unread article at article viewer\n"
 "# level when the end of the article is reached (rn-style pager)\n"
 msgstr ""
 
-#: src/lang.c:1505
+#: src/lang.c:1516
 msgid ""
 "Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
 msgstr ""
 
-#: src/lang.c:1506
+#: src/lang.c:1517
 msgid "PgDn goes to next unread article"
 msgstr ""
 
-#: src/lang.c:1507
+#: src/lang.c:1518
 msgid ""
 "# If ON the PGDN or DOWN command will go to next unread article when\n"
 "# pressed at end of message\n"
 msgstr ""
 
-#: src/lang.c:1513
+#: src/lang.c:1524
 msgid "List thread using right arrow key"
 msgstr ""
 
-#: src/lang.c:1514
+#: src/lang.c:1525
 msgid ""
 "# If ON automatically list thread when entering it using right arrow key.\n"
 msgstr ""
 
-#: src/lang.c:1518
+#: src/lang.c:1529
 msgid "Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1519
+#: src/lang.c:1530
 msgid "Character to show deleted articles"
 msgstr ""
 
-#: src/lang.c:1520
+#: src/lang.c:1531
 msgid ""
 "# Character used to show that an art was deleted (default 'D')\n"
 "# _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1525
+#: src/lang.c:1536
 msgid ""
 "Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1526
+#: src/lang.c:1537
 msgid "Character to show inrange articles"
 msgstr ""
 
-#: src/lang.c:1527
+#: src/lang.c:1538
 msgid ""
 "# Character used to show that an art is in a range (default '#')\n"
 "# _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1532
+#: src/lang.c:1543
 msgid ""
 "Enter character to indicate that article will return. <CR> sets, <ESC> "
 "cancels."
 msgstr ""
 
-#: src/lang.c:1533
+#: src/lang.c:1544
 msgid "Character to show returning arts"
 msgstr ""
 
-#: src/lang.c:1534
+#: src/lang.c:1545
 msgid ""
 "# Character used to show that an art will return (default '-')\n"
 "# _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1539
+#: src/lang.c:1550
 msgid ""
 "Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1540
+#: src/lang.c:1551
 msgid "Character to show selected articles"
 msgstr ""
 
-#: src/lang.c:1541
+#: src/lang.c:1552
 msgid ""
 "# Character used to show that an art was auto-selected (default '*')\n"
 "# _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1546
+#: src/lang.c:1557
 msgid "Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1547
+#: src/lang.c:1558
 msgid "Character to show recent articles"
 msgstr ""
 
-#: src/lang.c:1548
+#: src/lang.c:1559
 msgid ""
 "# Character used to show that an art is recent (default 'o')\n"
 "# _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1553
+#: src/lang.c:1564
 msgid "Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1554
+#: src/lang.c:1565
 msgid "Character to show unread articles"
 msgstr ""
 
-#: src/lang.c:1555
+#: src/lang.c:1566
 msgid ""
 "# Character used to show that an art is unread (default '+')\n"
 "# _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1560
+#: src/lang.c:1571
 msgid "Enter character to indicate read articles. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1561
+#: src/lang.c:1572
 msgid "Character to show read articles"
 msgstr ""
 
-#: src/lang.c:1562
+#: src/lang.c:1573
 msgid ""
 "# Character used to show that an art was read (default ' ')\n"
 "# _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1567
+#: src/lang.c:1578
 msgid "Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1568
+#: src/lang.c:1579
 msgid "Character to show killed articles"
 msgstr ""
 
-#: src/lang.c:1569
+#: src/lang.c:1580
 msgid ""
 "# Character used to show that an art was killed (default 'K')\n"
 "# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1574
+#: src/lang.c:1585
 msgid ""
 "Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1575
+#: src/lang.c:1586
 msgid "Character to show readselected arts"
 msgstr ""
 
-#: src/lang.c:1576
+#: src/lang.c:1587
 msgid ""
 "# Character used to show that an art was selected before read (default ':')\n"
 "# kill_level must be set accordingly, _ is turned into ' '\n"
 msgstr ""
 
-#: src/lang.c:1581
+#: src/lang.c:1592
 msgid "Enter maximum length of newsgroup names displayed. <CR> sets."
 msgstr ""
 
-#: src/lang.c:1582
+#: src/lang.c:1593
 msgid "Max. length of group names shown"
 msgstr ""
 
-#: src/lang.c:1583
+#: src/lang.c:1594
 msgid "# Maximum length of the names of newsgroups displayed\n"
 msgstr ""
 
-#: src/lang.c:1588
+#: src/lang.c:1599
 msgid "Show lines/score in listings"
 msgstr ""
 
-#: src/lang.c:1589
+#: src/lang.c:1600
 msgid ""
 "# What informations should be displayed in article/thread listing\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4588,17 +4669,17 @@ msgid ""
 "#   3 = lines & score\n"
 msgstr ""
 
-#: src/lang.c:1598
+#: src/lang.c:1609
 msgid ""
 "0 = full page scrolling, -1 = show previous last line as first on next page, "
 "-2 = half page"
 msgstr ""
 
-#: src/lang.c:1599
+#: src/lang.c:1610
 msgid "Number of lines to scroll in pager"
 msgstr ""
 
-#: src/lang.c:1600
+#: src/lang.c:1611
 msgid ""
 "# Number of lines that cursor-up/down will scroll in article pager\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4609,28 +4690,28 @@ msgid ""
 "#   2 or greater = scroll by 2 or more lines (only in the pager)\n"
 msgstr ""
 
-#: src/lang.c:1610
+#: src/lang.c:1621
 msgid "Display signatures. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1611
+#: src/lang.c:1622
 msgid "Display signatures"
 msgstr ""
 
-#: src/lang.c:1612
+#: src/lang.c:1623
 msgid "# If OFF don't show signatures when displaying articles\n"
 msgstr ""
 
-#: src/lang.c:1616
+#: src/lang.c:1627
 msgid ""
 "Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1617
+#: src/lang.c:1628
 msgid "Display uue data as an attachment"
 msgstr ""
 
-#: src/lang.c:1618
+#: src/lang.c:1629
 msgid ""
 "# Handling of uuencoded data in the pager\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4642,30 +4723,30 @@ msgid ""
 "#       be folded into a tag line.\n"
 msgstr ""
 
-#: src/lang.c:1628
+#: src/lang.c:1639
 msgid ""
 "Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1629
+#: src/lang.c:1640
 msgid "Display \"a as Umlaut-a"
 msgstr ""
 
-#: src/lang.c:1630
+#: src/lang.c:1641
 msgid ""
 "# If ON decode German style TeX umlaut codes to ISO and\n"
 "# show \"a as Umlaut-a, etc.\n"
 msgstr ""
 
-#: src/lang.c:1635 src/lang.c:1645
+#: src/lang.c:1646 src/lang.c:1656
 msgid "Space separated list of header fields"
 msgstr ""
 
-#: src/lang.c:1636
+#: src/lang.c:1647
 msgid "Display these header fields (or *)"
 msgstr ""
 
-#: src/lang.c:1637
+#: src/lang.c:1648
 msgid ""
 "# Which news headers you wish to see. If you want to see _all_ the headers,\n"
 "# place an '*' as this value. This is the only way a wildcard can be used.\n"
@@ -4675,11 +4756,11 @@ msgid ""
 "# spaces. Not defining anything turns off this option.\n"
 msgstr ""
 
-#: src/lang.c:1646
+#: src/lang.c:1657
 msgid "Do not display these header fields"
 msgstr ""
 
-#: src/lang.c:1647
+#: src/lang.c:1658
 msgid ""
 "# Same as 'news_headers_to_display' except it denotes the opposite.\n"
 "# An example of using both options might be if you thought X- headers were\n"
@@ -4691,163 +4772,163 @@ msgid ""
 "# Not defining anything turns off this option.\n"
 msgstr ""
 
-#: src/lang.c:1657
+#: src/lang.c:1668
 msgid ""
 "Do you want to enable automatic handling of multipart/alternative articles?"
 msgstr ""
 
-#: src/lang.c:1658
+#: src/lang.c:1669
 msgid "Skip multipart/alternative parts"
 msgstr ""
 
-#: src/lang.c:1659
+#: src/lang.c:1670
 msgid "# If ON strip multipart/alternative messages automatically\n"
 msgstr ""
 
-#: src/lang.c:1664
+#: src/lang.c:1675
 msgid "A regex used to decide which lines to show in col_quote."
 msgstr ""
 
-#: src/lang.c:1665
+#: src/lang.c:1676
 msgid "Regex used to show quoted lines"
 msgstr ""
 
-#: src/lang.c:1666
+#: src/lang.c:1677
 msgid ""
 "# A regular expression that tin will use to decide which lines are\n"
 "# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
 "# If you leave this blank, tin will use a built in default.\n"
 msgstr ""
 
-#: src/lang.c:1672
+#: src/lang.c:1683
 msgid "A regex used to decide which lines to show in col_quote2."
 msgstr ""
 
-#: src/lang.c:1673
+#: src/lang.c:1684
 msgid "Regex used to show twice quoted l."
 msgstr ""
 
-#: src/lang.c:1674
+#: src/lang.c:1685
 msgid ""
 "# A regular expression that tin will use to decide which lines are\n"
 "# quoted twice. Twice quoted lines are shown in col_quote2.\n"
 "# If you leave this blank, tin will use a built in default.\n"
 msgstr ""
 
-#: src/lang.c:1680
+#: src/lang.c:1691
 msgid "A regex used to decide which lines to show in col_quote3."
 msgstr ""
 
-#: src/lang.c:1681
+#: src/lang.c:1692
 msgid "Regex used to show >= 3 times q.l."
 msgstr ""
 
-#: src/lang.c:1682
+#: src/lang.c:1693
 msgid ""
 "# A regular expression that tin will use to decide which lines are\n"
 "# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
 "# If you leave this blank, tin will use a built in default.\n"
 msgstr ""
 
-#: src/lang.c:1689
+#: src/lang.c:1700
 msgid "A regex used to decide which words to show in col_markslashes."
 msgstr ""
 
-#: src/lang.c:1690
+#: src/lang.c:1701
 msgid "Regex used to highlight /slashes/"
 msgstr ""
 
-#: src/lang.c:1691
+#: src/lang.c:1702
 msgid ""
 "# A regular expression that tin will use to decide which words\n"
 "# bounded by '/' are to be shown in col_markslashes.\n"
 "# If you leave this blank, tin will use a built in default.\n"
 msgstr ""
 
-#: src/lang.c:1697
+#: src/lang.c:1708
 msgid "A regex used to decide which words to show in col_markstars."
 msgstr ""
 
-#: src/lang.c:1698
+#: src/lang.c:1709
 msgid "Regex used to highlight *stars*"
 msgstr ""
 
-#: src/lang.c:1699
+#: src/lang.c:1710
 msgid ""
 "# A regular expression that tin will use to decide which words\n"
 "# bounded by '*' are to be shown in col_markstars.\n"
 "# If you leave this blank, tin will use a built in default.\n"
 msgstr ""
 
-#: src/lang.c:1705
+#: src/lang.c:1716
 msgid "A regex used to decide which words to show in col_markstroke."
 msgstr ""
 
-#: src/lang.c:1706
+#: src/lang.c:1717
 msgid "Regex used to highlight -strokes-"
 msgstr ""
 
-#: src/lang.c:1707
+#: src/lang.c:1718
 msgid ""
 "# A regular expression that tin will use to decide which words\n"
 "# bounded by '-' are to be shown in col_markstroke.\n"
 "# If you leave this blank, tin will use a built in default.\n"
 msgstr ""
 
-#: src/lang.c:1713
+#: src/lang.c:1724
 msgid "A regex used to decide which words to show in col_markdash."
 msgstr ""
 
-#: src/lang.c:1714
+#: src/lang.c:1725
 msgid "Regex used to highlight _underline_"
 msgstr ""
 
-#: src/lang.c:1715
+#: src/lang.c:1726
 msgid ""
 "# A regular expression that tin will use to decide which words\n"
 "# bounded by '_' are to be shown in col_markdash.\n"
 "# If you leave this blank, tin will use a built in default.\n"
 msgstr ""
 
-#: src/lang.c:1721
+#: src/lang.c:1732
 msgid "A regex used to find Subject prefixes to remove.  Use '|' as separator."
 msgstr ""
 
-#: src/lang.c:1722
+#: src/lang.c:1733
 msgid "Regex with Subject prefixes"
 msgstr ""
 
-#: src/lang.c:1723
+#: src/lang.c:1734
 msgid ""
 "# A regular expression that tin will use to find Subject prefixes\n"
 "# which will be removed before showing the header.\n"
 msgstr ""
 
-#: src/lang.c:1728
+#: src/lang.c:1739
 msgid "A regex used to find Subject suffixes to remove.  Use '|' as separator."
 msgstr ""
 
-#: src/lang.c:1729
+#: src/lang.c:1740
 msgid "Regex with Subject suffixes"
 msgstr ""
 
-#: src/lang.c:1730
+#: src/lang.c:1741
 msgid ""
 "# A regular expression that tin will use to find Subject suffixes\n"
 "# which will be removed when replying or posting followup.\n"
 msgstr ""
 
-#: src/lang.c:1735
+#: src/lang.c:1746
 msgid ""
 "Enter name and options for external MIME viewer, --internal for built-in "
 "viewer"
 msgstr ""
 
-#: src/lang.c:1736
+#: src/lang.c:1747
 msgid "MIME binary content viewer"
 msgstr ""
 
-#: src/lang.c:1737
+#: src/lang.c:1748
 msgid ""
 "# If --internal automatically use the built in MIME viewer for non-text\n"
 "# parts of articles.\n"
@@ -4856,125 +4937,125 @@ msgid ""
 "# for no automatic viewing\n"
 msgstr ""
 
-#: src/lang.c:1744
+#: src/lang.c:1755
 msgid "Confirm before starting non-text viewing program"
 msgstr ""
 
-#: src/lang.c:1745
+#: src/lang.c:1756
 msgid "Ask before using MIME viewer"
 msgstr ""
 
-#: src/lang.c:1746
+#: src/lang.c:1757
 msgid ""
 "# If ON tin will ask before using metamail to display MIME messages\n"
 "# this only happens if metamail_prog is set to something\n"
 msgstr ""
 
-#: src/lang.c:1751
+#: src/lang.c:1762
 msgid "Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:1752
+#: src/lang.c:1763
 msgid "Catchup read groups when quitting"
 msgstr ""
 
-#: src/lang.c:1753
+#: src/lang.c:1764
 msgid "# If ON ask user if read groups should all be marked read\n"
 msgstr ""
 
-#: src/lang.c:1758
+#: src/lang.c:1769
 msgid "Catchup group using left key"
 msgstr ""
 
-#: src/lang.c:1759
+#: src/lang.c:1770
 msgid "# If ON catchup group/thread when leaving with the left arrow key.\n"
 msgstr ""
 
-#: src/lang.c:1764
+#: src/lang.c:1775
 msgid "Catchup thread by using left key"
 msgstr ""
 
-#: src/lang.c:1770
+#: src/lang.c:1781
 msgid "Which actions require confirmation"
 msgstr ""
 
-#: src/lang.c:1771
+#: src/lang.c:1782
 msgid "# What should we ask confirmation for.\n"
 msgstr ""
 
-#: src/lang.c:1776
+#: src/lang.c:1787
 msgid "'Mark article read' ignores tags"
 msgstr ""
 
-#: src/lang.c:1777
+#: src/lang.c:1788
 msgid ""
 "# If ON the 'Mark article read' function marks only the current article.\n"
 msgstr ""
 
-#: src/lang.c:1781
+#: src/lang.c:1792
 msgid "Program to run to open URL's, <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:1782
+#: src/lang.c:1793
 msgid "Program that opens URL's"
 msgstr ""
 
-#: src/lang.c:1783
+#: src/lang.c:1794
 msgid "# The program used to open URL's. The actual URL will be appended\n"
 msgstr ""
 
-#: src/lang.c:1788
+#: src/lang.c:1799
 msgid "Use mouse in xterm"
 msgstr ""
 
-#: src/lang.c:1789
+#: src/lang.c:1800
 msgid "# If ON enable mouse key support on xterm terminals\n"
 msgstr ""
 
-#: src/lang.c:1795
+#: src/lang.c:1806
 msgid "Use scroll keys on keypad"
 msgstr ""
 
-#: src/lang.c:1796
+#: src/lang.c:1807
 msgid "# If ON enable scroll keys on terminals that support it\n"
 msgstr ""
 
-#: src/lang.c:1801
+#: src/lang.c:1812
 msgid "Enter maximum number of article to get. <CR> sets."
 msgstr ""
 
-#: src/lang.c:1802
+#: src/lang.c:1813
 msgid "Number of articles to get"
 msgstr ""
 
-#: src/lang.c:1803
+#: src/lang.c:1814
 msgid ""
 "# Number of articles to get (0=no limit), if negative sets maximum number\n"
 "# of already read articles to be read before first unread one\n"
 msgstr ""
 
-#: src/lang.c:1808
+#: src/lang.c:1819
 msgid "Enter number of days article is considered recent. <CR> sets."
 msgstr ""
 
-#: src/lang.c:1809
+#: src/lang.c:1820
 msgid "Article recentness time limit"
 msgstr ""
 
-#: src/lang.c:1810
+#: src/lang.c:1821
 msgid "# Number of days in which article is considered recent, (0=OFF)\n"
 msgstr ""
 
-#: src/lang.c:1814
+#: src/lang.c:1825
 msgid ""
 "WILDMAT for normal wildcards, REGEX for full regular expression matching."
 msgstr ""
 
-#: src/lang.c:1815
+#: src/lang.c:1826
 msgid "Wildcard matching"
 msgstr ""
 
-#: src/lang.c:1816
+#: src/lang.c:1827
 msgid ""
 "# Wildcard matching\n"
 "# Possible values are (the default is marked with *):\n"
@@ -4982,307 +5063,307 @@ msgid ""
 "#   1 = regex\n"
 msgstr ""
 
-#: src/lang.c:1823
+#: src/lang.c:1834
 msgid "Enter minimal score before an article is marked killed. <CR> sets."
 msgstr ""
 
-#: src/lang.c:1824
+#: src/lang.c:1835
 msgid "Score limit (kill)"
 msgstr ""
 
-#: src/lang.c:1825
+#: src/lang.c:1836
 msgid "# Score limit before an article is marked killed\n"
 msgstr ""
 
-#: src/lang.c:1829
+#: src/lang.c:1840
 msgid "Enter default score to kill articles. <CR> sets."
 msgstr ""
 
-#: src/lang.c:1830
+#: src/lang.c:1841
 msgid "Default score to kill articles"
 msgstr ""
 
-#: src/lang.c:1831
+#: src/lang.c:1842
 msgid "# Default score to kill articles\n"
 msgstr ""
 
-#: src/lang.c:1835
+#: src/lang.c:1846
 msgid "Enter minimal score before an article is marked hot. <CR> sets."
 msgstr ""
 
-#: src/lang.c:1836
+#: src/lang.c:1847
 msgid "Score limit (select)"
 msgstr ""
 
-#: src/lang.c:1837
+#: src/lang.c:1848
 msgid "# Score limit before an article is marked hot\n"
 msgstr ""
 
-#: src/lang.c:1841
+#: src/lang.c:1852
 msgid "Enter default score to select articles. <CR> sets."
 msgstr ""
 
-#: src/lang.c:1842
+#: src/lang.c:1853
 msgid "Default score to select articles"
 msgstr ""
 
-#: src/lang.c:1843
+#: src/lang.c:1854
 msgid "# Default score to select articles\n"
 msgstr ""
 
-#: src/lang.c:1849
+#: src/lang.c:1860
 msgid "Use slrnface to show ''X-Face:''s"
 msgstr ""
 
-#: src/lang.c:1850
+#: src/lang.c:1861
 msgid ""
 "# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
 "# Only useful when running in an xterm.\n"
 msgstr ""
 
-#: src/lang.c:1858
+#: src/lang.c:1869
 msgid "Use ANSI color"
 msgstr ""
 
-#: src/lang.c:1859
+#: src/lang.c:1870
 msgid "# If ON using ANSI-color\n"
 msgstr ""
 
-#: src/lang.c:1864
+#: src/lang.c:1875
 msgid "Standard foreground color"
 msgstr ""
 
-#: src/lang.c:1865
+#: src/lang.c:1876
 msgid ""
 "# Standard foreground color\n"
 "# Default: -1 (default color)\n"
 msgstr ""
 
-#: src/lang.c:1871
+#: src/lang.c:1882
 msgid "Standard background color"
 msgstr ""
 
-#: src/lang.c:1872
+#: src/lang.c:1883
 msgid ""
 "# Standard background color\n"
 "# Default: -1 (default color)\n"
 msgstr ""
 
-#: src/lang.c:1878
+#: src/lang.c:1889
 msgid "Color for inverse text (background)"
 msgstr ""
 
-#: src/lang.c:1879
+#: src/lang.c:1890
 msgid ""
 "# Color of background for inverse text\n"
 "# Default: 4 (blue)\n"
 msgstr ""
 
-#: src/lang.c:1885
+#: src/lang.c:1896
 msgid "Color for inverse text (foreground)"
 msgstr ""
 
-#: src/lang.c:1886
+#: src/lang.c:1897
 msgid ""
 "# Color of foreground for inverse text\n"
 "# Default: 7 (white)\n"
 msgstr ""
 
-#: src/lang.c:1892
+#: src/lang.c:1903
 msgid "Color of text lines"
 msgstr ""
 
-#: src/lang.c:1893
+#: src/lang.c:1904
 msgid ""
 "# Color of text lines\n"
 "# Default: -1 (default color)\n"
 msgstr ""
 
-#: src/lang.c:1899
+#: src/lang.c:1910
 msgid "Color of mini help menu"
 msgstr ""
 
-#: src/lang.c:1900
+#: src/lang.c:1911
 msgid ""
 "# Color of mini help menu\n"
 "# Default: 3 (brown)\n"
 msgstr ""
 
-#: src/lang.c:1906
+#: src/lang.c:1917
 msgid "Color of help text"
 msgstr ""
 
-#: src/lang.c:1907
+#: src/lang.c:1918
 msgid ""
 "# Color of help pages\n"
 "# Default: -1 (default color)\n"
 msgstr ""
 
-#: src/lang.c:1913
+#: src/lang.c:1924
 msgid "Color of status messages"
 msgstr ""
 
-#: src/lang.c:1914
+#: src/lang.c:1925
 msgid ""
 "# Color of messages in last line\n"
 "# Default: 6 (cyan)\n"
 msgstr ""
 
-#: src/lang.c:1920
+#: src/lang.c:1931
 msgid "Color of quoted lines"
 msgstr ""
 
-#: src/lang.c:1921
+#: src/lang.c:1932
 msgid ""
 "# Color of quote-lines\n"
 "# Default: 2 (green)\n"
 msgstr ""
 
-#: src/lang.c:1927
+#: src/lang.c:1938
 msgid "Color of twice quoted line"
 msgstr ""
 
-#: src/lang.c:1928
+#: src/lang.c:1939
 msgid ""
 "# Color of twice quoted lines\n"
 "# Default: 3 (brown)\n"
 msgstr ""
 
-#: src/lang.c:1934
+#: src/lang.c:1945
 msgid "Color of =>3 times quoted line"
 msgstr ""
 
-#: src/lang.c:1935
+#: src/lang.c:1946
 msgid ""
 "# Color of >=3 times quoted lines\n"
 "# Default: 4 (blue)\n"
 msgstr ""
 
-#: src/lang.c:1941
+#: src/lang.c:1952
 msgid "Color of article header lines"
 msgstr ""
 
-#: src/lang.c:1942
+#: src/lang.c:1953
 msgid ""
 "# Color of header-lines\n"
 "# Default: 2 (green)\n"
 msgstr ""
 
-#: src/lang.c:1948
+#: src/lang.c:1959
 msgid "Color of actual news header fields"
 msgstr ""
 
-#: src/lang.c:1949
+#: src/lang.c:1960
 msgid ""
 "# Color of actual news header fields\n"
 "# Default: 9 (light red)\n"
 msgstr ""
 
-#: src/lang.c:1955
+#: src/lang.c:1966
 msgid "Color of article subject lines"
 msgstr ""
 
-#: src/lang.c:1956
+#: src/lang.c:1967
 msgid ""
 "# Color of article subject\n"
 "# Default: 6 (cyan)\n"
 msgstr ""
 
-#: src/lang.c:1962
+#: src/lang.c:1973
 msgid "Color of response counter"
 msgstr ""
 
-#: src/lang.c:1963
+#: src/lang.c:1974
 msgid ""
 "# Color of response counter\n"
 "# Default: 2 (green)\n"
 msgstr ""
 
-#: src/lang.c:1969
+#: src/lang.c:1980
 msgid "Color of sender (From:)"
 msgstr ""
 
-#: src/lang.c:1970
+#: src/lang.c:1981
 msgid ""
 "# Color of sender (From:)\n"
 "# Default: 2 (green)\n"
 msgstr ""
 
-#: src/lang.c:1976
+#: src/lang.c:1987
 msgid "Color of help/mail sign"
 msgstr ""
 
-#: src/lang.c:1977
+#: src/lang.c:1988
 msgid ""
 "# Color of Help/Mail-Sign\n"
 "# Default: 4 (blue)\n"
 msgstr ""
 
-#: src/lang.c:1983
+#: src/lang.c:1994
 msgid "Color of signatures"
 msgstr ""
 
-#: src/lang.c:1984
+#: src/lang.c:1995
 msgid ""
 "# Color of signature\n"
 "# Default: 4 (blue)\n"
 msgstr ""
 
-#: src/lang.c:1990
+#: src/lang.c:2001
 msgid "Color of highlighted URLs"
 msgstr ""
 
-#: src/lang.c:1991
+#: src/lang.c:2002
 msgid ""
 "# Color of highlighted URLs\n"
 "# Default: -1 (default color)\n"
 msgstr ""
 
-#: src/lang.c:1997
+#: src/lang.c:2008
 msgid "Color of highlighting with *stars*"
 msgstr ""
 
-#: src/lang.c:1998
+#: src/lang.c:2009
 msgid ""
 "# Color of word highlighting with *stars*\n"
 "# Default: 11 (yellow)\n"
 msgstr ""
 
-#: src/lang.c:2004
+#: src/lang.c:2015
 msgid "Color of highlighting with _dash_"
 msgstr ""
 
-#: src/lang.c:2005
+#: src/lang.c:2016
 msgid ""
 "# Color of word highlighting with _dash_\n"
 "# Default: 13 (light pink)\n"
 msgstr ""
 
-#: src/lang.c:2011
+#: src/lang.c:2022
 msgid "Color of highlighting with /slash/"
 msgstr ""
 
-#: src/lang.c:2012
+#: src/lang.c:2023
 msgid ""
 "# Color of word highlighting with /slash/\n"
 "# Default: 14 (light cyan)\n"
 msgstr ""
 
-#: src/lang.c:2018
+#: src/lang.c:2029
 msgid "Color of highlighting with -stroke-"
 msgstr ""
 
-#: src/lang.c:2019
+#: src/lang.c:2030
 msgid ""
 "# Color of word highlighting with -stroke-\n"
 "# Default: 12 (light blue)\n"
 msgstr ""
 
-#: src/lang.c:2026
+#: src/lang.c:2037
 msgid "Attr. of highlighting with *stars*"
 msgstr ""
 
-#: src/lang.c:2027
+#: src/lang.c:2038
 msgid ""
 "# Attributes of word highlighting on mono terminals\n"
 "# Possible values are:\n"
@@ -5298,57 +5379,57 @@ msgid ""
 "# Default: 6 (bold)\n"
 msgstr ""
 
-#: src/lang.c:2042
+#: src/lang.c:2053
 msgid "Attr. of highlighting with _dash_"
 msgstr ""
 
-#: src/lang.c:2043
+#: src/lang.c:2054
 msgid ""
 "# Attribute of word highlighting with _dash_\n"
 "# Default: 2 (best highlighting)\n"
 msgstr ""
 
-#: src/lang.c:2049
+#: src/lang.c:2060
 msgid "Attr. of highlighting with /slash/"
 msgstr ""
 
-#: src/lang.c:2050
+#: src/lang.c:2061
 msgid ""
 "# Attribute of word highlighting with /slash/\n"
 "# Default: 5 (half bright)\n"
 msgstr ""
 
-#: src/lang.c:2056
+#: src/lang.c:2067
 msgid "Attr. of highlighting with -stroke-"
 msgstr ""
 
-#: src/lang.c:2057
+#: src/lang.c:2068
 msgid ""
 "# Attribute of word highlighting with -stroke-\n"
 "# Default: 3 (reverse video)\n"
 msgstr ""
 
-#: src/lang.c:2063
+#: src/lang.c:2074
 msgid "URL highlighting in message body"
 msgstr ""
 
-#: src/lang.c:2064
+#: src/lang.c:2075
 msgid "# Enable URL highlighting?\n"
 msgstr ""
 
-#: src/lang.c:2069
+#: src/lang.c:2080
 msgid "Word highlighting in message body"
 msgstr ""
 
-#: src/lang.c:2070
+#: src/lang.c:2081
 msgid "# Enable word highlighting?\n"
 msgstr ""
 
-#: src/lang.c:2075
+#: src/lang.c:2086
 msgid "What to display instead of mark"
 msgstr ""
 
-#: src/lang.c:2076
+#: src/lang.c:2087
 msgid ""
 "# Should the leading and ending stars and dashes also be displayed,\n"
 "# even when they are highlighting marks?\n"
@@ -5358,56 +5439,56 @@ msgid ""
 "# * 2 = print a space instead\n"
 msgstr ""
 
-#: src/lang.c:2085
+#: src/lang.c:2096
 msgid "Enter column number to wrap article lines to in the pager. <CR> sets."
 msgstr ""
 
-#: src/lang.c:2086
+#: src/lang.c:2097
 msgid "Page line wrap column"
 msgstr ""
 
-#: src/lang.c:2087
+#: src/lang.c:2098
 msgid "# Wrap article lines at column\n"
 msgstr ""
 
-#: src/lang.c:2092
+#: src/lang.c:2103
 msgid "Wrap around threads on next unread"
 msgstr ""
 
-#: src/lang.c:2093
+#: src/lang.c:2104
 msgid "# If ON wrap around threads on searching next unread article\n"
 msgstr ""
 
-#: src/lang.c:2097
+#: src/lang.c:2108
 msgid "Enter default mail address (and fullname). <CR> sets."
 msgstr ""
 
-#: src/lang.c:2098
+#: src/lang.c:2109
 msgid "Mail address (and fullname)"
 msgstr ""
 
-#: src/lang.c:2099
+#: src/lang.c:2110
 msgid "# User's mail address (and fullname), if not username@host (fullname)\n"
 msgstr ""
 
-#: src/lang.c:2104
+#: src/lang.c:2115
 msgid "Show empty Followup-To in editor"
 msgstr ""
 
-#: src/lang.c:2105
+#: src/lang.c:2116
 msgid "# If ON show empty Followup-To header when editing an article\n"
 msgstr ""
 
-#: src/lang.c:2109
+#: src/lang.c:2120
 msgid ""
 "Enter path/! command/--none to create your default signature. <CR> sets."
 msgstr ""
 
-#: src/lang.c:2110
+#: src/lang.c:2121
 msgid "Create signature from path/command"
 msgstr ""
 
-#: src/lang.c:2111
+#: src/lang.c:2122
 msgid ""
 "# Signature path (random sigs)/file to be used when posting/replying\n"
 "# default_sigfile=file       appends file as signature\n"
@@ -5416,50 +5497,52 @@ msgid ""
 "# default_sigfile=--none     don't append a signature\n"
 msgstr ""
 
-#: src/lang.c:2118
+#: src/lang.c:2129
 msgid ""
 "Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2119
+#: src/lang.c:2130
 msgid "Prepend signature with \"-- \""
 msgstr ""
 
-#: src/lang.c:2120
+#: src/lang.c:2131
 msgid "# If ON prepend the signature with dashes '\\n-- \\n'\n"
 msgstr ""
 
-#: src/lang.c:2124
+#: src/lang.c:2135
 msgid "Add signature when reposting articles. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2125
+#: src/lang.c:2136
 msgid "Add signature when reposting"
 msgstr ""
 
-#: src/lang.c:2126
+#: src/lang.c:2137
 msgid "# If ON add signature to reposted articles\n"
 msgstr ""
 
-#: src/lang.c:2130
+#: src/lang.c:2141
+#, c-format
 msgid "Enter quotation marks, %s or %S for author's initials."
 msgstr ""
 
-#: src/lang.c:2131
+#: src/lang.c:2142
 msgid "Characters used as quote-marks"
 msgstr ""
 
-#: src/lang.c:2132
+#: src/lang.c:2143
+#, c-format
 msgid ""
 "# Characters used in quoting to followups and replies.\n"
 "# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
 msgstr ""
 
-#: src/lang.c:2138
+#: src/lang.c:2149
 msgid "Quoting behavior"
 msgstr ""
 
-#: src/lang.c:2139
+#: src/lang.c:2150
 msgid ""
 "# How quoting should be handled when following up or replying.\n"
 "# Possible values are (the default is marked with *):\n"
@@ -5473,52 +5556,53 @@ msgid ""
 "#   7 = Compress quotes, quote signatures, quote empty lines\n"
 msgstr ""
 
-#: src/lang.c:2152 src/lang.c:2160 src/lang.c:2166
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
 msgid ""
 "%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
 msgstr ""
 
-#: src/lang.c:2153
+#: src/lang.c:2164
 msgid "Quote line when following up"
 msgstr ""
 
-#: src/lang.c:2154
+#: src/lang.c:2165
+#, c-format
 msgid ""
 "# Format of quote line when mailing/posting/following-up an article\n"
 "# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
 "# %%N Full Name  %%C First Name   %%I Initials\n"
 msgstr ""
 
-#: src/lang.c:2161
+#: src/lang.c:2172
 msgid "Quote line when cross-posting"
 msgstr ""
 
-#: src/lang.c:2167
+#: src/lang.c:2178
 msgid "Quote line when mailing"
 msgstr ""
 
-#: src/lang.c:2172
+#: src/lang.c:2183
 msgid "If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2173
+#: src/lang.c:2184
 msgid "Insert 'User-Agent:'-header"
 msgstr ""
 
-#: src/lang.c:2174
+#: src/lang.c:2185
 msgid "# If ON include advertising User-Agent: header\n"
 msgstr ""
 
-#: src/lang.c:2179
+#: src/lang.c:2190
 msgid ""
 "Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
 msgstr ""
 
-#: src/lang.c:2180
+#: src/lang.c:2191
 msgid "MM_CHARSET"
 msgstr ""
 
-#: src/lang.c:2181
+#: src/lang.c:2192
 msgid ""
 "# Charset supported locally which is also used for MIME header and\n"
 "# Content-Type header.\n"
@@ -5528,27 +5612,27 @@ msgid ""
 "# mm_charset is considered not displayable and represented as '?'.\n"
 msgstr ""
 
-#: src/lang.c:2191
+#: src/lang.c:2202
 msgid "MM_NETWORK_CHARSET"
 msgstr ""
 
-#: src/lang.c:2192
+#: src/lang.c:2203
 msgid "# Charset used for MIME (Content-Type) header in postings.\n"
 msgstr ""
 
-#: src/lang.c:2198
+#: src/lang.c:2209
 msgid "Mailbox format"
 msgstr ""
 
-#: src/lang.c:2199
+#: src/lang.c:2210
 msgid "# Format of the mailbox.\n"
 msgstr ""
 
-#: src/lang.c:2204
+#: src/lang.c:2215
 msgid "MIME encoding in news messages"
 msgstr ""
 
-#: src/lang.c:2205
+#: src/lang.c:2216
 msgid ""
 "# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
 "# for mails and posts, if necessary. QP is efficient for most European\n"
@@ -5557,15 +5641,15 @@ msgid ""
 "# Russian charsets with a lot of 8bit characters.\n"
 msgstr ""
 
-#: src/lang.c:2213 src/lang.c:2234
+#: src/lang.c:2224 src/lang.c:2245
 msgid "Don't change unless you know what you are doing. <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:2214
+#: src/lang.c:2225
 msgid "Use 8bit characters in news headers"
 msgstr ""
 
-#: src/lang.c:2215
+#: src/lang.c:2226
 msgid ""
 "# If ON, 8bit characters in news headers are NOT encoded.\n"
 "# default is OFF. Thus 8bit characters are encoded by default.\n"
@@ -5573,28 +5657,28 @@ msgid ""
 "# parameter unless post_mime_encoding is 8bit as well.\n"
 msgstr ""
 
-#: src/lang.c:2222
+#: src/lang.c:2233
 msgid ""
 "Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:2223
+#: src/lang.c:2234
 msgid "View post-processed files"
 msgstr ""
 
-#: src/lang.c:2224
+#: src/lang.c:2235
 msgid "# If set, post processed files will be opened in a viewer\n"
 msgstr ""
 
-#: src/lang.c:2229
+#: src/lang.c:2240
 msgid "MIME encoding in mail messages"
 msgstr ""
 
-#: src/lang.c:2235
+#: src/lang.c:2246
 msgid "Use 8bit characters in mail headers"
 msgstr ""
 
-#: src/lang.c:2236
+#: src/lang.c:2247
 msgid ""
 "# If ON, 8bit characters in mail headers are NOT encoded.\n"
 "# default is OFF. Thus 8bit characters are encoded by default.\n"
@@ -5605,173 +5689,173 @@ msgid ""
 "# turn it ON unless you have some compelling reason.\n"
 msgstr ""
 
-#: src/lang.c:2246
+#: src/lang.c:2257
 msgid "Strip blanks from ends of lines"
 msgstr ""
 
-#: src/lang.c:2247
+#: src/lang.c:2258
 msgid ""
 "# If ON strip blanks from ends of lines for faster display on slow "
 "terminals.\n"
 msgstr ""
 
-#: src/lang.c:2252
+#: src/lang.c:2263
 msgid "If ON, use transliteration. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2253
+#: src/lang.c:2264
 msgid "Transliteration"
 msgstr ""
 
-#: src/lang.c:2254
+#: src/lang.c:2265
 msgid ""
 "# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
 "# be represented in the in the target character set, it can be approximated\n"
 "# through one or several similarly looking characters.\n"
 msgstr ""
 
-#: src/lang.c:2261
+#: src/lang.c:2272
 msgid "Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2262
+#: src/lang.c:2273
 msgid "Send you a cc automatically"
 msgstr ""
 
-#: src/lang.c:2263
+#: src/lang.c:2274
 msgid ""
 "# If ON automatically put your name in the Cc: field when mailing an "
 "article\n"
 msgstr ""
 
-#: src/lang.c:2267
+#: src/lang.c:2278
 msgid ""
 "Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2268
+#: src/lang.c:2279
 msgid "Send you a blind cc automatically"
 msgstr ""
 
-#: src/lang.c:2269
+#: src/lang.c:2280
 msgid ""
 "# If ON automatically put your name in the Bcc: field when mailing an "
 "article\n"
 msgstr ""
 
-#: src/lang.c:2273
+#: src/lang.c:2284
 msgid "Enter address elements about which you want to be warned. <CR> sets."
 msgstr ""
 
-#: src/lang.c:2274
+#: src/lang.c:2285
 msgid "Spamtrap warning address parts"
 msgstr ""
 
-#: src/lang.c:2275
+#: src/lang.c:2286
 msgid ""
 "# A comma-delimited list of address-parts you want to be warned\n"
 "# about when trying to reply by email.\n"
 msgstr ""
 
-#: src/lang.c:2280
+#: src/lang.c:2291
 msgid "Enter default number of days a filter entry will be valid. <CR> sets."
 msgstr ""
 
-#: src/lang.c:2281
+#: src/lang.c:2292
 msgid "No. of days a filter entry is valid"
 msgstr ""
 
-#: src/lang.c:2282
+#: src/lang.c:2293
 msgid "# Number of days a short term filter will be active\n"
 msgstr ""
 
-#: src/lang.c:2286
+#: src/lang.c:2297
 msgid "Add posted articles to filter. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2287
+#: src/lang.c:2298
 msgid "Add posted articles to filter"
 msgstr ""
 
-#: src/lang.c:2288
+#: src/lang.c:2299
 msgid ""
 "# If ON add posted articles which start a new thread to filter for\n"
 "# highlighting follow-ups\n"
 msgstr ""
 
-#: src/lang.c:2292
+#: src/lang.c:2303
 msgid "The directory where articles/threads are to be saved in mailbox format."
 msgstr ""
 
-#: src/lang.c:2293
+#: src/lang.c:2304
 msgid "Mail directory"
 msgstr ""
 
-#: src/lang.c:2294
+#: src/lang.c:2305
 msgid "# (-m) directory where articles/threads are saved in mailbox format\n"
 msgstr ""
 
-#: src/lang.c:2299
+#: src/lang.c:2310
 msgid "Save articles in batch mode (-S)"
 msgstr ""
 
-#: src/lang.c:2300
+#: src/lang.c:2311
 msgid ""
 "# If ON articles/threads will be saved in batch mode when save -S\n"
 "# or mail (-M/-N) is specified on the command line\n"
 msgstr ""
 
-#: src/lang.c:2305
+#: src/lang.c:2316
 msgid "The directory where you want articles/threads saved."
 msgstr ""
 
-#: src/lang.c:2306
+#: src/lang.c:2317
 msgid "Directory to save arts/threads in"
 msgstr ""
 
-#: src/lang.c:2307
+#: src/lang.c:2318
 msgid "# Directory where articles/threads are saved\n"
 msgstr ""
 
-#: src/lang.c:2311
+#: src/lang.c:2322
 msgid ""
 "Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> "
 "sets."
 msgstr ""
 
-#: src/lang.c:2312
+#: src/lang.c:2323
 msgid "Use Archive-name: header for save"
 msgstr ""
 
-#: src/lang.c:2313
+#: src/lang.c:2324
 msgid ""
 "# If ON articles/threads with Archive-name: in mail header will\n"
 "# be automatically saved with the Archive-name & part/patch no.\n"
 msgstr ""
 
-#: src/lang.c:2318
+#: src/lang.c:2329
 msgid ""
 "Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
 "cancels."
 msgstr ""
 
-#: src/lang.c:2319
+#: src/lang.c:2330
 msgid "Mark saved articles/threads as read"
 msgstr ""
 
-#: src/lang.c:2320
+#: src/lang.c:2331
 msgid "# If ON mark articles that are saved as read\n"
 msgstr ""
 
-#: src/lang.c:2324
+#: src/lang.c:2335
 msgid "Do post processing (eg. extract attachments) for saved articles."
 msgstr ""
 
-#: src/lang.c:2325
+#: src/lang.c:2336
 msgid "Post process saved articles"
 msgstr ""
 
-#: src/lang.c:2326
+#: src/lang.c:2337
 msgid ""
 "# Perform post processing (saving binary attachments) from saved articles.\n"
 "# Possible values are (the default is marked with *):\n"
@@ -5780,106 +5864,108 @@ msgid ""
 "#   2 = yes\n"
 msgstr ""
 
-#: src/lang.c:2335
+#: src/lang.c:2346
 msgid "Process only unread articles"
 msgstr ""
 
-#: src/lang.c:2336
+#: src/lang.c:2347
 msgid ""
 "# If ON only save/print/pipe/mail unread articles (tagged articles "
 "excepted)\n"
 msgstr ""
 
-#: src/lang.c:2341
+#: src/lang.c:2352
 msgid "Print all or just part of header. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2342
+#: src/lang.c:2353
 msgid "Print all headers when printing"
 msgstr ""
 
-#: src/lang.c:2343
+#: src/lang.c:2354
 msgid ""
 "# If ON print all of article header otherwise just the important lines\n"
 msgstr ""
 
-#: src/lang.c:2347
+#: src/lang.c:2358
 msgid ""
-"The printer program with options that is to be used to print "
-"articles/threads."
+"The printer program with options that is to be used to print articles/"
+"threads."
 msgstr ""
 
-#: src/lang.c:2348
+#: src/lang.c:2359
 msgid "Printer program with options"
 msgstr ""
 
-#: src/lang.c:2349
+#: src/lang.c:2360
 msgid "# Print program with parameters used to print articles/threads\n"
 msgstr ""
 
-#: src/lang.c:2355
+#: src/lang.c:2366
 msgid "Force redraw after certain commands"
 msgstr ""
 
-#: src/lang.c:2356
+#: src/lang.c:2367
 msgid ""
 "# If ON a screen redraw will always be done after certain external commands\n"
 msgstr ""
 
-#: src/lang.c:2360
+#: src/lang.c:2371
 msgid ""
 "Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:2361
+#: src/lang.c:2372
 msgid "Start editor with line offset"
 msgstr ""
 
-#: src/lang.c:2362
+#: src/lang.c:2373
 msgid ""
 "# If ON editor will be started with cursor offset into the file\n"
 "# otherwise the cursor will be positioned at the first line\n"
 msgstr ""
 
-#: src/lang.c:2367
+#: src/lang.c:2378
 msgid "Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
 msgstr ""
 
-#: src/lang.c:2368
+#: src/lang.c:2379
 msgid "Invocation of your editor"
 msgstr ""
 
-#: src/lang.c:2369
+#: src/lang.c:2380
+#, c-format
 msgid ""
 "# Format of editor line including parameters\n"
 "# %%E Editor  %%F Filename  %%N Linenumber\n"
 msgstr ""
 
-#: src/lang.c:2374
+#: src/lang.c:2385
 msgid ""
 "Enter name and options for external-inews, --internal for internal inews"
 msgstr ""
 
-#: src/lang.c:2375
+#: src/lang.c:2386
 msgid "External inews"
 msgstr ""
 
-#: src/lang.c:2376
+#: src/lang.c:2387
 msgid ""
 "# If --internal use the built in mini inews for posting via NNTP\n"
 "# otherwise use an external inews program\n"
 msgstr ""
 
-#: src/lang.c:2380
+#: src/lang.c:2391
 msgid ""
 "Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
 msgstr ""
 
-#: src/lang.c:2381
+#: src/lang.c:2392
 msgid "Invocation of your mail command"
 msgstr ""
 
-#: src/lang.c:2382
+#: src/lang.c:2393
+#, c-format
 msgid ""
 "# Format of mailer line including parameters\n"
 "# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
@@ -5887,11 +5973,11 @@ msgid ""
 "# ie. elm interactive          :    elm -i %%F -s \"%%S\" \"%%T\"\n"
 msgstr ""
 
-#: src/lang.c:2390
+#: src/lang.c:2401
 msgid "Use interactive mail reader"
 msgstr ""
 
-#: src/lang.c:2391
+#: src/lang.c:2402
 msgid ""
 "# Interactive mailreader\n"
 "# Possible values are (the default is marked with *):\n"
@@ -5900,58 +5986,58 @@ msgid ""
 "#   2 = use interactive mailreader without headers in file\n"
 msgstr ""
 
-#: src/lang.c:2400
+#: src/lang.c:2411
 msgid "Remove ~/.article after posting"
 msgstr ""
 
-#: src/lang.c:2401
+#: src/lang.c:2412
 msgid "# If ON remove ~/.article after posting.\n"
 msgstr ""
 
-#: src/lang.c:2405
+#: src/lang.c:2416
 msgid "Filename for all posted articles, <CR> sets, no filename=do not save."
 msgstr ""
 
-#: src/lang.c:2406
+#: src/lang.c:2417
 msgid "Filename for posted articles"
 msgstr ""
 
-#: src/lang.c:2407
+#: src/lang.c:2418
 msgid ""
 "# Filename where to keep all postings (default posted)\n"
 "# If no filename is set then postings will not be saved\n"
 msgstr ""
 
-#: src/lang.c:2412
+#: src/lang.c:2423
 msgid ""
 "Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2413
+#: src/lang.c:2424
 msgid "Keep failed arts in ~/dead.articles"
 msgstr ""
 
-#: src/lang.c:2414
+#: src/lang.c:2425
 msgid "# If ON keep all failed postings in ~/dead.articles\n"
 msgstr ""
 
-#: src/lang.c:2418
+#: src/lang.c:2429
 msgid "Do you want to strip unsubscribed groups from .newsrc"
 msgstr ""
 
-#: src/lang.c:2419
+#: src/lang.c:2430
 msgid "No unsubscribed groups in newsrc"
 msgstr ""
 
-#: src/lang.c:2420
+#: src/lang.c:2431
 msgid "# If ON strip unsubscribed groups from newsrc\n"
 msgstr ""
 
-#: src/lang.c:2425
+#: src/lang.c:2436
 msgid "Remove bogus groups from newsrc"
 msgstr ""
 
-#: src/lang.c:2426
+#: src/lang.c:2437
 msgid ""
 "# What to do with bogus groups in newsrc file\n"
 "# Possible values are (the default is marked with *):\n"
@@ -5960,58 +6046,58 @@ msgid ""
 "#   2 = highlight with D on selection screen\n"
 msgstr ""
 
-#: src/lang.c:2434
+#: src/lang.c:2445
 msgid "Enter number of seconds until active file will be reread. <CR> sets."
 msgstr ""
 
-#: src/lang.c:2435
+#: src/lang.c:2446
 msgid "Interval in secs to reread active"
 msgstr ""
 
-#: src/lang.c:2436
+#: src/lang.c:2447
 msgid ""
 "# Time interval in seconds between rereading the active file (0=never)\n"
 msgstr ""
 
-#: src/lang.c:2441
+#: src/lang.c:2452
 msgid "Reconnect to server automatically"
 msgstr ""
 
-#: src/lang.c:2442
+#: src/lang.c:2453
 msgid ""
 "# If ON automatically reconnect to NNTP server if the connection is broken\n"
 msgstr ""
 
-#: src/lang.c:2446
+#: src/lang.c:2457
 msgid ""
 "Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
 msgstr ""
 
-#: src/lang.c:2447
+#: src/lang.c:2458
 msgid "Cache NNTP overview files locally"
 msgstr ""
 
-#: src/lang.c:2448
+#: src/lang.c:2459
 msgid "# If ON, create local copies of NNTP overview files.\n"
 msgstr ""
 
-#: src/lang.c:2452
+#: src/lang.c:2463
 msgid "Enter format string. <CR> sets, <ESC> cancels."
 msgstr ""
 
-#: src/lang.c:2453
+#: src/lang.c:2464
 msgid "Format string for display of dates"
 msgstr ""
 
-#: src/lang.c:2454
+#: src/lang.c:2465
 msgid "# Format string for date representation\n"
 msgstr ""
 
-#: src/lang.c:2460
+#: src/lang.c:2471
 msgid "Unicode normalization form"
 msgstr ""
 
-#: src/lang.c:2461
+#: src/lang.c:2472
 msgid ""
 "# Unicode normalization form\n"
 "# Possible values are (the default is marked with *):\n"
@@ -6022,60 +6108,92 @@ msgid ""
 "#   4 = NFD\n"
 msgstr ""
 
-#: src/lang.c:2473
+#: src/lang.c:2484
 msgid "Render BiDi"
 msgstr ""
 
-#: src/lang.c:2474
+#: src/lang.c:2485
 msgid "# If ON, bi-directional text is rendered by tin\n"
 msgstr ""
 
-#: src/misc.c:3721
+#: src/misc.c:3728
 #, c-format
 msgid "Version: %s %s release %s (\"%s\") %s %s\n"
 msgstr ""
 
-#: src/misc.c:3724
+#: src/misc.c:3731
 #, c-format
 msgid "Version: %s %s release %s (\"%s\")\n"
 msgstr ""
 
-#: src/newsrc.c:432
+#: src/newsrc.c:430
 msgid "Unreachable?\n"
 msgstr ""
 
-#: src/nntplib.c:825
+#: src/nntplib.c:824
 #, c-format
 msgid ""
 "\n"
 "Server timed out, trying reconnect # %d\n"
 msgstr ""
 
-#: src/nntplib.c:843
+#: src/nntplib.c:842
 msgid "Rejoin current group\n"
 msgstr ""
 
-#: src/nntplib.c:850
+#: src/nntplib.c:849
 #, c-format
 msgid "Read (%s)\n"
 msgstr ""
 
-#: src/nntplib.c:852
+#: src/nntplib.c:851
 #, c-format
 msgid "Resend last command (%s)\n"
 msgstr ""
 
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid "MOTD: "
+msgstr ""
+
 #: src/nrctbl.c:172
 #, c-format
 msgid "couldn't expand %s\n"
 msgstr ""
 
-#: src/post.c:1969
+#: src/post.c:1152
+#, c-format
+msgid ""
+"Line %d is longer than 998 octets and should be folded, but\n"
+"encoding is neither set to %s nor to %s\n"
+msgstr ""
+
+#: src/post.c:1157
+#, c-format
+msgid ""
+"Line %d is longer than 998 octets, and should be folded, but\n"
+"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr ""
+
+#: src/post.c:1159
+#, c-format
+msgid ""
+"Line %d is longer than 998 octets, and should be folded, but\n"
+"encoding is not set to %s\n"
+msgstr ""
+
+#: src/post.c:1974
 #, c-format
 msgid "Posting: %.*s ..."
 msgstr ""
 
-#. fp
 #. Check if okay to read
 #: src/read.c:214
 msgid "Aborting read, please wait..."
@@ -6103,6 +6221,7 @@ msgstr ""
 #. * TODO: -> lang.c
 #.
 #: src/rfc2047.c:1203
+#, c-format
 msgid ""
 "This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
 "are reading this prefix, your mail reader probably has not yet been "
@@ -6111,7 +6230,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: src/save.c:977
+#: src/save.c:978
 msgid "bytes"
 msgstr ""
 
Binary files tin-1.7.8/po/tr.gmo and tin-1.7.9/po/tr.gmo differ
diff -Nurp tin-1.7.8/po/tr.po tin-1.7.9/po/tr.po
--- tin-1.7.8/po/tr.po	2005-03-21 11:43:11.000000000 +0100
+++ tin-1.7.9/po/tr.po	2005-06-28 10:31:29.877507245 +0200
@@ -6,256 +6,281 @@
 #
 msgid	""
 msgstr	"Project-Id-Version: tin 1.7.7\n"
-	"POT-Creation-Date: 2005-03-21 11:42+0100\n"
+	"Report-Msgid-Bugs-To: \n"
+	"POT-Creation-Date: 2005-06-22 20:13+0200\n"
 	"PO-Revision-Date: 2005-03-06 09:25+0200\n"
 	"Last-Translator: Þebnem Korkmaz <sebnem_k@hotmail.com>\n"
 	"Language-Team: Turkish <gnu-tr-u12a@lists.sourceforge.net>\n"
 	"MIME-Version: 1.0\n"
 	"Content-Type: text/plain; charset=ISO-8859-9\n"
 	"Content-Transfer-Encoding: 8bit\n"
-	"Report-Msgid-Bugs-To: \n"
 
-#: src/art.c:1455
+#: src/art.c:1553
 #, c-format
 msgid	"%d Bad overview record (%d fields) '%s'"
 msgstr	""
 
-#: src/attrib.c:604
+#: src/attrib.c:643
+#, c-format
 msgid	"# Do not edit this comment block\n"
 	"#\n"
 msgstr	"# Bu açýklama bloðunu düzenlemeyin\n"
 	"#\n"
 
-#: src/attrib.c:605
+#: src/attrib.c:644
+#, c-format
 msgid	"#  scope=STRING (ie. alt.*,!alt.bin*) [mandatory]\n"
 msgstr	"#  scope=DÝZGE (kapsam, örn. alt.*,!alt.bin*) [zorunlu]\n"
 
-#: src/attrib.c:606
+#: src/attrib.c:645
+#, c-format
 msgid	"#  maildir=STRING (ie. ~/Mail)\n"
 msgstr	"#  maildir=DÝZGE (posta dizini, örn. ~/Mail)\n"
 
-#: src/attrib.c:607
+#: src/attrib.c:646
+#, c-format
 msgid	"#  savedir=STRING (ie. ~user/News)\n"
 msgstr	"#  savedir=DÝZGE (saklama dizini, örn. ~user/News)\n"
 
-#: src/attrib.c:608
+#: src/attrib.c:647
+#, c-format
 msgid	"#  savefile=STRING (ie. =linux)\n"
 msgstr	"#  savefile=DÝZGE (saklama dosyasý, örn. =linux)\n"
 
-#: src/attrib.c:609
+#: src/attrib.c:648
+#, c-format
 msgid	"#  sigfile=STRING (ie. $var/sig)\n"
 msgstr	"#  sigfile=DÝZGE (imza dosyasý, örn. $var/sig)\n"
 
-#: src/attrib.c:610
+#: src/attrib.c:649
+#, c-format
 msgid	"#  organization=STRING (if beginning with '/' read from file)\n"
 msgstr	"#  organization=DÝZGE (kurum; eðer / ile baþlýyor ise, dosyadan okunur)\n"
 
-#: src/attrib.c:611
+#: src/attrib.c:650
+#, c-format
 msgid	"#  followup_to=STRING\n"
 msgstr	"#  followup_to=DÝZGE (cevap yönlendirmesi)\n"
 
-#: src/attrib.c:612
+#: src/attrib.c:651
+#, c-format
 msgid	"#  mailing_list=STRING (ie. majordomo@example.org)\n"
 msgstr	"#  mailing_list=DÝZGE (posta listesi, örn. majordomo@example.org)\n"
 
-#: src/attrib.c:613
+#: src/attrib.c:652
+#, c-format
 msgid	"#  x_headers=STRING (ie. ~/.tin/extra-headers)\n"
 msgstr	"#  x_headers=DÝZGE (ekstra baþlýk dosyasý, örn. ~/.tin/extra-headers)\n"
 
-#: src/attrib.c:614
+#: src/attrib.c:653
+#, c-format
 msgid	"#  x_body=STRING (ie. ~/.tin/extra-body-text)\n"
 msgstr	"#  x_body=DÝZGE (extra gövde dosyasý, örn. ~/.tin/extra-body-text)\n"
 
-#: src/attrib.c:615
+#: src/attrib.c:654
+#, c-format
 msgid	"#  from=STRING (just append wanted From:-line, don't use quotes)\n"
 msgstr	""
 
-#: src/attrib.c:616
-#, fuzzy
+#: src/attrib.c:655
+#, fuzzy, c-format
 msgid	"#  news_quote_format=STRING\n"
 msgstr	"#  news_quote_format=DÝZGE\n"
 
-#: src/attrib.c:617
+#: src/attrib.c:656
+#, c-format
 msgid	"#  quote_chars=STRING (%%s, %%S for initials)\n"
 msgstr	""
 
-#: src/attrib.c:618
+#: src/attrib.c:657
+#, c-format
 msgid	"#  mime_types_to_save=STRING (eg. image/*,!image/bmp)\n"
 msgstr	""
 
-#: src/attrib.c:620
-#, fuzzy
+#: src/attrib.c:659
+#, fuzzy, c-format
 msgid	"#  ispell=STRING\n"
 msgstr	"#  ispell=DÝZGE\n"
 
-#: src/attrib.c:622
-#, fuzzy
+#: src/attrib.c:661
+#, c-format
 msgid	"#  auto_select=ON/OFF\n"
-msgstr	"#  auto_select=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:623
-#, fuzzy
+#: src/attrib.c:662
+#, c-format
 msgid	"#  auto_save=ON/OFF\n"
-msgstr	"#  auto_save=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:624
-#, fuzzy
+#: src/attrib.c:663
+#, c-format
 msgid	"#  batch_save=ON/OFF\n"
-msgstr	"#  batch_save=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:625
-#, fuzzy
+#: src/attrib.c:664
+#, c-format
 msgid	"#  delete_tmp_files=ON/OFF\n"
-msgstr	"#  delete_tmp_files=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:626
-#, fuzzy
+#: src/attrib.c:665
+#, c-format
 msgid	"#  show_only_unread=ON/OFF\n"
-msgstr	"#  show_only_unread=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:627
-#, fuzzy
+#: src/attrib.c:666
+#, c-format
 msgid	"#  thread_arts=NUM"
-msgstr	"#  thread_arts=NUM"
+msgstr	""
 
-#: src/attrib.c:634
-#, fuzzy
+#: src/attrib.c:673
+#, c-format
 msgid	"#  show_author=NUM\n"
-msgstr	"#  show_author=NUM\n"
+msgstr	""
 
-#: src/attrib.c:640
-#, fuzzy
+#: src/attrib.c:679
+#, c-format
 msgid	"#  show_info=NUM\n"
-msgstr	"#  show_info=NUM\n"
+msgstr	""
 
-#: src/attrib.c:646
-#, fuzzy
+#: src/attrib.c:685
+#, c-format
 msgid	"#  sort_art_type=NUM\n"
-msgstr	"#  sort_art_type=NUM\n"
+msgstr	""
 
-#: src/attrib.c:664
-#, fuzzy
+#: src/attrib.c:703
+#, c-format
 msgid	"#  sort_threads_type=NUM\n"
-msgstr	"#  sort_threads_type=NUM\n"
+msgstr	""
 
-#: src/attrib.c:669
-#, fuzzy
+#: src/attrib.c:708
+#, c-format
 msgid	"#  post_proc_type=NUM\n"
-msgstr	"#  post_proc_type=NUM\n"
+msgstr	""
 
-#: src/attrib.c:674
+#: src/attrib.c:713
+#, c-format
 msgid	"#  quick_kill_scope=STRING (ie. talk.*)\n"
 msgstr	""
 
-#: src/attrib.c:675
-#, fuzzy
+#: src/attrib.c:714
+#, c-format
 msgid	"#  quick_kill_expire=ON/OFF\n"
-msgstr	"#  quick_kill_expire=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:676
-#, fuzzy
+#: src/attrib.c:715
+#, c-format
 msgid	"#  quick_kill_case=ON/OFF\n"
-msgstr	"#  quick_kill_case=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:677
-#, fuzzy
+#: src/attrib.c:716
+#, c-format
 msgid	"#  quick_kill_header=NUM\n"
-msgstr	"#  quick_kill_header=NUM\n"
+msgstr	""
 
-#: src/attrib.c:678 src/attrib.c:685
+#: src/attrib.c:717 src/attrib.c:724
+#, c-format
 msgid	"#    0=subj (case sensitive) 1=subj (ignore case)\n"
 msgstr	""
 
-#: src/attrib.c:679 src/attrib.c:686
+#: src/attrib.c:718 src/attrib.c:725
+#, c-format
 msgid	"#    2=from (case sensitive) 3=from (ignore case)\n"
 msgstr	""
 
-#: src/attrib.c:680 src/attrib.c:687
+#: src/attrib.c:719 src/attrib.c:726
+#, c-format
 msgid	"#    4=msgid 5=lines\n"
 msgstr	""
 
-#: src/attrib.c:681
-#, fuzzy
+#: src/attrib.c:720
+#, fuzzy, c-format
 msgid	"#  quick_select_scope=STRING\n"
 msgstr	"#  quick_select_scope=DÝZGE\n"
 
-#: src/attrib.c:682
-#, fuzzy
+#: src/attrib.c:721
+#, c-format
 msgid	"#  quick_select_expire=ON/OFF\n"
-msgstr	"#  quick_select_expire=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:683
-#, fuzzy
+#: src/attrib.c:722
+#, c-format
 msgid	"#  quick_select_case=ON/OFF\n"
-msgstr	"#  quick_select_case=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:684
-#, fuzzy
+#: src/attrib.c:723
+#, c-format
 msgid	"#  quick_select_header=NUM\n"
-msgstr	"#  quick_select_header=NUM\n"
+msgstr	""
 
-#: src/attrib.c:688
-#, fuzzy
+#: src/attrib.c:727
+#, c-format
 msgid	"#  x_comment_to=ON/OFF\n"
-msgstr	"#  x_comment_to=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:689
+#: src/attrib.c:728
+#, c-format
 msgid	"#  fcc=STRING (eg. =mailbox)\n"
 msgstr	""
 
-#: src/attrib.c:690
-#, fuzzy
+#: src/attrib.c:729
+#, c-format
 msgid	"#  tex2iso_conv=ON/OFF\n"
-msgstr	"#  tex2iso_conv=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:691
-#, fuzzy
+#: src/attrib.c:730
+#, c-format
 msgid	"#  mime_forward=ON/OFF\n"
-msgstr	"#  mime_forward=ON/OFF\n"
+msgstr	""
 
-#: src/attrib.c:693
+#: src/attrib.c:732
+#, c-format
 msgid	"#  mm_network_charset=supported_charset"
 msgstr	""
 
-#: src/attrib.c:700
+#: src/attrib.c:739
+#, c-format
 msgid	"#  undeclared_charset=STRING (default is US-ASCII)\n"
 msgstr	""
 
-#: src/attrib.c:702
-#, fuzzy
+#: src/attrib.c:741
+#, fuzzy, c-format
 msgid	"#\n"
 	"# Note that it is best to put general (global scoping)\n"
 msgstr	"#\n"
 	"# Genel(küresel) kaplamýn en iyi olduðunu not ediniz.\n"
 
-#: src/attrib.c:703
-#, fuzzy
+#: src/attrib.c:742
+#, fuzzy, c-format
 msgid	"# entries first followed by group specific entries.\n"
 	"#\n"
 msgstr	"# Öncelikle özgül grup girdileri tarafýndan takip edilen girdiler\n"
 	"#\n"
 
-#: src/attrib.c:704
+#: src/attrib.c:743
+#, c-format
 msgid	"############################################################################\n"
 	"\n"
 msgstr	"############################################################################\n"
 	"\n"
 
-#: src/attrib.c:710
+#: src/attrib.c:749
+#, c-format
 msgid	"# include extra headers\n"
 msgstr	"# extra baþlýklarý içerir\n"
 
-#: src/attrib.c:718
+#: src/attrib.c:757
+#, c-format
 msgid	"# in *sources* set post process type to shar only\n"
 msgstr	""
 
-#: src/attrib.c:722
-#, fuzzy
-msgid	"# in *binaries* do full post processing, remove tmp files\n"
+#: src/attrib.c:761
+#, fuzzy, c-format
+msgid	"# in *binaries* do full post processing but no TeX2ISO conversion,\n"
 msgstr	"# ikilik dosyalarda iþletim sonrasýný tam yapýn, tmp dosyalarýný kaldýrýn.\n"
 
-#: src/attrib.c:723
-msgid	"# and set Followup-To: poster\n"
+#: src/attrib.c:762
+#, c-format
+msgid	"# remove tmp files and set Followup-To: poster\n"
 msgstr	""
 
 #: src/cook.c:497
@@ -401,9 +426,8 @@ msgid	"%*s[-- %s/%s, encoding %s%s%s, %d
 msgstr	"%*s[-- %s/%s, kodluyor %s%s%s, %d satýr%s%s --]\n"
 
 #: src/lang.c:73
-#, fuzzy
 msgid	", charset: "
-msgstr	", charset: "
+msgstr	""
 
 #: src/lang.c:74
 #, c-format
@@ -505,7 +529,7 @@ msgid	"*** Beginning of article ***"
 msgstr	"*** Makalenin baþý ***"
 
 #: src/lang.c:97
-#, fuzzy
+#, fuzzy, c-format
 msgid	"Cancel (delete) or supersede (overwrite) article [%%s]? (%s/%s/%s): "
 msgstr	"Dosyayý Ýptal et(sil) veya dosyanýn yerini al(üstüne yaz)[%%s]? (%s/%s/%s): "
 
@@ -553,14 +577,13 @@ msgid	"%s is a directory"
 msgstr	"%s bir dizindir"
 
 #: src/lang.c:108
-#, fuzzy
 msgid	"Catchup"
-msgstr	"Catchup"
+msgstr	""
 
 #: src/lang.c:109
-#, fuzzy, c-format
+#, c-format
 msgid	"Catchup %s..."
-msgstr	"Catchup %s..."
+msgstr	""
 
 #: src/lang.c:110
 msgid	"Catchup all groups entered during this session?"
@@ -577,9 +600,8 @@ msgid	"%s %d %s in %lu seconds\n"
 msgstr	"%4$lu saniyede %1$s %2$d %3$s\n"
 
 #: src/lang.c:113
-#, fuzzy
 msgid	"Caughtup"
-msgstr	"Caughtup"
+msgstr	""
 
 #: src/lang.c:114
 #, fuzzy
@@ -639,7 +661,7 @@ msgstr	"Kaydedilen kümeler için aktif do
 msgid	"Creating newsrc file...\n"
 msgstr	"Newsrc dosyasý oluþturuluyor...\n"
 
-#: src/lang.c:129 src/lang.c:1150
+#: src/lang.c:129 src/lang.c:1147
 msgid	"Default"
 msgstr	"Öntanýmlý"
 
@@ -1533,7 +1555,7 @@ msgstr	"komut isteminden çýk"
 #: src/lang.c:322
 #, fuzzy
 msgid	"edit filter file"
-msgstr	"Süz dosyasý okunuyor...\n"
+msgstr	"Süz dosyasý okunuyor"
 
 #: src/lang.c:323
 #, fuzzy
@@ -1867,7 +1889,7 @@ msgstr	"Listede seçilen kümeye git"
 msgid	"choose next group with unread news"
 msgstr	"okunmamýþ haberlerde sonraki kümeyi seç"
 
-#: src/lang.c:389 src/lang.c:1197
+#: src/lang.c:389 src/lang.c:1194
 #, fuzzy
 msgid	"quit"
 msgstr	"çýk"
@@ -2199,117 +2221,112 @@ msgstr	"Geçersiz tuþ tanýmý '%s'\n"
 msgid	"Invalid keyname '%s'\n"
 msgstr	"Geçersiz anahtar sözcük '%s'\n"
 
-#: src/lang.c:462
-#, fuzzy, c-format
-msgid	"Key '%s' is defined for both %s%s and %s%s\n"
-msgstr	"'%s' tuþu %s%s ve %s%s için tanýmlandý\n"
-
-#: src/lang.c:464
+#: src/lang.c:461
 #, c-format
 msgid	"Keymap file was upgraded to version %s\n"
 msgstr	""
 
-#: src/lang.c:465
+#: src/lang.c:462
 #, fuzzy, c-format
 msgid	"Kill From:     [%s] (y/n): "
 msgstr	"Göndereni yok et:     [%s] (y/n): "
 
-#: src/lang.c:466
+#: src/lang.c:463
 #, fuzzy
 msgid	"Kill Lines: (</>num): "
 msgstr	"Satýrlarý yok et:(</>num): "
 
-#: src/lang.c:467
+#: src/lang.c:464
 #, fuzzy
 msgid	"Kill Article Menu"
 msgstr	"Makale menüsünü yok et"
 
-#: src/lang.c:468
+#: src/lang.c:465
 #, fuzzy, c-format
 msgid	"Kill Msg-Id:   [%s] (f/l/o/n): "
 msgstr	"Ýleti-Kimliðini yko et:   [%s] (f/l/o/n): "
 
-#: src/lang.c:469
+#: src/lang.c:466
 #, fuzzy
 msgid	"Kill pattern scope  : "
 msgstr	"Örüntü kapsamýný yok et: "
 
-#: src/lang.c:470
+#: src/lang.c:467
 #, fuzzy, c-format
 msgid	"Kill Subject:  [%s] (y/n): "
 msgstr	"Konuyu yok et: [%s] (y/n): "
 
-#: src/lang.c:471
+#: src/lang.c:468
 #, fuzzy
 msgid	"Kill text pattern   : "
 msgstr	"Metin örüntüsünü yok et : "
 
-#: src/lang.c:472
+#: src/lang.c:469
 #, fuzzy
 msgid	"Kill time in days   : "
 msgstr	"Zamaný gün olarak yok et: "
 
-#: src/lang.c:474
+#: src/lang.c:471
 #, fuzzy
 msgid	"Last"
 msgstr	"Son"
 
-#: src/lang.c:475
+#: src/lang.c:472
 #, fuzzy
 msgid	"-- Last response --"
 msgstr	"-- Son yanýt --"
 
-#: src/lang.c:476
+#: src/lang.c:473
 #, fuzzy, c-format
 msgid	"Lines %s  "
 msgstr	"Satýrlar %s "
 
-#: src/lang.c:478
+#: src/lang.c:475
 #, fuzzy
 msgid	"Message-ID: line              "
 msgstr	"Ýleti-Kimliði: satýr             "
 
-#: src/lang.c:479
+#: src/lang.c:476
 #, fuzzy
 msgid	"Mail"
 msgstr	"Postalandý"
 
-#: src/lang.c:480
+#: src/lang.c:477
 #, fuzzy
 msgid	"mailbox "
 msgstr	"posta kutusu "
 
-#: src/lang.c:481
+#: src/lang.c:478
 #, fuzzy, c-format
 msgid	"Mail article(s) to [%.*s]> "
 msgstr	"Makaleleri postala [%.*s]> "
 
-#: src/lang.c:482
+#: src/lang.c:479
 #, fuzzy, c-format
 msgid	"Mailing log to %s\n"
 msgstr	"Günlüðü postalýyor %s\n"
 
-#: src/lang.c:483
+#: src/lang.c:480
 #, fuzzy
 msgid	"Mail bug report..."
 msgstr	"Hata raporu postala..."
 
-#: src/lang.c:484
+#: src/lang.c:481
 #, fuzzy, c-format
 msgid	"Mail BUG REPORT to %s?"
 msgstr	"HATA RAPORUNU postala %s?"
 
-#: src/lang.c:485
+#: src/lang.c:482
 #, fuzzy
 msgid	"Mailed"
 msgstr	"Postalandý"
 
-#: src/lang.c:486
+#: src/lang.c:483
 #, fuzzy, c-format
 msgid	"Mailing to %s..."
 msgstr	"Postalanýyor %s..."
 
-#: src/lang.c:487
+#: src/lang.c:484
 #, fuzzy
 msgid	"# [Mail/Save] active file. Format is like news active file:\n"
 	"#   groupname  max.artnum  min.artnum  /dir\n"
@@ -2320,323 +2337,323 @@ msgstr	"# (Mail/Save) aktif dosya. Forma
 	"# 4. alan basedir(örn.~/Mail or ~/News)\n"
 	"#\n"
 
-#: src/lang.c:490
+#: src/lang.c:487
 #, fuzzy, c-format
 msgid	"%s marked as unread"
 msgstr	"%s okunmamýþ olarak iþaretlendi"
 
-#: src/lang.c:491
+#: src/lang.c:488
 #, fuzzy, c-format
 msgid	"Marked %d of %d tagged %s as read"
 msgstr	"%d içerisinde %d iþaretlendi %s okunmuþ olarak etiketlendi"
 
-#: src/lang.c:492
+#: src/lang.c:489
 #, fuzzy, c-format
 msgid	"Mark all articles as read%s?"
 msgstr	"Bütün makaleleri okunmuþ olarak iþaretle%s?"
 
-#: src/lang.c:493
+#: src/lang.c:490
 #, fuzzy, c-format
 msgid	"Mark %s=tagged articles, %s=current article, %s=quit: "
 msgstr	"Ýþaretle %s=etiketlenen makaleler, %s=mevcut makale, %s=çýk: "
 
-#: src/lang.c:494
+#: src/lang.c:491
 #, fuzzy, c-format
 msgid	"Mark group %s as read?"
 msgstr	"Küme %s 'i okunmuþ olarak iþaretle?"
 
-#: src/lang.c:495
+#: src/lang.c:492
 #, fuzzy, c-format
 msgid	"Mark thread as read%s?"
 msgstr	"Parçacýk %s 'i okunmuþ olarak iþaretle?"
 
-#: src/lang.c:496
+#: src/lang.c:493
 #, fuzzy, c-format
 msgid	"Mark %s=tagged articles/threads, %s=current thread, %s=quit: "
 msgstr	"Ýþaretle %s=etiketlenen makale7parçacýklar, %s= mevcut parçacýk, %s=çýk: "
 
-#: src/lang.c:497
+#: src/lang.c:494
 #, fuzzy, c-format
 msgid	"Matching %s groups..."
 msgstr	"%s kümelerini eþleþtiriyor..."
 
-#: src/lang.c:498 src/lang.c:502
+#: src/lang.c:495 src/lang.c:499
 #, fuzzy, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=search pattern; %s=kill/select"
 msgstr	"<n>=muvcut n için ayarlandý; %s=sonraki okunmayan; %s=arama örüntüsü; %s=yok "
 	"et/seç"
 
-#: src/lang.c:499
+#: src/lang.c:496
 #, fuzzy, c-format
 msgid	"%s=author search; %s=catchup; %s=line down; %s=line up; %s=mark read; %s=list "
 	"thread"
 msgstr	"%s=yazar aramasý; %s=catchup; %s=alt satýr; %s=üst satýr; %s= okunmuþ "
 	"iþaretle; %s=parçacýk listele"
 
-#: src/lang.c:500
+#: src/lang.c:497
 #, fuzzy, c-format
 msgid	"%s=line up; %s=line down; %s=page up; %s=page down; %s=top; %s=bottom"
 msgstr	"%s=üst satýr; %s=alt satýr; %s=üst sayfa; %s= alt sayfa; %s=üst; %s=alt"
 
-#: src/lang.c:501
+#: src/lang.c:498
 #, fuzzy, c-format
 msgid	"%s=search forwards; %s=search backwards; %s=quit"
 msgstr	"%s=ileriye doðru ara; %s=geriye doðru ara; %s=çýk"
 
-#: src/lang.c:503
+#: src/lang.c:500
 #, fuzzy, c-format
 msgid	"%s=author search; %s=body search; %s=catchup; %s=followup; %s=mark read"
 msgstr	"%s=yazar aramasý; %s=gövde aramasý; %s=catchup; %s=takip-et; %s=okumuþ olarak "
 	"iþaretle"
 
-#: src/lang.c:504
+#: src/lang.c:501
 #, fuzzy, c-format
 msgid	"<n>=set current to n; %s=next unread; %s,%s=search pattern; %s=catchup"
-msgstr	"<n>=mevcut n için ayarlandý; %s=sonraki okunmayan; %s,%s=arama örgüsü; "
-	"%s=catchup"
+msgstr	"<n>=mevcut n için ayarlandý; %s=sonraki okunmayan; %s,%s=arama örgüsü; %"
+	"s=catchup"
 
-#: src/lang.c:505
+#: src/lang.c:502
 #, fuzzy, c-format
 msgid	"%s=line down; %s=line up; %s=help; %s=move; %s=quit; %s=toggle all/unread"
 msgstr	"%s=alt satýr; %s=üst satýr; %s=yardým; %s=taþý; %s=çýk; %s=bütün/okunmamýþ "
 	"deðiþtir"
 
-#: src/lang.c:506
+#: src/lang.c:503
 #, fuzzy, c-format
 msgid	"%s=subscribe; %s=sub pattern; %s=unsubscribe; %s=unsub pattern; %s=yank in/out"
-msgstr	"%s=abone ol; %s=alt örüntü; %s=abonelikten çýk; %s=alt olmayan örüntü; "
-	"%s=yank in/out"
+msgstr	"%s=abone ol; %s=alt örüntü; %s=abonelikten çýk; %s=alt olmayan örüntü; %"
+	"s=yank in/out"
 
-#: src/lang.c:507
+#: src/lang.c:504
 #, fuzzy, c-format
 msgid	"<n>=set current to n; %s=next unread; %s=catchup; %s=display toggle"
 msgstr	"<n>= muvcut n için ayarlandý; %s=sonraki okunmayan; %s=catchup; %s=deðiþimi "
 	"görüntüle"
 
-#: src/lang.c:508
+#: src/lang.c:505
 #, fuzzy, c-format
 msgid	"%s=help; %s=line down; %s=line up; %s=quit; %s=tag; %s=mark unread"
 msgstr	"%s=yardým; %s=alt satýr; %s=üst satýr; %s=quit; %s=etiketle; %s=okunmamýþ "
 	"olarak iþaretle"
 
-#: src/lang.c:509
+#: src/lang.c:506
 #, fuzzy
 msgid	"--More--"
 msgstr	"--Tümü--"
 
-#: src/lang.c:510
+#: src/lang.c:507
 #, fuzzy, c-format
 msgid	"Moving %s..."
 msgstr	"Taþýnan %s..."
 
-#: src/lang.c:512
+#: src/lang.c:509
 #, fuzzy
 msgid	", name: "
 msgstr	", isim: "
 
-#: src/lang.c:513
+#: src/lang.c:510
 #, fuzzy, c-format
 msgid	"Goto newsgroup [%s]> "
 msgstr	"Haber grubuna gidin [%s]> "
 
-#: src/lang.c:514
+#: src/lang.c:511
 #, fuzzy
 msgid	"newsgroups"
 msgstr	"haber gruplarý"
 
-#: src/lang.c:515
+#: src/lang.c:512
 #, fuzzy, c-format
 msgid	"Position %s in group list (1,2,..,$) [%d]> "
 msgstr	"Grup listesinde %s konumlayýn (1,2,..,$) [%d]> "
 
-#: src/lang.c:516
+#: src/lang.c:513
 #, fuzzy
 msgid	"newsgroup"
 msgstr	"haber gruplarý"
 
-#: src/lang.c:517
+#: src/lang.c:514
 #, fuzzy
 msgid	"Try and save newsrc file again?"
 msgstr	"Newsrc dosyasýný kaydetmeyi tekrar dene?"
 
-#: src/lang.c:518
+#: src/lang.c:515
 #, fuzzy
 msgid	"Warning: No newsgroups were written to your newsrc file. Save aborted."
 msgstr	"Uyarý: Newsrc dosyanýza herhangi bir haber grubu yazýlmadý. Kaydetme "
 	"durduruldu."
 
-#: src/lang.c:519
+#: src/lang.c:516
 #, fuzzy
 msgid	"newsrc file saved successfully.\n"
 msgstr	"newsrc dosyasý baþarýyla kaydedildi.\n"
 
-#: src/lang.c:520
+#: src/lang.c:517
 #, fuzzy
 msgid	"-- Next response --"
 msgstr	"-- Sonraki yanýt --"
 
-#: src/lang.c:521
+#: src/lang.c:518
 #, fuzzy, c-format
 msgid	"NNTP authorization password not found for %s"
 msgstr	"NNTP yetki þifresi %s için bulunamadý"
 
-#: src/lang.c:522
+#: src/lang.c:519
 #, fuzzy
 msgid	"No  "
 msgstr	"Hayýr"
 
-#: src/lang.c:523
+#: src/lang.c:520
 #, fuzzy
 msgid	"*** No articles ***"
 msgstr	"*** Makale yok ***"
 
-#: src/lang.c:524
+#: src/lang.c:521
 #, fuzzy
 msgid	"No articles have been posted"
 msgstr	"Hiçbir makale gönderilmedi"
 
-#: src/lang.c:525
+#: src/lang.c:522
 #, fuzzy
 msgid	"*** No description ***"
 msgstr	"*** Taným yok ***"
 
-#: src/lang.c:526
+#: src/lang.c:523
 #, fuzzy
 msgid	"No filename"
 msgstr	"Dosya adý yok"
 
-#: src/lang.c:527
+#: src/lang.c:524
 #, fuzzy
 msgid	"No group"
 msgstr	"Küme yok"
 
-#: src/lang.c:528
+#: src/lang.c:525
 #, fuzzy
 msgid	"*** No groups ***"
 msgstr	"*** Kümeler yok ***"
 
-#: src/lang.c:529
+#: src/lang.c:526
 #, fuzzy
 msgid	"No more groups to read"
 msgstr	"Okunacak küme kalmadý"
 
-#: src/lang.c:530
+#: src/lang.c:527
 #, fuzzy
 msgid	"No last message"
 msgstr	"Son ileti yok"
 
-#: src/lang.c:531
+#: src/lang.c:528
 #, fuzzy
 msgid	"No mail address"
 msgstr	"Posta adresi yok"
 
-#: src/lang.c:532
+#: src/lang.c:529
 #, fuzzy
 msgid	"No articles marked for saving"
 msgstr	"Kaydetmek için hiçbir makale iþaretlenmedi"
 
-#: src/lang.c:533
+#: src/lang.c:530
 #, fuzzy
 msgid	"No match"
 msgstr	"Eþ yok"
 
-#: src/lang.c:534
+#: src/lang.c:531
 #, fuzzy
 msgid	"No more groups"
 msgstr	"Baþka küme yok"
 
-#: src/lang.c:535
+#: src/lang.c:532
 #, fuzzy
 msgid	"No newsgroups"
 msgstr	"Haber gruplarý yok"
 
-#: src/lang.c:536
+#: src/lang.c:533
 #, fuzzy
 msgid	"No next unread article"
 msgstr	"Sonraki okunmamýþ makale yok"
 
-#: src/lang.c:537
+#: src/lang.c:534
 #, fuzzy
 msgid	"No previous group"
 msgstr	"Önceki küme yok"
 
-#: src/lang.c:538
+#: src/lang.c:535
 #, fuzzy
 msgid	"No previous unread article"
 msgstr	"Önceki okunmamýþ makale yok"
 
-#: src/lang.c:539
+#: src/lang.c:536
 #, fuzzy
 msgid	"No responses"
 msgstr	"Yanýt yok"
 
-#: src/lang.c:540
+#: src/lang.c:537
 #, fuzzy
 msgid	"No responses to list in current thread"
 msgstr	"Mevcut parçacýkta listelemek için hiç yanýt yok"
 
-#: src/lang.c:541
+#: src/lang.c:538
 #, fuzzy
 msgid	"No search string"
 msgstr	"Arama dizgisi yok"
 
-#: src/lang.c:542
+#: src/lang.c:539
 #, fuzzy
 msgid	"No subject"
 msgstr	"Konu yok"
 
-#: src/lang.c:544
+#: src/lang.c:541
 #, fuzzy, c-format
 msgid	"%s: Terminal must have clear to end-of-line (ce)\n"
 msgstr	"%s: Uçbirim satýr sonuna kadar boþ olmak zorunda (ce)\n"
 
-#: src/lang.c:545
+#: src/lang.c:542
 #, fuzzy, c-format
 msgid	"%s: Terminal must have clear to end-of-screen (cd)\n"
 msgstr	"%s: Uçbirim ekran sonuna kadar boþ olmak zorunda (cd)\n"
 
-#: src/lang.c:546
+#: src/lang.c:543
 #, fuzzy, c-format
 msgid	"%s: Terminal must have clearscreen (cl) capability\n"
 msgstr	"%s: Uçbirimin ekran temizleme (cl) yeteneði olmalý\n"
 
-#: src/lang.c:547
+#: src/lang.c:544
 #, fuzzy, c-format
 msgid	"%s: Terminal must have cursor motion (cm)\n"
 msgstr	"%s: Uçbirimin imleç hareketi olmalý (cm)\n"
 
-#: src/lang.c:548
+#: src/lang.c:545
 #, fuzzy, c-format
 msgid	"%s: TERM variable must be set to use screen capabilities\n"
 msgstr	"%s: TERM deðiþkeni ekran yetenekleri kullanýlacak þekilde ayarlanmalý\n"
 
-#: src/lang.c:550
+#: src/lang.c:547
 #, fuzzy, c-format
 msgid	"No viewer found for %s/%s\n"
 msgstr	"%s/%s için görüntüleyici yok\n"
 
-#: src/lang.c:551
+#: src/lang.c:548
 #, fuzzy
 msgid	"Newsgroup does not exist on this server"
 msgstr	"Bu sunucuda haber grubu yok"
 
-#: src/lang.c:552
+#: src/lang.c:549
 #, fuzzy, c-format
 msgid	"Group %s not found in active file"
 msgstr	"Küme %s aktif dosyada bulunamadý"
 
-#: src/lang.c:553
+#: src/lang.c:550
 #, fuzzy
 msgid	"c)reate it, use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"c)yarat, a)lternatif isim kullan, d)varsayýlaný kullan, mewsrc, q)tin'den "
 	"çýk: "
 
-#: src/lang.c:554
+#: src/lang.c:551
 #, fuzzy
 msgid	"use a)lternative name, use d)efault .newsrc, q)uit tin: "
 msgstr	"a)lternatif isim kullan, d)varsayýlaný kullan, newsrc, q)tin'den çýk: "
 
-#: src/lang.c:555
+#: src/lang.c:552
 #, fuzzy, c-format
 msgid	"# NNTP-server -> newsrc translation table and NNTP-server\n"
 	"# shortname list for %s %s\n"
@@ -2651,7 +2668,8 @@ msgid	"# NNTP-server -> newsrc translati
 	"#   news.ka.nu    /tmp/nrc-nu      kanu    nu\n"
 	"#\n"
 msgstr	"# NNTP-sunucu -> newsrc çeviri dosyasý ile NNTP-sunucu\n"
-	"#   %s %s için kýsaltma listesi#\n"
+	"#   %s %s için kýsaltma listesi\n"
+	"#\n"
 	"# bu dosyanýn biçimi\n"
 	"#  <FQDN of NNTP-server> <newsrc file> <shortname> ...\n"
 	"#\n"
@@ -2663,43 +2681,43 @@ msgstr	"# NNTP-sunucu -> newsrc çeviri d
 	"#   news.ka.nu    /tmp/nrc-nu      kanu    nu\n"
 	"#\n"
 
-#: src/lang.c:562
+#: src/lang.c:559
 #, fuzzy
 msgid	"Only"
 msgstr	"Sadece"
 
-#: src/lang.c:563
+#: src/lang.c:560
 #, fuzzy, c-format
 msgid	"Option not enabled. Recompile with %s."
 msgstr	"Seçenek etkin kýlýnmadý. Yeniden derle %s."
 
-#: src/lang.c:564
+#: src/lang.c:561
 #, fuzzy
 msgid	"Options Menu"
 msgstr	"Seçenekler menüsü"
 
-#: src/lang.c:567
+#: src/lang.c:564
 #, fuzzy, c-format
 msgid	"Error in regex: %s at pos. %d '%s'"
 msgstr	"Regex'de hata: poda %s. %d '%s'"
 
-#: src/lang.c:568
+#: src/lang.c:565
 #, fuzzy, c-format
 msgid	"Error in regex: pcre internal error %d"
 msgstr	"Regex'de hata: pcre iç hata %d"
 
-#: src/lang.c:569
+#: src/lang.c:566
 #, fuzzy, c-format
 msgid	"Error in regex: study - pcre internal error %s"
 msgstr	"Regex'de hata: incele - pcre iç hata %s"
 
-#: src/lang.c:570
+#: src/lang.c:567
 #, fuzzy
 msgid	"Post a followup..."
 msgstr	"Takip edici gönder..."
 
 #. TODO: replace hardcoded key-name in txt_post_error_ask_postpone
-#: src/lang.c:572
+#: src/lang.c:569
 #, fuzzy
 msgid	"An error has occurred while posting the article. If you think that this\n"
 	"error is temporary or otherwise correctable, you can postpone the article\n"
@@ -2708,312 +2726,312 @@ msgstr	"Makaleyi gönderirken hata oluþtu
 	"düþünüyorsanýz, makaleyi erteleyebilir ve tekrar ^O komutunu kulanarak "
 	"ulaþabilirsiniz.\n"
 
-#: src/lang.c:575
+#: src/lang.c:572
 #, fuzzy
 msgid	"Posted articles history"
 msgstr	"Gönderilmiþ makalelerin geçmiþi"
 
-#: src/lang.c:576
+#: src/lang.c:573
 #, fuzzy, c-format
 msgid	"Post to newsgroup(s) [%s]> "
 msgstr	"habergrup(lar)a gönder [%s]> "
 
-#: src/lang.c:577
+#: src/lang.c:574
 #, fuzzy
 msgid	"-- post processing started --"
 msgstr	"-- gönderme iþlemi baþlatýldý --"
 
-#: src/lang.c:578
+#: src/lang.c:575
 #, fuzzy
 msgid	"-- post processing completed --"
 msgstr	"-- gönderme iþlemi tamamlandý --"
 
-#: src/lang.c:579
+#: src/lang.c:576
 #, fuzzy, c-format
 msgid	"Post subject [%s]> "
 msgstr	"Konuyu gönder (%s)> "
 
-#: src/lang.c:580
+#: src/lang.c:577
 #, fuzzy
 msgid	"# Summary of mailed/posted messages viewable by 'W' command from within tin.\n"
 msgstr	"# 'W' komutundan görünebilir postalanmýþ/gönderilmiþ iletilerin özeti.\n"
 
-#: src/lang.c:581
+#: src/lang.c:578
 #, fuzzy
 msgid	"Posting article..."
 msgstr	"Makale gönderiliyor..."
 
-#: src/lang.c:582
-#, fuzzy
+#: src/lang.c:579
+#, fuzzy, c-format
 msgid	"Post postponed articles [%%s]? (%s/%s/%s/%s/%s): "
 msgstr	"Ertelenmiþ makaleleri gönder [%%s]? (%s/%s/%s/%s/%s): "
 
-#: src/lang.c:583
+#: src/lang.c:580
 #, fuzzy, c-format
 msgid	"Hot %s"
 msgstr	"Hot %s"
 
-#: src/lang.c:584
+#: src/lang.c:581
 #, fuzzy, c-format
 msgid	"Tagged %s"
 msgstr	"%s imlenmiþ"
 
-#: src/lang.c:585
+#: src/lang.c:582
 #, fuzzy, c-format
 msgid	"Untagged %s"
 msgstr	"%s imlenmemiþ"
 
-#: src/lang.c:586
+#: src/lang.c:583
 #, fuzzy
 msgid	"Processing mail messages marked for deletion."
 msgstr	"Silinmek için iþaretlenen iletilerin iþletilmesi."
 
-#: src/lang.c:587
+#: src/lang.c:584
 #, fuzzy
 msgid	"Processing saved articles marked for deletion."
 msgstr	"Silinmek için iþaretlenen kaydedilmiþ makalelerin iþletilmesi."
 
-#: src/lang.c:588
+#: src/lang.c:585
 #, fuzzy, c-format
 msgid	"Accept Followup-To? %s=post, %s=ignore, %s=quit: "
 msgstr	"Takip edilsin? %s=gönder, %s=yoksay, %s=terk et: "
 
-#: src/lang.c:589
+#: src/lang.c:586
 #, fuzzy
 msgid	"Article unchanged, abort mailing?"
 msgstr	"Makale deðiþtirilmesini, posta iptal edilsin mi?"
 
-#: src/lang.c:590
+#: src/lang.c:587
 #, fuzzy, c-format
 msgid	"Do you want to see postponed articles (%d)?"
 msgstr	"Ertelediðiniz makaleleri görmek ister misiniz (%d)?"
 
-#: src/lang.c:592
+#: src/lang.c:589
 #, fuzzy
 msgid	"Add quick kill filter?"
 msgstr	"Öldürücü hýzlý süzü eklensin mi?"
 
-#: src/lang.c:593
+#: src/lang.c:590
 #, fuzzy
 msgid	"Add quick selection filter?"
 msgstr	"Hýzlý seçenek süzü eklensin mi?"
 
-#: src/lang.c:594
+#: src/lang.c:591
 #, fuzzy
 msgid	"Do you really want to quit?"
 msgstr	"Terketmek istediðinizden emin misiniz?"
 
-#: src/lang.c:595
-#, fuzzy
+#: src/lang.c:592
+#, fuzzy, c-format
 msgid	"%s=edit cancel message, %s=quit, %s=delete (cancel) [%%s]: "
 msgstr	"%s=düzenle iletiyi iptal et, %s=terk et, %s=sil (iptal) [%%s]: "
 
-#: src/lang.c:596
+#: src/lang.c:593
 #, fuzzy
 msgid	"You have tagged articles in this group - quit anyway?"
 msgstr	"Bu gruptaki makaleleri imlediniz-yine de terk edilsin mi?"
 
-#: src/lang.c:597
+#: src/lang.c:594
 #, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=postpone: "
 msgstr	"%s=terk et, %s=düzenle, %s=ertele: "
 
-#: src/lang.c:598
+#: src/lang.c:595
 #, fuzzy, c-format
 msgid	"%s=quit %s=edit %s=save kill description: "
 msgstr	"%s=terk et %s=düzenle %s=kaydet tanýmý öldür: "
 
-#: src/lang.c:599
+#: src/lang.c:596
 #, fuzzy, c-format
 msgid	"%s=quit %s=edit %s=save select description: "
 msgstr	"%s=terk et %s=düzenle %s=kaydet tanýmý seç: "
 
-#: src/lang.c:600
+#: src/lang.c:597
 #, fuzzy
 msgid	"Do you really want to quit without saving your configuration?"
 msgstr	"Yapýlandýrmalarý kaydetmeden terk etmek istediðinizden emin misiniz?"
 
-#: src/lang.c:603
+#: src/lang.c:600
 #, fuzzy
 msgid	"Invalid range - valid are '0-9.$' eg. 1-$"
 msgstr	"Geçersiz aralýklar- '0-9.$' eg. 1-$ geçerlidir"
 
-#: src/lang.c:604
+#: src/lang.c:601
 #, fuzzy
 msgid	"Do you want to abort this operation?"
 msgstr	"Ýþlem durdurulsun mu?"
 
-#: src/lang.c:605
+#: src/lang.c:602
 #, fuzzy
 msgid	"Do you want to exit tin immediately?"
 msgstr	"tin'den hemen çýkmak istediðinizden emin misisniz?"
 
-#: src/lang.c:606
+#: src/lang.c:603
 #, fuzzy
 msgid	"Read response> "
 msgstr	"Yanýtý oku> "
 
-#: src/lang.c:607
+#: src/lang.c:604
 #, fuzzy
 msgid	"Reading ('q' to quit)..."
 msgstr	"('q' iptal) okunuyor..."
 
-#: src/lang.c:608
+#: src/lang.c:605
 #, fuzzy, c-format
 msgid	"Reading %sarticles..."
 msgstr	"Makaleler %sokunuyor..."
 
-#: src/lang.c:609
+#: src/lang.c:606
 #, fuzzy, c-format
 msgid	"Reading %sattributes file...\n"
 msgstr	"%sÖznitelik dosyasý okunuyor...\n"
 
-#: src/lang.c:610
+#: src/lang.c:607
 #, fuzzy, c-format
 msgid	"Reading %sconfig file...\n"
 msgstr	"%sYapýlandýrma dosyasý okunuyor\n"
 
-#: src/lang.c:611
+#: src/lang.c:608
 #, fuzzy
 msgid	"Reading filter file...\n"
 msgstr	"Süz dosyasý okunuyor...\n"
 
-#: src/lang.c:612
+#: src/lang.c:609
 #, fuzzy, c-format
 msgid	"Reading %s groups..."
 msgstr	"%s gruplar okunuyor..."
 
-#: src/lang.c:613
+#: src/lang.c:610
 #, fuzzy
 msgid	"Reading input history file...\n"
 msgstr	"Giriþ tarihçe dosyasý okunuyor...\n"
 
-#: src/lang.c:614
+#: src/lang.c:611
 #, fuzzy
 msgid	"Reading keymap file...\n"
 msgstr	"anahtarharita dosyasý okunuyor...\n"
 
-#: src/lang.c:615
+#: src/lang.c:612
 #, fuzzy
 msgid	"Reading groups from active file... "
 msgstr	"Gruplar yürürlükteki dosyadan okunuyor... "
 
-#: src/lang.c:616
+#: src/lang.c:613
 #, fuzzy
 msgid	"Reading groups from newsrc file... "
 msgstr	"Gruplar haberkaynak dosyasýndan okunuyor... "
 
-#: src/lang.c:617
+#: src/lang.c:614
 #, fuzzy
 msgid	"Reading newsgroups file... "
 msgstr	"Habergruplar dosyasý okunuyor... "
 
-#: src/lang.c:618
+#: src/lang.c:615
 #, fuzzy
 msgid	"Reading newsrc file..."
 msgstr	"Haberkaynak dosyasý okunuyor..."
 
-#: src/lang.c:620
+#: src/lang.c:617
 #, c-format
 msgid	"(%d:%02d remaining)"
 msgstr	""
 
-#: src/lang.c:622
+#: src/lang.c:619
 #, fuzzy, c-format
 msgid	"Bogus group %s removed."
 msgstr	"Bogus grubu %s kaldýrýldý."
 
-#: src/lang.c:623
+#: src/lang.c:620
 #, fuzzy, c-format
 msgid	"Error: rename %s to %s"
 msgstr	"Hata:%s'den %s'ye yeniden adlandýr"
 
-#: src/lang.c:624
+#: src/lang.c:621
 #, fuzzy
 msgid	"Reply to author..."
 msgstr	"Yetkiliye yanýt gönderiyor..."
 
-#: src/lang.c:625
+#: src/lang.c:622
 #, fuzzy
 msgid	"Repost"
 msgstr	"Yeniden gönder"
 
-#: src/lang.c:626
+#: src/lang.c:623
 #, fuzzy
 msgid	"Reposting article..."
 msgstr	"Makale yeniden gönderiliyor..."
 
-#: src/lang.c:627
+#: src/lang.c:624
 #, fuzzy, c-format
 msgid	"Repost article(s) to group(s) [%s]> "
 msgstr	"Makale(ler)i grup(lar)a gönder (%s)> "
 
-#: src/lang.c:628
+#: src/lang.c:625
 #, fuzzy
 msgid	"Reset newsrc?"
 msgstr	"Haberkaynak sýfýrlansýn mý?"
 
-#: src/lang.c:629
+#: src/lang.c:626
 #, fuzzy
 msgid	"Responses have been directed to the following newsgroups"
 msgstr	"Yanýtlar sonraki habergruplara yönlendirildi"
 
-#: src/lang.c:630
+#: src/lang.c:627
 #, fuzzy, c-format
 msgid	"Responses have been directed to poster. %s=mail, %s=post, %s=quit: "
 msgstr	"Yanýtlar göndericiye yönlendirildi. %s=postala, %s=gönder, %s=iptal: "
 
-#: src/lang.c:631
+#: src/lang.c:628
 #, fuzzy, c-format
 msgid	"RespNo %4d of %4d"
 msgstr	"YanýtNo %4d of %4d"
 
-#: src/lang.c:632
+#: src/lang.c:629
 #, fuzzy
 msgid	"Press <RETURN> to continue..."
 msgstr	"Devam etmek için <DÖNÜÞ> bas..."
 
-#: src/lang.c:634
+#: src/lang.c:631
 #, c-format
 msgid	"Select From    [%s] (y/n): "
 msgstr	""
 
-#: src/lang.c:635
+#: src/lang.c:632
 #, fuzzy
 msgid	"Select Lines: (</>num): "
 msgstr	"Satýrlarý seç: (</>num): "
 
-#: src/lang.c:636
+#: src/lang.c:633
 #, fuzzy
 msgid	"Auto-select Article Menu"
 msgstr	"Otomatik Seçme Makale Menüsü"
 
-#: src/lang.c:637
+#: src/lang.c:634
 #, fuzzy, c-format
 msgid	"Select Msg-Id  [%s] (f/l/o/n): "
 msgstr	"Ýleti-kimliði seçiniz [%s] (f/l/o/n): "
 
-#: src/lang.c:638
+#: src/lang.c:635
 #, fuzzy
 msgid	"Select pattern scope: "
 msgstr	"Örüntü alanýný seç: "
 
-#: src/lang.c:639
+#: src/lang.c:636
 #, fuzzy, c-format
 msgid	"Select Subject [%s] (y/n): "
 msgstr	"Konuyu seç [%s] (y/n): "
 
-#: src/lang.c:640
+#: src/lang.c:637
 #, fuzzy
 msgid	"Select text pattern : "
 msgstr	"Alan metnini seç : "
 
-#: src/lang.c:641
+#: src/lang.c:638
 #, fuzzy
 msgid	"Select time in days   : "
 msgstr	"Günlük olarak zamaný seç: "
 
-#: src/lang.c:642
+#: src/lang.c:639
 #, fuzzy, c-format
 msgid	"# %s server configuration file\n"
 	"# This file was automatically saved by %s %s %s (\"%s\")\n"
@@ -3030,246 +3048,246 @@ msgstr	"# %ssunucu yapýlandýrma dosyasý\
 	"# terk ettiðinde yeniden yazýlacak %s.\n"
 	"# Ne yapmak gerektiðinizi bilmiyorsanýz lütfen deðiþtirmeyiniz.\n"
 
-#: src/lang.c:648
+#: src/lang.c:645
 #, fuzzy
 msgid	"Showing unread groups only"
 msgstr	"Sadece okunmamýþ gruplar görünüyor"
 
-#: src/lang.c:649
+#: src/lang.c:646
 #, fuzzy
 msgid	"Subject: line (ignore case)   "
 msgstr	"Konu: satýr (büyük küçük harf durumunu yoksay)"
 
-#: src/lang.c:650
+#: src/lang.c:647
 #, fuzzy
 msgid	"Subject: line (case sensitive)"
 msgstr	"Konu: satýr (büyük-küçük duyarlý)"
 
-#: src/lang.c:651
+#: src/lang.c:648
 #, fuzzy
 msgid	"Save"
 msgstr	"Kaydet"
 
-#: src/lang.c:652
+#: src/lang.c:649
 #, fuzzy, c-format
 msgid	"Save '%s' (%s/%s)?"
 msgstr	"Kaydedilsin mi '%s' (%s/%s)?"
 
-#: src/lang.c:653
+#: src/lang.c:650
 #, fuzzy
 msgid	"Save configuration before continuing?"
 msgstr	"Devam etmeden düzenlemeleri kaydet?"
 
-#: src/lang.c:654
+#: src/lang.c:651
 #, fuzzy
 msgid	"Save filename> "
 msgstr	"Dosyaadý kaydet> "
 
-#: src/lang.c:655
+#: src/lang.c:652
 #, fuzzy
 msgid	"Saved"
 msgstr	"Kaydedildi"
 
-#: src/lang.c:656
+#: src/lang.c:653
 #, fuzzy, c-format
 msgid	"%4d unread (%4d hot) %s in %s\n"
 msgstr	"%4d okunmamýþ (%4d hot) %s in %s\n"
 
-#: src/lang.c:657
+#: src/lang.c:654
 #, fuzzy, c-format
 msgid	"Saved %s...\n"
 msgstr	"Kaydedildi %s...\n"
 
-#: src/lang.c:658
+#: src/lang.c:655
 #, fuzzy
 msgid	"Nothing was saved"
 msgstr	"Hiçbirþey kaydedilmedi"
 
-#: src/lang.c:659
+#: src/lang.c:656
 #, fuzzy, c-format
 msgid	"\n"
 	"%s %d %s from %d %s\n"
 msgstr	"\n"
 	"%s %d %s 'dan %d %s\n"
 
-#: src/lang.c:660
+#: src/lang.c:657
 #, fuzzy, c-format
 msgid	"-- %s saved to %s%s --"
 msgstr	"-- %s kaydedildi %s%s --"
 
-#: src/lang.c:661
+#: src/lang.c:658
 #, fuzzy, c-format
 msgid	"-- %s saved to %s - %s --"
 msgstr	"-- %s kaydedildi %s - %s --"
 
-#: src/lang.c:662
+#: src/lang.c:659
 #, fuzzy
 msgid	"Saving..."
 msgstr	"Kaydediliyor..."
 
-#: src/lang.c:663
+#: src/lang.c:660
 #, fuzzy, c-format
 msgid	"%s: Screen initialization failed"
 msgstr	"%s: Ekran baþlatma baþarýsýz"
 
-#: src/lang.c:665
+#: src/lang.c:662
 #, fuzzy, c-format
 msgid	"%s: screen is too small\n"
 msgstr	"%s: ekran çok küçük\n"
 
-#: src/lang.c:667
+#: src/lang.c:664
 #, fuzzy, c-format
 msgid	"screen is too small, %s is exiting\n"
 msgstr	"ekran çok küçük, %s çýkýyor\n"
 
-#: src/lang.c:668
+#: src/lang.c:665
 #, fuzzy, c-format
 msgid	"Search backwards [%s]> "
 msgstr	"Geri ara [%s]> "
 
-#: src/lang.c:669
+#: src/lang.c:666
 #, fuzzy, c-format
 msgid	"Search body [%s]> "
 msgstr	"Gövdeyi ara [%s]> "
 
-#: src/lang.c:670
+#: src/lang.c:667
 #, fuzzy, c-format
 msgid	"Search forwards [%s]> "
 msgstr	"Ýleri ara [%s]> "
 
-#: src/lang.c:671
+#: src/lang.c:668
 #, fuzzy
 msgid	"Searching..."
 msgstr	"Arýyor..."
 
-#: src/lang.c:672
+#: src/lang.c:669
 #, fuzzy, c-format
 msgid	"Searching article %d of %d ('q' to abort)..."
 msgstr	"Makale aranýyor %d of %d ('q' durdur)..."
 
-#: src/lang.c:673
+#: src/lang.c:670
 #, fuzzy
 msgid	"Select article> "
 msgstr	"Makale seç> "
 
-#: src/lang.c:674
+#: src/lang.c:671
 #, fuzzy
 msgid	"Select option number before text or use arrow keys and <CR>. 'q' to quit."
 msgstr	"Metin ve ok tuþu kullanmadan seçenek ve <CR>düðmelerini basýnýz. terk etmek "
 	"için 'q'."
 
-#: src/lang.c:675
+#: src/lang.c:672
 #, fuzzy
 msgid	"Select group> "
 msgstr	"Grup seç> "
 
-#: src/lang.c:676
+#: src/lang.c:673
 #, fuzzy, c-format
 msgid	"Enter selection pattern [%s]> "
 msgstr	"Seçme örüntüsünü girin [%s]> "
 
-#: src/lang.c:677
+#: src/lang.c:674
 #, fuzzy
 msgid	"Select thread > "
 msgstr	"En küçük yürütme birimlerini seç > "
 
-#: src/lang.c:678
+#: src/lang.c:675
 #, fuzzy, c-format
 msgid	"%s %s %s (\"%s\") [%s]: send a DETAILED bug report to %s\n"
 msgstr	"%s %s %s (\"%s\") [%s]: DETAYLI hata raporu gönder %s\n"
 
-#: src/lang.c:679
+#: src/lang.c:676
 #, fuzzy
 msgid	"servers active-file"
 msgstr	"Sunucular etkindosyasý"
 
-#: src/lang.c:680
+#: src/lang.c:677
 #, fuzzy
 msgid	"Cannot move into new newsgroups. Subscribe first..."
 msgstr	"Habergruplara giriþ yapýlamýyor. Önce abone ol..."
 
-#: src/lang.c:681
+#: src/lang.c:678
 #, fuzzy
 msgid	"<SPACE>"
 msgstr	"<ARALIK>"
 
-#: src/lang.c:682
+#: src/lang.c:679
 #, fuzzy, c-format
 msgid	"Starting: (%s)"
 msgstr	"Baþlatma: (%s)"
 
-#: src/lang.c:683
+#: src/lang.c:680
 #, fuzzy, c-format
 msgid	"List Thread (%d of %d)"
 msgstr	"En küçük yürütme birimlerini listele (%d of %d)"
 
-#: src/lang.c:684
+#: src/lang.c:681
 #, fuzzy, c-format
 msgid	"Thread (%.*s)"
 msgstr	"En küçük yürütme birimi (%.*s)"
 
-#: src/lang.c:685
+#: src/lang.c:682
 #, fuzzy
 msgid	"Enter wildcard subscribe pattern> "
 msgstr	"Joker abone alanýna giriniz> "
 
-#: src/lang.c:686
+#: src/lang.c:683
 #, fuzzy, c-format
 msgid	"subscribed to %d groups"
 msgstr	"%d gruplara abone olundu"
 
-#: src/lang.c:687
+#: src/lang.c:684
 #, fuzzy, c-format
 msgid	"Subscribed to %s"
 msgstr	"Abone olundu %s"
 
-#: src/lang.c:688
+#: src/lang.c:685
 #, fuzzy
 msgid	"Subscribing... "
 msgstr	"Abone olunuyor... "
 
-#: src/lang.c:689
-#, fuzzy
+#: src/lang.c:686
+#, fuzzy, c-format
 msgid	"Repost or supersede article(s) [%%s]? (%s/%s/%s): "
 msgstr	"Makale(ler)i yeniden gönder yada deðiþtir (s) [%%s]? (%s/%s/%s): "
 
-#: src/lang.c:690
+#: src/lang.c:687
 #, fuzzy, c-format
 msgid	"Supersede article(s) to group(s) [%s]> "
 msgstr	"Makale(ler)i Grup(lar)a yerini al [%s]> "
 
-#: src/lang.c:691
+#: src/lang.c:688
 #, fuzzy
 msgid	"Superseding article ..."
 msgstr	"Makaleyi deðiþtiriyor..."
 
-#: src/lang.c:692
+#: src/lang.c:689
 #, fuzzy, c-format
 msgid	"\n"
 	"Stopped. Type 'fg' to restart %s\n"
 msgstr	"\n"
 	"Durduruldu. Yeniden baþlatmak için 'fg' yaz %s\n"
 
-#: src/lang.c:694
+#: src/lang.c:691
 #, fuzzy, c-format
 msgid	"%d days"
 msgstr	"%d günler"
 
-#: src/lang.c:695
+#: src/lang.c:692
 #, fuzzy
 msgid	"<TAB>"
 msgstr	"<SEKME>"
 
-#: src/lang.c:696
+#: src/lang.c:693
 msgid	"TeX "
 msgstr	""
 
-#: src/lang.c:697
+#: src/lang.c:694
 #, fuzzy
 msgid	"# Default action/prompt strings\n"
 msgstr	"# Varsayýlan iþlem/komut dizgileri\n"
 
-#: src/lang.c:698
+#: src/lang.c:695
 #, fuzzy
 msgid	"# Defaults for quick (1 key) kill & auto-selection filters\n"
 	"# header=NUM  0,1=Subject: 2,3=From: 4=Message-ID: & full References: line\n"
@@ -3286,305 +3304,305 @@ msgstr	"# Varsayýlanlarý (1 tuþ) kill & 
 	"# case=ON/OFF    ON=filter case sensitive OFF=ignore case\n"
 	"# expire=ON/OFF  ON=limit to default_filter_days OFF=don't ever expire\n"
 
-#: src/lang.c:711
+#: src/lang.c:708
 #, fuzzy
 msgid	"# If ON use print current subject or newsgroup description in the last line\n"
 msgstr	"# ON durumdaysa mevcut konu yada son satýrdaki habergrup tanýmý için yazýcýyý "
 	"kullanýnýz\n"
 
-#: src/lang.c:712
+#: src/lang.c:709
 #, fuzzy
 msgid	"# Host & time info used for detecting new groups (don't touch)\n"
 msgstr	"# Yeni gruplarý algýlamak için ana sunucu& zaman bilgileri kullanýnýz "
 	"(dokunmayýnýz)\n"
 
-#: src/lang.c:713
+#: src/lang.c:710
 #, fuzzy
 msgid	"There is no news\n"
 msgstr	"Hiçbir haber yok\n"
 
-#: src/lang.c:714
+#: src/lang.c:711
 #, fuzzy
 msgid	"Thread"
 msgstr	"En küçük yürütme birimi"
 
-#: src/lang.c:715
+#: src/lang.c:712
 #, fuzzy
 msgid	"Thread Level Commands"
 msgstr	"En Küçük Yürütme Birim Komut Düzeyi"
 
-#: src/lang.c:716
+#: src/lang.c:713
 #, fuzzy
 msgid	"Thread deselected"
 msgstr	"En küçük yürütme birimin seçimi iptal edildi"
 
-#: src/lang.c:717
+#: src/lang.c:714
 #, fuzzy
 msgid	"Thread selected"
 msgstr	"En küçük yürütme birimi seçildi"
 
-#: src/lang.c:719
+#: src/lang.c:716
 #, fuzzy
 msgid	"threads"
 msgstr	"en küçük yürütme birimleri"
 
-#: src/lang.c:721
+#: src/lang.c:718
 #, fuzzy
 msgid	"Thread range"
 msgstr	"en küçük yürütme birimi aralýðý"
 
-#: src/lang.c:722
+#: src/lang.c:719
 #, fuzzy
 msgid	"thread"
 msgstr	"en küçük yürütme birimi"
 
-#: src/lang.c:723
+#: src/lang.c:720
 #, fuzzy, c-format
 msgid	"Thread %4s of %4s"
 msgstr	"En küçük yürütme birimi %4s of %4s"
 
-#: src/lang.c:724
+#: src/lang.c:721
 #, fuzzy
 msgid	"Threading articles..."
 msgstr	"Makaleler baðlanýyor..."
 
-#: src/lang.c:725
+#: src/lang.c:722
 #, fuzzy, c-format
 msgid	"Toggled word highlighting %s"
 msgstr	"Geçiþ kelime belirtiliyor %s"
 
-#: src/lang.c:726
+#: src/lang.c:723
 #, fuzzy
 msgid	"Toggled rot13 encoding"
 msgstr	"Geçiþ rot13 kodlanýyor"
 
-#: src/lang.c:727
+#: src/lang.c:724
 #, fuzzy, c-format
 msgid	"Toggled german TeX encoding %s"
 msgstr	"Geçiþ almanca TeX kodlanýyor %s"
 
-#: src/lang.c:728
+#: src/lang.c:725
 #, fuzzy, c-format
 msgid	"Toggled tab-width to %d"
 msgstr	"Geçiþ sekme geniþliði %d"
 
-#: src/lang.c:729
+#: src/lang.c:726
 #, fuzzy, c-format
 msgid	"%d Trying to dotlock %s"
 msgstr	"%d kilitlemeye deniyor %s"
 
-#: src/lang.c:730
+#: src/lang.c:727
 #, fuzzy, c-format
 msgid	"%d Trying to lock %s"
 msgstr	"%d kilitlemeye çalýþýyor %s"
 
-#: src/lang.c:731
+#: src/lang.c:728
 #, fuzzy
 msgid	"           h=help\n"
 msgstr	"         h=yardým\n"
 
-#: src/lang.c:733
+#: src/lang.c:730
 #, fuzzy
 msgid	"Unlimited"
 msgstr	"Sýnýrsýz"
 
-#: src/lang.c:734
+#: src/lang.c:731
 #, fuzzy
 msgid	"Enter wildcard unsubscribe pattern> "
 msgstr	"Abone iptal joker alanýna giriniz> "
 
-#: src/lang.c:735
+#: src/lang.c:732
 #, fuzzy, c-format
 msgid	"Error decoding %s : %s"
 msgstr	"Hata kod çözülmesi %s: %s"
 
-#: src/lang.c:736
+#: src/lang.c:733
 #, fuzzy
 msgid	"No end."
 msgstr	"Sonu yok."
 
-#: src/lang.c:737
+#: src/lang.c:734
 #, fuzzy, c-format
 msgid	"%s successfully decoded."
 msgstr	"%s kod baþarýyla çözüldü."
 
-#: src/lang.c:738
+#: src/lang.c:735
 #, fuzzy, c-format
 msgid	"%*s[-- %s/%s, %suuencoded file, %d lines, name: %s --]\n"
 	"\n"
 msgstr	"%*s[-- %s/%s, %s metinsele kodlama dosyasý, %d satýr, ad: %s --]\n"
 	"\n"
 
-#: src/lang.c:739
+#: src/lang.c:736
 #, fuzzy
 msgid	"unread "
 msgstr	"okunmamýþ "
 
-#: src/lang.c:740
+#: src/lang.c:737
 #, fuzzy, c-format
 msgid	"unsubscribed from %d groups"
 msgstr	"%d gruptan abonelik iptal edildi"
 
-#: src/lang.c:741
+#: src/lang.c:738
 #, fuzzy, c-format
 msgid	"Unsubscribed from %s"
 msgstr	"abonelik iptal edildi %s"
 
-#: src/lang.c:742
+#: src/lang.c:739
 #, fuzzy
 msgid	"Unsubscribing... "
 msgstr	"Abonelik iptal oluyor... "
 
-#: src/lang.c:743
+#: src/lang.c:740
 #, fuzzy
 msgid	"Unthreading articles..."
 msgstr	"Makalelerin baðlantýsý sonlanýyor..."
 
-#: src/lang.c:744
+#: src/lang.c:741
 #, fuzzy
 msgid	"Updated"
 msgstr	"Güncelendi"
 
-#: src/lang.c:745
+#: src/lang.c:742
 #, fuzzy
 msgid	"Updating"
 msgstr	"Güncellenme"
 
-#: src/lang.c:746
+#: src/lang.c:743
 #, fuzzy, c-format
 msgid	"Opening %s\n"
 msgstr	"Açýlma %s\n"
 
-#: src/lang.c:747
+#: src/lang.c:744
 #, fuzzy
 msgid	"No more URL's in this article"
 msgstr	"Makalede Birörnek Kaynak Bulucu yok"
 
-#: src/lang.c:748
+#: src/lang.c:745
 #, fuzzy
 msgid	"Use MIME display program for this message?"
 msgstr	"Bu ileti için MIME(Çok Amaçlý Internet Posta Uzantýlarý) ekran programý "
 	"kullan?"
 
-#: src/lang.c:749
+#: src/lang.c:746
 #, fuzzy
 msgid	"  -c       mark all news as read in subscribed newsgroups (batch mode)"
 msgstr	"  -c       abone edilmiþ habergruplara bütün haberleri okunmuþ olarak "
 	"iþaretleyiniz (toplu mod)"
 
-#: src/lang.c:750
+#: src/lang.c:747
 #, fuzzy
 msgid	"  -Z       return status indicating if any unread news (batch mode)"
 msgstr	"  -Z       Okunmamýþ haber varsa geri statüsüne gelir (toplu mod)"
 
-#: src/lang.c:751
+#: src/lang.c:748
 #, fuzzy
 msgid	"  -q       don't check for new newsgroups"
 msgstr	"  -q       yeni habergruplarý için deneme"
 
-#: src/lang.c:752
+#: src/lang.c:749
 #, fuzzy
 msgid	"  -X       don't save any files on quit"
 msgstr	"  -X       çýkýþta hiçbir dosya kaydetme"
 
-#: src/lang.c:753
+#: src/lang.c:750
 #, fuzzy
 msgid	"  -d       don't show newsgroup descriptions"
 msgstr	"  -d       habergrubu tanýmlarý gösterme"
 
-#: src/lang.c:754
+#: src/lang.c:751
 #, fuzzy
 msgid	"  -G limit get only limit articles/group"
 msgstr	"  -G limit sadece makale/grup sýnýrý elde et"
 
-#: src/lang.c:755
+#: src/lang.c:752
 #, fuzzy, c-format
 msgid	"  -H       help information about %s"
 msgstr	"  -H       yardým bilgisi %s"
 
-#: src/lang.c:756
+#: src/lang.c:753
 #, fuzzy
 msgid	"  -h       this help message"
 msgstr	"  -h       ileti yardýmý"
 
-#: src/lang.c:757
+#: src/lang.c:754
 #, fuzzy, c-format
 msgid	"  -I dir   news index file directory [default=%s]"
 msgstr	"  -I dir   haber dizin dosyasý [varsayýlant=%s]"
 
-#: src/lang.c:758
+#: src/lang.c:755
 #, fuzzy
 msgid	"  -u       update index files (batch mode)"
 msgstr	"  -u       guncelleme dizin dosyasý (toplu modu)"
 
-#: src/lang.c:759
+#: src/lang.c:756
 #, fuzzy, c-format
 msgid	"  -m dir   mailbox directory [default=%s]"
 msgstr	"  -m dir   posta kutusu dizini [varsayýlan=%s]"
 
-#: src/lang.c:760
+#: src/lang.c:757
 #, fuzzy, c-format
 msgid	"\n"
 	"Mail bug reports/comments to %s"
 msgstr	"\n"
 	"posta hata raporu/açýklama %s"
 
-#: src/lang.c:761
+#: src/lang.c:758
 #, fuzzy
 msgid	"  -N       mail new news to your posts (batch mode)"
 msgstr	"  -N       Gönderilenlere yeni haber gönder (toplu mod)"
 
-#: src/lang.c:762
+#: src/lang.c:759
 #, fuzzy
 msgid	"  -M user  mail new news to specified user (batch mode)"
 msgstr	"  -M kulanýcýsý  özel kulanýcýya yeni haber göder (toplu mod)"
 
-#: src/lang.c:763
+#: src/lang.c:760
 #, fuzzy, c-format
 msgid	"  -f file  subscribed to newsgroups file [default=%s]"
 msgstr	"  -f dosyasý  habergruplar dosyasýna abone olundu (varsayýlan=%s)"
 
-#: src/lang.c:764
+#: src/lang.c:761
 #, fuzzy
 msgid	"  -x       no posting mode"
 msgstr	"  -x       iþlem modu yok"
 
-#: src/lang.c:765
+#: src/lang.c:762
 #, fuzzy
 msgid	"  -w       post an article and exit"
 msgstr	"  -w       makale gönder ve çýk"
 
-#: src/lang.c:766
+#: src/lang.c:763
 #, fuzzy
 msgid	"  -o       post all postponed articles and exit"
 msgstr	"  -o       ertelenmiþ bütün makaleleri gönder ve çýk"
 
-#: src/lang.c:767
+#: src/lang.c:764
 #, fuzzy
 msgid	"  -r       read news remotely from default NNTP server"
 msgstr	"  -r       varsayýlan NTTP sunucusundan haberleri uzaktan oku"
 
-#: src/lang.c:768
+#: src/lang.c:765
 #, fuzzy
 msgid	"  -R       read news saved by -S option"
 msgstr	"  -R       -S seçeneði basarak kaydedilen haberleri oku"
 
-#: src/lang.c:769
+#: src/lang.c:766
 #, fuzzy, c-format
 msgid	"  -s dir   save news directory [default=%s]"
 msgstr	"  -s dir   haber dizinini kaydet (varsayýlan=%s)"
 
-#: src/lang.c:770
+#: src/lang.c:767
 #, fuzzy
 msgid	"  -S       save new news for later reading (batch mode)"
 msgstr	"  -S       daha sonra okumak üzere yeni haberleri kaydet (toplu mod)"
 
-#: src/lang.c:771
+#: src/lang.c:768
 #, fuzzy
 msgid	"  -z       start if any unread news"
 msgstr	"  -z       okunmamýþ haber varsa baþla"
 
-#: src/lang.c:772
+#: src/lang.c:769
 #, fuzzy, c-format
 msgid	"A Usenet reader.\n"
 	"\n"
@@ -3593,39 +3611,39 @@ msgstr	"Usenet okuyucusu.\n"
 	"\n"
 	"Kullaným: %s [seçenekler] [habergrubu[,...]]"
 
-#: src/lang.c:773
+#: src/lang.c:770
 #, fuzzy
 msgid	"  -v       verbose output for batch mode options"
 msgstr	"  -v       toplu kip seçenekleri için gereksiz çýkýþ"
 
-#: src/lang.c:774
+#: src/lang.c:771
 #, fuzzy
 msgid	"  -V       print version & date information"
 msgstr	"  -V       Sürüm & tarih bilgilerini yazdýr"
 
-#: src/lang.c:775
+#: src/lang.c:772
 #, fuzzy, c-format
 msgid	"%s only useful without batch mode operations\n"
 msgstr	"%s sadece toplu kip seçenekleri yoksa kullanýþlý\n"
 
-#: src/lang.c:776
+#: src/lang.c:773
 #, fuzzy, c-format
 msgid	"%s only useful for batch mode operations\n"
 msgstr	"%s sadece toplu kip seçenekleri varsa kullanýþlý\n"
 
-#: src/lang.c:778
+#: src/lang.c:775
 #, fuzzy, c-format
 msgid	"\n"
 	"%s%d out of range (0 - %d). Reset to 0"
 msgstr	"\n"
 	"%s%d erimin dýþýnda (0 - %d), Sýfýrla"
 
-#: src/lang.c:779
+#: src/lang.c:776
 #, fuzzy, c-format
 msgid	"View '%s' (%s/%s)?"
 msgstr	"Göster '%s' (%s/%s)?"
 
-#: src/lang.c:781
+#: src/lang.c:778
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: posting exceeds %d columns. Line %d is the first long one:\n"
@@ -3634,28 +3652,28 @@ msgstr	"\n"
 	"Uyarý: gönderme %d sütunlarýný geçiyor. %d en uzun ilk satýr:\n"
 	"%-100s\n"
 
-#: src/lang.c:782
+#: src/lang.c:779
 #, fuzzy
 msgid	"\n"
 	"Warning: article unchanged after editing\n"
 msgstr	"\n"
 	"Uyarý: makale düzenlendikten sonra deðiþtirildi\n"
 
-#: src/lang.c:783
+#: src/lang.c:780
 #, fuzzy
 msgid	"\n"
 	"Warning: \"Subject:\" contains only whitespaces.\n"
 msgstr	"\n"
 	"Uyarý: \"Konu:\" sadece beyazboþluklar var.\n"
 
-#: src/lang.c:784
+#: src/lang.c:781
 #, fuzzy
 msgid	"\n"
 	"Warning: \"Subject:\" begins with \"Re: \" but there are no \"References:\".\n"
 msgstr	"\n"
 	"Uyarý: \"Konu:\" ,  \"Re: \" ile baþlar ama \"Referanslar:\" yok.\n"
 
-#: src/lang.c:786
+#: src/lang.c:783
 #, fuzzy
 msgid	"\n"
 	"Warning: Article has \"References:\" but \"Subject:\" does not begin\n"
@@ -3664,7 +3682,7 @@ msgstr	"\n"
 	"Uyarý: Makalede \"Referanslar:\"  var \"Konu:\"    \"Re: \" ile\n"
 	"       baþlmýyor ve \"(was:\" yok.\n"
 
-#: src/lang.c:789
+#: src/lang.c:786
 #, fuzzy
 msgid	"Read carefully!\n"
 	"\n"
@@ -3686,7 +3704,7 @@ msgstr	"Dikkatle oku!\n"
 	"Ýptal etmek üzere olduðunuz makale bu:\n"
 	"\n"
 
-#: src/lang.c:793
+#: src/lang.c:790
 #, fuzzy
 msgid	"\n"
 	"Warning: You are using a non-plain transfer encoding (such as base64 or\n"
@@ -3701,7 +3719,7 @@ msgstr	"\n"
 	"          inews programý tarafýndan bir imza iliþtirildiyse, uygun þekilde "
 	"kodlanamaz.\n"
 
-#: src/lang.c:798
+#: src/lang.c:795
 #, fuzzy, c-format
 msgid	"\n"
 	"\n"
@@ -3714,7 +3732,7 @@ msgstr	"\n"
 	"%s dosyanýzdaki bazi deðerler deðiþtirilmiþtir!\n"
 	"Oku WHATSNEW, vb...\n"
 
-#: src/lang.c:800
+#: src/lang.c:797
 #, fuzzy, c-format
 msgid	"\n"
 	"\n"
@@ -3725,7 +3743,7 @@ msgstr	"\n"
 	"Yeni bir sürümden tin %s 'e alçaltýyorsunuz!\n"
 	"%s dosyanýdaki bazý deðerler yoksayýlabiri, diðerleri deðiþtirilebilir!\n"
 
-#: src/lang.c:803
+#: src/lang.c:800
 #, fuzzy, c-format
 msgid	"Warning: tin wrote fewer groups to your\n"
 	"\t%s\n"
@@ -3739,19 +3757,19 @@ msgstr	"Uyarý: tin baþlangýçta okuduðund
 	"bu bir hata gösterir ve tini tekrar baþlatmadan %s'i\n"
 	"yedeklemeniz gerekmektedir!\n"
 
-#: src/lang.c:807
+#: src/lang.c:804
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: Found %d '-- \\n' lines, this may confuse some people.\n"
 msgstr	"\n"
 	"Uyarý: Bulundu %d '-- \\n' satýrlar, bazý insanlarýn kafasý karýþabilir.\n"
 
-#: src/lang.c:808
+#: src/lang.c:805
 #, fuzzy, c-format
 msgid	"Warning: Only %d out of %d articles were saved"
 msgstr	"Uyarý: Sadece %d 'de %d makale kaydedildi"
 
-#: src/lang.c:809
+#: src/lang.c:806
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: Your signature  is longer than %d lines.  Since signatures usually "
@@ -3764,55 +3782,55 @@ msgstr	"\n"
 	"         iþe yarar bilgi aktarmadýklarý için, olabildikleri kadar kýsa\n"
 	"        olmalýlar.\n"
 
-#: src/lang.c:813
+#: src/lang.c:810
 #, fuzzy, c-format
 msgid	"Warning: this mail address may contain a spamtrap. %s=continue, %s=abort? "
-msgstr	"Uyarý: bu posta adresinde mesaj yaðanaðý tuzaðý olabilir. %s=devam. "
-	"%s=durdur? "
+msgstr	"Uyarý: bu posta adresinde mesaj yaðanaðý tuzaðý olabilir. %s=devam. %"
+	"s=durdur? "
 
-#: src/lang.c:814
+#: src/lang.c:811
 #, fuzzy
 msgid	"\n"
 	"Warning: Signatures should start with '-- \\n' not with '--\\n'.\n"
 msgstr	"\n"
 	"Uyarý: Ýmzalar '-- \\n' ile baþlamalý '--\\n' ile deðil.\n"
 
-#: src/lang.c:815
+#: src/lang.c:812
 #, fuzzy
 msgid	"Writing attributes file..."
 msgstr	"Öznitelikler dosylasýný yazýyor..."
 
-#: src/lang.c:817
+#: src/lang.c:814
 #, fuzzy, c-format
 msgid	"%d Responses"
 msgstr	"%d Yanýtlar"
 
-#: src/lang.c:819
+#: src/lang.c:816
 #, fuzzy, c-format
 msgid	"Added %d %s"
 msgstr	"Eklendi %d %s"
 
-#: src/lang.c:820
+#: src/lang.c:817
 #, fuzzy
 msgid	"No unsubscribed groups to show"
 msgstr	"Gösterilecek abonelikten çýkmýþ küme yok"
 
-#: src/lang.c:821
+#: src/lang.c:818
 #, fuzzy
 msgid	"Showing subscribed to groups only"
 msgstr	"Sadece abone kümeleri göster"
 
-#: src/lang.c:822
+#: src/lang.c:819
 #, fuzzy
 msgid	"Yes "
 msgstr	"Evet"
 
-#: src/lang.c:823
+#: src/lang.c:820
 #, fuzzy
 msgid	"    You have mail\n"
 msgstr	"     Postanýz var\n"
 
-#: src/lang.c:828
+#: src/lang.c:825
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: Posting is in %s and contains characters which are not\n"
@@ -3831,17 +3849,12 @@ msgstr	"\n"
 	"    ayarlarýný M)enü seçeneði ile yollamak için daha uygun bir þekilde\n"
 	"    deðiþtirin.\n"
 
-#: src/lang.c:839
-#, fuzzy, c-format
-msgid	"Redefined key %s '%s' -> '%s'\n"
-msgstr	"Yeniden tanýmlanan tuþ %s '%s' -> '%s'\n"
-
-#: src/lang.c:840
+#: src/lang.c:836
 #, fuzzy
 msgid	"  -D       debug mode 1=NNTP 2=ALL"
 msgstr	"  -D       hata ayýklma kipi 1=NNTP 2=HEPSÝ"
 
-#: src/lang.c:844
+#: src/lang.c:840
 #, fuzzy
 msgid	"Read carefully!\n"
 	"\n"
@@ -3867,12 +3880,12 @@ msgstr	"Dikkatle okuyun!\n"
 	"Ýptal etmek üzere olduðunuz makale bu:\n"
 	"\n"
 
-#: src/lang.c:853
+#: src/lang.c:849
 #, fuzzy
 msgid	"toggle color"
 msgstr	"renk deðiþtir"
 
-#: src/lang.c:854
+#: src/lang.c:850
 msgid	"# Changing colors of several screen parts\n"
 	"# Possible values are:\n"
 	"#  -1 = default (white for foreground and black for background)\n"
@@ -3896,400 +3909,400 @@ msgid	"# Changing colors of several scre
 	"\n"
 msgstr	""
 
-#: src/lang.c:874
+#: src/lang.c:870
 #, fuzzy
 msgid	"  -a       toggle color flag"
 msgstr	"  -a       renk bayraðýný deðiþtir"
 
-#: src/lang.c:878
+#: src/lang.c:874
 #, fuzzy
 msgid	"\n"
 	"Error: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Hata: Birden fazla haber grubu için Takip-Et ayarlandý!\n"
 
-#: src/lang.c:879
+#: src/lang.c:875
 #, fuzzy, c-format
 msgid	"\n"
 	"Error: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Hata: %d haber gruubuna çapraz gönderiyor ve Takip-Et satýrý yok!\n"
 
-#: src/lang.c:880
+#: src/lang.c:876
 #, fuzzy, c-format
 msgid	"\n"
 	"Error: \"%s\" is not a valid newsgroup!\n"
 msgstr	"\n"
 	"Hata: \"%s\" geçerli bir haber grubu deðil!\n"
 
-#: src/lang.c:882
+#: src/lang.c:878
 #, fuzzy
 msgid	"\n"
 	"Warning: Followup-To set to more than one newsgroup!\n"
 msgstr	"\n"
 	"Uyarý: Birden fazla haber grubu için Takip-Et ayarlandý!\n"
 
-#: src/lang.c:883
+#: src/lang.c:879
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: cross-posting to %d newsgroups and no Followup-To line!\n"
 msgstr	"\n"
 	"Hata: %d haber gruubuna çapraz gönderiyor ve Takip-Et satýrý yok!\n"
 
-#: src/lang.c:884
+#: src/lang.c:880
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not in your newsrc, it may be invalid at this site!\n"
 msgstr	"\n"
 	"Uyarý:  \"%s\" sizin newsrc'niz deðil, bu sitede geçersiz olabilir!\n"
 
-#: src/lang.c:885
+#: src/lang.c:881
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: \"%s\" is not a valid newsgroup at this site!\n"
 msgstr	"\n"
 	"Uyaý:  \"%s\" bu sitede geçerli bir newsrc deðil!\n"
 
-#: src/lang.c:889
+#: src/lang.c:885
 #, fuzzy, c-format
 msgid	"%d files successfully written from %d articles. %d %s occurred."
 msgstr	"%d dosyalarý %d makalelerinden baþarýyla yazýldý. %d%s meydana geldi."
 
-#: src/lang.c:890
+#: src/lang.c:886
 #, fuzzy
 msgid	"Missing parts."
 msgstr	"Bazý yerler eksik."
 
-#: src/lang.c:891
+#: src/lang.c:887
 #, fuzzy
 msgid	"No beginning."
 msgstr	"Baþlangýç yok."
 
-#: src/lang.c:892
+#: src/lang.c:888
 #, fuzzy
 msgid	"No data."
 msgstr	"Veri yok."
 
-#: src/lang.c:893
+#: src/lang.c:889
 #, fuzzy
 msgid	"Unknown error."
 msgstr	"Bilinmeyen hata."
 
-#: src/lang.c:896
+#: src/lang.c:892
 #, fuzzy, c-format
 msgid	"\tChecksum of %s (%ld %s)"
 msgstr	"\tSaðlama toplamý %s (%ld %s)"
 
-#: src/lang.c:901
+#: src/lang.c:897
 #, fuzzy
 msgid	"Reading mail active file... "
 msgstr	"Posta aktif dosyasý okunuyor... "
 
-#: src/lang.c:902
+#: src/lang.c:898
 #, fuzzy
 msgid	"Reading mailgroups file... "
 msgstr	"Postagruplarý dosyasý okunuyor... "
 
-#: src/lang.c:906
+#: src/lang.c:902
 #, fuzzy
 msgid	"perform PGP operations on article"
 msgstr	"makalede PGP iþlemi gerçekleþtir"
 
-#: src/lang.c:907
+#: src/lang.c:903
 #, fuzzy
 msgid	"Add key(s) to public keyring?"
 msgstr	"Genel tuþhalkasýna tuþ(lar) ekle?"
 
-#: src/lang.c:908
+#: src/lang.c:904
 #, fuzzy, c-format
 msgid	"%s=encrypt, %s=sign, %s=both, %s=quit: "
 msgstr	"%s=þifrele, %s=imzala. %s=ikisi de, %s=çýk: "
 
-#: src/lang.c:909
+#: src/lang.c:905
 #, fuzzy, c-format
 msgid	"%s=sign, %s=sign & include public key, %s=quit: "
 msgstr	"%s=iþaretle, %s=imzala & genel tuþ dahil et, %s=çýk: "
 
-#: src/lang.c:910
+#: src/lang.c:906
 #, fuzzy, c-format
 msgid	"PGP has not been set up (can't open %s)"
 msgstr	"PGP ayarlanmadý (açýlamýyor %s)"
 
-#: src/lang.c:911
+#: src/lang.c:907
 #, fuzzy
 msgid	"Article not signed and no public keys found"
 msgstr	"Makale  imzalanmadý ve genel tuþlar bulunamadý"
 
-#: src/lang.c:913
+#: src/lang.c:909
 #, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=çýk, %s=düzenle, %s=ispell, %s=pgp, %s=menü, %s=yolla, %s=ertele: "
 
-#: src/lang.c:914
-#, fuzzy
+#: src/lang.c:910
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=ispell, %s=pgp, %s=gönder [%%s]: "
 
-#: src/lang.c:915
-#, fuzzy
+#: src/lang.c:911
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=ispell, %s=pgp, %s=menü, %s=yolla, %s=ertele [%%s]: "
 
-#: src/lang.c:917
+#: src/lang.c:913
 #, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=çýk, %s=düzenle, %s=pgp, %s=menü, %s=yolla, %s=ertele: "
 
-#: src/lang.c:918
-#, fuzzy
+#: src/lang.c:914
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=send [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=pgp, %s=gönder [%%s]: "
 
-#: src/lang.c:919
-#, fuzzy
+#: src/lang.c:915
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=pgp, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=pgp, %s=menü, %s=yolla, %s=ertele [%%]: "
 
-#: src/lang.c:923
+#: src/lang.c:919
 #, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=çýk, %s=düzenle, %s=ispell, %s=menü, %s=yolla, %s=ertele: "
 
-#: src/lang.c:924
-#, fuzzy
+#: src/lang.c:920
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=send [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=ispell, %s=yolla [%%s]: "
 
-#: src/lang.c:925
-#, fuzzy
+#: src/lang.c:921
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=ispell, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=ispell, %s=menü, %s=yolla, %s=ertele [%%s]: "
 
-#: src/lang.c:927
+#: src/lang.c:923
 #, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone: "
 msgstr	"%s=çýk, %s=düzenle, %s=menü, %s=post, %s=ertele: "
 
-#: src/lang.c:928
-#, fuzzy
+#: src/lang.c:924
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=send [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=gönder [%%s]: "
 
-#: src/lang.c:929
-#, fuzzy
+#: src/lang.c:925
+#, fuzzy, c-format
 msgid	"%s=quit, %s=edit, %s=menu, %s=post, %s=postpone [%%s]: "
 msgstr	"%s=çýk, %s=düzenle, %s=menü, %s=yolla, %s=ertele [%%s]: "
 
-#: src/lang.c:938
+#: src/lang.c:934
 #, fuzzy
 msgid	"Try cache_overview_files to speed up things.\n"
 msgstr	"Hýzlandýrmak için önbellek_giriþ_dosyalarýný deneyin.\n"
 
-#: src/lang.c:939
+#: src/lang.c:935
 #, fuzzy
 msgid	"Tin will use local index files instead.\n"
 msgstr	"Tin yerel dizin dosyalarýný kullanacak.\n"
 
-#: src/lang.c:940
+#: src/lang.c:936
 #, fuzzy
 msgid	"Cannot find NNTP server name"
 msgstr	"NNTP sunucu ismi bulunamadý"
 
-#: src/lang.c:941
+#: src/lang.c:937
 #, fuzzy, c-format
 msgid	"Connecting to %s:%d..."
 msgstr	"Baðlanýyor %s:%d..."
 
-#: src/lang.c:942
+#: src/lang.c:938
 #, fuzzy
 msgid	"Disconnecting from server...\n"
 msgstr	"Sunucu baðlantýsý kesildi...\n"
 
-#: src/lang.c:943
+#: src/lang.c:939
 #, fuzzy, c-format
 msgid	"Wrong newsgroup name in response of GROUP command, %s for %s"
 msgstr	"GRUP komut yanýtýnda yanlýþ haber grubu ismi. %s e %s"
 
-#: src/lang.c:944
+#: src/lang.c:940
 #, fuzzy, c-format
 msgid	"Failed to connect to NNTP server %s. Exiting..."
 msgstr	"NNTP sunucusuna baðlantý baþarýsýz %s. Çýkýyor..."
 
-#: src/lang.c:945
+#: src/lang.c:941
 #, fuzzy
 msgid	"205  Closing connection"
 msgstr	"205  Baðlantý kesiliyor"
 
-#: src/lang.c:946
+#: src/lang.c:942
 #, fuzzy
 msgid	"Your server does not support the NNTP XOVER or OVER command.\n"
 msgstr	"Sunucunuz NNTP XOVER ya da OVER komutunu desteklemiyor.\n"
 
-#: src/lang.c:947
+#: src/lang.c:943
 #, fuzzy
 msgid	"Connection to news server has timed out. Reconnect?"
 msgstr	"Haber sunucusu baðlantý süreniz doldu. Tekrar baðlan?"
 
-#: src/lang.c:948
+#: src/lang.c:944
 #, fuzzy, c-format
 msgid	"Put the server name in the file %s,\n"
 	"or set the environment variable NNTPSERVER"
 msgstr	"%s dosyasýna sunucu ismini girin,\n"
 	"ya da çevre deðiþkeni NNTPSERVERi ayarlayýn"
 
-#: src/lang.c:949
+#: src/lang.c:945
 #, fuzzy
 msgid	"  -A       force authentication on connect"
 msgstr	"  -A       baðlantýda doðrulamayý zorla"
 
-#: src/lang.c:950
+#: src/lang.c:946
 #, fuzzy, c-format
 msgid	"  -g serv  read news from NNTP server serv [default=%s]"
 msgstr	"  -g serv  NNTP sunucusundan haberleri oku serv [default=%s]"
 
-#: src/lang.c:951
+#: src/lang.c:947
 #, fuzzy, c-format
 msgid	"  -p port  use port as NNTP port [default=%d]"
 msgstr	"  -p port  baðlantý noktasýný NNTP gibi kullan port [default=%d]"
 
-#: src/lang.c:952
+#: src/lang.c:948
 #, fuzzy
 msgid	"  -Q       quick start. Same as -nqd"
 msgstr	"  -Q       hýzlý baþlat. -nqd ile ayný"
 
-#: src/lang.c:953
+#: src/lang.c:949
 #, fuzzy
 msgid	"  -l       use only LIST instead of GROUP (-n) command"
 msgstr	"  -l       GROUP (-n) komutu yerine sadece LIST i kullan"
 
-#: src/lang.c:954
+#: src/lang.c:950
 #, fuzzy
 msgid	"  -n       only read subscribed .newsrc groups from NNTP server"
 msgstr	"  -n       NNTP sunucusundan sadece abone newsrc gruplarýný oku"
 
-#: src/lang.c:956
+#: src/lang.c:952
 #, fuzzy, c-format
 msgid	"%s/tcp: Unknown service.\n"
 msgstr	"%s/tcp: Bilinmeyen servis.\n"
 
-#: src/lang.c:959
+#: src/lang.c:955
 #, fuzzy
 msgid	"\n"
 	"socket or connect problem\n"
 msgstr	"\n"
 	"socket ya da baðlantý hatasý\n"
 
-#: src/lang.c:961
+#: src/lang.c:957
 #, fuzzy, c-format
 msgid	"\n"
 	"Connection to %s: "
 msgstr	"\n"
 	"Baðlanýyor %s: "
 
-#: src/lang.c:962
+#: src/lang.c:958
 #, fuzzy
 msgid	"Giving up...\n"
 msgstr	"Pes ediliyor...\n"
 
-#: src/lang.c:965
+#: src/lang.c:961
 #, fuzzy
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 	"Tin will try to use XHDR XREF instead (slows down things a bit).\n"
 msgstr	"Sunucunuzun XOVER bilgisinde Xref: yok.\n"
 	"Tin XHDR XREF kullanmayý deneyecek (biraz yavaþlatýr).\n"
 
-#: src/lang.c:968
+#: src/lang.c:964
 #, fuzzy
 msgid	"Your server does not have Xref: in its XOVER information.\n"
 msgstr	"Sunucunuzun XOVER bilgisinde Xref: yok.\n"
 
-#: src/lang.c:971
+#: src/lang.c:967
 #, fuzzy, c-format
 msgid	"Can't open %s. Try %s -r to read news via NNTP.\n"
 msgstr	"%s Açýlamýyor. NNTP aracýlýðýyla haber okumak için %s -r deneyin.\n"
 
-#: src/lang.c:974
+#: src/lang.c:970
 #, fuzzy
 msgid	"  -Q       quick start. Same as -qd"
 msgstr	"  -Q       hýzlý baþlat. -qd ile ayný"
 
-#: src/lang.c:975
+#: src/lang.c:971
 #, fuzzy
 msgid	"  -l       read only active file instead of scanning spool (-n) command"
 msgstr	"  -l       bekletme komutunu taramak yerine sadece aktif dosyayý okuyun"
 
-#: src/lang.c:976
+#: src/lang.c:972
 #, fuzzy
 msgid	"  -n       only read subscribed .newsrc groups from spool"
 msgstr	"  -n       'bekletme'den sadece abone newsrc gruplarý okuyun"
 
-#: src/lang.c:977
+#: src/lang.c:973
 #, fuzzy
 msgid	"Your server does not have Xref: in its NOV-files.\n"
 msgstr	"Sunucunuzun NOV-dosyalarýnda Xref:yok.\n"
 
-#: src/lang.c:981
+#: src/lang.c:977
 #, fuzzy
 msgid	"Posting using external inews failed. Use built in inews instead?"
 msgstr	"Dýþ inews kullanýlarak gönderme baþarýsýz. Yerine yerleþik inews kullanýlsýn "
 	"mý?"
 
-#: src/lang.c:982
+#: src/lang.c:978
 #, fuzzy
 msgid	"It worked! Should I always use my built in inews from now on?"
 msgstr	"Ýþe yaradý! Bundan sonra hep yerleþik inewslerimi mi kullanmalýyým?"
 
-#: src/lang.c:990
+#: src/lang.c:986
 #, fuzzy, c-format
 msgid	"%d %s printed"
 msgstr	"%d %s yazdýrýldý"
 
-#: src/lang.c:991
+#: src/lang.c:987
 #, fuzzy
 msgid	"output article/thread/hot/pattern/tagged articles to printer"
 msgstr	"çýkýþ makalesi/parçacýk/hot/örüntü/imlenmiþ makaleleri yazýcýya gönder"
 
-#: src/lang.c:992
+#: src/lang.c:988
 #, fuzzy
 msgid	"Print"
 msgstr	"Yazdýr"
 
-#: src/lang.c:993
+#: src/lang.c:989
 #, fuzzy
 msgid	"Printing..."
 msgstr	"Yazdýrýlýyor..."
 
-#: src/lang.c:997
+#: src/lang.c:993
 #, fuzzy
 msgid	"pipe article/thread/hot/pattern/tagged articles into command"
 msgstr	"kanal makale/parçacýk/hot/örüntü/imlenmiþ makaleleri komuta al"
 
-#: src/lang.c:998
+#: src/lang.c:994
 #, fuzzy
 msgid	"No command"
 msgstr	"Komut yok"
 
-#: src/lang.c:999
+#: src/lang.c:995
 #, fuzzy
 msgid	"Pipe"
 msgstr	"Kanal"
 
-#: src/lang.c:1000
+#: src/lang.c:996
 #, fuzzy, c-format
 msgid	"Pipe to command [%.*s]> "
 msgstr	"Komut kanalý [%.*s]> "
 
-#: src/lang.c:1001
+#: src/lang.c:997
 #, fuzzy
 msgid	"Piping..."
 msgstr	"Yöneltiliyor..."
 
-#: src/lang.c:1003
+#: src/lang.c:999
 #, fuzzy
 msgid	"Piping not enabled."
 msgstr	"Yöneltme gerçekleþtirilemedi."
 
-#: src/lang.c:1007
+#: src/lang.c:1003
 #, fuzzy, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line has spaces  in it that MUST be removed.\n"
@@ -4302,7 +4315,7 @@ msgstr	"\n"
 	"      boþluktur. Çoklu habergrubu isimlerini ayýrmak için\n"
 	"      virgül (,) kullanýn.\n"
 
-#: src/lang.c:1012
+#: src/lang.c:1008
 #, fuzzy, c-format
 msgid	"\n"
 	"Error: The \"%s:\" line is  continued in  the next line.  Since\n"
@@ -4313,7 +4326,7 @@ msgstr	"\n"
 	"       beyazboþluk kullanýlamayacaðý için, buna izin verilmiyor.\n"
 	"       Lütfen bütün haber gruplarýný tek bir satýra yazýn.\n"
 
-#: src/lang.c:1017
+#: src/lang.c:1013
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line is continued in the next line.\n"
@@ -4326,14 +4339,14 @@ msgstr	"\n"
 	"        Herhangi bir sorunla karþýlaþmamak için bütün haber gruplarýný tek "
 	"bir satýra yazýn.\n"
 
-#: src/lang.c:1021
+#: src/lang.c:1017
 #, fuzzy, c-format
 msgid	"\n"
 	"Warning: The \"%s:\" line has spaces in it that SHOULD be removed.\n"
 msgstr	"\n"
 	"Uyarý: \"%s:\" satýrýnda SÝLÝNMESÝ GEREKEN boþluklar var.\n"
 
-#: src/lang.c:1026
+#: src/lang.c:1022
 #, fuzzy
 msgid	"\n"
 	"  If your article contains quoted text  please take some time to pare it "
@@ -4368,562 +4381,566 @@ msgstr	"\n"
 	" dikkatli ve özenli olmazsanýz, insanlar onu tamamen yoksayarlar. Net oldukça "
 	"kalabalýk bir yer.\n"
 
-#: src/lang.c:1039
+#: src/lang.c:1035
 #, fuzzy
 msgid	"shell escape"
 msgstr	"kabuk çýkýþý"
 
-#: src/lang.c:1040
+#: src/lang.c:1036
 #, fuzzy, c-format
 msgid	"Shell Command (%s)"
 msgstr	"Kabuk Komutu (%s)"
 
-#: src/lang.c:1041
+#: src/lang.c:1037
 #, fuzzy, c-format
 msgid	"Enter shell command [%s]> "
 msgstr	"Kabuk komutunu girin [%s]> "
 
-#: src/lang.c:1045
+#: src/lang.c:1041
 #, fuzzy, c-format
 msgid	"%s: Can't get entry for TERM\n"
 msgstr	"%s: TERM için girdi alýnamýyor\n"
 
-#: src/lang.c:1049
+#: src/lang.c:1045
 #, fuzzy, c-format
 msgid	"Group %.*s ('q' to quit)..."
 msgstr	"Grup %.*s (çýkmak için 'q')..."
 
-#: src/lang.c:1051
+#: src/lang.c:1047
 #, fuzzy, c-format
 msgid	"Group %.*s..."
 msgstr	"Grup %.*s..."
 
-#: src/lang.c:1055
+#: src/lang.c:1051
 #, fuzzy
 msgid	"Server unavailable\n"
 msgstr	"Sunucu kullanýlamýyor\n"
 
-#: src/lang.c:1061
+#: src/lang.c:1057
 #, fuzzy, c-format
-msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; "
-	"%s=post"
-msgstr	"%s=kanal, %s=posta; %s=yazdýr, %s=çýk, %s=hepsini deðiþtir/okunmayanlar; "
-	"%s=kaydet; %s=etiketle; %s=yolla"
+msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %"
+	"s=post"
+msgstr	"%s=kanal, %s=posta; %s=yazdýr, %s=çýk, %s=hepsini deðiþtir/okunmayanlar; %"
+	"s=kaydet; %s=etiketle; %s=yolla"
 
-#: src/lang.c:1062
+#: src/lang.c:1058
 #, fuzzy, c-format
 msgid	"%s=pipe; %s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
-msgstr	"%s=kanal; %s=posta; %s=yazdýr; %s=çýk; %s=cevap yaz; %s=kaydet; %s=etiketle; "
-	"%s=yolla"
+msgstr	"%s=kanal; %s=posta; %s=yazdýr; %s=çýk; %s=cevap yaz; %s=kaydet; %s=etiketle; %"
+	"s=yolla"
 
-#: src/lang.c:1064
+#: src/lang.c:1060
 #, fuzzy, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
-msgstr	"%s=posta; %s=yazdýr; %s=çýk; %s=hepsini deðiþtir/okunmayanlar; %s=kaydet; "
-	"%s=etiketle; %s=yolla"
+msgstr	"%s=posta; %s=yazdýr; %s=çýk; %s=hepsini deðiþtir/okunmayanlar; %s=kaydet; %"
+	"s=etiketle; %s=yolla"
 
-#: src/lang.c:1065
+#: src/lang.c:1061
 #, fuzzy, c-format
 msgid	"%s=mail; %s=print; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=posta; %s=yazdýr; %s=çýk; %s=cevap yaz; %s=kaydet; %s=etiketle; %s=yolla"
 
-#: src/lang.c:1069
+#: src/lang.c:1065
 #, fuzzy, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
-msgstr	"%s=kanal; %s=posta; %s=çýk; %s=hepsini deðiþtir/okunmayanlar; %s=kaydet; "
-	"%s=etiketle; %s=yolla"
+msgstr	"%s=kanal; %s=posta; %s=çýk; %s=hepsini deðiþtir/okunmayanlar; %s=kaydet; %"
+	"s=etiketle; %s=yolla"
 
-#: src/lang.c:1070
+#: src/lang.c:1066
 #, fuzzy, c-format
 msgid	"%s=pipe; %s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=kanal; %s=posta; %s=çýk; %s=cevap yaz; %s=kaydet; %s=etiketle; %s=yolla"
 
-#: src/lang.c:1072
+#: src/lang.c:1068
 #, fuzzy, c-format
 msgid	"%s=mail; %s=quit; %s=toggle all/unread; %s=save; %s=tag; %s=post"
-msgstr	"%s=posta; %s=çýk; %s=hepsini deðiþtir/okunmayanlar; %s=kaydet; %s=etiketle; "
-	"%s=yolla"
+msgstr	"%s=posta; %s=çýk; %s=hepsini deðiþtir/okunmayanlar; %s=kaydet; %s=etiketle; %"
+	"s=yolla"
 
-#: src/lang.c:1073
+#: src/lang.c:1069
 #, fuzzy, c-format
 msgid	"%s=mail; %s=quit; %s=reply mail; %s=save; %s=tag; %s=post"
 msgstr	"%s=posta; %s=çýk; %s=cevap yaz; %s=kaydet; %s=etiketle; %s=yolla"
 
-#: src/lang.c:1079
+#: src/lang.c:1075
 #, fuzzy
 msgid	"Terminal does not support color"
 msgstr	"Uçbirim renk desteklemiyor"
 
-#: src/lang.c:1084
+#: src/lang.c:1080
 #, fuzzy, c-format
 msgid	"Trying %s"
 msgstr	"%s deneniyor"
 
-#: src/lang.c:1098 src/lang.c:1123 src/lang.c:1139 src/lang.c:1318 src/refs.c:296
+#: src/lang.c:1094 src/lang.c:1120 src/lang.c:1136 src/lang.c:1315 src/refs.c:296
 #, fuzzy
 msgid	"None"
 msgstr	"Hiçbiri"
 
-#: src/lang.c:1099
+#: src/lang.c:1095
 #, fuzzy
 msgid	"Subject"
 msgstr	"Konu"
 
-#: src/lang.c:1100
+#: src/lang.c:1096
 #, fuzzy
 msgid	"References"
 msgstr	"Kaynaklar"
 
-#: src/lang.c:1101
+#: src/lang.c:1097
 #, fuzzy
 msgid	"Both Subject and References"
 msgstr	"Konu ve Kaynaklar"
 
-#: src/lang.c:1102
+#: src/lang.c:1098
 #, fuzzy
 msgid	"Multipart Subject"
 msgstr	"Çoklu Konu"
 
-#: src/lang.c:1114 src/lang.c:1225
+#: src/lang.c:1099
+msgid	"Percentage Match"
+msgstr	""
+
+#: src/lang.c:1111 src/lang.c:1222
 #, fuzzy
 msgid	"No"
 msgstr	"Hayýr"
 
-#: src/lang.c:1115 src/lang.c:1227
+#: src/lang.c:1112 src/lang.c:1224
 #, fuzzy
 msgid	"Yes"
 msgstr	"Evet"
 
-#: src/lang.c:1116
+#: src/lang.c:1113
 #, fuzzy
 msgid	"Hide All"
 msgstr	"Tümünü Sakla"
 
-#: src/lang.c:1124
+#: src/lang.c:1121
 #, fuzzy
 msgid	"Address"
 msgstr	"Adres"
 
-#: src/lang.c:1125
+#: src/lang.c:1122
 #, fuzzy
 msgid	"Full Name"
 msgstr	"Tüm Ýsim"
 
-#: src/lang.c:1126
+#: src/lang.c:1123
 #, fuzzy
 msgid	"Address and Name"
 msgstr	"Adres ve Ýsim"
 
-#: src/lang.c:1133
+#: src/lang.c:1130
 #, fuzzy
 msgid	"Max"
 msgstr	"En Çok"
 
-#: src/lang.c:1134
+#: src/lang.c:1131
 #, fuzzy
 msgid	"Sum"
 msgstr	"Toplam"
 
-#: src/lang.c:1135
+#: src/lang.c:1132
 #, fuzzy
 msgid	"Average"
 msgstr	"Ortalama"
 
-#: src/lang.c:1140
+#: src/lang.c:1137
 #, fuzzy
 msgid	"Lines"
 msgstr	"Çizgiler"
 
-#: src/lang.c:1141
+#: src/lang.c:1138
 #, fuzzy
 msgid	"Score"
 msgstr	"Skorlar"
 
-#: src/lang.c:1142
+#: src/lang.c:1139
 #, fuzzy
 msgid	"Lines & Score"
 msgstr	"Satýrlar & Skorlar"
 
-#: src/lang.c:1151
+#: src/lang.c:1148
 #, fuzzy
 msgid	"Black"
 msgstr	"Siyah"
 
-#: src/lang.c:1152
+#: src/lang.c:1149
 #, fuzzy
 msgid	"Red"
 msgstr	"Kýrmýzý"
 
-#: src/lang.c:1153
+#: src/lang.c:1150
 #, fuzzy
 msgid	"Green"
 msgstr	"Yeþil"
 
-#: src/lang.c:1154
+#: src/lang.c:1151
 #, fuzzy
 msgid	"Brown"
 msgstr	"Kahverengi"
 
-#: src/lang.c:1155
+#: src/lang.c:1152
 #, fuzzy
 msgid	"Blue"
 msgstr	"Mavi"
 
-#: src/lang.c:1156
+#: src/lang.c:1153
 #, fuzzy
 msgid	"Pink"
 msgstr	"Pembe"
 
-#: src/lang.c:1157
+#: src/lang.c:1154
 #, fuzzy
 msgid	"Cyan"
 msgstr	"Camgöbeði"
 
-#: src/lang.c:1158
+#: src/lang.c:1155
 #, fuzzy
 msgid	"White"
 msgstr	"Beyaz"
 
-#: src/lang.c:1159
+#: src/lang.c:1156
 #, fuzzy
 msgid	"Gray"
 msgstr	"Gri"
 
-#: src/lang.c:1160
+#: src/lang.c:1157
 #, fuzzy
 msgid	"Light Red"
 msgstr	"Açýk Kýrmýzý"
 
-#: src/lang.c:1161
+#: src/lang.c:1158
 #, fuzzy
 msgid	"Light Green"
 msgstr	"Açýk Yeþil"
 
-#: src/lang.c:1162
+#: src/lang.c:1159
 #, fuzzy
 msgid	"Yellow"
 msgstr	"Sarý"
 
-#: src/lang.c:1163
+#: src/lang.c:1160
 #, fuzzy
 msgid	"Light Blue"
 msgstr	"Açýk Mavi"
 
-#: src/lang.c:1164
+#: src/lang.c:1161
 #, fuzzy
 msgid	"Light Pink"
 msgstr	"Açýk Pembe"
 
-#: src/lang.c:1165
+#: src/lang.c:1162
 #, fuzzy
 msgid	"Light Cyan"
 msgstr	"Açýk Camgöbeði"
 
-#: src/lang.c:1166
+#: src/lang.c:1163
 #, fuzzy
 msgid	"Light White"
 msgstr	"Açýk Beyaz"
 
-#: src/lang.c:1174 src/lang.c:1231 src/lang.c:1245
+#: src/lang.c:1171 src/lang.c:1228 src/lang.c:1242
 #, fuzzy
 msgid	"Nothing"
 msgstr	"Hiçbirþey"
 
-#: src/lang.c:1175
+#: src/lang.c:1172
 #, fuzzy
 msgid	"Mark"
 msgstr	"Ýþaretle"
 
-#: src/lang.c:1176
+#: src/lang.c:1173
 #, fuzzy
 msgid	"Space"
 msgstr	"Boþluk"
 
-#: src/lang.c:1183
+#: src/lang.c:1180
 #, fuzzy
 msgid	"Normal"
 msgstr	"Normal"
 
-#: src/lang.c:1184
+#: src/lang.c:1181
 #, fuzzy
 msgid	"Best highlighting"
 msgstr	"En iyi vurgulama"
 
-#: src/lang.c:1185
+#: src/lang.c:1182
 #, fuzzy
 msgid	"Underline"
 msgstr	"Alt çizgi"
 
-#: src/lang.c:1186
+#: src/lang.c:1183
 #, fuzzy
 msgid	"Reverse video"
 msgstr	"Tes görüntü"
 
-#: src/lang.c:1187
+#: src/lang.c:1184
 #, fuzzy
 msgid	"Blinking"
 msgstr	"Yanýp sönme"
 
-#: src/lang.c:1188
+#: src/lang.c:1185
 #, fuzzy
 msgid	"Half bright"
 msgstr	"Yarý parlak"
 
-#: src/lang.c:1189
+#: src/lang.c:1186
 #, fuzzy
 msgid	"Bold"
 msgstr	"Kalýn"
 
-#: src/lang.c:1194
+#: src/lang.c:1191
 #, fuzzy
 msgid	"none"
 msgstr	"hiçbiri"
 
-#: src/lang.c:1195
+#: src/lang.c:1192
 #, fuzzy
 msgid	"commands"
 msgstr	"komutlar"
 
-#: src/lang.c:1196
+#: src/lang.c:1193
 #, fuzzy
 msgid	"select"
 msgstr	"seç"
 
-#: src/lang.c:1198
+#: src/lang.c:1195
 #, fuzzy
 msgid	"commands & quit"
 msgstr	"komutlar & çýk"
 
-#: src/lang.c:1199
+#: src/lang.c:1196
 #, fuzzy
 msgid	"commands & select"
 msgstr	"komutlar & seç"
 
-#: src/lang.c:1200
+#: src/lang.c:1197
 #, fuzzy
 msgid	"quit & select"
 msgstr	"çýk & seç"
 
-#: src/lang.c:1201
+#: src/lang.c:1198
 #, fuzzy
 msgid	"commands & quit & select"
 msgstr	"komutlar & çýk & seç"
 
-#: src/lang.c:1226
+#: src/lang.c:1223
 #, fuzzy
 msgid	"Shell archive"
 msgstr	"kabuk arþivi"
 
-#: src/lang.c:1232
+#: src/lang.c:1229
 #, fuzzy
 msgid	"Subject: (descending)"
 msgstr	"Konu: (alçalan)"
 
-#: src/lang.c:1233
+#: src/lang.c:1230
 #, fuzzy
 msgid	"Subject: (ascending)"
 msgstr	"Konu: (yükselen)"
 
-#: src/lang.c:1234
+#: src/lang.c:1231
 #, fuzzy
 msgid	"From: (descending)"
 msgstr	"Gönderen: (alçalan)"
 
-#: src/lang.c:1235
+#: src/lang.c:1232
 #, fuzzy
 msgid	"From: (ascending)"
 msgstr	"Gönderen: (yükselen)"
 
-#: src/lang.c:1236
+#: src/lang.c:1233
 #, fuzzy
 msgid	"Date: (descending)"
 msgstr	"Tarih: (alçalan)"
 
-#: src/lang.c:1237
+#: src/lang.c:1234
 #, fuzzy
 msgid	"Date: (ascending)"
 msgstr	"Tarih: (yükselen)"
 
-#: src/lang.c:1238 src/lang.c:1246
+#: src/lang.c:1235 src/lang.c:1243
 #, fuzzy
 msgid	"Score (descending)"
 msgstr	"Skor: (alçalan)"
 
-#: src/lang.c:1239 src/lang.c:1247
+#: src/lang.c:1236 src/lang.c:1244
 #, fuzzy
 msgid	"Score (ascending)"
 msgstr	"Skor: (yükselen)"
 
-#: src/lang.c:1240
+#: src/lang.c:1237
 #, fuzzy
 msgid	"Lines: (descending)"
 msgstr	"Satýrlar: (alçalan)"
 
-#: src/lang.c:1241
+#: src/lang.c:1238
 #, fuzzy
 msgid	"Lines: (ascending)"
 msgstr	"Satýrlar: (yükselen)"
 
-#: src/lang.c:1252
+#: src/lang.c:1249
 #, fuzzy
 msgid	"Always Keep"
 msgstr	"Hep Sakla"
 
-#: src/lang.c:1253
+#: src/lang.c:1250
 #, fuzzy
 msgid	"Always Remove"
 msgstr	"Hep Kaldýr"
 
-#: src/lang.c:1254
+#: src/lang.c:1251
 #, fuzzy
 msgid	"Mark with D on selection screen"
 msgstr	"Seçenek ekranýnda D ile iþaretle"
 
-#: src/lang.c:1259
+#: src/lang.c:1256
 #, fuzzy
 msgid	"Kill only unread arts"
 msgstr	"Sadece okunmayan makaleleri yok et"
 
-#: src/lang.c:1260
+#: src/lang.c:1257
 #, fuzzy
 msgid	"Kill all arts & show with K"
 msgstr	"Tüm makaleleri yok et & K ile göster"
 
 #  TODO: s/K/art_marked_killed/
 #. TODO: s/K/art_marked_killed/
-#: src/lang.c:1261
+#: src/lang.c:1258
 #, fuzzy
 msgid	"Kill all arts and never show"
 msgstr	"Tüm makaleleri yok et ve asla gösterme"
 
-#: src/lang.c:1266
+#: src/lang.c:1263
 #, fuzzy
 msgid	"Nothing special"
 msgstr	"Özel birþey yok"
 
-#: src/lang.c:1267
+#: src/lang.c:1264
 #, fuzzy
 msgid	"Compress quotes"
 msgstr	"Ýmleri sýkýþtýr"
 
-#: src/lang.c:1268
+#: src/lang.c:1265
 #, fuzzy
 msgid	"Quote signatures"
 msgstr	"Ýmzalarý imle"
 
-#: src/lang.c:1269
+#: src/lang.c:1266
 #, fuzzy
 msgid	"Compress quotes, quote sigs"
 msgstr	"Ýmleri sýkýþtýr, imzalarý imle"
 
-#: src/lang.c:1270
+#: src/lang.c:1267
 #, fuzzy
 msgid	"Quote empty lines"
 msgstr	"Boþ satýrlarý imle"
 
-#: src/lang.c:1271
+#: src/lang.c:1268
 #, fuzzy
 msgid	"Compress quotes, quote empty lines"
 msgstr	"Ýmleri sýkýþtýr, boþ satýrlarý imle"
 
-#: src/lang.c:1272
+#: src/lang.c:1269
 #, fuzzy
 msgid	"Quote sigs & empty lines"
 msgstr	"Ýmzalarý & boþ satýrlarý imle"
 
-#: src/lang.c:1273
+#: src/lang.c:1270
 #, fuzzy
 msgid	"Comp. q., quote sigs & empty lines"
 msgstr	"Ýmleri sýkýþtýr, imzalarý & boþ satýrlarý imle"
 
-#: src/lang.c:1311
+#: src/lang.c:1308
 #, fuzzy
 msgid	"no"
 msgstr	"hiçbiri"
 
-#: src/lang.c:1312
+#: src/lang.c:1309
 #, fuzzy
 msgid	"with headers"
 msgstr	"en küçük yürütme birimleri"
 
-#: src/lang.c:1313
+#: src/lang.c:1310
 msgid	"without headers"
 msgstr	""
 
-#: src/lang.c:1320 src/lang.c:1326
+#: src/lang.c:1317 src/lang.c:1323
 msgid	"NFKC"
 msgstr	""
 
-#: src/lang.c:1321
+#: src/lang.c:1318
 msgid	"NFKD"
 msgstr	""
 
-#: src/lang.c:1322
+#: src/lang.c:1319
 msgid	"NFC"
 msgstr	""
 
-#: src/lang.c:1323
+#: src/lang.c:1320
 msgid	"NFD"
 msgstr	""
 
-#: src/lang.c:1334
+#: src/lang.c:1331
 #, fuzzy
 msgid	"Display Options"
 msgstr	"Seçenekleri Göster"
 
-#: src/lang.c:1341
+#: src/lang.c:1338
 #, fuzzy
 msgid	"Color Options"
 msgstr	"Renk Seçenekleri"
 
-#: src/lang.c:1348
+#: src/lang.c:1345
 #, fuzzy
 msgid	"Article-Limiting Options"
 msgstr	"Makale-Sýnýrlandýrma Seçenekleri"
 
-#: src/lang.c:1354
+#: src/lang.c:1351
 #, fuzzy
 msgid	"Posting/Mailing Options"
 msgstr	"Yollama/Postalama Seçenekleri"
 
-#: src/lang.c:1360
+#: src/lang.c:1357
 #, fuzzy
 msgid	"Saving/Printing Options"
 msgstr	"Kaydetme/Yazdýrma Seçenekleri"
 
-#: src/lang.c:1366
+#: src/lang.c:1363
 #, fuzzy
 msgid	"Expert Options"
 msgstr	"Uzman Seçenekleri"
 
-#: src/lang.c:1372
+#: src/lang.c:1369
 #, fuzzy
 msgid	"Filtering Options"
 msgstr	"Süzgeçleme Seçenekleri"
 
-#: src/lang.c:1377 src/lang.c:1408 src/lang.c:1414 src/lang.c:1426 src/lang.c:1476
-#: src/lang.c:1482 src/lang.c:1492 src/lang.c:1512 src/lang.c:1587 src/lang.c:1757
-#: src/lang.c:1763 src/lang.c:1769 src/lang.c:1775 src/lang.c:1787 src/lang.c:1794
-#: src/lang.c:1848 src/lang.c:1857 src/lang.c:1863 src/lang.c:1870 src/lang.c:1877
-#: src/lang.c:1884 src/lang.c:1891 src/lang.c:1898 src/lang.c:1905 src/lang.c:1912
-#: src/lang.c:1919 src/lang.c:1926 src/lang.c:1933 src/lang.c:1940 src/lang.c:1947
-#: src/lang.c:1954 src/lang.c:1961 src/lang.c:1968 src/lang.c:1975 src/lang.c:1982
-#: src/lang.c:1989 src/lang.c:1996 src/lang.c:2003 src/lang.c:2010 src/lang.c:2017
-#: src/lang.c:2025 src/lang.c:2041 src/lang.c:2048 src/lang.c:2055 src/lang.c:2062
-#: src/lang.c:2068 src/lang.c:2074 src/lang.c:2091 src/lang.c:2103 src/lang.c:2137
-#: src/lang.c:2190 src/lang.c:2197 src/lang.c:2203 src/lang.c:2228 src/lang.c:2245
-#: src/lang.c:2298 src/lang.c:2334 src/lang.c:2354 src/lang.c:2389 src/lang.c:2399
-#: src/lang.c:2424 src/lang.c:2440 src/lang.c:2459 src/lang.c:2472
+#: src/lang.c:1374 src/lang.c:1405 src/lang.c:1411 src/lang.c:1437 src/lang.c:1487
+#: src/lang.c:1493 src/lang.c:1503 src/lang.c:1523 src/lang.c:1598 src/lang.c:1768
+#: src/lang.c:1774 src/lang.c:1780 src/lang.c:1786 src/lang.c:1798 src/lang.c:1805
+#: src/lang.c:1859 src/lang.c:1868 src/lang.c:1874 src/lang.c:1881 src/lang.c:1888
+#: src/lang.c:1895 src/lang.c:1902 src/lang.c:1909 src/lang.c:1916 src/lang.c:1923
+#: src/lang.c:1930 src/lang.c:1937 src/lang.c:1944 src/lang.c:1951 src/lang.c:1958
+#: src/lang.c:1965 src/lang.c:1972 src/lang.c:1979 src/lang.c:1986 src/lang.c:1993
+#: src/lang.c:2000 src/lang.c:2007 src/lang.c:2014 src/lang.c:2021 src/lang.c:2028
+#: src/lang.c:2036 src/lang.c:2052 src/lang.c:2059 src/lang.c:2066 src/lang.c:2073
+#: src/lang.c:2079 src/lang.c:2085 src/lang.c:2102 src/lang.c:2114 src/lang.c:2148
+#: src/lang.c:2201 src/lang.c:2208 src/lang.c:2214 src/lang.c:2239 src/lang.c:2256
+#: src/lang.c:2309 src/lang.c:2345 src/lang.c:2365 src/lang.c:2400 src/lang.c:2410
+#: src/lang.c:2435 src/lang.c:2451 src/lang.c:2470 src/lang.c:2483
 #, fuzzy
 msgid	"<SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"<SPACE> deðiþtirir, <CR> ayarlar, <ESC> iptal eder."
 
-#: src/lang.c:1378
+#: src/lang.c:1375
 #, fuzzy
 msgid	"Show mini menu & posting etiquette"
 msgstr	"Mini menüyü & yollama etiketini göster"
 
-#: src/lang.c:1379
+#: src/lang.c:1376
 #, fuzzy
 msgid	"# If ON show a mini menu of useful commands at each level\n"
 	"# and posting etiquette after composing an article\n"
@@ -4931,36 +4948,36 @@ msgstr	"# ON durumundaysa makale oluþtur
 	"komutlarýn\n"
 	"# mini menüsünü ve yollama etiketini göster.\n"
 
-#: src/lang.c:1384
+#: src/lang.c:1381
 #, fuzzy
 msgid	"Show short description for each newsgroup. <SPACE> toggles & <CR> sets."
 msgstr	"Her haber grubu için kýsa açýklama göster. <SPACE> deðiþtirir & <CR> ayarlar."
 
-#: src/lang.c:1385
+#: src/lang.c:1382
 #, fuzzy
 msgid	"Show description of each newsgroup"
 msgstr	"Her haber grubu için açýklama göster"
 
-#: src/lang.c:1386
+#: src/lang.c:1383
 #, fuzzy
 msgid	"# If ON show group description text after newsgroup name at\n"
 	"# group selection level\n"
 msgstr	"# ON durumundaysa grup seçim düzeyindeki haber grubu isiminden sonraki\n"
 	"# grup açýklama metnini göster.\n"
 
-#: src/lang.c:1391
+#: src/lang.c:1388
 #, fuzzy
 msgid	"Show Subject & From (author) fields in group menu. <SPACE> toggles & <CR> "
 	"sets."
 msgstr	"Grup menüsünde Konu & Gönderen (yazar) alanlarýný göster. <SPACE> deðiþtirir "
 	"& <CR> ayarlar."
 
-#: src/lang.c:1392
+#: src/lang.c:1389
 #, fuzzy
 msgid	"In group menu, show author by"
 msgstr	"Grup menüsünde yazarý þuna göre göster"
 
-#: src/lang.c:1393
+#: src/lang.c:1390
 #, fuzzy
 msgid	"# Part of from field to display\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -4970,37 +4987,37 @@ msgid	"# Part of from field to display\n
 	"#   3 = both\n"
 msgstr	"# Gösterilecek gönderen alan kýsýmlarý 0)hiç 1)adres 2) tüm isim 3) hepsi\n"
 
-#: src/lang.c:1402
+#: src/lang.c:1399
 #, fuzzy
 msgid	"Draw -> or highlighted bar for selection. <SPACE> toggles & <CR> sets."
 msgstr	"Çiz -> ya da seçim için vurgulanmýþ çubuk. <SPACE> deðiþtirir & <CR> ayarlar."
 
-#: src/lang.c:1403
+#: src/lang.c:1400
 #, fuzzy
 msgid	"Draw -> instead of highlighted bar"
 msgstr	"Çiz -> vurgulanmýþ çubuk yerine"
 
-#: src/lang.c:1404
+#: src/lang.c:1401
 #, fuzzy
 msgid	"# If ON use -> otherwise highlighted bar for selection\n"
 msgstr	"# ON durumundaysa -> deðilse seçim için vurgulanmýþ çubuk\n"
 
-#: src/lang.c:1409
+#: src/lang.c:1406
 #, fuzzy
 msgid	"Use inverse video for page headers"
 msgstr	"Sayfa baþlýklarý için ters görüntü kullan"
 
-#: src/lang.c:1410
+#: src/lang.c:1407
 #, fuzzy
 msgid	"# If ON use inverse video for page headers at different levels\n"
 msgstr	"# ON durumundaysa farklý düzeyde sayfa baþlýklarý için ters görüntü kullan\n"
 
-#: src/lang.c:1415
+#: src/lang.c:1412
 #, fuzzy
 msgid	"Thread articles by"
 msgstr	"Makaleleri belirle"
 
-#: src/lang.c:1416
+#: src/lang.c:1413
 msgid	"# Thread articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -5008,14 +5025,36 @@ msgid	"# Thread articles by ...\n"
 	"#   2 = References\n"
 	"# * 3 = Both (Subject and References)\n"
 	"#   4 = Multipart Subject\n"
+	"#   5 = Percentage Match\n"
+msgstr	""
+
+#: src/lang.c:1424
+msgid	"Enter percentage match required to thread together. <CR> sets."
 msgstr	""
 
-#: src/lang.c:1427
+#: src/lang.c:1425
+msgid	"Thread percentage match"
+msgstr	""
+
+#: src/lang.c:1426
+#, c-format
+msgid	"# Thread percentage match...\n"
+	"# the percentage of characters in the subject of an article that must match\n"
+	"# a base article for both those articles to be considered to belong to the\n"
+	"# same thread. This option is an integer percentage, eg. 80, no decimals may\n"
+	"# follow. If 80 is used here, then 80%% of the characters must match "
+	"exactly,\n"
+	"# no insertion of a character, for the two articles to be put in the same\n"
+	"# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n"
+	"# 'harppy' would be threaded separately from 'happy'\n"
+msgstr	""
+
+#: src/lang.c:1438
 #, fuzzy
 msgid	"Score of a thread"
 msgstr	"Bir iþ parçacýðýnýn skoru"
 
-#: src/lang.c:1428
+#: src/lang.c:1439
 msgid	"# Thread score\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = max\n"
@@ -5023,18 +5062,18 @@ msgid	"# Thread score\n"
 	"#   2 = average\n"
 msgstr	""
 
-#: src/lang.c:1436
+#: src/lang.c:1447
 #, fuzzy
 msgid	"Sort articles by Subject, From, Date or Score. <SPACE> toggles & <CR> sets."
 msgstr	"Makaleleri Konu,Gönderen,Tarih ya da Skora göre sýrala. <SPACE> deðiþtirir & "
 	"<CR> ayarlar."
 
-#: src/lang.c:1437
+#: src/lang.c:1448
 #, fuzzy
 msgid	"Sort articles by"
 msgstr	"Makaleleri sýrala"
 
-#: src/lang.c:1438
+#: src/lang.c:1449
 #, fuzzy
 msgid	"# Sort articles by ...\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -5055,18 +5094,18 @@ msgstr	"# Makaleleri sýrala 0=(hiçbirþey
 	"# 7=(Skor azalmasý) 8=(Skor yükselmesi) 9=(Satýrlar azalmasý) 10=(Satýrlar "
 	"yükselmesi).\n"
 
-#: src/lang.c:1454
+#: src/lang.c:1465
 #, fuzzy
 msgid	"Sort threads by Nothing or Score. <SPACE> toggles & <CR> sets."
 msgstr	"Ýþ parçacýklarýný Hiçbirþeye ya da skora göre sýrala. <SPACE> deðiþtirir & "
 	"<CR> ayarlar."
 
-#: src/lang.c:1455
+#: src/lang.c:1466
 #, fuzzy
 msgid	"Sort threads by"
 msgstr	"Ýþ parçacýklarýný sýrala"
 
-#: src/lang.c:1456
+#: src/lang.c:1467
 msgid	"# Sort thread by ...\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = nothing\n"
@@ -5074,55 +5113,55 @@ msgid	"# Sort thread by ...\n"
 	"#   2 = Score ascending\n"
 msgstr	""
 
-#: src/lang.c:1464
+#: src/lang.c:1475
 #, fuzzy
 msgid	"Put cursor at first/last unread art in groups. <SPACE> toggles & <CR> sets."
 msgstr	"Ýmleci gruplardaki ilk/son okunmamýþ makalelere koyun. <SPACE> deðiþtirir & "
 	"<CR> ayarlar."
 
-#: src/lang.c:1465
+#: src/lang.c:1476
 #, fuzzy
 msgid	"Goto first unread article in group"
 msgstr	"Gruptaki ilk okunmamýþ makaleye git"
 
-#: src/lang.c:1466
+#: src/lang.c:1477
 #, fuzzy
 msgid	"# If ON put cursor at first unread art in group otherwise last art\n"
 msgstr	"# ON durumundaysa imleci ilk okunmamýþ makeleye, deðilse son makeleye koy.\n"
 
-#: src/lang.c:1470
+#: src/lang.c:1481
 #, fuzzy
 msgid	"Show all articles or only unread articles. <SPACE> toggles & <CR> sets."
 msgstr	"Tüm makaleleri ya da sadece okunmayan makaleleri göster.<SPACE> deðiþtirir & "
 	"<CR> ayarlar."
 
-#: src/lang.c:1471
+#: src/lang.c:1482
 #, fuzzy
 msgid	"Show only unread articles"
 msgstr	"Sadece okunmayan makaleleri göster"
 
-#: src/lang.c:1472
+#: src/lang.c:1483
 #, fuzzy
 msgid	"# If ON show only new/unread articles otherwise show all.\n"
 msgstr	"# ON durumundaysa sadece yeni/okunmamýþ makaleleri, deðilse hepsini göster.\n"
 
-#: src/lang.c:1477
+#: src/lang.c:1488
 #, fuzzy
 msgid	"Show only groups with unread arts"
 msgstr	"Sadece okunmamýþ makale olan gruplarý göster"
 
-#: src/lang.c:1478
+#: src/lang.c:1489
 #, fuzzy
 msgid	"# If ON show only subscribed to groups that contain unread articles.\n"
 msgstr	"# ON durumundaysa sadece abone olunup okunmamýþ makaler içerem gruplarý "
 	"göster.\n"
 
-#: src/lang.c:1483
+#: src/lang.c:1494
 #, fuzzy
 msgid	"Filter which articles"
 msgstr	"Hangi makaleleri filtrele"
 
-#: src/lang.c:1484
+#: src/lang.c:1495
 #, fuzzy
 msgid	"# Filter which articles\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -5133,95 +5172,95 @@ msgstr	"# 0=(Sadece okunmamýþ makaleleri
 	"# 1=(Tüm makalerleri yok et ve K ile iþaretlenmiþ parçaýk olarak göster)\n"
 	"# 2=(Tüm makaleleri yok et ve bir daha gösterme].\n"
 
-#: src/lang.c:1493
+#: src/lang.c:1504
 #, fuzzy
 msgid	"Tab goes to next unread article"
 msgstr	"Sekme sonraki okunmamýþ makaleye gider"
 
-#: src/lang.c:1494
+#: src/lang.c:1505
 #, fuzzy
 msgid	"# If ON the TAB command will go to next unread article at article viewer "
 	"level\n"
 msgstr	"# ON durumundaysa TAB komutu makale görüntüleyici düzeyinde sonraki okunmamýþ "
 	"makaleye gider\n"
 
-#: src/lang.c:1498
+#: src/lang.c:1509
 #, fuzzy
 msgid	"Scrolling with <SPACE> past the end of an art. jumps to the next unread one."
 msgstr	"Bir makalenin sonundan sonra <SPACE> ile kaydýrma bir sonraki okunmamýþ "
 	"makaleye atlar."
 
-#: src/lang.c:1499
+#: src/lang.c:1510
 #, fuzzy
 msgid	"Space goes to next unread article"
 msgstr	"Boþluk sonraki okunmamýþ makaleye gider"
 
-#: src/lang.c:1500
+#: src/lang.c:1511
 #, fuzzy
 msgid	"# If ON the SPACE command will go to next unread article at article viewer\n"
 	"# level when the end of the article is reached (rn-style pager)\n"
 msgstr	"# ON durumundaysa makalenin sonuna gelindiðinde SPACE komutu makale "
 	"görüntüleyici # düzeyinde sonraki okunmamýþ makaleye gider\n"
 
-#: src/lang.c:1505
+#: src/lang.c:1516
 #, fuzzy
 msgid	"Scrolling with <PGDN>/<DOWN> past the end of an art. jumps to the unread one."
 msgstr	"Makalenin sonundan sonra <PGDN>/<DOWN> ile kaydýrma bir sonraki makaleye "
 	"atlar."
 
-#: src/lang.c:1506
+#: src/lang.c:1517
 #, fuzzy
 msgid	"PgDn goes to next unread article"
 msgstr	"PgDn sonraki okunmamýþ makaleye gider"
 
-#: src/lang.c:1507
+#: src/lang.c:1518
 #, fuzzy
 msgid	"# If ON the PGDN or DOWN command will go to next unread article when\n"
 	"# pressed at end of message\n"
 msgstr	"# ON durumundaysa PGDN ya da DOWN komutu iletinin sonunda\n"
 	"# basýldýðýnda sonraki okunmamýþ makaleye gider\n"
 
-#: src/lang.c:1513
+#: src/lang.c:1524
 #, fuzzy
 msgid	"List thread using right arrow key"
 msgstr	"Sað ok tuþuna basarak parçacýklarý listele"
 
-#: src/lang.c:1514
+#: src/lang.c:1525
 #, fuzzy
 msgid	"# If ON automatically list thread when entering it using right arrow key.\n"
 msgstr	"# ON durumundaysa parçacýklarý sað ok tuþunu kullanarak girerken otomatik "
 	"olarak listele.\n"
 
-#: src/lang.c:1518
+#: src/lang.c:1529
 #, fuzzy
 msgid	"Enter character to indicate deleted articles. <CR> sets, <ESC> cancels."
 msgstr	"Silinmiþ makaleleri göstermek için karakter giriniz. <CR> ayarlar, <ESC> "
 	"iptal eder."
 
-#: src/lang.c:1519
+#: src/lang.c:1530
 #, fuzzy
 msgid	"Character to show deleted articles"
 msgstr	"Silinmiþ makaleleri gösterecek olan karakter"
 
-#: src/lang.c:1520
+#: src/lang.c:1531
 #, fuzzy
 msgid	"# Character used to show that an art was deleted (default 'D')\n"
 	"# _ is turned into ' '\n"
 msgstr	"# Makalenin silindiðini göstermek için kullanýlan karakter (varsayýlan 'D')\n"
-	"#_ þuna dönüþür ' '\n"
+	"# _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1525
+#: src/lang.c:1536
 #, fuzzy
 msgid	"Enter character to indicate articles in a range. <CR> sets, <ESC> cancels."
 msgstr	"Sýralanmýþ makaleleri imlemek için karakter girin. <CR> ayarlar, <ESC> iptal "
 	"eder."
 
-#: src/lang.c:1526
+#: src/lang.c:1537
 #, fuzzy
 msgid	"Character to show inrange articles"
 msgstr	"Sýralanmýþ makaleleri gösterecek olan karakter"
 
-#: src/lang.c:1527
+#: src/lang.c:1538
 #, fuzzy
 msgid	"# Character used to show that an art is in a range (default '#')\n"
 	"# _ is turned into ' '\n"
@@ -5229,19 +5268,19 @@ msgstr	"# Bir makalenin sýralanmýþ olduð
 	"(varsayýlan '#')\n"
 	"# _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1532
+#: src/lang.c:1543
 #, fuzzy
 msgid	"Enter character to indicate that article will return. <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Makalenin döneceðini göstermek için karakter girin. <CR> ayarlar, <ESC> iptal "
 	"eder."
 
-#: src/lang.c:1533
+#: src/lang.c:1544
 #, fuzzy
 msgid	"Character to show returning arts"
 msgstr	"Dönen makaleleri gösterecek olan karakter"
 
-#: src/lang.c:1534
+#: src/lang.c:1545
 #, fuzzy
 msgid	"# Character used to show that an art will return (default '-')\n"
 	"# _ is turned into ' '\n"
@@ -5249,18 +5288,18 @@ msgstr	"# Bir makalenin döneceðini göste
 	"'-')\n"
 	"# _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1539
+#: src/lang.c:1550
 #, fuzzy
 msgid	"Enter character to indicate selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Seçilen makaleleri imlemek için karakter girin. <CR> ayarlar, <ESC> iptal "
 	"eder."
 
-#: src/lang.c:1540
+#: src/lang.c:1551
 #, fuzzy
 msgid	"Character to show selected articles"
 msgstr	"Seçilen makaleleri gösterecek olan karakter"
 
-#: src/lang.c:1541
+#: src/lang.c:1552
 #, fuzzy
 msgid	"# Character used to show that an art was auto-selected (default '*')\n"
 	"# _ is turned into ' '\n"
@@ -5268,17 +5307,17 @@ msgstr	"# Bir makalenin otomatik seçildi
 	"(varsayýlan '*')\n"
 	"# _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1546
+#: src/lang.c:1557
 #, fuzzy
 msgid	"Enter character to indicate recent articles. <CR> sets, <ESC> cancels."
 msgstr	"Son makaleleri imlemek için karakter girin. <CR> ayarlar, <ESC> iptal eder."
 
-#: src/lang.c:1547
+#: src/lang.c:1558
 #, fuzzy
 msgid	"Character to show recent articles"
 msgstr	"Son makaleleri gösterecek olan karakter"
 
-#: src/lang.c:1548
+#: src/lang.c:1559
 #, fuzzy
 msgid	"# Character used to show that an art is recent (default 'o')\n"
 	"# _ is turned into ' '\n"
@@ -5286,18 +5325,18 @@ msgstr	"# Bir makalenin son olduðunu gös
 	"'o')\n"
 	"# _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1553
+#: src/lang.c:1564
 #, fuzzy
 msgid	"Enter character to indicate unread articles. <CR> sets, <ESC> cancels."
 msgstr	"Okunmamýþ makaleleri imlemek için karakter girin. <CR> ayarlar, <ESC> iptal "
 	"eder."
 
-#: src/lang.c:1554
+#: src/lang.c:1565
 #, fuzzy
 msgid	"Character to show unread articles"
 msgstr	"Okunmamýþ makaleleri gösterecek olan karakter"
 
-#: src/lang.c:1555
+#: src/lang.c:1566
 #, fuzzy
 msgid	"# Character used to show that an art is unread (default '+')\n"
 	"# _ is turned into ' '\n"
@@ -5305,17 +5344,17 @@ msgstr	"# Bir makalenin okunmadýðýný gös
 	"'+')\n"
 	"# _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1560
+#: src/lang.c:1571
 #, fuzzy
 msgid	"Enter character to indicate read articles. <CR> sets, <ESC> cancels."
 msgstr	"Okunan makaleleri imlemek için karakter girin. <CR> yarlar, <ESC> iptal eder."
 
-#: src/lang.c:1561
+#: src/lang.c:1572
 #, fuzzy
 msgid	"Character to show read articles"
 msgstr	"Okunmamýþ makaleleri gösterecek olan karakter"
 
-#: src/lang.c:1562
+#: src/lang.c:1573
 #, fuzzy
 msgid	"# Character used to show that an art was read (default ' ')\n"
 	"# _ is turned into ' '\n"
@@ -5323,18 +5362,18 @@ msgstr	"# Bir makalenin okunduðunu göste
 	"')\n"
 	"# _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1567
+#: src/lang.c:1578
 #, fuzzy
 msgid	"Enter character to indicate killed articles. <CR> sets, <ESC> cancels."
 msgstr	"Yok olan makaleleri imlemek için karakter girin. <CR> ayarlar, <ESC> iptal "
 	"eder."
 
-#: src/lang.c:1568
+#: src/lang.c:1579
 #, fuzzy
 msgid	"Character to show killed articles"
 msgstr	"Yok olan makaleleri gösterecen karakter"
 
-#: src/lang.c:1569
+#: src/lang.c:1580
 #, fuzzy
 msgid	"# Character used to show that an art was killed (default 'K')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
@@ -5342,18 +5381,18 @@ msgstr	"# Bir makalenin yok olduðunu gös
 	"'K')\n"
 	"# yok olma düzeyi ona göre ayarlanmalýdýr, _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1574
+#: src/lang.c:1585
 #, fuzzy
 msgid	"Enter character to indicate read selected articles. <CR> sets, <ESC> cancels."
 msgstr	"Okunmuþ-seçilmiþ makaleleri imlemek için karakter girin. <CR> ayarlar, <ESC> "
 	"iptal eder."
 
-#: src/lang.c:1575
+#: src/lang.c:1586
 #, fuzzy
 msgid	"Character to show readselected arts"
 msgstr	"Okunmuþ-seçilmiþ makaleleri gösteren karakter"
 
-#: src/lang.c:1576
+#: src/lang.c:1587
 #, fuzzy
 msgid	"# Character used to show that an art was selected before read (default ':')\n"
 	"# kill_level must be set accordingly, _ is turned into ' '\n"
@@ -5361,27 +5400,27 @@ msgstr	"# Bir makalenin okunmadan seçild
 	"(varsayýlan ':')\n"
 	"# yok olma düzeyi ona göre ayarlanmalýdýr, _ þuna dönüþür ' '\n"
 
-#: src/lang.c:1581
+#: src/lang.c:1592
 #, fuzzy
 msgid	"Enter maximum length of newsgroup names displayed. <CR> sets."
 msgstr	"Görünen haber gruplarýnýn en fazla uzunluðunu girin. <CR> ayarlar."
 
-#: src/lang.c:1582
+#: src/lang.c:1593
 #, fuzzy
 msgid	"Max. length of group names shown"
 msgstr	"Gösterilen grup isimlerinin en fazla uzunluðu"
 
-#: src/lang.c:1583
+#: src/lang.c:1594
 #, fuzzy
 msgid	"# Maximum length of the names of newsgroups displayed\n"
 msgstr	"# Görünen haber gryplarýnýn isimlerinin en fazla uzunluðu\n"
 
-#: src/lang.c:1588
+#: src/lang.c:1599
 #, fuzzy
 msgid	"Show lines/score in listings"
 msgstr	"Listelerdeki satýrlarý/skoru göster"
 
-#: src/lang.c:1589
+#: src/lang.c:1600
 #, fuzzy
 msgid	"# What informations should be displayed in article/thread listing\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -5392,19 +5431,19 @@ msgid	"# What informations should be dis
 msgstr	"# Makale/parçacýk listelerinde hangi bilgiler gösterilmeli\n"
 	"# 0 = hiçbir þey, 1 = satýrlar, 2 = skor, 3 = satýrlar & skor\n"
 
-#: src/lang.c:1598
+#: src/lang.c:1609
 #, fuzzy
-msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, "
-	"-2 = half page"
+msgid	"0 = full page scrolling, -1 = show previous last line as first on next page, -"
+	"2 = half page"
 msgstr	"0 = tüm sayfa kaydýrýmý, -1 = önceki son satýrý bir sonraki sayfanýn ilk "
 	"satýrýnda göster, -2 = yarým sayfa"
 
-#: src/lang.c:1599
+#: src/lang.c:1610
 #, fuzzy
 msgid	"Number of lines to scroll in pager"
 msgstr	"Sayfalayýcýda kaydýrýlan satýr sayýsý"
 
-#: src/lang.c:1600
+#: src/lang.c:1611
 msgid	"# Number of lines that cursor-up/down will scroll in article pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#  -2 = half-page scrolling\n"
@@ -5414,28 +5453,28 @@ msgid	"# Number of lines that cursor-up/
 	"#   2 or greater = scroll by 2 or more lines (only in the pager)\n"
 msgstr	""
 
-#: src/lang.c:1610
+#: src/lang.c:1621
 msgid	"Display signatures. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1611
+#: src/lang.c:1622
 #, fuzzy
 msgid	"Display signatures"
 msgstr	"Seçenekleri Göster"
 
-#: src/lang.c:1612
+#: src/lang.c:1623
 msgid	"# If OFF don't show signatures when displaying articles\n"
 msgstr	""
 
-#: src/lang.c:1616
+#: src/lang.c:1627
 msgid	"Display uuencoded data as tagged attachments. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1617
+#: src/lang.c:1628
 msgid	"Display uue data as an attachment"
 msgstr	""
 
-#: src/lang.c:1618
+#: src/lang.c:1629
 msgid	"# Handling of uuencoded data in the pager\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no, display raw uuencoded data\n"
@@ -5445,28 +5484,28 @@ msgid	"# Handling of uuencoded data in t
 	"#       be folded into a tag line.\n"
 msgstr	""
 
-#: src/lang.c:1628
+#: src/lang.c:1639
 msgid	"Decode German style TeX umlaut codes to ISO. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1629
+#: src/lang.c:1640
 msgid	"Display \"a as Umlaut-a"
 msgstr	""
 
-#: src/lang.c:1630
+#: src/lang.c:1641
 msgid	"# If ON decode German style TeX umlaut codes to ISO and\n"
 	"# show \"a as Umlaut-a, etc.\n"
 msgstr	""
 
-#: src/lang.c:1635 src/lang.c:1645
+#: src/lang.c:1646 src/lang.c:1656
 msgid	"Space separated list of header fields"
 msgstr	""
 
-#: src/lang.c:1636
+#: src/lang.c:1647
 msgid	"Display these header fields (or *)"
 msgstr	""
 
-#: src/lang.c:1637
+#: src/lang.c:1648
 msgid	"# Which news headers you wish to see. If you want to see _all_ the headers,\n"
 	"# place an '*' as this value. This is the only way a wildcard can be used.\n"
 	"# If you enter 'X-' as the value, you will see all headers beginning with\n"
@@ -5475,12 +5514,12 @@ msgid	"# Which news headers you wish to 
 	"# spaces. Not defining anything turns off this option.\n"
 msgstr	""
 
-#: src/lang.c:1646
+#: src/lang.c:1657
 #, fuzzy
 msgid	"Do not display these header fields"
 msgstr	"Aktüel habver baþlýlarý alanýnýn rengi"
 
-#: src/lang.c:1647
+#: src/lang.c:1658
 msgid	"# Same as 'news_headers_to_display' except it denotes the opposite.\n"
 	"# An example of using both options might be if you thought X- headers were\n"
 	"# A Good Thing(tm), but thought Alan and Pape were miscreants...well then "
@@ -5491,364 +5530,364 @@ msgid	"# Same as 'news_headers_to_displa
 	"# Not defining anything turns off this option.\n"
 msgstr	""
 
-#: src/lang.c:1657
+#: src/lang.c:1668
 msgid	"Do you want to enable automatic handling of multipart/alternative articles?"
 msgstr	""
 
-#: src/lang.c:1658
+#: src/lang.c:1669
 msgid	"Skip multipart/alternative parts"
 msgstr	""
 
-#: src/lang.c:1659
+#: src/lang.c:1670
 msgid	"# If ON strip multipart/alternative messages automatically\n"
 msgstr	""
 
-#: src/lang.c:1664
+#: src/lang.c:1675
 msgid	"A regex used to decide which lines to show in col_quote."
 msgstr	""
 
-#: src/lang.c:1665
+#: src/lang.c:1676
 msgid	"Regex used to show quoted lines"
 msgstr	""
 
-#: src/lang.c:1666
+#: src/lang.c:1677
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted when viewing articles. Quoted lines are shown in col_quote.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1672
+#: src/lang.c:1683
 msgid	"A regex used to decide which lines to show in col_quote2."
 msgstr	""
 
-#: src/lang.c:1673
+#: src/lang.c:1684
 msgid	"Regex used to show twice quoted l."
 msgstr	""
 
-#: src/lang.c:1674
+#: src/lang.c:1685
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted twice. Twice quoted lines are shown in col_quote2.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1680
+#: src/lang.c:1691
 msgid	"A regex used to decide which lines to show in col_quote3."
 msgstr	""
 
-#: src/lang.c:1681
+#: src/lang.c:1692
 msgid	"Regex used to show >= 3 times q.l."
 msgstr	""
 
-#: src/lang.c:1682
+#: src/lang.c:1693
 msgid	"# A regular expression that tin will use to decide which lines are\n"
 	"# quoted >=3 times. >=3 times quoted lines are shown in col_quote3.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1689
+#: src/lang.c:1700
 msgid	"A regex used to decide which words to show in col_markslashes."
 msgstr	""
 
-#: src/lang.c:1690
+#: src/lang.c:1701
 msgid	"Regex used to highlight /slashes/"
 msgstr	""
 
-#: src/lang.c:1691
+#: src/lang.c:1702
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '/' are to be shown in col_markslashes.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1697
+#: src/lang.c:1708
 msgid	"A regex used to decide which words to show in col_markstars."
 msgstr	""
 
-#: src/lang.c:1698
+#: src/lang.c:1709
 msgid	"Regex used to highlight *stars*"
 msgstr	""
 
-#: src/lang.c:1699
+#: src/lang.c:1710
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '*' are to be shown in col_markstars.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1705
+#: src/lang.c:1716
 msgid	"A regex used to decide which words to show in col_markstroke."
 msgstr	""
 
-#: src/lang.c:1706
+#: src/lang.c:1717
 #, fuzzy
 msgid	"Regex used to highlight -strokes-"
 msgstr	"-vuruþ- ile vurgulama rengi"
 
-#: src/lang.c:1707
+#: src/lang.c:1718
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '-' are to be shown in col_markstroke.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1713
+#: src/lang.c:1724
 msgid	"A regex used to decide which words to show in col_markdash."
 msgstr	""
 
-#: src/lang.c:1714
+#: src/lang.c:1725
 msgid	"Regex used to highlight _underline_"
 msgstr	""
 
-#: src/lang.c:1715
+#: src/lang.c:1726
 msgid	"# A regular expression that tin will use to decide which words\n"
 	"# bounded by '_' are to be shown in col_markdash.\n"
 	"# If you leave this blank, tin will use a built in default.\n"
 msgstr	""
 
-#: src/lang.c:1721
+#: src/lang.c:1732
 msgid	"A regex used to find Subject prefixes to remove.  Use '|' as separator."
 msgstr	""
 
-#: src/lang.c:1722
+#: src/lang.c:1733
 msgid	"Regex with Subject prefixes"
 msgstr	""
 
-#: src/lang.c:1723
+#: src/lang.c:1734
 msgid	"# A regular expression that tin will use to find Subject prefixes\n"
 	"# which will be removed before showing the header.\n"
 msgstr	""
 
-#: src/lang.c:1728
+#: src/lang.c:1739
 msgid	"A regex used to find Subject suffixes to remove.  Use '|' as separator."
 msgstr	""
 
-#: src/lang.c:1729
+#: src/lang.c:1740
 msgid	"Regex with Subject suffixes"
 msgstr	""
 
-#: src/lang.c:1730
+#: src/lang.c:1741
 msgid	"# A regular expression that tin will use to find Subject suffixes\n"
 	"# which will be removed when replying or posting followup.\n"
 msgstr	""
 
-#: src/lang.c:1735
+#: src/lang.c:1746
 msgid	"Enter name and options for external MIME viewer, --internal for built-in "
 	"viewer"
 msgstr	""
 
-#: src/lang.c:1736
+#: src/lang.c:1747
 msgid	"MIME binary content viewer"
 msgstr	""
 
-#: src/lang.c:1737
+#: src/lang.c:1748
 msgid	"# If --internal automatically use the built in MIME viewer for non-text\n"
 	"# parts of articles.\n"
 	"# Otherwise specify an external viewer program (eg, metamail) or leave blank\n"
 	"# for no automatic viewing\n"
 msgstr	""
 
-#: src/lang.c:1744
+#: src/lang.c:1755
 msgid	"Confirm before starting non-text viewing program"
 msgstr	""
 
-#: src/lang.c:1745
+#: src/lang.c:1756
 msgid	"Ask before using MIME viewer"
 msgstr	""
 
-#: src/lang.c:1746
+#: src/lang.c:1757
 msgid	"# If ON tin will ask before using metamail to display MIME messages\n"
 	"# this only happens if metamail_prog is set to something\n"
 msgstr	""
 
-#: src/lang.c:1751
+#: src/lang.c:1762
 msgid	"Ask to mark groups read when quitting. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:1752
+#: src/lang.c:1763
 msgid	"Catchup read groups when quitting"
 msgstr	""
 
-#: src/lang.c:1753
+#: src/lang.c:1764
 msgid	"# If ON ask user if read groups should all be marked read\n"
 msgstr	""
 
-#: src/lang.c:1758
+#: src/lang.c:1769
 msgid	"Catchup group using left key"
 msgstr	""
 
-#: src/lang.c:1759
+#: src/lang.c:1770
 msgid	"# If ON catchup group/thread when leaving with the left arrow key.\n"
 msgstr	""
 
-#: src/lang.c:1764
+#: src/lang.c:1775
 msgid	"Catchup thread by using left key"
 msgstr	""
 
-#: src/lang.c:1770
+#: src/lang.c:1781
 msgid	"Which actions require confirmation"
 msgstr	""
 
-#: src/lang.c:1771
+#: src/lang.c:1782
 msgid	"# What should we ask confirmation for.\n"
 msgstr	""
 
-#: src/lang.c:1776
+#: src/lang.c:1787
 #, fuzzy
 msgid	"'Mark article read' ignores tags"
 msgstr	"makaleyi okunmamýþ olarak iþaretle"
 
-#: src/lang.c:1777
+#: src/lang.c:1788
 #, fuzzy
 msgid	"# If ON the 'Mark article read' function marks only the current article.\n"
 msgstr	"# ON durumundaysa 'makaleyi okunmuþ olarak iþaretle'"
 
-#: src/lang.c:1781
+#: src/lang.c:1792
 #, fuzzy
 msgid	"Program to run to open URL's, <CR> sets, <ESC> cancels."
 msgstr	"URL açmak için çalýþtýrýlan program, <CR> ayarlar, <ESC> iptal eder."
 
-#: src/lang.c:1782
+#: src/lang.c:1793
 #, fuzzy
 msgid	"Program that opens URL's"
 msgstr	"URL açan program"
 
-#: src/lang.c:1783
+#: src/lang.c:1794
 #, fuzzy
 msgid	"# The program used to open URL's. The actual URL will be appended\n"
 msgstr	"# Program URL açýyordu. Aktüel URL'ler sona eklenecek\n"
 
-#: src/lang.c:1788
+#: src/lang.c:1799
 #, fuzzy
 msgid	"Use mouse in xterm"
 msgstr	"xterm2de fare kullan"
 
-#: src/lang.c:1789
+#: src/lang.c:1800
 #, fuzzy
 msgid	"# If ON enable mouse key support on xterm terminals\n"
 msgstr	"# ON durumundaysa xtrem uçbirimlerini destekleyen fare tuþunu etkinleþtir.\n"
 
-#: src/lang.c:1795
+#: src/lang.c:1806
 #, fuzzy
 msgid	"Use scroll keys on keypad"
 msgstr	"Klavye üzerinde kaydýrma tuþlarýný kullan"
 
-#: src/lang.c:1796
+#: src/lang.c:1807
 #, fuzzy
 msgid	"# If ON enable scroll keys on terminals that support it\n"
 msgstr	"# ON durumunduysa uçbirimler tarafýndan desteklenen kaydýrma tuþlarýný "
 	"etkinleþtir\n"
 
-#: src/lang.c:1801
+#: src/lang.c:1812
 #, fuzzy
 msgid	"Enter maximum number of article to get. <CR> sets."
 msgstr	"Alýnacak makalenin max. sayýsýný yazýn. <CR> ayarlar."
 
-#: src/lang.c:1802
+#: src/lang.c:1813
 #, fuzzy
 msgid	"Number of articles to get"
 msgstr	"Alýnacak makale sayýsý"
 
-#: src/lang.c:1803
+#: src/lang.c:1814
 #, fuzzy
 msgid	"# Number of articles to get (0=no limit), if negative sets maximum number\n"
 	"# of already read articles to be read before first unread one\n"
 msgstr	"# Alýnacak makale sayýsý (0= sýnýrsýz), eðer negatif max.sayýyý ayarlarsa\n"
 
-#: src/lang.c:1808
+#: src/lang.c:1819
 #, fuzzy
 msgid	"Enter number of days article is considered recent. <CR> sets."
 msgstr	"Makalenin yeni sayýlacaðý gün sayýsýný yazýn. <CR> ayarlar."
 
-#: src/lang.c:1809
+#: src/lang.c:1820
 #, fuzzy
 msgid	"Article recentness time limit"
 msgstr	"Makalenin yenilik zaman sýnýrý"
 
-#: src/lang.c:1810
+#: src/lang.c:1821
 #, fuzzy
 msgid	"# Number of days in which article is considered recent, (0=OFF)\n"
 msgstr	"# Makalenin yeni sayýldýðý gün sayýsý, (0=OFF)\n"
 
-#: src/lang.c:1814
+#: src/lang.c:1825
 #, fuzzy
 msgid	"WILDMAT for normal wildcards, REGEX for full regular expression matching."
 msgstr	"WILDMAT normal jokerler, REGEX tam düzenli varsayým eþleþtirmeleri  içindir."
 
-#: src/lang.c:1815
+#: src/lang.c:1826
 #, fuzzy
 msgid	"Wildcard matching"
 msgstr	"Joker eþleþtiriyor"
 
-#: src/lang.c:1816
+#: src/lang.c:1827
 msgid	"# Wildcard matching\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = wildmat\n"
 	"#   1 = regex\n"
 msgstr	""
 
-#: src/lang.c:1823
+#: src/lang.c:1834
 #, fuzzy
 msgid	"Enter minimal score before an article is marked killed. <CR> sets."
 msgstr	"Makale yok et olarak iþaretlenmeden önce minimal skoru yazýn.<CR> ayarlar."
 
-#: src/lang.c:1824
+#: src/lang.c:1835
 #, fuzzy
 msgid	"Score limit (kill)"
 msgstr	"Sýnýrý skorla (yok et)"
 
-#: src/lang.c:1825
+#: src/lang.c:1836
 #, fuzzy
 msgid	"# Score limit before an article is marked killed\n"
 msgstr	"# Makale yok et olarak iþaretlendiðinde sýnýrý skorla\n"
 
-#: src/lang.c:1829
+#: src/lang.c:1840
 #, fuzzy
 msgid	"Enter default score to kill articles. <CR> sets."
 msgstr	"Makaleleri yok etmke için varsayýlan skoru yazýn. <CR> ayarlar."
 
-#: src/lang.c:1830
+#: src/lang.c:1841
 #, fuzzy
 msgid	"Default score to kill articles"
 msgstr	"Makaleleri yok etmke için skoru varsay"
 
-#: src/lang.c:1831
+#: src/lang.c:1842
 #, fuzzy
 msgid	"# Default score to kill articles\n"
 msgstr	"# Makaleleri yok etmke için skoru varsay\n"
 
-#: src/lang.c:1835
+#: src/lang.c:1846
 #, fuzzy
 msgid	"Enter minimal score before an article is marked hot. <CR> sets."
 msgstr	"Makale 'hot' olarak iþaretlenmeden önce minimum skoru yazýn.<CR> ayarlar."
 
-#: src/lang.c:1836
+#: src/lang.c:1847
 #, fuzzy
 msgid	"Score limit (select)"
 msgstr	"Sýnýrý skorla (seç)"
 
-#: src/lang.c:1837
+#: src/lang.c:1848
 #, fuzzy
 msgid	"# Score limit before an article is marked hot\n"
 msgstr	"# Makale 'hot! olarak iþaretlenmeden önce sýnýrý skorlayýn\n"
 
-#: src/lang.c:1841
+#: src/lang.c:1852
 #, fuzzy
 msgid	"Enter default score to select articles. <CR> sets."
 msgstr	"Makaleleri seçmek için varsayýlan skoru yazýn.<CR> ayarlar."
 
-#: src/lang.c:1842
+#: src/lang.c:1853
 #, fuzzy
 msgid	"Default score to select articles"
 msgstr	"Makaleleri seçmek için varsayýlan deðer"
 
-#: src/lang.c:1843
+#: src/lang.c:1854
 #, fuzzy
 msgid	"# Default score to select articles\n"
 msgstr	"# Makaleleri seçmek için varsayýlan deðer\n"
 
-#: src/lang.c:1849
+#: src/lang.c:1860
 #, fuzzy
 msgid	"Use slrnface to show ''X-Face:''s"
 msgstr	"''X-Face:''s göstermek için slmface kullan"
 
-#: src/lang.c:1850
+#: src/lang.c:1861
 #, fuzzy
 msgid	"# If ON using slrnface(1) to interpret the ''X-Face:'' header.\n"
 	"# Only useful when running in an xterm.\n"
@@ -5856,273 +5895,273 @@ msgstr	"# ON durmunduysa ''X-Face:'' baþ
 	"kullanýlýyor.\n"
 	"# sadece xterm çalýþýtýrýlýrken yararlý.\n"
 
-#: src/lang.c:1858
+#: src/lang.c:1869
 #, fuzzy
 msgid	"Use ANSI color"
 msgstr	"ANSI renk geçerli"
 
-#: src/lang.c:1859
+#: src/lang.c:1870
 #, fuzzy
 msgid	"# If ON using ANSI-color\n"
 msgstr	"# On durumundaysa ANSI-renk kullanýlýyor\n"
 
-#: src/lang.c:1864
+#: src/lang.c:1875
 #, fuzzy
 msgid	"Standard foreground color"
 msgstr	"Standart önplan rengi"
 
-#: src/lang.c:1865
+#: src/lang.c:1876
 #, fuzzy
 msgid	"# Standard foreground color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standart önplan rengi\n"
 
-#: src/lang.c:1871
+#: src/lang.c:1882
 #, fuzzy
 msgid	"Standard background color"
 msgstr	"Standart arkaplan rengi"
 
-#: src/lang.c:1872
+#: src/lang.c:1883
 #, fuzzy
 msgid	"# Standard background color\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Standart arkaplan rengi\n"
 
-#: src/lang.c:1878
+#: src/lang.c:1889
 #, fuzzy
 msgid	"Color for inverse text (background)"
 msgstr	"Çapraz metnin arkaplan rengi"
 
-#: src/lang.c:1879
+#: src/lang.c:1890
 #, fuzzy
 msgid	"# Color of background for inverse text\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Çapraz metnin arkaplan rengi\n"
 
-#: src/lang.c:1885
+#: src/lang.c:1896
 #, fuzzy
 msgid	"Color for inverse text (foreground)"
 msgstr	"Çapraz metnin önplan rengi"
 
-#: src/lang.c:1886
+#: src/lang.c:1897
 #, fuzzy
 msgid	"# Color of foreground for inverse text\n"
 	"# Default: 7 (white)\n"
 msgstr	"# Çapraz metnin önplan rengi\n"
 
-#: src/lang.c:1892
+#: src/lang.c:1903
 #, fuzzy
 msgid	"Color of text lines"
 msgstr	"Metin satýrlarýnýn rengi"
 
-#: src/lang.c:1893
+#: src/lang.c:1904
 #, fuzzy
 msgid	"# Color of text lines\n"
 	"# Default: -1 (default color)\n"
 msgstr	"# Color of text lines\n"
 
-#: src/lang.c:1899
+#: src/lang.c:1910
 #, fuzzy
 msgid	"Color of mini help menu"
 msgstr	"Mini yardým menüsünün rengi"
 
-#: src/lang.c:1900
+#: src/lang.c:1911
 #, fuzzy
 msgid	"# Color of mini help menu\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Mini yardým menüsünün rengi\n"
 
-#: src/lang.c:1906
+#: src/lang.c:1917
 #, fuzzy
 msgid	"Color of help text"
 msgstr	"Yardým sayfalarýnýn rengi"
 
-#: src/lang.c:1907
+#: src/lang.c:1918
 msgid	"# Color of help pages\n"
 	"# Default: -1 (default color)\n"
 msgstr	""
 
-#: src/lang.c:1913
+#: src/lang.c:1924
 #, fuzzy
 msgid	"Color of status messages"
 msgstr	"Durum iletilerinin rengi"
 
-#: src/lang.c:1914
+#: src/lang.c:1925
 #, fuzzy
 msgid	"# Color of messages in last line\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Son satýrdaki iletilerin rengi\n"
 
-#: src/lang.c:1920
+#: src/lang.c:1931
 #, fuzzy
 msgid	"Color of quoted lines"
 msgstr	"Ýmlenmiþ-satýr rengi"
 
-#: src/lang.c:1921
+#: src/lang.c:1932
 #, fuzzy
 msgid	"# Color of quote-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Ýmlenmiþ-satýr rengi\n"
 
-#: src/lang.c:1927
+#: src/lang.c:1938
 #, fuzzy
 msgid	"Color of twice quoted line"
 msgstr	"Çift imlenen satýrlarýn rengi"
 
-#: src/lang.c:1928
+#: src/lang.c:1939
 #, fuzzy
 msgid	"# Color of twice quoted lines\n"
 	"# Default: 3 (brown)\n"
 msgstr	"# Çift imlenen satýrlarýn rengi\n"
 
-#: src/lang.c:1934
+#: src/lang.c:1945
 #, fuzzy
 msgid	"Color of =>3 times quoted line"
 msgstr	"Ýmlenmiþ satýrda =>3 kat rengi"
 
-#: src/lang.c:1935
+#: src/lang.c:1946
 #, fuzzy
 msgid	"# Color of >=3 times quoted lines\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Ýmlenmiþ satýrlarda >=3 kat rengi\n"
 
-#: src/lang.c:1941
+#: src/lang.c:1952
 #, fuzzy
 msgid	"Color of article header lines"
 msgstr	"Makale baþlýk satýrlarýnýn rengi"
 
-#: src/lang.c:1942
+#: src/lang.c:1953
 #, fuzzy
 msgid	"# Color of header-lines\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Baþlýk-satýrlarýnýn rengi\n"
 
-#: src/lang.c:1948
+#: src/lang.c:1959
 #, fuzzy
 msgid	"Color of actual news header fields"
 msgstr	"Aktüel habver baþlýlarý alanýnýn rengi"
 
-#: src/lang.c:1949
+#: src/lang.c:1960
 #, fuzzy
 msgid	"# Color of actual news header fields\n"
 	"# Default: 9 (light red)\n"
 msgstr	"# Aktüel haber baþlýklarý alanýnýn rengi\n"
 
-#: src/lang.c:1955
+#: src/lang.c:1966
 #, fuzzy
 msgid	"Color of article subject lines"
 msgstr	"Makale konu satýrlarýnýn rengi"
 
-#: src/lang.c:1956
+#: src/lang.c:1967
 #, fuzzy
 msgid	"# Color of article subject\n"
 	"# Default: 6 (cyan)\n"
 msgstr	"# Makale konusunun rengi\n"
 
-#: src/lang.c:1962
+#: src/lang.c:1973
 #, fuzzy
 msgid	"Color of response counter"
 msgstr	"Yanýt sayacý rengi"
 
-#: src/lang.c:1963
+#: src/lang.c:1974
 #, fuzzy
 msgid	"# Color of response counter\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Yanýt sayacý rengi\n"
 
-#: src/lang.c:1969
+#: src/lang.c:1980
 #, fuzzy
 msgid	"Color of sender (From:)"
 msgstr	"Gönderen (-den:) rengi"
 
-#: src/lang.c:1970
+#: src/lang.c:1981
 #, fuzzy
 msgid	"# Color of sender (From:)\n"
 	"# Default: 2 (green)\n"
 msgstr	"# Gönderen (-den:) rengi\n"
 
-#: src/lang.c:1976
+#: src/lang.c:1987
 #, fuzzy
 msgid	"Color of help/mail sign"
 msgstr	"yardým/posta iþareti rengi"
 
-#: src/lang.c:1977
+#: src/lang.c:1988
 #, fuzzy
 msgid	"# Color of Help/Mail-Sign\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Yardým/Posta Ýþareti rengi\n"
 
-#: src/lang.c:1983
+#: src/lang.c:1994
 #, fuzzy
 msgid	"Color of signatures"
 msgstr	"Ýmza rengi"
 
-#: src/lang.c:1984
+#: src/lang.c:1995
 #, fuzzy
 msgid	"# Color of signature\n"
 	"# Default: 4 (blue)\n"
 msgstr	"# Ýmza rengi\n"
 
-#: src/lang.c:1990
+#: src/lang.c:2001
 #, fuzzy
 msgid	"Color of highlighted URLs"
 msgstr	"*yýldýz* ile vurgulama rengi"
 
-#: src/lang.c:1991
+#: src/lang.c:2002
 msgid	"# Color of highlighted URLs\n"
 	"# Default: -1 (default color)\n"
 msgstr	""
 
-#: src/lang.c:1997
+#: src/lang.c:2008
 #, fuzzy
 msgid	"Color of highlighting with *stars*"
 msgstr	"*yýldýz* ile vurgulama rengi"
 
-#: src/lang.c:1998
+#: src/lang.c:2009
 #, fuzzy
 msgid	"# Color of word highlighting with *stars*\n"
 	"# Default: 11 (yellow)\n"
 msgstr	"# *yýldýz* ile vurgulama rengi\n"
 
-#: src/lang.c:2004
+#: src/lang.c:2015
 #, fuzzy
 msgid	"Color of highlighting with _dash_"
 msgstr	"_kesik çizgi_ ile vurgulama rengi"
 
-#: src/lang.c:2005
+#: src/lang.c:2016
 #, fuzzy
 msgid	"# Color of word highlighting with _dash_\n"
 	"# Default: 13 (light pink)\n"
 msgstr	"# _kesik çizgi_ ile vurgulama rengi\n"
 
-#: src/lang.c:2011
+#: src/lang.c:2022
 #, fuzzy
 msgid	"Color of highlighting with /slash/"
 msgstr	"/bölü/ ile vurgulama rengi"
 
-#: src/lang.c:2012
+#: src/lang.c:2023
 #, fuzzy
 msgid	"# Color of word highlighting with /slash/\n"
 	"# Default: 14 (light cyan)\n"
 msgstr	"# /bölü/ ile vurgulama rengi\n"
 
-#: src/lang.c:2018
+#: src/lang.c:2029
 #, fuzzy
 msgid	"Color of highlighting with -stroke-"
 msgstr	"-vuruþ- ile vurgulama rengi"
 
-#: src/lang.c:2019
+#: src/lang.c:2030
 #, fuzzy
 msgid	"# Color of word highlighting with -stroke-\n"
 	"# Default: 12 (light blue)\n"
 msgstr	"# -vuruþ- ile vurgulama rengi\n"
 
-#: src/lang.c:2026
+#: src/lang.c:2037
 #, fuzzy
 msgid	"Attr. of highlighting with *stars*"
 msgstr	"*yýldýz*  ile vurgulama özniteliði"
 
-#: src/lang.c:2027
+#: src/lang.c:2038
 #, fuzzy
 msgid	"# Attributes of word highlighting on mono terminals\n"
 	"# Possible values are:\n"
@@ -6143,64 +6182,64 @@ msgstr	"# Tekli uçbirimlerde sözcük vurg
 	"# 0 - Normal, 1 - Altýný çiz, 2 - En iyi vurgulama,\n"
 	"# 3 - Video ters çevir, 4 - Yanýp sönen, 5 - Yaý parlak, 6 - Koyu\n"
 
-#: src/lang.c:2042
+#: src/lang.c:2053
 #, fuzzy
 msgid	"Attr. of highlighting with _dash_"
 msgstr	"_vuruþ_  ile vurgulama özniteliði"
 
-#: src/lang.c:2043
+#: src/lang.c:2054
 msgid	"# Attribute of word highlighting with _dash_\n"
 	"# Default: 2 (best highlighting)\n"
 msgstr	""
 
-#: src/lang.c:2049
+#: src/lang.c:2060
 #, fuzzy
 msgid	"Attr. of highlighting with /slash/"
 msgstr	"/bölü/ ile vurgulama özniteliði"
 
-#: src/lang.c:2050
+#: src/lang.c:2061
 #, fuzzy
 msgid	"# Attribute of word highlighting with /slash/\n"
 	"# Default: 5 (half bright)\n"
 msgstr	"# /bölü/ ile vurgulama özniteliði\n"
 
-#: src/lang.c:2056
+#: src/lang.c:2067
 #, fuzzy
 msgid	"Attr. of highlighting with -stroke-"
 msgstr	"-kesik çizgi- ile vurgulama özniteliði"
 
-#: src/lang.c:2057
+#: src/lang.c:2068
 #, fuzzy
 msgid	"# Attribute of word highlighting with -stroke-\n"
 	"# Default: 3 (reverse video)\n"
 msgstr	"# -kesik çizgi- ile vurgulama özniteliði\n"
 
-#: src/lang.c:2063
+#: src/lang.c:2074
 #, fuzzy
 msgid	"URL highlighting in message body"
 msgstr	"Ýleti gövdesinde vurgulana sözcük"
 
-#: src/lang.c:2064
+#: src/lang.c:2075
 #, fuzzy
 msgid	"# Enable URL highlighting?\n"
 msgstr	"# Sözcük vurgulamayý etkinlþetir?\n"
 
-#: src/lang.c:2069
+#: src/lang.c:2080
 #, fuzzy
 msgid	"Word highlighting in message body"
 msgstr	"Ýleti gövdesinde vurgulana sözcük"
 
-#: src/lang.c:2070
+#: src/lang.c:2081
 #, fuzzy
 msgid	"# Enable word highlighting?\n"
 msgstr	"# Sözcük vurgulamayý etkinlþetir?\n"
 
-#: src/lang.c:2075
+#: src/lang.c:2086
 #, fuzzy
 msgid	"What to display instead of mark"
 msgstr	"Ýþaretin yerine ne gösterilmeli?"
 
-#: src/lang.c:2076
+#: src/lang.c:2087
 #, fuzzy
 msgid	"# Should the leading and ending stars and dashes also be displayed,\n"
 	"# even when they are highlighting marks?\n"
@@ -6208,70 +6247,70 @@ msgid	"# Should the leading and ending s
 	"#   0 = no\n"
 	"#   1 = yes, display mark\n"
 	"# * 2 = print a space instead\n"
-msgstr	"#iþaretleri vurgulasalar bile?\"#baþtaki ve sondaki yýldýzlar ve kesik "
-	"çizgiler görüntülenmelidir\n"
+msgstr	"# iþaretleri vurgulasalar bile?\n"
+	"# baþtaki ve sondaki yýldýzlar ve kesik çizgiler görüntülenmelidir\n"
 	"# 0 - hayýr    1 - evet, iþareti görüntüle    2 - boþluk býrak\n"
 
-#: src/lang.c:2085
+#: src/lang.c:2096
 #, fuzzy
 msgid	"Enter column number to wrap article lines to in the pager. <CR> sets."
 msgstr	"Sayfalayýcýdaki makale satýrlarýný çevrelemek için sütun mumarasýný yazýn. "
 	"<CR> ayarlar."
 
-#: src/lang.c:2086
+#: src/lang.c:2097
 #, fuzzy
 msgid	"Page line wrap column"
 msgstr	"Sayfa satýrý sütunu çevreliyor"
 
-#: src/lang.c:2087
+#: src/lang.c:2098
 #, fuzzy
 msgid	"# Wrap article lines at column\n"
 msgstr	"# Sütundaki makale satýrlarýný çevrele\n"
 
-#: src/lang.c:2092
+#: src/lang.c:2103
 #, fuzzy
 msgid	"Wrap around threads on next unread"
 msgstr	"Sonraki okunmayanda parçacýklarý çevrele"
 
-#: src/lang.c:2093
+#: src/lang.c:2104
 #, fuzzy
 msgid	"# If ON wrap around threads on searching next unread article\n"
 msgstr	"# ON durumunduysa sonraki okunmayan makaleyi aramak için parçacýklarý "
 	"çevrele\n"
 
-#: src/lang.c:2097
+#: src/lang.c:2108
 #, fuzzy
 msgid	"Enter default mail address (and fullname). <CR> sets."
 msgstr	"Varsayýlan posta adresini (ve tüm ismi) yaz, <CR> ayarlar."
 
-#: src/lang.c:2098
+#: src/lang.c:2109
 #, fuzzy
 msgid	"Mail address (and fullname)"
 msgstr	"Posta adresi (ile tüm isim)"
 
-#: src/lang.c:2099
+#: src/lang.c:2110
 #, fuzzy
 msgid	"# User's mail address (and fullname), if not username@host (fullname)\n"
 msgstr	"# Kullanýcýnýn posta adresi (ile tüm ismi), deðilse kullanýcýadý@anasistem "
 	"(tüm isim)\n"
 
-#: src/lang.c:2104
+#: src/lang.c:2115
 msgid	"Show empty Followup-To in editor"
 msgstr	""
 
-#: src/lang.c:2105
+#: src/lang.c:2116
 msgid	"# If ON show empty Followup-To header when editing an article\n"
 msgstr	""
 
-#: src/lang.c:2109
+#: src/lang.c:2120
 msgid	"Enter path/! command/--none to create your default signature. <CR> sets."
 msgstr	""
 
-#: src/lang.c:2110
+#: src/lang.c:2121
 msgid	"Create signature from path/command"
 msgstr	""
 
-#: src/lang.c:2111
+#: src/lang.c:2122
 msgid	"# Signature path (random sigs)/file to be used when posting/replying\n"
 	"# default_sigfile=file       appends file as signature\n"
 	"# default_sigfile=!command   executes external command to generate a "
@@ -6279,51 +6318,52 @@ msgid	"# Signature path (random sigs)/fi
 	"# default_sigfile=--none     don't append a signature\n"
 msgstr	""
 
-#: src/lang.c:2118
+#: src/lang.c:2129
 msgid	"Prepend signature with \"-- \" on own line. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2119
+#: src/lang.c:2130
 msgid	"Prepend signature with \"-- \""
 msgstr	""
 
-#: src/lang.c:2120
+#: src/lang.c:2131
 msgid	"# If ON prepend the signature with dashes '\\n-- \\n'\n"
 msgstr	""
 
-#: src/lang.c:2124
+#: src/lang.c:2135
 msgid	"Add signature when reposting articles. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2125
+#: src/lang.c:2136
 msgid	"Add signature when reposting"
 msgstr	""
 
-#: src/lang.c:2126
+#: src/lang.c:2137
 msgid	"# If ON add signature to reposted articles\n"
 msgstr	""
 
-#: src/lang.c:2130
+#: src/lang.c:2141
+#, c-format
 msgid	"Enter quotation marks, %s or %S for author's initials."
 msgstr	""
 
-#: src/lang.c:2131
+#: src/lang.c:2142
 msgid	"Characters used as quote-marks"
 msgstr	""
 
-#: src/lang.c:2132
-#, fuzzy
+#: src/lang.c:2143
+#, fuzzy, c-format
 msgid	"# Characters used in quoting to followups and replies.\n"
 	"# '_' is replaced by ' ', %%s, %%S are replaced by author's initials.\n"
 msgstr	"# Sonrakine geçerken ve cevaplarda kulanýlan karakterlerin gösterimi.\n"
 	"# '_'  deðiþtirilir ' ', %%s, %%S yazar baþlýðý deðiþtirilir.\n"
 
-#: src/lang.c:2138
+#: src/lang.c:2149
 #, fuzzy
 msgid	"Quoting behavior"
 msgstr	"Davranýþ göstermesi"
 
-#: src/lang.c:2139
+#: src/lang.c:2150
 #, fuzzy
 msgid	"# How quoting should be handled when following up or replying.\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -6345,18 +6385,18 @@ msgstr	"Diðerine geçerken yada cevap ver
 	"# 6 = Ýmzalarý göster, boþ satýrlarý göster\n"
 	"# 7 = Görünümleri göster, imzalarý göster, boþ satýrlarý göster\n"
 
-#: src/lang.c:2152 src/lang.c:2160 src/lang.c:2166
+#: src/lang.c:2163 src/lang.c:2171 src/lang.c:2177
 #, fuzzy
 msgid	"%A Addr %D Date %F Addr+Name %G Groupname %M Message-ID %N Name %C First Name"
 msgstr	"%A Adres %D Tarih %F Adres+Ad %G Grupadý %M Ýleti-Kimliði %N Ad %C Ýlk Ad"
 
-#: src/lang.c:2153
+#: src/lang.c:2164
 #, fuzzy
 msgid	"Quote line when following up"
 msgstr	"Sonrakine geçerken satýr göster"
 
-#: src/lang.c:2154
-#, fuzzy
+#: src/lang.c:2165
+#, fuzzy, c-format
 msgid	"# Format of quote line when mailing/posting/following-up an article\n"
 	"# %%A Address    %%D Date   %%F Addr+Name   %%G Groupname   %%M Message-ID\n"
 	"# %%N Full Name  %%C First Name   %%I Initials\n"
@@ -6365,43 +6405,43 @@ msgstr	"# Bir makaleyi postalarken/gönde
 	"# %%A Adres   %%D Tarih   %%F Adres+Ad   %%G Grupadý   %%M Ýleti-Kimliði\n"
 	"# %%N Tam Ad  %%C Ýlk Adýnýz   %%I Adýn baþ harfleri\n"
 
-#: src/lang.c:2161
+#: src/lang.c:2172
 #, fuzzy
 msgid	"Quote line when cross-posting"
 msgstr	"Çapraz gönderirken satýrý göster"
 
-#: src/lang.c:2167
+#: src/lang.c:2178
 #, fuzzy
 msgid	"Quote line when mailing"
 msgstr	"posta gönderirken satýrý göster"
 
-#: src/lang.c:2172
+#: src/lang.c:2183
 #, fuzzy
 msgid	"If ON, include User-Agent: header. <SPACE> toggles & <CR> sets."
 msgstr	"ON durumdaysa, Kullanýcý-Etken baþlýðý ekleyiniz.  <SPACE> toggles & <CR> "
 	"sets."
 
-#: src/lang.c:2173
+#: src/lang.c:2184
 #, fuzzy
 msgid	"Insert 'User-Agent:'-header"
 msgstr	"'User-Agent:'-baþlýk ekleyiniz"
 
-#: src/lang.c:2174
+#: src/lang.c:2185
 #, fuzzy
 msgid	"# If ON include advertising User-Agent: header\n"
 msgstr	"# ON durumdaysa User-Agent ilanýný ekleyiniz: baþlýk\n"
 
-#: src/lang.c:2179
+#: src/lang.c:2190
 #, fuzzy
 msgid	"Enter charset name for MIME (e.g. US-ASCII, ISO-8859-1, EUC-KR), <CR> to set."
 msgstr	"(US-ASCII, ISO-8859-1, EUC-KR) Çok Amaçlý Internet Posta Uzantýlarý için "
 	"karakterküme ismini giriniz."
 
-#: src/lang.c:2180
+#: src/lang.c:2191
 msgid	"MM_CHARSET"
 msgstr	""
 
-#: src/lang.c:2181
+#: src/lang.c:2192
 #, fuzzy
 msgid	"# Charset supported locally which is also used for MIME header and\n"
 	"# Content-Type header.\n"
@@ -6418,57 +6458,57 @@ msgstr	"# Karakterkümesi Çok Amaçlý Inte
 	"tanýmlanmýþsa, diðer karakterkümesi\n"
 	"# mm_karakterkümesi görünemez ve gösteremez '?'.\n"
 
-#: src/lang.c:2191
+#: src/lang.c:2202
 #, fuzzy
 msgid	"MM_NETWORK_CHARSET"
 msgstr	"MM_AÐ_KARAKTERKÜMESÝ"
 
-#: src/lang.c:2192
+#: src/lang.c:2203
 #, fuzzy
 msgid	"# Charset used for MIME (Content-Type) header in postings.\n"
 msgstr	"# Çok Amaçlý Internet Posta Uzantýlarýn (içerik-tür) posta baþlýklarý için "
 	"kulanýlan karakter kümesi\n"
 
-#: src/lang.c:2198
+#: src/lang.c:2209
 #, fuzzy
 msgid	"Mailbox format"
 msgstr	"posta kutusu"
 
-#: src/lang.c:2199
+#: src/lang.c:2210
 #, fuzzy
 msgid	"# Format of the mailbox.\n"
 msgstr	"# Posta kutusunun biçimi.\n"
 
-#: src/lang.c:2204
+#: src/lang.c:2215
 #, fuzzy
 msgid	"MIME encoding in news messages"
 msgstr	"Yeni mesajlarda Çok Amaçlý Internet Posta Uzantýlarý kodla"
 
-#: src/lang.c:2205
+#: src/lang.c:2216
 #, fuzzy
 msgid	"# MIME encoding (8bit, base64, quoted-printable, 7bit) of the body\n"
 	"# for mails and posts, if necessary. QP is efficient for most European\n"
 	"# character sets (ISO-8859-X) with small fraction of non-US-ASCII chars,\n"
 	"# while Base64 is more efficient for most 8bit East Asian, Greek, and\n"
 	"# Russian charsets with a lot of 8bit characters.\n"
-msgstr	"# Çok Amaçlý Internet Posta Uzantýlarý kodlayýcý (8bit, base64, "
-	"quoted-printable, 7bit)\n"
+msgstr	"# Çok Amaçlý Internet Posta Uzantýlarý kodlayýcý (8bit, base64, quoted-"
+	"printable, 7bit)\n"
 	"# e-postalar için, gerektiðinde. QP European için yüksek verimlidir\n"
 	"# Karakter kümesi (ISO-8859-X) küçük iþaretli kesir US-ASCII karakterler\n"
 	"# Base64 8bit Doðu Asya ve Yunancadan daha yüksek verimlidir\n"
 	"# Rusça karakter kümesinin 8bit karakterler.\n"
 
-#: src/lang.c:2213 src/lang.c:2234
+#: src/lang.c:2224 src/lang.c:2245
 #, fuzzy
 msgid	"Don't change unless you know what you are doing. <ESC> cancels."
 msgstr	"Ne yaptýðýný bilmiyorsan deðiþtirme. <ESC> iptal eder."
 
-#: src/lang.c:2214
+#: src/lang.c:2225
 #, fuzzy
 msgid	"Use 8bit characters in news headers"
 msgstr	"Yeni baþlýklarda 8bit karakter kullan."
 
-#: src/lang.c:2215
+#: src/lang.c:2226
 #, fuzzy
 msgid	"# If ON, 8bit characters in news headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
@@ -6479,33 +6519,33 @@ msgstr	"# ON durumdaysa, 8bit karakterle
 	"# karakterlerin deðeri bakýlmadan kodlanýr\n"
 	"# Çok Amaçlý Internet Posta Uzantýlarý kodlamasý 8bit ise\n"
 
-#: src/lang.c:2222
+#: src/lang.c:2233
 #, fuzzy
 msgid	"Auto-view post-processed files <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Soniþemci dosyalarý otomatik olarak göster <SPACE> toggles, <CR> sets, <ESC> "
 	"cancels."
 
-#: src/lang.c:2223
+#: src/lang.c:2234
 #, fuzzy
 msgid	"View post-processed files"
 msgstr	"Soniþlemci dosyalarý göster"
 
-#: src/lang.c:2224
+#: src/lang.c:2235
 #, fuzzy
 msgid	"# If set, post processed files will be opened in a viewer\n"
 msgstr	"# Kurulmuþsa, soniþlemci dosyalar görünüleyicide açýlacak\n"
 
-#: src/lang.c:2229
+#: src/lang.c:2240
 #, fuzzy
 msgid	"MIME encoding in mail messages"
 msgstr	"Çok Amaçlý Internet Posta Uzantýlarý posta iletilerinde kodla"
 
-#: src/lang.c:2235
+#: src/lang.c:2246
 #, fuzzy
 msgid	"Use 8bit characters in mail headers"
 msgstr	"Posta baþlýklarýnda 8bit karakter kullan"
 
-#: src/lang.c:2236
+#: src/lang.c:2247
 #, fuzzy
 msgid	"# If ON, 8bit characters in mail headers are NOT encoded.\n"
 	"# default is OFF. Thus 8bit characters are encoded by default.\n"
@@ -6521,28 +6561,28 @@ msgstr	"# ON durumdaysa, 8bit karakterle
 	"# posta baþlýklarýnda 8bit karakterleri yasaksa iptal önerilir HAYIR -e\n"
 	"# Çok önemli neden yoksa ON durumuna getir\n"
 
-#: src/lang.c:2246
+#: src/lang.c:2257
 #, fuzzy
 msgid	"Strip blanks from ends of lines"
 msgstr	"Satýr sonu boþlarý yok et"
 
-#: src/lang.c:2247
+#: src/lang.c:2258
 #, fuzzy
 msgid	"# If ON strip blanks from ends of lines for faster display on slow "
 	"terminals.\n"
 msgstr	"# ON durumdaysa yavaþ uçbirimde daha hýzlý görüntü için boþlarý yok et.\n"
 
-#: src/lang.c:2252
+#: src/lang.c:2263
 #, fuzzy
 msgid	"If ON, use transliteration. <SPACE> toggles & <CR> sets."
 msgstr	"ON durumdaysa damga çevirisi kullan.  <SPACE> toggles & <CR> sets."
 
-#: src/lang.c:2253
+#: src/lang.c:2264
 #, fuzzy
 msgid	"Transliteration"
 msgstr	"Damga çevirisi"
 
-#: src/lang.c:2254
+#: src/lang.c:2265
 #, fuzzy
 msgid	"# If ON, use //TRANSLIT extension. This means that when a character cannot\n"
 	"# be represented in the in the target character set, it can be approximated\n"
@@ -6551,50 +6591,50 @@ msgstr	"# ON durumdaysa, //DAMGAÇEVÝRÝSÝ
 	"# daha büyük damga kümesi, yaklaþýk deðer verilebilir\n"
 	"# Bir veya daha fazla ayný karakter\n"
 
-#: src/lang.c:2261
+#: src/lang.c:2272
 #, fuzzy
 msgid	"Send you a carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Mektup kopyasý otomatik olarak kendine gönder. <SPACE> toggles & <CR> sets."
 
-#: src/lang.c:2262
+#: src/lang.c:2273
 #, fuzzy
 msgid	"Send you a cc automatically"
 msgstr	"Mektup kopyasý otomatik olarak kendine gönder."
 
-#: src/lang.c:2263
+#: src/lang.c:2274
 #, fuzzy
 msgid	"# If ON automatically put your name in the Cc: field when mailing an article\n"
 msgstr	"# ON durumdaysa otomatic olarak ismini mektup kopyasýna koy: Makaleyi "
 	"gönderirken alan yarat\n"
 
-#: src/lang.c:2267
+#: src/lang.c:2278
 #, fuzzy
 msgid	"Send you a blind carbon copy automatically. <SPACE> toggles & <CR> sets."
 msgstr	"Gizli mektup kopyasý otomatik olarak kendine gönder."
 
-#: src/lang.c:2268
+#: src/lang.c:2279
 #, fuzzy
 msgid	"Send you a blind cc automatically"
 msgstr	"Gizli mektup kopyasý otomatik olarak kendine gönder"
 
-#: src/lang.c:2269
+#: src/lang.c:2280
 #, fuzzy
 msgid	"# If ON automatically put your name in the Bcc: field when mailing an "
 	"article\n"
 msgstr	"# ON durumdaysa otomatic olarak ismini görünmeyen mektup kopyasýna koy: "
 	"Makaleyi gönderirken alan yarat\n"
 
-#: src/lang.c:2273
+#: src/lang.c:2284
 #, fuzzy
 msgid	"Enter address elements about which you want to be warned. <CR> sets."
 msgstr	"uyarýlmak istediðin adres öðelerine gir <CR> sets."
 
-#: src/lang.c:2274
+#: src/lang.c:2285
 #, fuzzy
 msgid	"Spamtrap warning address parts"
 msgstr	"isteneyen e-mail posta uyarýsý"
 
-#: src/lang.c:2275
+#: src/lang.c:2286
 #, fuzzy
 msgid	"# A comma-delimited list of address-parts you want to be warned\n"
 	"# about when trying to reply by email.\n"
@@ -6602,126 +6642,125 @@ msgstr	"# Uyarýlmak isiyorsan virgülle-s
 	"göster\n"
 	"# e-posta ile cevap yazmak istediðin zaman\n"
 
-#: src/lang.c:2280
+#: src/lang.c:2291
 #, fuzzy
 msgid	"Enter default number of days a filter entry will be valid. <CR> sets."
 msgstr	"Süz giriþin geçerli olacaðý varsayýlan günler sayýsýna gir <CR> sets."
 
-#: src/lang.c:2281
+#: src/lang.c:2292
 #, fuzzy
 msgid	"No. of days a filter entry is valid"
 msgstr	"Süz girdisinin geçerli günler sayýsý"
 
-#: src/lang.c:2282
+#: src/lang.c:2293
 #, fuzzy
 msgid	"# Number of days a short term filter will be active\n"
 msgstr	"# Kýsa sürecek süzün aktif olacaðý günler sayýsý\n"
 
-#: src/lang.c:2286
+#: src/lang.c:2297
 msgid	"Add posted articles to filter. <SPACE> toggles & <CR> sets."
 msgstr	""
 
-#: src/lang.c:2287
+#: src/lang.c:2298
 #, fuzzy
 msgid	"Add posted articles to filter"
 msgstr	"Gönderilen makaleleri süzgece ekle"
 
-#: src/lang.c:2288
+#: src/lang.c:2299
 #, fuzzy
 msgid	"# If ON add posted articles which start a new thread to filter for\n"
 	"# highlighting follow-ups\n"
 msgstr	"# ON durumduysa gönderilmiþ makaleleri ekle# highlighting follow-ups\n"
 
-#: src/lang.c:2292
+#: src/lang.c:2303
 #, fuzzy
 msgid	"The directory where articles/threads are to be saved in mailbox format."
 msgstr	"makaleler/iç parçacýklarýn posta kutusu olarak kaydedilecek dizin."
 
-#: src/lang.c:2293
+#: src/lang.c:2304
 #, fuzzy
 msgid	"Mail directory"
 msgstr	"Posta dizini"
 
-#: src/lang.c:2294
+#: src/lang.c:2305
 #, fuzzy
 msgid	"# (-m) directory where articles/threads are saved in mailbox format\n"
 msgstr	"# makaleler/iç parçacýklarýn posta kutusu olarak kaydetmek istediðin dizin\n"
 
-#: src/lang.c:2299
+#: src/lang.c:2310
 #, fuzzy
 msgid	"Save articles in batch mode (-S)"
 msgstr	"Makaleleri toplu moda kaydet (-S)"
 
-#: src/lang.c:2300
+#: src/lang.c:2311
 #, fuzzy
 msgid	"# If ON articles/threads will be saved in batch mode when save -S\n"
 	"# or mail (-M/-N) is specified on the command line\n"
 msgstr	"# ON durumdaysa kaydeti bastýðýn zaman makaleler/iç parçacýklar\n"
 	"# toplu mode olarak kaydedilir\n"
 
-#: src/lang.c:2305
+#: src/lang.c:2316
 #, fuzzy
 msgid	"The directory where you want articles/threads saved."
 msgstr	"makeleleri7iç parçacýklarýný kaydetmek istediðin dizin."
 
-#: src/lang.c:2306
+#: src/lang.c:2317
 #, fuzzy
 msgid	"Directory to save arts/threads in"
 msgstr	"iç parçacýklarýn kaydedildiði dizin"
 
-#: src/lang.c:2307
+#: src/lang.c:2318
 #, fuzzy
 msgid	"# Directory where articles/threads are saved\n"
 msgstr	"# Kaydedilmiþ makalelerin/iç parçacýklarýn olduðu dizin\n"
 
-#: src/lang.c:2311
+#: src/lang.c:2322
 #, fuzzy
 msgid	"Auto save article/thread by Archive-name: header. <SPACE> toggles & <CR> sets."
 msgstr	"Arçivadý olarak makaleleri/iç parçacýklarý otomatik olarak kaydet: header. "
 	"<SPACE> toggles & <CR> sets."
 
-#: src/lang.c:2312
+#: src/lang.c:2323
 #, fuzzy
 msgid	"Use Archive-name: header for save"
 msgstr	"Arþiv ismi kullan: baþlýk kaydetme"
 
-#: src/lang.c:2313
+#: src/lang.c:2324
 #, fuzzy
 msgid	"# If ON articles/threads with Archive-name: in mail header will\n"
 	"# be automatically saved with the Archive-name & part/patch no.\n"
-msgstr	"# ON durumdaysa Arþiv ismi ile makaleleri/iç parçacýklarý: posta baþlýðý "
-	"will\n"
-	"# Arþiv ismi &\n"
+msgstr	"# ON durumdaysa Arþiv ismi ile makaleleri/iç parçacýklarý: posta baþlýðý\n"
+	"# will Arþiv ismi &\n"
 
-#: src/lang.c:2318
+#: src/lang.c:2329
 #, fuzzy
 msgid	"Mark saved articles/threads as read. <SPACE> toggles, <CR> sets, <ESC> "
 	"cancels."
 msgstr	"Kaydedilmiþ makaleleri /iç parçacýklarý okunmuþ olarak iþaretle. <ARALIK> "
 	"büyük küçük harf, <CR> kümeler, <ESC> iptal et."
 
-#: src/lang.c:2319
+#: src/lang.c:2330
 #, fuzzy
 msgid	"Mark saved articles/threads as read"
 msgstr	"Kaydedilmiþ makaleleri /iç parçacýklarý okunmuþ olarak iþaretle"
 
-#: src/lang.c:2320
+#: src/lang.c:2331
 #, fuzzy
 msgid	"# If ON mark articles that are saved as read\n"
 msgstr	"# ON durumdaysa kaydedilmiþ makaleleri okunmuþ olarak iþaretle\n"
 
-#: src/lang.c:2324
+#: src/lang.c:2335
 #, fuzzy
 msgid	"Do post processing (eg. extract attachments) for saved articles."
 msgstr	"Kaydedilmiþ makaleler için iþlem gönder (örn. ekleri çýkart) for saved "
 	"articles."
 
-#: src/lang.c:2325
+#: src/lang.c:2336
 #, fuzzy
 msgid	"Post process saved articles"
 msgstr	"Kaydedilmiþ makaleleri gönder"
 
-#: src/lang.c:2326
+#: src/lang.c:2337
 #, fuzzy
 msgid	"# Perform post processing (saving binary attachments) from saved articles.\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -6731,144 +6770,144 @@ msgid	"# Perform post processing (saving
 msgstr	"# Kaydedilmiþ makaleler gönderme iþlemini bitir.\n"
 	"# 0=(evet) 1=(hayýr) 2=(kabuk arþivleri bul (shar) only)\n"
 
-#: src/lang.c:2335
+#: src/lang.c:2346
 #, fuzzy
 msgid	"Process only unread articles"
 msgstr	"Sadece okunmayan makaleleri iþle"
 
-#: src/lang.c:2336
+#: src/lang.c:2347
 #, fuzzy
 msgid	"# If ON only save/print/pipe/mail unread articles (tagged articles excepted)\n"
 msgstr	"# ON durumundaysa okunmamýþ makaleleri sadece kaydet/yazdýr/ilet/postala "
 	"(imlenmiþ makaleler hariç tutulur)\n"
 
-#: src/lang.c:2341
+#: src/lang.c:2352
 #, fuzzy
 msgid	"Print all or just part of header. <SPACE> toggles & <CR> sets."
 msgstr	"Baþlýðýn tümünü ya da bir kýsmýný yazdýr.  <SPACE> deðiþtirir & <CR> ayarlar."
 
-#: src/lang.c:2342
+#: src/lang.c:2353
 #, fuzzy
 msgid	"Print all headers when printing"
 msgstr	"Yazdýrýrken tüm baþlýklarý yazdýr"
 
-#: src/lang.c:2343
+#: src/lang.c:2354
 #, fuzzy
 msgid	"# If ON print all of article header otherwise just the important lines\n"
 msgstr	"# On durumundaysa makale baþlýðýnýn tümünü deðilse sadece önemli olanlarý "
 	"yazdýr\n"
 
-#: src/lang.c:2347
+#: src/lang.c:2358
 #, fuzzy
 msgid	"The printer program with options that is to be used to print articles/threads."
 msgstr	"Makaleleri/parçacýklarý yazdýrmak için kullanýlacak seçenekli yazýcý programý."
 
-#: src/lang.c:2348
+#: src/lang.c:2359
 #, fuzzy
 msgid	"Printer program with options"
 msgstr	"Seçenekli yazýcý programý"
 
-#: src/lang.c:2349
+#: src/lang.c:2360
 #, fuzzy
 msgid	"# Print program with parameters used to print articles/threads\n"
 msgstr	"# Makaleleri/iþ parçacýklarý yazdýrmak için parameterli yazýcý program "
 	"kullan\n"
 
-#: src/lang.c:2355
+#: src/lang.c:2366
 #, fuzzy
 msgid	"Force redraw after certain commands"
 msgstr	"Kesin komutlardan sonra ekrandaki çizimin yenilenmesini güçlendir"
 
-#: src/lang.c:2356
+#: src/lang.c:2367
 #, fuzzy
 msgid	"# If ON a screen redraw will always be done after certain external commands\n"
 msgstr	"# ON durumdaysa ekrandaki çizimin yenilenmesi bazý dýþ komutlardan sonra "
 	"tamamlanacak\n"
 
-#: src/lang.c:2360
+#: src/lang.c:2371
 #, fuzzy
 msgid	"Start editor with line offset. <SPACE> toggles, <CR> sets, <ESC> cancels."
 msgstr	"Satýr kaydýrarak düzenleciyi baþlat. <ARALIK> büyük küçük harf, <CR> kümeler, "
 	"<ESC> iptal et."
 
-#: src/lang.c:2361
+#: src/lang.c:2372
 #, fuzzy
 msgid	"Start editor with line offset"
 msgstr	"Düzenleyiciyi satýr konumu ile baþlat"
 
-#: src/lang.c:2362
+#: src/lang.c:2373
 #, fuzzy
 msgid	"# If ON editor will be started with cursor offset into the file\n"
 	"# otherwise the cursor will be positioned at the first line\n"
 msgstr	"# ON düzenleyicir dosyadaki imleç kaydýrýcýlarda açýlacak\n"
 	"# aksi takdirde imleç ilk satýrda yer alacak\n"
 
-#: src/lang.c:2367
+#: src/lang.c:2378
 #, fuzzy
 msgid	"Enter %E for editor, %F for filename, %N for line-number, <CR> to set."
 msgstr	"Düzenleyici için %E, dosya adý için %F, satýr numarasý için %N, kümelemek "
 	"için <CR> yazýn."
 
-#: src/lang.c:2368
+#: src/lang.c:2379
 #, fuzzy
 msgid	"Invocation of your editor"
 msgstr	"Düzenleyicinizin yürütülmesi"
 
-#: src/lang.c:2369
-#, fuzzy
+#: src/lang.c:2380
+#, fuzzy, c-format
 msgid	"# Format of editor line including parameters\n"
 	"# %%E Editor  %%F Filename  %%N Linenumber\n"
 msgstr	"# Parametrelerle birlikte düzenleyici satýrý biçimi\n"
 	"# %%E Düzenleyici  %%F Dosya adý  %%N Satýr numarasý\n"
 
-#: src/lang.c:2374
+#: src/lang.c:2385
 #, fuzzy
 msgid	"Enter name and options for external-inews, --internal for internal inews"
 msgstr	"Dýþ inew programlarý için isim ve seçenekleri, --iç inew programlarý için "
 	"içseli girin"
 
-#: src/lang.c:2375
+#: src/lang.c:2386
 #, fuzzy
 msgid	"External inews"
 msgstr	"Dýþ inew programlarý"
 
-#: src/lang.c:2376
+#: src/lang.c:2387
 #, fuzzy
 msgid	"# If --internal use the built in mini inews for posting via NNTP\n"
 	"# otherwise use an external inews program\n"
 msgstr	"# Eðer --içsel ise NNTP yoluyla gönderim için yerleþik mini inew "
 	"programlarýný kullanýn\n"
-	"#deðilse bir dýþ inew programý kullanýn\n"
+	"# deðilse bir dýþ inew programý kullanýn\n"
 
-#: src/lang.c:2380
+#: src/lang.c:2391
 #, fuzzy
 msgid	"Enter %M for mailer, %S for subject, %T for to, %F for filename, <CR> to set."
 msgstr	"Posta gönderici için %M, konu için %S, gönderilen için %T, dosya adý için %F, "
 	"kümelemek için <CR> yazýn."
 
-#: src/lang.c:2381
+#: src/lang.c:2392
 #, fuzzy
 msgid	"Invocation of your mail command"
 msgstr	"Posta komutunuzun yürütülmesi"
 
-#: src/lang.c:2382
-#, fuzzy
+#: src/lang.c:2393
+#, fuzzy, c-format
 msgid	"# Format of mailer line including parameters\n"
 	"# %%M Mailer  %%S Subject  %%T To  %%F Filename\n"
 	"# ie. to use elm as your mailer:    elm -s \"%%S\" \"%%T\" < %%F\n"
 	"# ie. elm interactive          :    elm -i %%F -s \"%%S\" \"%%T\"\n"
 msgstr	"# Parametrelerle birlikte gönderici satýrý biçimi\n"
 	"# %%M Gönderici  %%S Konu  %%T Gönderilen  %%F Dosya adý\n"
-	"# ie. elmi göndericiniz olarak kullanmak için:    elm -s \"%%S\" \"%%T\" < "
-	"%%F\n"
+	"# ie. elmi göndericiniz olarak kullanmak için:    elm -s \"%%S\" \"%%T\" < %%"
+	"F\n"
 	"# ie. elm etkileþimli            :    elm -i %%F -s \"%%S\" \"%%T\"\n"
 
-#: src/lang.c:2390
+#: src/lang.c:2401
 #, fuzzy
 msgid	"Use interactive mail reader"
 msgstr	"Etkileþimli posta okuyucu kullan"
 
-#: src/lang.c:2391
+#: src/lang.c:2402
 msgid	"# Interactive mailreader\n"
 	"# Possible values are (the default is marked with *):\n"
 	"# * 0 = no interactive mailreader\n"
@@ -6876,71 +6915,71 @@ msgid	"# Interactive mailreader\n"
 	"#   2 = use interactive mailreader without headers in file\n"
 msgstr	""
 
-#: src/lang.c:2400
+#: src/lang.c:2411
 #, fuzzy
 msgid	"Remove ~/.article after posting"
 msgstr	"Kaldýr ~/.article sonra makale"
 
-#: src/lang.c:2401
+#: src/lang.c:2412
 #, fuzzy
 msgid	"# If ON remove ~/.article after posting.\n"
 msgstr	"# ON durumundaysa kaldýr  ~/.gönderimden sonra makale.\n"
 
-#: src/lang.c:2405
+#: src/lang.c:2416
 #, fuzzy
 msgid	"Filename for all posted articles, <CR> sets, no filename=do not save."
 msgstr	"Tüm gönderilen makaleler için dosya adý, <CR> ayarlar, dosya adý "
 	"yok=kaydetmeyin."
 
-#: src/lang.c:2406
+#: src/lang.c:2417
 #, fuzzy
 msgid	"Filename for posted articles"
 msgstr	"Gönderilen makaleler için dosya adý"
 
-#: src/lang.c:2407
+#: src/lang.c:2418
 #, fuzzy
 msgid	"# Filename where to keep all postings (default posted)\n"
 	"# If no filename is set then postings will not be saved\n"
 msgstr	"# Postalarýn tutunacak dosyaadý (gönderilmiþ varsayýlan)\n"
 	"# Dosyaadý yoksa hiçbir posta kaydedilmeyecek\n"
 
-#: src/lang.c:2412
+#: src/lang.c:2423
 #, fuzzy
 msgid	"Keep all failed articles in ~/dead.articles. <SPACE> toggles & <CR> sets."
 msgstr	"Baþarýsýz makaleleri tut ~/ölü.makale. <Aralýk> büyük küçük harf & <CR> "
 	"kümeleri."
 
-#: src/lang.c:2413
+#: src/lang.c:2424
 #, fuzzy
 msgid	"Keep failed arts in ~/dead.articles"
 msgstr	"Baþarýsýz makaleleri tut ~/ölü.makale"
 
-#: src/lang.c:2414
+#: src/lang.c:2425
 #, fuzzy
 msgid	"# If ON keep all failed postings in ~/dead.articles\n"
 msgstr	"# If ON gönderilemeyen bütün postalarý tut ~/ölü.makale\n"
 
-#: src/lang.c:2418
+#: src/lang.c:2429
 #, fuzzy
 msgid	"Do you want to strip unsubscribed groups from .newsrc"
 msgstr	"Abone olmayan gruplarý çýkart .newsrc"
 
-#: src/lang.c:2419
+#: src/lang.c:2430
 #, fuzzy
 msgid	"No unsubscribed groups in newsrc"
 msgstr	"Abone olmayan grup yok newsrc"
 
-#: src/lang.c:2420
+#: src/lang.c:2431
 #, fuzzy
 msgid	"# If ON strip unsubscribed groups from newsrc\n"
 msgstr	"# If ON abone olmamýþ gruplarý çýkart newsrc\n"
 
-#: src/lang.c:2425
+#: src/lang.c:2436
 #, fuzzy
 msgid	"Remove bogus groups from newsrc"
 msgstr	"Bogus gruplarý kaldýr newsrc"
 
-#: src/lang.c:2426
+#: src/lang.c:2437
 #, fuzzy
 msgid	"# What to do with bogus groups in newsrc file\n"
 	"# Possible values are (the default is marked with *):\n"
@@ -6950,66 +6989,66 @@ msgid	"# What to do with bogus groups in
 msgstr	"# newsrc dosyasýnda olan bogus gruplara ne yapýlsýn\n"
 	"# 0=(Koru) 1=(Kaldýr) 2=(Highlight with D on selection screen).\n"
 
-#: src/lang.c:2434
+#: src/lang.c:2445
 #, fuzzy
 msgid	"Enter number of seconds until active file will be reread. <CR> sets."
 msgstr	"Aktif dosya tekrar okunana kadar saniye miktarýný girin. <CR> ayarlar."
 
-#: src/lang.c:2435
+#: src/lang.c:2446
 #, fuzzy
 msgid	"Interval in secs to reread active"
 msgstr	"yeniden etkin kýlma saniye aralýðý"
 
-#: src/lang.c:2436
+#: src/lang.c:2447
 #, fuzzy
 msgid	"# Time interval in seconds between rereading the active file (0=never)\n"
 msgstr	"# Aktif dosyalar okunurken saniyeler süren zaman aralýðý (0=asla)\n"
 
-#: src/lang.c:2441
+#: src/lang.c:2452
 #, fuzzy
 msgid	"Reconnect to server automatically"
 msgstr	"Sunucuya otomatik olarak baðlan"
 
-#: src/lang.c:2442
+#: src/lang.c:2453
 #, fuzzy
 msgid	"# If ON automatically reconnect to NNTP server if the connection is broken\n"
 msgstr	"# ON konumunda ise baðlantý kesilirse NNTP sunucusuna otomatik olarak tekrar "
 	"baðlan\n"
 
-#: src/lang.c:2446
+#: src/lang.c:2457
 #, fuzzy
 msgid	"Create local copies of NNTP overview files. <SPACE> toggles & <CR> sets."
 msgstr	"NNTP giriþ sayfalarýnýn yerel kopyalarýný yarat. <SPACE> deðiþtirir & <CR> "
 	"ayarlar."
 
-#: src/lang.c:2447
+#: src/lang.c:2458
 #, fuzzy
 msgid	"Cache NNTP overview files locally"
 msgstr	"Að Haberleri Aktarma Protokolü önbelleði yerel olarak giriþ dosyalarý"
 
-#: src/lang.c:2448
+#: src/lang.c:2459
 #, fuzzy
 msgid	"# If ON, create local copies of NNTP overview files.\n"
 msgstr	"# On durumundaysa, NNTP giriþ dosyalarýnýn yerel kopyalarýný yarat.\n"
 
-#: src/lang.c:2452
+#: src/lang.c:2463
 #, fuzzy
 msgid	"Enter format string. <CR> sets, <ESC> cancels."
 msgstr	"Okunan makaleleri imlemek için karakter girin. <CR> yarlar, <ESC> iptal eder."
 
-#: src/lang.c:2453
+#: src/lang.c:2464
 msgid	"Format string for display of dates"
 msgstr	""
 
-#: src/lang.c:2454
+#: src/lang.c:2465
 msgid	"# Format string for date representation\n"
 msgstr	""
 
-#: src/lang.c:2460
+#: src/lang.c:2471
 msgid	"Unicode normalization form"
 msgstr	""
 
-#: src/lang.c:2461
+#: src/lang.c:2472
 msgid	"# Unicode normalization form\n"
 	"# Possible values are (the default is marked with *):\n"
 	"#   0 = None\n"
@@ -7019,62 +7058,91 @@ msgid	"# Unicode normalization form\n"
 	"#   4 = NFD\n"
 msgstr	""
 
-#: src/lang.c:2473
+#: src/lang.c:2484
 msgid	"Render BiDi"
 msgstr	""
 
-#: src/lang.c:2474
+#: src/lang.c:2485
 msgid	"# If ON, bi-directional text is rendered by tin\n"
 msgstr	""
 
-#: src/misc.c:3721
+#: src/misc.c:3728
 #, fuzzy, c-format
 msgid	"Version: %s %s release %s (\"%s\") %s %s\n"
 msgstr	"Sürüm: %s %s serbest býrak %s (\"%s\") %s %s\n"
 
-#: src/misc.c:3724
+#: src/misc.c:3731
 #, fuzzy, c-format
 msgid	"Version: %s %s release %s (\"%s\")\n"
 msgstr	"Sürüm: %s %s serbest býrak %s (\"%s\")\n"
 
-#: src/newsrc.c:432
+#: src/newsrc.c:430
 #, fuzzy
 msgid	"Unreachable?\n"
 msgstr	"Ulaþýlamaz?\n"
 
-#: src/nntplib.c:825
+#: src/nntplib.c:824
 #, fuzzy, c-format
 msgid	"\n"
 	"Server timed out, trying reconnect # %d\n"
 msgstr	"\n"
 	"Sunucu süresi doldu, tekrar baðlanmaya çalýþýyor # %d\n"
 
-#: src/nntplib.c:843
+#: src/nntplib.c:842
 #, fuzzy
 msgid	"Rejoin current group\n"
 msgstr	"Þu anki gruba tekrar katýl\n"
 
-#: src/nntplib.c:850
+#: src/nntplib.c:849
 #, fuzzy, c-format
 msgid	"Read (%s)\n"
 msgstr	"Oku (%s)\n"
 
-#: src/nntplib.c:852
+#: src/nntplib.c:851
 #, fuzzy, c-format
 msgid	"Resend last command (%s)\n"
 msgstr	"Son komutu tekrr yolla (%s)\n"
 
+#.
+#. * TODO: - store a hash value of the entire motd in the server-rc
+#. *         and only if it differs from the old value display the
+#. *         motd?
+#. *       - use some sort of pager?
+#. *       - -> lang.c
+#.
+#: src/nntplib.c:1715
+msgid	"MOTD: "
+msgstr	""
+
 #: src/nrctbl.c:172
 #, c-format
 msgid	"couldn't expand %s\n"
 msgstr	"%s geniþletilemedi\n"
 
-#: src/post.c:1969
+#: src/post.c:1152
+#, c-format
+msgid	"Line %d is longer than 998 octets and should be folded, but\n"
+	"encoding is neither set to %s nor to %s\n"
+msgstr	""
+
+#: src/post.c:1157
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n"
+	"posting doesn't contain any 8bit chars and thus folding won't happen\n"
+msgstr	""
+
+#: src/post.c:1159
+#, c-format
+msgid	"Line %d is longer than 998 octets, and should be folded, but\n"
+	"encoding is not set to %s\n"
+msgstr	""
+
+#: src/post.c:1974
 #, fuzzy, c-format
 msgid	"Posting: %.*s ..."
 msgstr	"Gönderiliyor: %.*s ..."
 
-#. fp
 #. Check if okay to read
 #: src/read.c:214
 msgid	"Aborting read, please wait..."
@@ -7105,13 +7173,14 @@ msgstr	"[- Kullanýlamýyor -]"
 #. * TODO: -> lang.c
 #.
 #: src/rfc2047.c:1203
+#, c-format
 msgid	"This message has been composed in the 'multipart/mixed' MIME-format. If you\n"
 	"are reading this prefix, your mail reader probably has not yet been modified\n"
 	"to understand the new format, and some of what follows may look strange.\n"
 	"\n"
 msgstr	""
 
-#: src/save.c:977
+#: src/save.c:978
 msgid	"bytes"
 msgstr	"bayt"
 
diff -Nurp tin-1.7.8/src/Makefile.in tin-1.7.9/src/Makefile.in
--- tin-1.7.8/src/Makefile.in	2005-02-01 11:23:36.000000000 +0100
+++ tin-1.7.9/src/Makefile.in	2005-06-28 19:49:36.041349653 +0200
@@ -1,7 +1,7 @@
 # Source Makefile for tin
 # - for configuration options read the ../doc/INSTALL file.
 #
-# Updated: 2005-01-30
+# Updated: 2005-06-22
 #
 # Copyright (c) 1995-2005 Thomas E. Dickey <dickey@invisible-island.net>
 # All rights reserved.
@@ -412,7 +412,7 @@ TAGS :
 	@-$(RM) -f TAGS
 	@$(ETAGS) $(HFILES) $(CFILES)
 
-lint :	$(CFILES) $(OBJDIR)/parsdate.c tincfg.h
+lint :	$(CFILES) $(OBJDIR)/parsdate.c tincfg.h options_menu.h
 	@$(ECHO) "Linting source (results in ./LINT) ..."
 	@$(LINT) $(LINTFLAGS) -DNNTP_ABLE `$(LS) $(CFILES)|$(SED) -e 's/\.y/.c/'` $(LIBS) > LINT
 
@@ -421,7 +421,7 @@ clean :
 	@-$(RM) -f $(OFILES)
 	@-$(RM) -f $(OBJDIR)/parsdate.c
 	@-$(RM) -f LINT *.ln *.out
-	@-$(RM) -f makecfg$X makecfg$o tincfg.h
+	@-$(RM) -f makecfg$X makecfg$o tincfg.h options_menu.h
 	@-$(RM) -f core *~
 	@-$(RM) -f $(EXE)
 @PCREDIR_MAKE@	@-if test -r ../pcre/Makefile ; then $(CD) ../pcre && $(ECHO) "Cleaning Philip Hazel's Perl-compatible regular expressions library ..." && $(MAKE) @cf_cv_makeflags@ clean ; fi
@@ -453,17 +453,6 @@ canlock :
 	@$(ECHO) "Building libcanlock ..."
 	@$(CD) ../libcanlock && ./Build
 
-TIN_DEP	= \
-	Makefile \
-	$(INCDIR)/tin.h \
-	$(INCDIR)/tinrc.h \
-	../include/autoconf.h \
-	$(INCDIR)/bool.h \
-	$(INCDIR)/extern.h \
-	$(INCDIR)/nntplib.h \
-	$(INCDIR)/tcurses.h \
-	$(INCDIR)/proto.h $(EXTRA_PCREHDRS) $(EXTRA_INTLLIBS)
-
 @PCREDIR_MAKE@../pcre/pcre.h ../pcre/$(PRELIB)pcre.a :
 @PCREDIR_MAKE@	@$(ECHO) "Building Philip Hazel's Perl regular expressions library ..."
 @PCREDIR_MAKE@	@$(CD) ../pcre && $(MAKE) @cf_cv_makeflags@ $(PRELIB)pcre.a
@@ -472,13 +461,32 @@ TIN_DEP	= \
 @INTLDIR_MAKE@	@$(ECHO) "Building GNU gettext library ..."
 @INTLDIR_MAKE@	@$(CD) ../intl && $(MAKE) @cf_cv_makeflags@
 
-tincfg.h :			$(SRCDIR)/tincfg.tbl \
+options_menu.h :		$(SRCDIR)/tincfg.tbl \
 				makecfg$X
 	./makecfg $(SRCDIR)/tincfg.tbl tincfg.h
 
-makecfg$X :			$(SRCDIR)/makecfg.c $(TIN_DEP)
+tincfg.h :			$(SRCDIR)/tincfg.tbl \
+				makecfg$X
+	./makecfg $(SRCDIR)/tincfg.tbl $@
+
+makecfg$X :			$(SRCDIR)/makecfg.c \
+				Makefile \
+				$(INCDIR)/tin.h \
+				../include/autoconf.h
 @SHOW_CC@
-	@ECHO_CC@$(BUILD_CC) $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -o $@ makecfg.c $(BUILD_LIBS)
+	@ECHO_CC@$(BUILD_CC) $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -o $@ makecfg.c #$(BUILD_LIBS)
+
+TIN_DEP	= \
+	Makefile \
+	options_menu.h \
+	$(INCDIR)/tin.h \
+	$(INCDIR)/tinrc.h \
+	../include/autoconf.h \
+	$(INCDIR)/bool.h \
+	$(INCDIR)/extern.h \
+	$(INCDIR)/nntplib.h \
+	$(INCDIR)/tcurses.h \
+	$(INCDIR)/proto.h $(EXTRA_PCREHDRS) $(EXTRA_INTLLIBS)
 
 $(OBJDIR)/active$o :		$(SRCDIR)/active.c $(TIN_DEP)
 $(OBJDIR)/art$o :		$(SRCDIR)/art.c $(TIN_DEP) \
diff -Nurp tin-1.7.8/src/art.c tin-1.7.9/src/art.c
--- tin-1.7.8/src/art.c	2005-02-25 11:44:07.000000000 +0100
+++ tin-1.7.9/src/art.c	2005-06-28 10:31:23.415696771 +0200
@@ -3,7 +3,7 @@
  *  Module    : art.c
  *  Author    : I.Lea & R.Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2004-08-16
+ *  Updated   : 2005-06-25
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -85,8 +85,9 @@ static long setup_hard_base(struct t_gro
 static t_bool parse_headers(FILE *fp, struct t_article *h);
 static t_compfunc eval_sort_arts_func(unsigned int sort_art_type);
 static void sort_base(unsigned int sort_threads_type);
-static void thread_by_subject(void);
 static void thread_by_multipart(void);
+static void thread_by_percentage(void);
+static void thread_by_subject(void);
 
 
 /*
@@ -179,7 +180,7 @@ base_comp(
  *   Read the article numbers existing in the group into base[]
  *   If the LISTGROUP failed, issue a GROUP command. Use the results to
  *   create a less accurate version of base[]
- *	 This data will already be sorted
+ *   This data will already be sorted
  *
  * on local spool:
  *   Read the spool dir to populate base[] as above. Sort it.
@@ -259,8 +260,11 @@ setup_hard_base(
 			if (sscanf(line, "%ld %ld %ld", &count, &start, &last) != 3)
 				return -1;
 
+			/*
+			 * TODO: AFAICS "total" and "count" arn't used in the code below
+			 *       anymore, why do we bother to set them?
+			 */
 			total = count;
-
 			if (last - count > start)
 				count = last - start;
 
@@ -390,7 +394,7 @@ index_group(
 	 * When reading local spool, this will pull in the system wide overview
 	 * cache (if found) otherwise the private overview cache will be read
 	 */
-	caching_xover = (tinrc.cache_overview_files && xover_cmd && group->type == GROUP_TYPE_NEWS);
+	caching_xover = (tinrc.cache_overview_files && nntp_caps.over_cmd && group->type == GROUP_TYPE_NEWS);
 	if ((changed = read_overview(group, min, max, &last_read_article, caching_xover)) == -1)
 		return FALSE;	/* user aborted indexing */
 
@@ -717,6 +721,76 @@ thread_by_subject(
 #endif /* 0 */
 }
 
+/*
+ * This Threading algorithm threads articles into 'buckets' where each bucket
+ * contains all the articles which match the root article's subject line to
+ * the configured percentage. Eg, if the root article had the subject "asdf"
+ * and the match percentage was configured to be 75% then any article would
+ * match if its subject was no different in more than a single character.
+ */
+static void
+thread_by_percentage(
+	void)
+{
+	int i, j, k;
+	int root_num = 0; /* The index number of the root we are currently working on. */
+	int unmatched; /* This is the number of characters that don't match between the two strings */
+	unsigned int percentage = 100 - tinrc.thread_perc;
+	size_t slen;
+
+	/* First we need to sort art[] to simplify and speed up the matching. */
+	SortBy(subj_comp_asc);
+
+	/*
+	 * Now we put all the articles which match enough into the thread. If
+	 * an article doesn't match enough we create a new thread and then add
+	 * to that and so on.
+	 */
+	base[0] = 0;
+	arts[0].prev = ART_NORMAL;
+	for_each_art(i) {
+		if (i == 0)
+			continue;
+
+		/* Check each character to see if it matched enough */
+		k = 0;
+		unmatched = 0;
+		for (j = 0; arts[base[root_num]].subject[j] != '\0' && arts[i].subject[k] != '\0'; j++, k++) {
+			if (arts[base[root_num]].subject[j] != arts[i].subject[k])
+				unmatched++;
+		}
+
+		/*
+		 * By getting here we have a number of unmatched characters
+		 * between the two strings. We also have the length of the
+		 * strings available to us easily.
+		 * All we need to do is see if the match is good enough, but
+		 * we count differences in the length of the strings against
+		 * them matching.
+		 */
+		slen = strlen(arts[base[root_num]].subject);
+		unmatched += abs(slen - strlen(arts[i].subject));
+		if ((unmatched * 100) / slen > percentage) {
+			/*
+			 * If there is less greater than percentage% different start a
+			 * new thread.
+			 */
+			base[++root_num] = i;
+			arts[i].prev = ART_NORMAL;
+			continue;
+		} else {
+			/*
+			 * The subject lines match enough to consider them part of a single
+			 * thread, so add the current article to the thread.
+			 */
+			if (arts[base[root_num]].thread < 0)
+				arts[base[root_num]].thread = i;
+			arts[i].prev = i - 1;
+			arts[i - 1].thread = i;
+			continue;
+		}
+	}
+}
 
 /*
  * This was brought over from tags.c, however this version doesn't not
@@ -896,7 +970,6 @@ thread_by_multipart(
 	MultiPartInfo *minfo = NULL;
 
 	for_each_art(i) {
-
 		if (IGNORE_ART_THREAD(i) || arts[i].prev >= 0 || !global_get_multiparts(i, &minfo))
 			continue;
 
@@ -925,6 +998,7 @@ thread_by_multipart(
  *	THREAD_REFS		Threads are created using the References headers
  *	THREAD_BOTH		Threads created using References and then Subject
  *	THREAD_MULTI	Threads created using Subject to search for Multiparts
+ *	THREAD_PERC		Threads based upon a char for char match of greater than x%
  *
  * .thread and .prev are used to hold the threading information, see tin.h for
  * more information
@@ -1019,6 +1093,10 @@ make_threads(
 			thread_by_multipart();
 			break;
 
+		case THREAD_PERC:
+			thread_by_percentage();
+			break;
+
 		default: /* not reached */
 			break;
 	}
@@ -1090,7 +1168,7 @@ static void
 sort_base(
 	unsigned int sort_threads_type)
 {
-	switch (sort_threads_type) {
+	switch (sort_threads_type) { /* this switch doesn't look very usefull */
 		case SORT_THREADS_BY_SCORE_DESCEND:
 		case SORT_THREADS_BY_SCORE_ASCEND:
 			qsort(base, (size_t) grpmenu.max, sizeof(long), score_comp_base);
@@ -1654,8 +1732,8 @@ find_nov_file(
 
 		case GROUP_TYPE_NEWS:
 			/*
-			 * xover_cmd is not an issue here, any gripes and warnings
-			 * about XOVER are handled in nntp_open()
+			 * nntp.caps.over_cmd is not an issue here, any gripes and warnings
+			 * about [X]OVER are handled in nntp_open()
 			 */
 
 			/*
@@ -1752,14 +1830,14 @@ find_nov_file(
 		joinpath(nov_file, dir, buf);
 
 		if ((fp = fopen(nov_file, "r")) == NULL)
-			return nov_file;
+			break;
 
 		/*
 		 * No group name header, so not a valid index file => overwrite it
 		 */
 		if (fgets(buf, (int) sizeof(buf), fp) == NULL) {
 			fclose(fp);
-			return nov_file;
+			break;
 		}
 		fclose(fp);
 
@@ -1767,7 +1845,7 @@ find_nov_file(
 			*ptr = '\0';
 
 		if (strcmp(buf, group->name) == 0)
-			return nov_file;
+			break;
 
 	}
 
@@ -2181,8 +2259,8 @@ static char *
 print_from(
 	struct t_article *article)
 {
-	static char from[PATH_LEN];
 	char *p;
+	static char from[PATH_LEN];
 
 	*from = '\0';
 
@@ -2216,10 +2294,10 @@ open_xover_fp(
 	t_bool local)
 {
 #ifdef NNTP_ABLE
-	if (!local && xover_cmd && *mode == 'r' && group->type == GROUP_TYPE_NEWS) {
+	if (!local && nntp_caps.over_cmd && *mode == 'r' && group->type == GROUP_TYPE_NEWS) {
 		char line[NNTP_STRLEN];
 
-		snprintf(line, sizeof(line), "%s %ld-%ld", xover_cmd, min, max);
+		snprintf(line, sizeof(line), "%s %ld-%ld", nntp_caps.over_cmd, min, max);
 		return (nntp_command(line, OK_XOVER, NULL, 0));
 	}
 #endif /* NNTP_ABLE */
diff -Nurp tin-1.7.8/src/attrib.c tin-1.7.9/src/attrib.c
--- tin-1.7.8/src/attrib.c	2005-03-15 22:26:50.000000000 +0100
+++ tin-1.7.9/src/attrib.c	2005-06-28 10:31:21.332080350 +0200
@@ -3,7 +3,7 @@
  *  Module    : attrib.c
  *  Author    : I. Lea
  *  Created   : 1993-12-01
- *  Updated   : 2005-03-15
+ *  Updated   : 2005-05-07
  *  Notes     : Group attribute routines
  *
  * Copyright (c) 1993-2005 Iain Lea <iain@bricbrac.de>
@@ -466,103 +466,142 @@ do_set_attrib(
 		case ATTRIB_MAILDIR:
 			free_if_not_default(&group->attribute->maildir, tinrc.maildir);
 			SET_STRING(maildir);
+
 		case ATTRIB_SAVEDIR:
 			free_if_not_default(&group->attribute->savedir, tinrc.savedir);
 			SET_STRING(savedir);
+
 		case ATTRIB_SAVEFILE:
 			FreeIfNeeded(group->attribute->savefile);
 			SET_STRING(savefile);
+
 		case ATTRIB_ORGANIZATION:
 			free_if_not_default(&group->attribute->organization, default_organization);
 			SET_STRING(organization);
+
 		case ATTRIB_FROM:
 			free_if_not_default(&group->attribute->from, tinrc.mail_address);
 			SET_STRING(from);
+
 		case ATTRIB_SIGFILE:
 			free_if_not_default(&group->attribute->sigfile, tinrc.sigfile);
 			SET_STRING(sigfile);
+
 		case ATTRIB_FOLLOWUP_TO:
 			FreeIfNeeded(group->attribute->followup_to);
 			SET_STRING(followup_to);
+
 		case ATTRIB_AUTO_SELECT:
 			SET_INTEGER(auto_select);
+
 		case ATTRIB_AUTO_SAVE:
 			SET_INTEGER(auto_save);
+
 		case ATTRIB_BATCH_SAVE:
 			SET_INTEGER(batch_save);
+
 		case ATTRIB_DELETE_TMP_FILES:
 			SET_INTEGER(delete_tmp_files);
+
 		case ATTRIB_SHOW_ONLY_UNREAD:
 			SET_INTEGER(show_only_unread);
+
 		case ATTRIB_THREAD_ARTS:
 			SET_INTEGER(thread_arts);
+
 		case ATTRIB_SHOW_AUTHOR:
 			SET_INTEGER(show_author);
+
 		case ATTRIB_SHOW_INFO:
 			SET_INTEGER(show_info);
+
 		case ATTRIB_SORT_ART_TYPE:
 			SET_INTEGER(sort_art_type);
+
 		case ATTRIB_SORT_THREADS_TYPE:
 			SET_INTEGER(sort_threads_type);
+
 		case ATTRIB_POST_PROC_TYPE:
 			SET_INTEGER(post_proc_type);
+
 		case ATTRIB_QUICK_KILL_HEADER:
 			SET_INTEGER(quick_kill_header);
+
 		case ATTRIB_QUICK_KILL_SCOPE:
 			FreeIfNeeded(group->attribute->quick_kill_scope);
 			SET_STRING(quick_kill_scope);
+
 		case ATTRIB_QUICK_KILL_EXPIRE:
 			SET_INTEGER(quick_kill_expire);
+
 		case ATTRIB_QUICK_KILL_CASE:
 			SET_INTEGER(quick_kill_case);
+
 		case ATTRIB_QUICK_SELECT_HEADER:
 			SET_INTEGER(quick_select_header);
+
 		case ATTRIB_QUICK_SELECT_SCOPE:
 			FreeIfNeeded(group->attribute->quick_select_scope);
 			SET_STRING(quick_select_scope);
+
 		case ATTRIB_QUICK_SELECT_EXPIRE:
 			SET_INTEGER(quick_select_expire);
+
 		case ATTRIB_QUICK_SELECT_CASE:
 			SET_INTEGER(quick_select_case);
+
 		case ATTRIB_MAILING_LIST:
 			FreeIfNeeded(group->attribute->mailing_list);
 			SET_STRING(mailing_list);
+
 #ifdef CHARSET_CONVERSION
 		case ATTRIB_MM_NETWORK_CHARSET:
 			SET_INTEGER(mm_network_charset);
+
 		case ATTRIB_UNDECLARED_CHARSET:
 			FreeIfNeeded(group->attribute->undeclared_charset);
 			SET_STRING(undeclared_charset);
 #endif /* CHARSET_CONVERSION */
+
 		case ATTRIB_X_HEADERS:
 			FreeIfNeeded(group->attribute->x_headers);
 			SET_STRING(x_headers);
+
 		case ATTRIB_X_BODY:
 			FreeIfNeeded(group->attribute->x_body);
 			SET_STRING(x_body);
+
 		case ATTRIB_X_COMMENT_TO:
 			SET_INTEGER(x_comment_to);
+
 		case ATTRIB_FCC:
 			FreeIfNeeded(group->attribute->fcc);
 			SET_STRING(fcc);
+
 		case ATTRIB_NEWS_QUOTE:
 			free_if_not_default(&group->attribute->news_quote_format, tinrc.news_quote_format);
 			SET_STRING(news_quote_format);
+
 		case ATTRIB_QUOTE_CHARS:
 			free_if_not_default(&group->attribute->quote_chars, tinrc.quote_chars);
 			SET_STRING(quote_chars);
+
 		case ATTRIB_MIME_TYPES_TO_SAVE:
 			FreeIfNeeded(group->attribute->mime_types_to_save);
 			SET_STRING(mime_types_to_save);
+
 		case ATTRIB_MIME_FORWARD:
 			SET_INTEGER(mime_forward);
+
 #ifdef HAVE_ISPELL
 		case ATTRIB_ISPELL:
 			FreeIfNeeded(group->attribute->ispell);
 			SET_STRING(ispell);
 #endif /* HAVE_ISPELL */
+
 		case ATTRIB_TEX2ISO_CONV:
 			SET_INTEGER(tex2iso_conv);
+
 		default:
 			break;
 	}
@@ -719,10 +758,11 @@ write_attributes_file(
 		fprintf(fp, "scope=*sources*\n");
 		fprintf(fp, "post_proc_type=%d\n\n", POST_PROC_SHAR);
 
-		fprintf(fp, _("# in *binaries* do full post processing, remove tmp files\n"));
-		fprintf(fp, _("# and set Followup-To: poster\n"));
+		fprintf(fp, _("# in *binaries* do full post processing but no TeX2ISO conversion,\n"));
+		fprintf(fp, _("# remove tmp files and set Followup-To: poster\n"));
 		fprintf(fp, "scope=*binaries*\n");
 		fprintf(fp, "post_proc_type=%d\n", POST_PROC_YES);
+		fprintf(fp, "tex2iso_conv=OFF\n");
 		fprintf(fp, "delete_tmp_files=ON\n");
 		fprintf(fp, "followup_to=poster\n\n");
 	} else {
@@ -748,7 +788,8 @@ write_attributes_file(
 		error_message(_(txt_filesystem_full), ATTRIBUTES_FILE);
 	else if (copy_ok)
 		rename_file(new_file, file);
-	else unlink (new_file);
+	else
+		unlink (new_file);
 
 	free(new_file);
 	return;
diff -Nurp tin-1.7.8/src/config.c tin-1.7.9/src/config.c
--- tin-1.7.8/src/config.c	2005-02-15 18:18:55.000000000 +0100
+++ tin-1.7.9/src/config.c	2005-06-28 10:31:24.518493757 +0200
@@ -3,7 +3,7 @@
  *  Module    : config.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-02-15
+ *  Updated   : 2005-06-20
  *  Notes     : Configuration file routines
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -432,6 +432,7 @@ read_config_file(
 
 			if (match_integer(buf, "interactive_mailer=", &tinrc.interactive_mailer, INTERACTIVE_NONE))
 				break;
+
 			break;
 
 		case 'k':
@@ -703,6 +704,9 @@ read_config_file(
 			if (match_integer(buf, "thread_articles=", &tinrc.thread_articles, THREAD_MAX))
 				break;
 
+			if (match_integer(buf, "thread_perc=", &tinrc.thread_perc, 100))
+				break;
+
 			if (match_integer(buf, "thread_score=", &tinrc.thread_score, THREAD_SCORE_WEIGHT))
 				break;
 
@@ -924,6 +928,9 @@ write_config_file(
 	fprintf(fp, _(txt_thread_articles.tinrc));
 	fprintf(fp, "thread_articles=%d\n\n", tinrc.thread_articles);
 
+	fprintf(fp, _(txt_thread_perc.tinrc));
+	fprintf(fp, "thread_perc=%d\n\n", tinrc.thread_perc);
+
 	fprintf(fp, _(txt_show_description.tinrc));
 	fprintf(fp, "show_description=%s\n\n", print_boolean(tinrc.show_description));
 
@@ -1682,6 +1689,7 @@ rc_update(
 	t_bool show_lines = FALSE;
 	t_bool show_score = FALSE;
 	t_bool thread_articles = FALSE;
+	t_bool thread_perc = FALSE;
 	t_bool use_builtin_inews = FALSE;
 	t_bool use_getart_limit = FALSE;
 	t_bool use_mailreader_i = FALSE;
@@ -1784,6 +1792,9 @@ rc_update(
 	if (thread_articles)
 		tinrc.thread_articles = THREAD_BOTH;
 
+	if (thread_perc)
+		tinrc.thread_perc = THREAD_PERC_DEFAULT;
+
 	if (use_builtin_inews)
 		strncpy(tinrc.inews_prog, INTERNAL_CMD, sizeof(tinrc.inews_prog) - 1);
 
diff -Nurp tin-1.7.8/src/cook.c tin-1.7.9/src/cook.c
--- tin-1.7.8/src/cook.c	2005-02-01 17:17:20.000000000 +0100
+++ tin-1.7.9/src/cook.c	2005-06-28 10:31:21.385070595 +0200
@@ -156,7 +156,7 @@ put_cooked(
 	char *p, *bufp, *buf;
 	int wrap_column;
 	int space;
-/*	static int overflow = 0; *//* TODO: we don't use it (anymore?) */
+/*	static int overflow = 0; */ /* TODO: we don't use it (anymore?) */
 	static int saved_flags = 0;
 	va_list ap;
 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
diff -Nurp tin-1.7.8/src/curses.c tin-1.7.9/src/curses.c
--- tin-1.7.8/src/curses.c	2004-12-30 14:33:10.000000000 +0100
+++ tin-1.7.9/src/curses.c	2005-06-28 10:31:21.402067466 +0200
@@ -3,7 +3,7 @@
  *  Module    : curses.c
  *  Author    : D. Taylor & I. Lea
  *  Created   : 1986-01-01
- *  Updated   : 2004-07-20
+ *  Updated   : 2005-04-18
  *  Notes     : This is a screen management library borrowed with permission
  *              from the Elm mail system. This library was hacked to provide
  *              what tin needs.
@@ -102,7 +102,7 @@ static TTY _raw_tty, _original_tty;
 
 #else	/* FIXME: prune the non-autoconf'd stuff */
 
-#	if (defined(COHERENT) || defined(BSD)
+#	if defined(COHERENT) || defined(BSD)
 #		ifdef BSD4_1
 #			include <termio.h>
 #			define USE_TERMIO 1
@@ -134,7 +134,7 @@ static TTY _raw_tty, _original_tty;
 #	endif /* COHERENT || BSD */
 
 #	ifndef VMS
-#		if (defined(BSD) || defined(MINIX)
+#		if defined(BSD) || defined(MINIX)
 #			define USE_SGTTY 1
 struct sgttyb _raw_tty, _original_tty;
 #		else
diff -Nurp tin-1.7.8/src/debug.c tin-1.7.9/src/debug.c
--- tin-1.7.8/src/debug.c	2005-02-11 16:54:54.000000000 +0100
+++ tin-1.7.9/src/debug.c	2005-06-28 10:31:21.527044459 +0200
@@ -3,7 +3,7 @@
  *  Module    : debug.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-02-11
+ *  Updated   : 2005-05-04
  *  Notes     : debug routines
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -141,8 +141,8 @@ void
 debug_print_header(
 	struct t_article *s)
 {
-	char file[PATH_LEN];
 	FILE *fp;
+	char file[PATH_LEN];
 
 	if (debug != 2)
 		return;
@@ -180,8 +180,8 @@ void
 debug_print_active(
 	void)
 {
-	char file[PATH_LEN];
 	FILE *fp;
+	char file[PATH_LEN];
 	int i;
 	struct t_group *group;
 
@@ -303,8 +303,8 @@ void
 debug_print_filters(
 	void)
 {
-	char file[PATH_LEN];
 	FILE *fp;
+	char file[PATH_LEN];
 	int i, num;
 	struct t_filter *the_filter;
 
@@ -330,15 +330,32 @@ debug_print_filters(
 		fclose(fp);
 	}
 }
+
+
+/* TODO: print out all fields of t_capabilities */
+#	ifdef NNTP_ABLE
+void
+debug_print_nntp_extensions(
+	void)
+{
+	if (debug < 2)
+		return;
+	debug_nntp("###", "NNTP EXTENSIONS/CAPABILITIES");
+	debug_nntp("###", "Type/Version : %d/%d", nntp_caps.type, nntp_caps.version);
+	debug_nntp("###", "Command-names: %s %s", BlankIfNull(nntp_caps.over_cmd), BlankIfNull(nntp_caps.hdr_cmd));
+	debug_nntp("###", "List         : %s", nntp_caps.list_motd ? "MOTD" : "");
+}
+#	endif /* NNTP_ABLE */
 #endif /* DEBUG */
 
+
 #ifdef DEBUG_NEWSRC
 void
 debug_print_comment(
 	const char *comment)
 {
-	char file[PATH_LEN];
 	FILE *fp;
+	char file[PATH_LEN];
 
 	if (debug < 2)
 		return;
@@ -358,8 +375,8 @@ debug_print_bitmap(
 	struct t_group *group,
 	struct t_article *art)
 {
-	char file[PATH_LEN];
 	FILE *fp;
+	char file[PATH_LEN];
 
 	if (debug != 3)
 		return;
diff -Nurp tin-1.7.8/src/feed.c tin-1.7.9/src/feed.c
--- tin-1.7.8/src/feed.c	2005-02-17 15:20:05.000000000 +0100
+++ tin-1.7.9/src/feed.c	2005-06-28 10:31:21.560038385 +0200
@@ -3,7 +3,7 @@
  *  Module    : feed.c
  *  Author    : I. Lea
  *  Created   : 1991-08-31
- *  Updated   : 2005-02-12
+ *  Updated   : 2005-05-13
  *  Notes     : provides same interface to mail,pipe,print,save & repost commands
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -242,7 +242,7 @@ get_feed_key(
 		case FEED_REPOST:
 			if (!can_post) {				/* Get this over with before asking any Q's */
 				info_message(_(txt_cannot_post));
-				return 0;
+				return NOT_ASSIGNED;
 			}
 			prompt = txt_repost;
 			break;
@@ -303,7 +303,7 @@ get_feed_key(
 		case GLOBAL_ABORT:
 			clear_message();
 			return GLOBAL_ABORT;
-			/* NOT REACHED */
+			/* NOTREACHED */
 			break;
 
 		default:
@@ -521,8 +521,8 @@ feed_articles(
 	struct t_group *group,
 	int respnum)
 {
-	char outpath[PATH_LEN];
 	char *prompt;
+	char outpath[PATH_LEN];
 	int art;
 	int i;
 	int saved_curr_line = -1;
@@ -677,7 +677,7 @@ feed_articles(
 							supersede = TRUE;
 							break;
 
-						case FEED_REPOST:
+						case FEED_KEY_REPOST:
 							tmp = fmt_string(_(txt_repost_group), tinrc.default_repost_group);
 							supersede = FALSE;
 							break;
diff -Nurp tin-1.7.8/src/filter.c tin-1.7.9/src/filter.c
--- tin-1.7.8/src/filter.c	2005-02-12 15:00:56.000000000 +0100
+++ tin-1.7.9/src/filter.c	2005-06-28 10:31:21.584033967 +0200
@@ -3,7 +3,7 @@
  *  Module    : filter.c
  *  Author    : I. Lea
  *  Created   : 1992-12-28
- *  Updated   : 2005-02-12
+ *  Updated   : 2005-05-04
  *  Notes     : Filter articles. Kill & auto selection are supported.
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -617,9 +617,8 @@ read_filter_file(
 	}
 	fclose(fp);
 
-	if (expired || upgrade == RC_UPGRADE) {
+	if (expired || upgrade == RC_UPGRADE)
 		write_filter_file(file);
-	}
 
 	if (cmd_line && !batch_mode)
 		printf("\r\n");
@@ -986,7 +985,7 @@ fmt_filter_menu_prompt(
  */
 t_bool
 filter_menu(
-	int type,
+	t_function type,
 	struct t_group *group,
 	struct t_article *art)
 {
@@ -1003,11 +1002,14 @@ filter_menu(
 	char text_time[PATH_LEN];
 	char double_time[PATH_LEN];
 	char quat_time[PATH_LEN];
-	t_function func, default_func = FILTER_SAVE;
-	int i, len;
+	int i, len, clen = 0, flen = 0;
 	struct t_filter_rule rule;
 	t_bool proceed;
 	t_bool ret;
+	t_function func, default_func = FILTER_SAVE;
+#if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
+	wchar_t *wbuf;
+#endif /* MULTIBYTE_ABLE && !NO_LOCALE */
 
 	signal_context = cFilter;
 
@@ -1036,7 +1038,7 @@ filter_menu(
 	printascii(keyquit, func_to_key(GLOBAL_QUIT, filter_keys));
 	printascii(keysave, func_to_key(FILTER_SAVE, filter_keys));
 
-	if (type == FILTER_KILL) {
+	if (type == GLOBAL_MENU_FILTER_KILL) {
 		ptr_filter_from = _(txt_kill_from);
 		ptr_filter_lines = _(txt_kill_lines);
 		ptr_filter_menu = _(txt_kill_menu);
@@ -1047,7 +1049,7 @@ filter_menu(
 		ptr_filter_time = _(txt_kill_time);
 		ptr_filter_help_scope = _(txt_help_kill_scope);
 		ptr_filter_quit_edit_save = _(txt_quit_edit_save_kill);
-	} else {
+	} else {	/* type == GLOBAL_MENU_FILTER_SELECT */
 		ptr_filter_from = _(txt_select_from);
 		ptr_filter_lines = _(txt_select_lines);
 		ptr_filter_menu = _(txt_select_menu);
@@ -1063,11 +1065,54 @@ filter_menu(
 	ptr_filter_comment = _(txt_filter_comment);
 	ptr_filter_groupname = group->name;
 
-	len = cCOLS - 33;
+#if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
+	if ((wbuf = char2wchar_t(_(txt_no))) != NULL) {
+		clen = MAX(clen, wcswidth(wbuf, wcslen(wbuf)));
+		free(wbuf);
+	}
+	if ((wbuf = char2wchar_t(_(txt_yes))) != NULL) {
+		clen = MAX(clen, wcswidth(wbuf, wcslen(wbuf)));
+		free(wbuf);
+	}
+	if ((wbuf = char2wchar_t(_(txt_full))) != NULL) {
+		clen = MAX(clen, wcswidth(wbuf, wcslen(wbuf)));
+		free(wbuf);
+	}
+	if ((wbuf = char2wchar_t(_(txt_last))) != NULL) {
+		clen = MAX(clen, wcswidth(wbuf, wcslen(wbuf)));
+		free(wbuf);
+	}
+	if ((wbuf = char2wchar_t(_(txt_only))) != NULL) {
+		clen = MAX(clen, wcswidth(wbuf, wcslen(wbuf)));
+		free(wbuf);
+	}
+	if ((wbuf = char2wchar_t(ptr_filter_subj)) != NULL) {
+		flen = MAX(flen, wcswidth(wbuf, wcslen(wbuf)) - 2);
+		free(wbuf);
+	}
+	if ((wbuf = char2wchar_t(ptr_filter_from)) != NULL) {
+		flen = MAX(flen, wcswidth(wbuf, wcslen(wbuf)) - 2);
+		free(wbuf);
+	}
+	if ((wbuf = char2wchar_t(ptr_filter_msgid)) != NULL) {
+		flen = MAX(flen, wcswidth(wbuf, wcslen(wbuf)) - 2);
+		free(wbuf);
+	}
+#else
+	clen = MAX(clen, (int) strlen(_(txt_no)));
+	clen = MAX(clen, (int) strlen(_(txt_yes)));
+	clen = MAX(clen, (int) strlen(_(txt_full)));
+	clen = MAX(clen, (int) strlen(_(txt_last)));
+	clen = MAX(clen, (int) strlen(_(txt_only)));
+	flen = MAX(flen, (int) strlen(ptr_filter_subj) - 2);
+	flen = MAX(flen, (int) strlen(ptr_filter_from) - 2);
+	flen = MAX(flen, (int) strlen(ptr_filter_msgid) - 2);
+#endif /* MULTIBYTE_ABLE && !NO_LOCALE */
+	len = cCOLS - flen - clen - 1 + 4;
 
 	snprintf(text_time, sizeof(text_time), _(txt_time_default_days), tinrc.filter_days);
 	fmt_filter_menu_prompt(text_subj, sizeof(text_subj), ptr_filter_subj, len, art->subject);
-	snprintf(text_score, sizeof(text_score), _(txt_filter_score), (type == FILTER_KILL ? -tinrc.score_kill : tinrc.score_select));
+	snprintf(text_score, sizeof(text_score), _(txt_filter_score), (type == GLOBAL_MENU_FILTER_KILL ? -tinrc.score_kill : tinrc.score_select));
 	fmt_filter_menu_prompt(text_from, sizeof(text_from), ptr_filter_from, len, art->from);
 	fmt_filter_menu_prompt(text_msgid, sizeof(text_msgid), ptr_filter_msgid, len - 4, MSGID(art));
 
@@ -1105,8 +1150,7 @@ filter_menu(
 		list[3] = (char *) _(txt_from_line_only);
 		list[4] = (char *) _(txt_msgid_line_only);
 
-		i = get_choice(INDEX_TOP + 3, _(txt_help_filter_text_type),
-			       _(txt_filter_text_type), list, 5);
+		i = get_choice(INDEX_TOP + 3, _(txt_help_filter_text_type), _(txt_filter_text_type), list, 5);
 		free(list);
 
 		if (i == -1) {
@@ -1278,9 +1322,9 @@ filter_menu(
 		rule.score = atoi(buf);
 	else {
 		/* use default score */
-		if (type == FILTER_KILL)
+		if (type == GLOBAL_MENU_FILTER_KILL)
 			rule.score = tinrc.score_kill;
-		else /* type == FILTER_SELECT */
+		else /* type == GLOBAL_MENU_FILTER_SELECT */
 			rule.score = tinrc.score_select;
 	}
 
@@ -1298,7 +1342,7 @@ filter_menu(
 		rule.score = SCORE_MAX;
 
 	/* get the right sign for the score */
-	if (type == FILTER_KILL)
+	if (type == GLOBAL_MENU_FILTER_KILL)
 		rule.score = -rule.score;
 
 	/*
@@ -1404,7 +1448,7 @@ filter_menu(
  */
 t_bool
 quick_filter(
-	int type,
+	t_function type,
 	struct t_group *group,
 	struct t_article *art)
 {
@@ -1414,12 +1458,12 @@ quick_filter(
 	struct t_filter_rule rule;
 	t_bool ret;
 
-	if (type == FILTER_KILL) {
+	if (type == GLOBAL_QUICK_FILTER_KILL) {
 		header = group->attribute->quick_kill_header;
 		expire = group->attribute->quick_kill_expire;
 		icase = group->attribute->quick_kill_case;
 		scope = group->attribute->quick_kill_scope;
-	} else {
+	} else {	/* type == GLOBAL_QUICK_FILTER_SELECT */
 		header = group->attribute->quick_select_header;
 		expire = group->attribute->quick_select_expire;
 		icase = group->attribute->quick_select_case;
@@ -1429,7 +1473,7 @@ quick_filter(
 #ifdef DEBUG
 	if (debug)
 		error_message("%s header=[%d] scope=[%s] expire=[%s] case=[%d]",
-			(type == FILTER_KILL) ? "KILL" : "SELECT", header,
+			(type == GLOBAL_QUICK_FILTER_KILL) ? "KILL" : "SELECT", header,
 			BlankIfNull(scope), txt_onoff[expire != FALSE ? 1 : 0], icase);
 #endif /* DEBUG */
 
@@ -1447,7 +1491,7 @@ quick_filter(
 	rule.subj_ok = (header == FILTER_SUBJ_CASE_SENSITIVE || header == FILTER_SUBJ_CASE_IGNORE);
 
 	/* create an auto-comment. */
-	if (type == FILTER_KILL)
+	if (type == GLOBAL_QUICK_FILTER_KILL)
 		snprintf(txt, sizeof(txt), "%s%s%c%s%s%s", _(txt_filter_rule_created), "'", ']', "' (", _(txt_help_article_quick_kill), ").");
 	else
 		snprintf(txt, sizeof(txt), "%s%s%c%s%s%s", _(txt_filter_rule_created), "'", '[', "' (", _(txt_help_article_quick_select), ").");
@@ -1457,7 +1501,7 @@ quick_filter(
 	rule.icase = icase;
 	rule.expire_time = expire;
 	rule.check_string = TRUE;
-	rule.score = (type == FILTER_KILL) ? tinrc.score_kill : tinrc.score_select;
+	rule.score = (type == GLOBAL_QUICK_FILTER_KILL) ? tinrc.score_kill : tinrc.score_select;
 
 	ret = add_filter_rule(group, art, &rule, TRUE);
 	rule.comment = free_filter_comment(rule.comment);
@@ -2127,10 +2171,10 @@ open_xhdr_fp(
 	long max)
 {
 #	ifdef NNTP_ABLE
-	if (read_news_via_nntp && !read_saved_news && xhdr_cmd) {
+	if (read_news_via_nntp && !read_saved_news && nntp_caps.hdr_cmd) {
 		char buf[NNTP_STRLEN];
 
-		snprintf(buf, sizeof(buf), "%s %s %ld-%ld", xhdr_cmd, header, min, max);
+		snprintf(buf, sizeof(buf), "%s %s %ld-%ld", nntp_caps.hdr_cmd, header, min, max);
 		return (nntp_command(buf, OK_HEAD, NULL, 0));
 	} else
 #	endif /* NNTP_ABLE */
diff -Nurp tin-1.7.8/src/global.c tin-1.7.9/src/global.c
--- tin-1.7.8/src/global.c	2005-02-01 11:24:10.000000000 +0100
+++ tin-1.7.9/src/global.c	2005-06-28 10:31:21.614028445 +0200
@@ -285,7 +285,7 @@ scroll_up(
 #ifdef USE_CURSES
 	do_scroll(-1);
 	currmenu->draw_item(currmenu->first);
-	 stow_cursor();
+	stow_cursor();
 	if (currmenu->curr >= currmenu->first + NOTESLINES)
 		move_to_item(currmenu->curr - 1);
 #else
@@ -404,6 +404,7 @@ handle_keypad(
 				case KEYMAP_MOUSE:
 					if (mouse_action)
 						func = mouse_action(left_action, right_action);
+					break;
 
 				default:
 					break;
diff -Nurp tin-1.7.8/src/group.c tin-1.7.9/src/group.c
--- tin-1.7.8/src/group.c	2005-03-14 14:32:32.000000000 +0100
+++ tin-1.7.9/src/group.c	2005-06-28 10:31:21.649022003 +0200
@@ -3,7 +3,7 @@
  *  Module    : group.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-14
+ *  Updated   : 2005-04-18
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -322,7 +322,7 @@ group_page(
 				old_top = top_art;
 				n = (int) base[grpmenu.curr];
 				old_artnum = arts[n].artnum;
-				if (filter_menu((func == GLOBAL_MENU_FILTER_KILL) ? FILTER_KILL : FILTER_SELECT, group, &arts[n])) {
+				if (filter_menu(func, group, &arts[n])) {
 					if (filter_articles(group)) {
 						make_threads(group, FALSE);
 						grpmenu.curr = find_new_pos(old_top, old_artnum, grpmenu.curr);
@@ -353,7 +353,7 @@ group_page(
 					old_top = top_art;
 					n = (int) base[grpmenu.curr]; /* should this depend on show_only_unread? */
 					old_artnum = arts[n].artnum;
-					if (quick_filter((func == GLOBAL_QUICK_FILTER_KILL) ? FILTER_KILL : FILTER_SELECT, group, &arts[n])) {
+					if (quick_filter(func, group, &arts[n])) {
 						info_message((func == GLOBAL_QUICK_FILTER_KILL) ? _(txt_info_add_kill) : _(txt_info_add_select));
 						if (filter_articles(group)) {
 							make_threads(group, FALSE);
@@ -392,8 +392,8 @@ group_page(
 				break;
 
 			case SPECIAL_CATCHUP_LEFT:
-			case GROUP_CATCHUP:
-			case GROUP_CATCHUP_NEXT_UNREAD:
+			case CATCHUP:
+			case CATCHUP_NEXT_UNREAD:
 				ret_code = group_catchup(func);
 				break;
 
@@ -677,7 +677,7 @@ group_page(
 					show_group_page();
 				break;
 
-			case GROUP_MARK_ARTICLE_UNREAD:		/* mark base article of thread unread */
+			case MARK_ARTICLE_UNREAD:		/* mark base article of thread unread */
 				if (grpmenu.curr < 0)
 					info_message(_(txt_no_arts));
 				else {
@@ -711,7 +711,7 @@ group_page(
 				}
 				break;
 
-			case GROUP_MARK_THREAD_UNREAD:		/* mark whole thread as unread */
+			case MARK_THREAD_UNREAD:		/* mark whole thread as unread */
 				if (grpmenu.curr < 0)
 					info_message(_(txt_no_arts));
 				else {
@@ -1283,6 +1283,33 @@ build_sline(
 		tmp_from = wcspart(wc, len_from, TRUE);
 	}
 
+#	if 0 /* use additional space if !draw_arrow - usefull? */
+	if (!tinrc.draw_arrow) {
+		if (curr_group->attribute->show_info == SHOW_INFO_SCORE || curr_group->attribute->show_info == SHOW_INFO_BOTH) {
+			mbstowcs(format, "%s %s %s%6d %-ls%s%-ls", ARRAY_SIZE(format) - 1);
+			swprintf(wbuffer, ARRAY_SIZE(wbuffer) - 1, format,
+				 tin_ltoa(i + 1, 6), new_resps, art_cnt, sbuf.score, tmp_subj,
+				 spaces, tmp_from);
+		} else {
+			mbstowcs(format, "%s %s %s %-ls%s%-ls", ARRAY_SIZE(format) - 1);
+			swprintf(wbuffer, ARRAY_SIZE(wbuffer) - 1, format,
+				 tin_ltoa(i + 1, 6), new_resps, art_cnt, tmp_subj,
+				 spaces, tmp_from);
+		}
+	} else {
+		if (curr_group->attribute->show_info == SHOW_INFO_SCORE || curr_group->attribute->show_info == SHOW_INFO_BOTH) {
+			mbstowcs(format, "  %s %s %s%6d %-ls%s%-ls", ARRAY_SIZE(format) - 1);
+			swprintf(wbuffer, ARRAY_SIZE(wbuffer) - 1, format,
+				 tin_ltoa(i + 1, 4), new_resps, art_cnt, sbuf.score, tmp_subj,
+				 spaces, tmp_from);
+		} else {
+			mbstowcs(format, "  %s %s %s %-ls%s%-ls", ARRAY_SIZE(format) - 1);
+			swprintf(wbuffer, ARRAY_SIZE(wbuffer) - 1, format,
+				 tin_ltoa(i + 1, 4), new_resps, art_cnt, tmp_subj,
+				 spaces, tmp_from);
+		}
+	}
+#	else
 	if (curr_group->attribute->show_info == SHOW_INFO_SCORE || curr_group->attribute->show_info == SHOW_INFO_BOTH) {
 		mbstowcs(format, "  %s %s %s%6d %-ls%s%-ls", ARRAY_SIZE(format) - 1);
 		swprintf(wbuffer, ARRAY_SIZE(wbuffer) - 1, format,
@@ -1294,6 +1321,7 @@ build_sline(
 			 tin_ltoa(i + 1, 4), new_resps, art_cnt, tmp_subj,
 			 spaces, tmp_from);
 	}
+#	endif /* 0 */
 
 	FreeIfNeeded(tmp_subj);
 	FreeIfNeeded(tmp_from);
@@ -1304,6 +1332,31 @@ build_sline(
 #else
 	arts_sub[len_subj - 12 + 1] = '\0';
 
+#	if 0 /* use additional space if !draw_arrow - usefull? */
+	if (!tinrc.draw_arrow) {
+		if (curr_group->attribute->show_info == SHOW_INFO_SCORE || curr_group->attribute->show_info == SHOW_INFO_BOTH)
+			snprintf(buffer, cCOLS + 1, "%s %s %s%6d %-*.*s%s%-*.*s",
+				 tin_ltoa(i + 1, 6), new_resps, art_cnt, sbuf.score,
+				 len_subj - 12, len_subj - 12, arts_sub,
+				 spaces, len_from, len_from, from);
+		else
+			snprintf(buffer, cCOLS + 1, "%s %s %s%-*.*s%s%-*.*s",
+				 tin_ltoa(i + 1, 6), new_resps, art_cnt,
+				 len_subj - 12, len_subj - 12, arts_sub,
+				 spaces, len_from, len_from, from);
+	} else {
+		if (curr_group->attribute->show_info == SHOW_INFO_SCORE || curr_group->attribute->show_info == SHOW_INFO_BOTH)
+			snprintf(buffer, cCOLS + 1, "  %s %s %s%6d %-*.*s%s%-*.*s",
+				 tin_ltoa(i + 1, 4), new_resps, art_cnt, sbuf.score,
+				 len_subj - 12, len_subj - 12, arts_sub,
+				 spaces, len_from, len_from, from);
+		else
+			snprintf(buffer, cCOLS + 1, "  %s %s %s%-*.*s%s%-*.*s",
+				 tin_ltoa(i + 1, 4), new_resps, art_cnt,
+				 len_subj - 12, len_subj - 12, arts_sub,
+				 spaces, len_from, len_from, from);
+	}
+#	else
 	if (curr_group->attribute->show_info == SHOW_INFO_SCORE || curr_group->attribute->show_info == SHOW_INFO_BOTH)
 		snprintf(buffer, cCOLS + 1, "  %s %s %s%6d %-*.*s%s%-*.*s",
 			 tin_ltoa(i + 1, 4), new_resps, art_cnt, sbuf.score,
@@ -1314,6 +1367,7 @@ build_sline(
 			 tin_ltoa(i + 1, 4), new_resps, art_cnt,
 			 len_subj - 12, len_subj - 12, arts_sub,
 			 spaces, len_from, len_from, from);
+#	endif /* 0 */
 #endif /* MULTIBYTE_ABLE && !NO_LOCALE */
 
 	/*
@@ -1577,18 +1631,18 @@ group_catchup(
 	if (num_of_tagged_arts && prompt_yn(_(txt_catchup_despite_tags), TRUE) != 1)
 		return 0;
 
-	snprintf(buf, sizeof(buf), _(txt_mark_arts_read), (func == GROUP_CATCHUP_NEXT_UNREAD) ? _(txt_enter_next_unread_group) : "");
+	snprintf(buf, sizeof(buf), _(txt_mark_arts_read), (func == CATCHUP_NEXT_UNREAD) ? _(txt_enter_next_unread_group) : "");
 
 	if (!curr_group->newsrc.num_unread || (!TINRC_CONFIRM_ACTION) || (pyn = prompt_yn(buf, TRUE)) == 1)
 		grp_mark_read(curr_group, arts);
 
 	switch (func) {
-		case GROUP_CATCHUP:				/* 'c' */
+		case CATCHUP:				/* 'c' */
 			if (pyn == 1)
 				return GRP_NEXT;
 			break;
 
-		case GROUP_CATCHUP_NEXT_UNREAD:			/* 'C' */
+		case CATCHUP_NEXT_UNREAD:			/* 'C' */
 			if (pyn == 1)
 				return GRP_NEXTUNREAD;
 			break;
diff -Nurp tin-1.7.8/src/help.c tin-1.7.9/src/help.c
--- tin-1.7.8/src/help.c	2005-03-16 13:40:40.000000000 +0100
+++ tin-1.7.9/src/help.c	2005-06-28 10:31:21.705011696 +0200
@@ -3,7 +3,7 @@
  *  Module    : help.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-16
+ *  Updated   : 2005-04-19
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -102,8 +102,8 @@ static t_help_page select_help_page[] = 
 	{ txt_help_empty_line, NOT_ASSIGNED },
 	{ txt_help_select_group_range, GLOBAL_SET_RANGE },
 	{ txt_help_empty_line, NOT_ASSIGNED },
-	{ txt_help_select_catchup, SELECT_CATCHUP },
-	{ txt_help_select_catchup_next_unread, SELECT_CATCHUP_NEXT_UNREAD },
+	{ txt_help_select_catchup, CATCHUP },
+	{ txt_help_select_catchup_next_unread, CATCHUP_NEXT_UNREAD },
 	{ txt_help_select_mark_group_unread, SELECT_MARK_GROUP_UNREAD },
 	{ txt_help_select_subscribe, SELECT_SUBSCRIBE },
 	{ txt_help_select_unsubscribe, SELECT_UNSUBSCRIBE },
@@ -202,10 +202,10 @@ static t_help_page group_help_page[] = {
 	{ txt_help_group_untag_thread, GROUP_UNTAG },
 	{ txt_help_empty_line, NOT_ASSIGNED },
 	{ txt_help_group_mark_thread_read, GROUP_MARK_THREAD_READ },
-	{ txt_help_group_catchup, GROUP_CATCHUP },
-	{ txt_help_group_catchup_next, GROUP_CATCHUP_NEXT_UNREAD },
-	{ txt_help_group_mark_article_unread, GROUP_MARK_ARTICLE_UNREAD },
-	{ txt_help_group_mark_thread_unread, GROUP_MARK_THREAD_UNREAD },
+	{ txt_help_group_catchup, CATCHUP },
+	{ txt_help_group_catchup_next, CATCHUP_NEXT_UNREAD },
+	{ txt_help_group_mark_article_unread, MARK_ARTICLE_UNREAD },
+	{ txt_help_group_mark_thread_unread, MARK_THREAD_UNREAD },
 	{ txt_help_empty_line, NOT_ASSIGNED },
 	{ txt_help_group_select_all, GROUP_DO_AUTOSELECT },
 	{ txt_help_group_select_thread, GROUP_SELECT_THREAD },
@@ -294,10 +294,10 @@ static t_help_page thread_help_page[] = 
 	{ txt_help_group_untag_thread, THREAD_UNTAG },
 	{ txt_help_empty_line, NOT_ASSIGNED },
 	{ txt_help_thread_mark_article_read, THREAD_MARK_ARTICLE_READ },
-	{ txt_help_thread_catchup, THREAD_CATCHUP },
-	{ txt_help_thread_catchup_next_unread, THREAD_CATCHUP_NEXT_UNREAD },
-	{ txt_help_group_mark_article_unread, GROUP_MARK_ARTICLE_UNREAD },
-	{ txt_help_group_mark_thread_unread, GROUP_MARK_THREAD_UNREAD },
+	{ txt_help_thread_catchup, CATCHUP },
+	{ txt_help_thread_catchup_next_unread, CATCHUP_NEXT_UNREAD },
+	{ txt_help_group_mark_article_unread, MARK_ARTICLE_UNREAD },
+	{ txt_help_group_mark_thread_unread, MARK_THREAD_UNREAD },
 	{ txt_help_empty_line, NOT_ASSIGNED },
 	{ txt_help_group_select_thread, THREAD_SELECT_ARTICLE },
 	{ txt_help_group_toggle_thread_selection, THREAD_TOGGLE_ARTICLE_SELECTION },
@@ -403,10 +403,10 @@ static t_help_page page_help_page[] = {
 	{ txt_help_global_tag, PAGE_TAG },
 	{ txt_help_empty_line, NOT_ASSIGNED },
 	{ txt_help_article_mark_thread_read, PAGE_MARK_THREAD_READ },
-	{ txt_help_thread_catchup, PAGE_CATCHUP },
-	{ txt_help_thread_catchup_next_unread, PAGE_CATCHUP_NEXT_UNREAD },
-	{ txt_help_group_mark_article_unread, GROUP_MARK_ARTICLE_UNREAD },
-	{ txt_help_group_mark_thread_unread, GROUP_MARK_THREAD_UNREAD },
+	{ txt_help_thread_catchup, CATCHUP },
+	{ txt_help_thread_catchup_next_unread, CATCHUP_NEXT_UNREAD },
+	{ txt_help_group_mark_article_unread, MARK_ARTICLE_UNREAD },
+	{ txt_help_group_mark_thread_unread, MARK_THREAD_UNREAD },
 	{ txt_help_empty_line, NOT_ASSIGNED },
 	{ txt_help_article_autoselect, GLOBAL_MENU_FILTER_SELECT },
 	{ txt_help_article_autokill, GLOBAL_MENU_FILTER_KILL },
@@ -443,19 +443,21 @@ make_help_page(
 	const t_help_page *helppage,
 	const struct keylist keys)
 {
-	char *buf;
+	char *buf = my_malloc(LEN);
+	char *last = my_malloc(LEN);
 	char key[MAXKEYLEN];
 	/*
 	 * length is only needed to pass it to expand_ctrl_chars()
 	 * we have no need for the value
 	 */
 	int length;
-
-	buf = my_malloc(LEN);
+	size_t i;
 
 	if (!helppage)
 		return;
 
+	last[0] = '\0';
+
 	while (helppage->helptext) {
 		if (helppage->func == NOT_ASSIGNED) {
 			/*
@@ -464,23 +466,24 @@ make_help_page(
 			 */
 			buf = my_realloc(buf, LEN);
 
-			if (!strlen(helppage->helptext))	/* avoid empty string translations */
-				snprintf(buf, LEN, "%s", helppage->helptext);
+			if (!strlen(helppage->helptext))	/* avoid translation of empty strings */
+				snprintf(buf, LEN, "\n");
 			else
 				snprintf(buf, LEN, "%s", _(helppage->helptext));
 			buf[LEN - 1] = '\0';
 			expand_ctrl_chars(&buf, &length, 8);
 			fprintf(fp, "%s", buf);
 		} else {
-			size_t i;
-
 			for (i = 0; i < keys.used; i++) {
 				if (keys.list[i].function == helppage->func) {
 					buf = my_realloc(buf, LEN);
 					snprintf(buf, LEN, "%s\t  %s", printascii(key, keys.list[i].key), _(helppage->helptext));
 					buf[LEN - 1] = '\0';
 					expand_ctrl_chars(&buf, &length, 8);
-					fprintf(fp, "%s", buf);
+					if (strcmp(last, buf)) {
+						fprintf(fp, "%s", buf);
+						strncpy(last, buf, LEN);
+					}
 				}
 			}
 		}
@@ -488,6 +491,7 @@ make_help_page(
 	}
 
 	free(buf);
+	free(last);
 }
 
 
@@ -556,7 +560,7 @@ show_mini_help(
 				printascii(key[0], func_to_key(SELECT_ENTER_NEXT_UNREAD_GROUP, select_keys)),
 				printascii(key[1], func_to_key(SELECT_GOTO, select_keys)),
 				printascii(key[2], func_to_key(GLOBAL_SEARCH_SUBJECT_FORWARD, select_keys)),
-				printascii(key[3], func_to_key(SELECT_CATCHUP, select_keys)));
+				printascii(key[3], func_to_key(CATCHUP, select_keys)));
 			center_line(line, FALSE, buf);
 			snprintf(buf, bufs, _(txt_mini_select_2),
 				printascii(key[0], func_to_key(GLOBAL_LINE_DOWN, select_keys)),
@@ -583,7 +587,7 @@ show_mini_help(
 			center_line(line, FALSE, buf);
 			snprintf(buf, bufs, _(txt_mini_group_2),
 				printascii(key[0], func_to_key(GLOBAL_SEARCH_AUTHOR_FORWARD, group_keys)),
-				printascii(key[1], func_to_key(GROUP_CATCHUP, group_keys)),
+				printascii(key[1], func_to_key(CATCHUP, group_keys)),
 				printascii(key[2], func_to_key(GLOBAL_LINE_DOWN, group_keys)),
 				printascii(key[3], func_to_key(GLOBAL_LINE_UP, group_keys)),
 				printascii(key[4], func_to_key(GROUP_MARK_THREAD_READ, group_keys)),
@@ -608,7 +612,7 @@ show_mini_help(
 		case THREAD_LEVEL:
 			snprintf(buf, bufs, _(txt_mini_thread_1),
 				printascii(key[0], func_to_key(THREAD_READ_NEXT_ARTICLE_OR_THREAD, thread_keys)),
-				printascii(key[1], func_to_key(THREAD_CATCHUP, thread_keys)),
+				printascii(key[1], func_to_key(CATCHUP, thread_keys)),
 				printascii(key[2], func_to_key(THREAD_TOGGLE_SUBJECT_DISPLAY, thread_keys)));
 			center_line(line, FALSE, buf);
 			snprintf(buf, bufs, _(txt_mini_thread_2),
@@ -617,7 +621,7 @@ show_mini_help(
 				printascii(key[2], func_to_key(GLOBAL_LINE_UP, thread_keys)),
 				printascii(key[3], func_to_key(GLOBAL_QUIT, thread_keys)),
 				printascii(key[4], func_to_key(THREAD_TAG, thread_keys)),
-				printascii(key[5], func_to_key(THREAD_MARK_ARTICLE_UNREAD, thread_keys)));
+				printascii(key[5], func_to_key(MARK_ARTICLE_UNREAD, thread_keys)));
 			center_line(line + 1, FALSE, buf);
 			break;
 
@@ -630,7 +634,7 @@ show_mini_help(
 			snprintf(buf, bufs, _(txt_mini_page_2),
 				printascii(key[0], func_to_key(GLOBAL_SEARCH_AUTHOR_FORWARD, page_keys)),
 				printascii(key[1], func_to_key(GLOBAL_SEARCH_BODY, page_keys)),
-				printascii(key[2], func_to_key(PAGE_CATCHUP, page_keys)),
+				printascii(key[2], func_to_key(CATCHUP, page_keys)),
 				printascii(key[3], func_to_key(PAGE_FOLLOWUP_QUOTE, page_keys)),
 				printascii(key[4], func_to_key(PAGE_MARK_THREAD_READ, page_keys)));
 			center_line(line + 1, FALSE, buf);
diff -Nurp tin-1.7.8/src/init.c tin-1.7.9/src/init.c
--- tin-1.7.8/src/init.c	2005-03-15 01:15:21.000000000 +0100
+++ tin-1.7.9/src/init.c	2005-06-28 10:31:24.480500751 +0200
@@ -3,7 +3,7 @@
  *  Module    : init.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-01-30
+ *  Updated   : 2005-06-21
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -69,7 +69,7 @@ static int read_site_config(void);
 char **news_headers_to_display_array;	/* array of which headers to display */
 char **news_headers_to_not_display_array;	/* array of which headers to not display */
 char active_times_file[PATH_LEN];
-char article[PATH_LEN];			/* ~/TIN_ARTICLE_NAME file */
+char article_name[PATH_LEN];			/* ~/TIN_ARTICLE_NAME file */
 char bug_nntpserver1[PATH_LEN];		/* welcome message of NNTP server used */
 char bug_nntpserver2[PATH_LEN];		/* welcome message of NNTP server used */
 char cmdline_nntpserver[PATH_LEN];
@@ -291,6 +291,7 @@ struct t_config tinrc = {
 	SORT_THREADS_BY_SCORE_DESCEND,		/* sort_threads_type */
 	BOGUS_SHOW,		/* strip_bogus */
 	THREAD_BOTH,		/* thread_articles */
+	THREAD_PERC_DEFAULT,	/* thread_perc */
 	THREAD_SCORE_MAX,	/* thread_score */
 	0,		/* Default to wildmat, not regex */
 	-50,		/* score_limit_kill */
@@ -375,7 +376,7 @@ struct t_config tinrc = {
 	FALSE,		/* prompt_followupto */
 	QUOTE_COMPRESS|QUOTE_EMPTY,	/* quote_style */
 	TRUE,		/* show_description */
-	1,		/* show_infos */
+	SHOW_INFO_LINES,		/* show_info */
 	TRUE,		/* show_only_unread_arts */
 	FALSE,		/* show_only_unread_groups */
 	TRUE,		/* show_signatures */
@@ -419,6 +420,43 @@ struct t_config tinrc = {
 #endif /* HAVE_LIBICUUC && MULTIBYTE_ABLE && HAVE_UNICODE_UBIDI_H && !NO_LOCALE */
 };
 
+struct t_capabilities nntp_caps = {
+	0, /* type (none, LIST EXTENSIONS, CAPABILITIES) */
+	0, /* CAPABILITIES version */
+	FALSE, /* MODE-READER: "MODE READER" */
+	FALSE, /* READER: "ARTICLE", "BODY" */
+	FALSE, /* POST */
+	FALSE, /* LIST: "LIST ACTIVE" */
+	FALSE, /* LIST: "LIST ACTIVE.TIMES" */
+	FALSE, /* LIST: "LIST DISTRIB.PATS" */
+	FALSE, /* LIST: "LIST HEADERS" */
+	FALSE, /* LIST: "LIST NEWSGROUPS" */
+	FALSE, /* LIST: "LIST OVERVIEW.FMT" */
+	FALSE, /* LIST: "LIST MOTD" */
+	FALSE, /* LIST: "LIST SUBSCRIPTIONS" */
+	FALSE, /* LIST: "LIST DISTRIBUTIONS" */
+	FALSE, /* XPAT */
+	FALSE, /* HDR: "HDR", "LIST HEADERS" */
+	NULL, /* [X]HDR */
+	FALSE, /* OVER: "OVER", "LIST OVERVIEW.FMT" */
+	FALSE, /* OVER: "OVER mid" */
+	NULL, /* [X]OVER */
+	FALSE, /* NEWNEWS */
+	NULL, /* IMPLEMENTATION */
+	FALSE, /* STARTTLS */
+	FALSE, /* AUTHINFO USER/PASS */
+	FALSE, /* AUTHINFO SASL */
+#if 0
+	FALSE, /* SASL CRAM-MD5 */
+	FALSE, /* SASL DIGEST-MD5 */
+	FALSE, /* SASL PLAIN */
+	FALSE, /* SASL GSSAPI */
+	FALSE, /* SASL EXTERNAL */
+	FALSE, /* STREAMING: "MODE STREAM", "CHECK", "TAKETHIS" */
+	FALSE /* IHAVE */
+#endif /* 0 */
+};
+
 static mode_t real_umask;
 
 #ifdef HAVE_COLOR
@@ -502,9 +540,9 @@ void
 init_selfinfo(
 	void)
 {
+	FILE *fp;
 	char *ptr;
 	const char *cptr;
-	FILE *fp;
 	struct stat sb;
 	struct passwd *myentry;
 
@@ -751,9 +789,9 @@ init_selfinfo(
 	strcpy(tinrc.printer, DEFAULT_PRINTER);
 #endif /* !DISABLE_PRINTING */
 	strcpy(tinrc.inews_prog, PATH_INEWS);
-	joinpath(article, homedir, TIN_ARTICLE_NAME);
+	joinpath(article_name, homedir, TIN_ARTICLE_NAME);
 #ifdef APPEND_PID
-	snprintf(article + strlen(article), sizeof(article) - strlen(article), ".%d", (int) process_id);
+	snprintf(article_name + strlen(article_name), sizeof(article_name) - strlen(article_name), ".%d", (int) process_id);
 #endif /* APPEND_PID */
 	joinpath(dead_article, homedir, "dead.article");
 	joinpath(dead_articles, homedir, "dead.articles");
diff -Nurp tin-1.7.8/src/keymap.c tin-1.7.9/src/keymap.c
--- tin-1.7.8/src/keymap.c	2005-03-21 01:23:11.000000000 +0100
+++ tin-1.7.9/src/keymap.c	2005-06-28 10:31:21.772999180 +0200
@@ -3,7 +3,7 @@
  *  Module    : keymap.c
  *  Author    : D. Nimmich, J. Faultless
  *  Created   : 2000-05-25
- *  Updated   : 2005-03-15
+ *  Updated   : 2005-06-22
  *  Notes     : This file contains key mapping routines and variables.
  *
  * Copyright (c) 2000-2005 Dirk Nimmich <nimmich@muenster.de>
@@ -51,9 +51,7 @@ static void add_default_key(struct keyli
 static void add_global_keys(struct keylist *keys);
 static void free_keylist(struct keylist *keys);
 static void upgrade_keymap_file(char *old);
-static void setup_default_keys(void);
 static t_bool add_key(struct keylist *keys, char key, t_function func, t_bool overwrite);
-static t_bool process_keymap_file(void);
 static t_bool process_keys(t_function func, const char *keys, struct keylist *kl);
 static t_bool process_mapping(char *keyname, char *keys);
 
@@ -255,6 +253,7 @@ printascii(
 }
 
 
+#define KEYSEPS		" \t\n"
 /*
  * read the keymap file
  * returns TRUE if the keymap file was read without an error else FALSE
@@ -263,20 +262,6 @@ t_bool
 read_keymap_file(
 	void)
 {
-	t_bool ret;
-
-	ret = process_keymap_file();
-	setup_default_keys();
-
-	return ret;
-}
-
-
-#define KEYSEPS		" \t\n"
-t_bool
-process_keymap_file(
-	void)
-{
 	FILE *fp = (FILE *) 0;
 	char *line, *keydef, *kname;
 	char *map, *ptr;
@@ -336,6 +321,7 @@ process_keymap_file(
 		}
 	}
 
+	free_keymaps();
 	while ((line = fgets(buf, sizeof(buf), fp)) != NULL) {
 		/*
 		 * Ignore blank and comment lines
@@ -369,6 +355,7 @@ process_keymap_file(
 
 	}
 	fclose(fp);
+	setup_default_keys();
 	if (upgrade != RC_IGNORE)
 		upgrade_prompt_quit(upgrade, map);
 
@@ -454,7 +441,33 @@ process_mapping(
 	char *keys)				/* Key to assign to keyname if found */
 {
 	switch (keyname[0]) {
+		case 'B':
+			if (strcmp(keyname, "BugReport") == 0) {
+				process_keys(GLOBAL_BUGREPORT, keys, &group_keys);
+				process_keys(GLOBAL_BUGREPORT, keys, &select_keys);
+				process_keys(GLOBAL_BUGREPORT, keys, &thread_keys);
+
+				return TRUE;
+			}
+			break;
+
 		case 'C':
+			if (strcmp(keyname, "Catchup") == 0) {
+				process_keys(CATCHUP, keys, &group_keys);
+				process_keys(CATCHUP, keys, &page_keys);
+				process_keys(CATCHUP, keys, &select_keys);
+				process_keys(CATCHUP, keys, &thread_keys);
+
+				return TRUE;
+			}
+			if (strcmp(keyname, "CatchupNextUnread") == 0) {
+				process_keys(CATCHUP_NEXT_UNREAD, keys, &group_keys);
+				process_keys(CATCHUP_NEXT_UNREAD, keys, &page_keys);
+				process_keys(CATCHUP_NEXT_UNREAD, keys, &select_keys);
+				process_keys(CATCHUP_NEXT_UNREAD, keys, &thread_keys);
+
+				return TRUE;
+			}
 			if (strcmp(keyname, "ConfigFirstPage") == 0) {
 				process_keys(GLOBAL_FIRST_PAGE, keys, &option_menu_keys);
 
@@ -573,21 +586,6 @@ process_mapping(
 
 				return TRUE;
 			}
-			if (strcmp(keyname, "GroupBugReport") == 0) {
-				process_keys(GLOBAL_BUGREPORT, keys, &group_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "GroupCatchup") == 0) {
-				process_keys(GROUP_CATCHUP, keys, &group_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "GroupCatchupNextUnread") == 0) {
-				process_keys(GROUP_CATCHUP_NEXT_UNREAD, keys, &group_keys);
-
-				return TRUE;
-			}
 			if (strcmp(keyname, "GroupDoAutoSel") == 0) {
 				process_keys(GROUP_DO_AUTOSELECT, keys, &group_keys);
 
@@ -613,16 +611,6 @@ process_mapping(
 
 				return TRUE;
 			}
-			if (strcmp(keyname, "GroupMarkArtUnread") == 0) {
-				process_keys(GROUP_MARK_ARTICLE_UNREAD, keys, &group_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "GroupMarkThdUnread") == 0) {
-				process_keys(GROUP_MARK_THREAD_UNREAD, keys, &group_keys);
-
-				return TRUE;
-			}
 			if (strcmp(keyname, "GroupMarkUnselArtRead") == 0) {
 				process_keys(GROUP_MARK_UNSELECTED_ARTICLES_READ, keys, &group_keys);
 
@@ -794,6 +782,20 @@ process_mapping(
 
 				return TRUE;
 			}
+			if (strcmp(keyname, "MarkArticleUnread") == 0) {
+				process_keys(MARK_ARTICLE_UNREAD, keys, &group_keys);
+				process_keys(MARK_ARTICLE_UNREAD, keys, &page_keys);
+				process_keys(MARK_ARTICLE_UNREAD, keys, &thread_keys);
+
+				return TRUE;
+			}
+			if (strcmp(keyname, "MarkThreadUnread") == 0) {
+				process_keys(MARK_THREAD_UNREAD, keys, &group_keys);
+				process_keys(MARK_THREAD_UNREAD, keys, &page_keys);
+				process_keys(MARK_THREAD_UNREAD, keys, &thread_keys);
+
+				return TRUE;
+			}
 			if (strcmp(keyname, "MenuFilterKill") == 0) {
 				process_keys(GLOBAL_MENU_FILTER_KILL, keys, &group_keys);
 				process_keys(GLOBAL_MENU_FILTER_KILL, keys, &page_keys);
@@ -839,16 +841,6 @@ process_mapping(
 
 				return TRUE;
 			}
-			if (strcmp(keyname, "PageCatchup") == 0) {
-				process_keys(PAGE_CATCHUP, keys, &page_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "PageCatchupNextUnread") == 0) {
-				process_keys(PAGE_CATCHUP_NEXT_UNREAD, keys, &page_keys);
-
-				return TRUE;
-			}
 			if (strcmp(keyname, "PageDown") == 0) {
 				process_keys(GLOBAL_PAGE_DOWN, keys, &group_keys);
 				process_keys(GLOBAL_PAGE_DOWN, keys, &info_keys);
@@ -924,16 +916,6 @@ process_mapping(
 
 				return TRUE;
 			}
-			if (strcmp(keyname, "PageMarkArtUnread") == 0) {
-				process_keys(PAGE_MARK_ARTICLE_UNREAD, keys, &page_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "PageMarkThdUnread") == 0) {
-				process_keys(PAGE_MARK_THREAD_UNREAD, keys, &page_keys);
-
-				return TRUE;
-			}
 			if (strcmp(keyname, "PageNextArt") == 0) {
 				process_keys(PAGE_NEXT_ARTICLE, keys, &page_keys);
 
@@ -1130,7 +1112,7 @@ process_mapping(
 				return TRUE;
 			}
 			if (strcmp(keyname, "PostEdit") == 0) {
-				process_keys(POST_CANCEL, keys, &post_cancel_keys);
+				process_keys(POST_EDIT, keys, &post_cancel_keys);
 				process_keys(POST_EDIT, keys, &post_edit_keys);
 				process_keys(POST_EDIT, keys, &post_edit_ext_keys);
 				process_keys(POST_EDIT, keys, &post_post_keys);
@@ -1271,6 +1253,7 @@ process_mapping(
 				process_keys(GLOBAL_QUIT, keys, &pgp_news_keys);
 #endif /* HAVE_PGP_GPG */
 				process_keys(GLOBAL_QUIT, keys, &post_cancel_keys);
+				process_keys(GLOBAL_QUIT, keys, &post_continue_keys);
 				process_keys(GLOBAL_QUIT, keys, &post_delete_keys);
 				process_keys(GLOBAL_QUIT, keys, &post_edit_keys);
 				process_keys(GLOBAL_QUIT, keys, &post_edit_ext_keys);
@@ -1386,21 +1369,6 @@ process_mapping(
 
 				return TRUE;
 			}
-			if (strcmp(keyname, "SelectBugReport") == 0) {
-				process_keys(GLOBAL_BUGREPORT, keys, &select_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "SelectCatchup") == 0) {
-				process_keys(SELECT_CATCHUP, keys, &select_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "SelectCatchupNextUnread") == 0) {
-				process_keys(SELECT_CATCHUP_NEXT_UNREAD, keys, &select_keys);
-
-				return TRUE;
-			}
 			if (strcmp(keyname, "SelectEnterNextUnreadGrp") == 0) {
 				process_keys(SELECT_ENTER_NEXT_UNREAD_GROUP, keys, &select_keys);
 
@@ -1511,21 +1479,6 @@ process_mapping(
 
 				return TRUE;
 			}
-			if (strcmp(keyname, "ThreadBugReport") == 0) {
-				process_keys(GLOBAL_BUGREPORT, keys, &thread_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "ThreadCatchup") == 0) {
-				process_keys(THREAD_CATCHUP, keys, &thread_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "ThreadCatchupNextUnread") == 0) {
-				process_keys(THREAD_CATCHUP_NEXT_UNREAD, keys, &thread_keys);
-
-				return TRUE;
-			}
 			if (strcmp(keyname, "ThreadMail") == 0) {
 				process_keys(THREAD_MAIL, keys, &thread_keys);
 
@@ -1536,16 +1489,6 @@ process_mapping(
 
 				return TRUE;
 			}
-			if (strcmp(keyname, "ThreadMarkArtUnread") == 0) {
-				process_keys(THREAD_MARK_ARTICLE_UNREAD, keys, &thread_keys);
-
-				return TRUE;
-			}
-			if (strcmp(keyname, "ThreadMarkThdUnread") == 0) {
-				process_keys(THREAD_MARK_THREAD_UNREAD, keys, &thread_keys);
-
-				return TRUE;
-			}
 			if (strcmp(keyname, "ThreadReadArt") == 0) {
 				process_keys(THREAD_READ_ARTICLE, keys, &thread_keys);
 
@@ -1672,14 +1615,19 @@ static void
 upgrade_keymap_file(
 	char *old)
 {
-	FILE *oldfp = (FILE *) 0, *newfp = (FILE *) 0;
+	FILE *oldfp, *newfp;
 	char *line, *backup;
 	const char *keyname, *keydef;
 	char new[NAME_LEN + 1], buf[LEN];
+	char *bugreport[3] = { NULL, NULL, NULL };
+	char *catchup[4] = { NULL, NULL, NULL, NULL };
+	char *catchup_next_unread[4] = { NULL, NULL, NULL, NULL };
 	char *config_select[2] = { NULL, NULL };
 	char *edit_filter[2] = { NULL, NULL };
 	char *down[2] = { NULL, NULL };
 	char *groupreadbasenote[2] = { NULL, NULL };
+	char *mark_article_unread[3] = { NULL, NULL, NULL };
+	char *mark_thread_unread[3] = { NULL, NULL, NULL };
 	char *menu_filter_kill[3] = { NULL, NULL, NULL };
 	char *menu_filter_select[3] = { NULL, NULL, NULL };
 	char *pagedown[2] = { NULL, NULL };
@@ -1921,6 +1869,16 @@ upgrade_keymap_file(
 					groupreadbasenote[1] = my_strdup(keydef);
 				else if (strcmp(keyname, "GroupEditFilter") == 0)
 					edit_filter[0] = my_strdup(keydef);
+				else if (strcmp(keyname, "GroupBugReport") == 0)
+					bugreport[0] = my_strdup(keydef);
+				else if (strcmp(keyname, "GroupMarkArtUnread") == 0)
+					mark_article_unread[0] = my_strdup(keydef);
+				else if (strcmp(keyname, "GroupMarkThdUnread") == 0)
+					mark_thread_unread[0] = my_strdup(keydef);
+				else if (strcmp(keyname, "GroupCatchup") == 0)
+					catchup[0] = my_strdup(keydef);
+				else if (strcmp(keyname, "GroupCatchupNextUnread") == 0)
+					catchup_next_unread[0] = my_strdup(keydef);
 				else
 					fprintf(newfp, "%s", backup);
 				break;
@@ -1987,6 +1945,14 @@ upgrade_keymap_file(
 					postsend[0] = my_strdup(keydef);
 				else if (strcmp(keyname, "PostSend2") == 0)
 					postsend[1] = my_strdup(keydef);
+				else if (strcmp(keyname, "PageMarkArtUnread") == 0)
+					mark_article_unread[1] = my_strdup(keydef);
+				else if (strcmp(keyname, "PageMarkThdUnread") == 0)
+					mark_thread_unread[1] = my_strdup(keydef);
+				else if (strcmp(keyname, "PageCatchup") == 0)
+					catchup[1] = my_strdup(keydef);
+				else if (strcmp(keyname, "PageCatchupNextUnread") == 0)
+					catchup_next_unread[1] = my_strdup(keydef);
 				else if (strcmp(keyname, "PromptNo") == 0 || strcmp(keyname, "PromptYes") == 0) {
 					if (strlen(keydef) == 1 && islower(keydef[0]))
 						fprintf(newfp, "%s\t\t\t%c\t%c\n", keyname, keydef[0], toupper(keydef[0]));
@@ -2011,6 +1977,12 @@ upgrade_keymap_file(
 					selectreadgrp[0] = my_strdup(keydef);
 				else if (strcmp(keyname, "SelectReadGrp2") == 0)
 					selectreadgrp[1] = my_strdup(keydef);
+				else if (strcmp(keyname, "SelectBugReport") == 0)
+					bugreport[1] = my_strdup(keydef);
+				else if (strcmp(keyname, "SelectCatchup") == 0)
+					catchup[2] = my_strdup(keydef);
+				else if (strcmp(keyname, "SelectCatchupNextUnread") == 0)
+					catchup_next_unread[2] = my_strdup(keydef);
 				else
 					fprintf(newfp, "%s", backup);
 				break;
@@ -2026,6 +1998,16 @@ upgrade_keymap_file(
 					threadreadart[0] = my_strdup(keydef);
 				else if (strcmp(keyname, "ThreadReadArt2") == 0)
 					threadreadart[1] = my_strdup(keydef);
+				else if (strcmp(keyname, "ThreadBugReport") == 0)
+					bugreport[2] = my_strdup(keydef);
+				else if (strcmp(keyname, "ThreadMarkArtUnread") == 0)
+					mark_article_unread[2] = my_strdup(keydef);
+				else if (strcmp(keyname, "ThreadMarkThdUnread") == 0)
+					mark_thread_unread[2] = my_strdup(keydef);
+				else if (strcmp(keyname, "ThreadCatchup") == 0)
+					catchup[3] = my_strdup(keydef);
+				else if (strcmp(keyname, "ThreadCatchupNextUnread") == 0)
+					catchup_next_unread[3] = my_strdup(keydef);
 				else
 					fprintf(newfp, "%s", backup);
 				break;
@@ -2038,6 +2020,7 @@ upgrade_keymap_file(
 				else
 					fprintf(newfp, "%s", backup);
 				break;
+
 			default:
 				fprintf(newfp, "%s", backup);
 		}
@@ -2045,6 +2028,81 @@ upgrade_keymap_file(
 	}
 	fprintf(newfp, "\n#####\n");
 	/* joined/renamed keys from different sections */
+	if (bugreport[0] || bugreport[1] || bugreport[2]) {
+		fprintf(newfp, "BugReport\t");
+		if (bugreport[0] && bugreport[1] && !strcmp(bugreport[0], bugreport[1]))
+			FreeAndNull(bugreport[1]);
+		if (bugreport[0] && bugreport[2] && !strcmp(bugreport[0], bugreport[2]))
+			FreeAndNull(bugreport[2]);
+		if (bugreport[1] && bugreport[2] && !strcmp(bugreport[1], bugreport[2]))
+			FreeAndNull(bugreport[2]);
+		if (bugreport[0])
+			fprintf(newfp, "\t%s", bugreport[0]);
+		if (bugreport[1])
+			fprintf(newfp, "\t%s", bugreport[1]);
+		if (bugreport[2])
+			fprintf(newfp, "\t%s", bugreport[2]);
+		fprintf(newfp, "\n");
+		FreeAndNull(bugreport[0]);
+		FreeAndNull(bugreport[1]);
+		FreeAndNull(bugreport[2]);
+	}
+	if (catchup[0] || catchup[1] || catchup[2] || catchup[3]) {
+		fprintf(newfp, "Catchup\t");
+		if (catchup[0] && catchup[1] && !strcmp(catchup[0], catchup[1]))
+			FreeAndNull(catchup[1]);
+		if (catchup[0] && catchup[2] && !strcmp(catchup[0], catchup[2]))
+			FreeAndNull(catchup[2]);
+		if (catchup[0] && catchup[3] && !strcmp(catchup[0], catchup[3]))
+			FreeAndNull(catchup[3]);
+		if (catchup[1] && catchup[2] && !strcmp(catchup[1], catchup[2]))
+			FreeAndNull(catchup[2]);
+		if (catchup[1] && catchup[3] && !strcmp(catchup[1], catchup[3]))
+			FreeAndNull(catchup[3]);
+		if (catchup[2] && catchup[3] && !strcmp(catchup[2], catchup[3]))
+			FreeAndNull(catchup[3]);
+		if (catchup[0])
+			fprintf(newfp, "\t%s", catchup[0]);
+		if (catchup[1])
+			fprintf(newfp, "\t%s", catchup[1]);
+		if (catchup[2])
+			fprintf(newfp, "\t%s", catchup[2]);
+		if (catchup[3])
+			fprintf(newfp, "\t%s", catchup[3]);
+		fprintf(newfp, "\n");
+		FreeAndNull(catchup[0]);
+		FreeAndNull(catchup[1]);
+		FreeAndNull(catchup[2]);
+		FreeAndNull(catchup[3]);
+	}
+	if (catchup_next_unread[0] || catchup_next_unread[1] || catchup_next_unread[2] || catchup_next_unread[3]) {
+		fprintf(newfp, "CatchupNextUnread\t");
+		if (catchup_next_unread[0] && catchup_next_unread[1] && !strcmp(catchup_next_unread[0], catchup_next_unread[1]))
+			FreeAndNull(catchup_next_unread[1]);
+		if (catchup_next_unread[0] && catchup_next_unread[2] && !strcmp(catchup_next_unread[0], catchup_next_unread[2]))
+			FreeAndNull(catchup_next_unread[2]);
+		if (catchup_next_unread[0] && catchup_next_unread[3] && !strcmp(catchup_next_unread[0], catchup_next_unread[3]))
+			FreeAndNull(catchup_next_unread[3]);
+		if (catchup_next_unread[1] && catchup_next_unread[2] && !strcmp(catchup_next_unread[1], catchup_next_unread[2]))
+			FreeAndNull(catchup_next_unread[2]);
+		if (catchup_next_unread[1] && catchup_next_unread[3] && !strcmp(catchup_next_unread[1], catchup_next_unread[3]))
+			FreeAndNull(catchup_next_unread[3]);
+		if (catchup_next_unread[2] && catchup_next_unread[3] && !strcmp(catchup_next_unread[2], catchup_next_unread[3]))
+			FreeAndNull(catchup_next_unread[3]);
+		if (catchup_next_unread[0])
+			fprintf(newfp, "\t%s", catchup_next_unread[0]);
+		if (catchup_next_unread[1])
+			fprintf(newfp, "\t%s", catchup_next_unread[1]);
+		if (catchup_next_unread[2])
+			fprintf(newfp, "\t%s", catchup_next_unread[2]);
+		if (catchup_next_unread[3])
+			fprintf(newfp, "\t%s", catchup_next_unread[3]);
+		fprintf(newfp, "\n");
+		FreeAndNull(catchup_next_unread[0]);
+		FreeAndNull(catchup_next_unread[1]);
+		FreeAndNull(catchup_next_unread[2]);
+		FreeAndNull(catchup_next_unread[3]);
+	}
 	if (edit_filter[0] || edit_filter[1]) {
 		fprintf(newfp, "EditFilter\t");
 		if (edit_filter[0])
@@ -2055,6 +2113,44 @@ upgrade_keymap_file(
 		FreeAndNull(edit_filter[0]);
 		FreeAndNull(edit_filter[1]);
 	}
+	if (mark_article_unread[0] || mark_article_unread[1] || mark_article_unread[2]) {
+		fprintf(newfp, "MarkArticleUnread\t");
+		if (mark_article_unread[0] && mark_article_unread[1] && !strcmp(mark_article_unread[0], mark_article_unread[1]))
+			FreeAndNull(mark_article_unread[1]);
+		if (mark_article_unread[0] && mark_article_unread[2] && !strcmp(mark_article_unread[0], mark_article_unread[2]))
+			FreeAndNull(mark_article_unread[2]);
+		if (mark_article_unread[1] && mark_article_unread[2] && !strcmp(mark_article_unread[1], mark_article_unread[2]))
+			FreeAndNull(mark_article_unread[2]);
+		if (mark_article_unread[0])
+			fprintf(newfp, "\t%s", mark_article_unread[0]);
+		if (mark_article_unread[1])
+			fprintf(newfp, "\t%s", mark_article_unread[1]);
+		if (mark_article_unread[2])
+			fprintf(newfp, "\t%s", mark_article_unread[2]);
+		fprintf(newfp, "\n");
+		FreeAndNull(mark_article_unread[0]);
+		FreeAndNull(mark_article_unread[1]);
+		FreeAndNull(mark_article_unread[2]);
+	}
+	if (mark_thread_unread[0] || mark_thread_unread[1] || mark_thread_unread[2]) {
+		fprintf(newfp, "MarkThreadUnread\t");
+		if (mark_thread_unread[0] && mark_thread_unread[1] && !strcmp(mark_thread_unread[0], mark_thread_unread[1]))
+			FreeAndNull(mark_thread_unread[1]);
+		if (mark_thread_unread[0] && mark_thread_unread[2] && !strcmp(mark_thread_unread[0], mark_thread_unread[2]))
+			FreeAndNull(mark_thread_unread[2]);
+		if (mark_thread_unread[1] && mark_thread_unread[2] && !strcmp(mark_thread_unread[1], mark_thread_unread[2]))
+			FreeAndNull(mark_thread_unread[2]);
+		if (mark_thread_unread[0])
+			fprintf(newfp, "\t%s", mark_thread_unread[0]);
+		if (mark_thread_unread[1])
+			fprintf(newfp, "\t%s", mark_thread_unread[1]);
+		if (mark_thread_unread[2])
+			fprintf(newfp, "\t%s", mark_thread_unread[2]);
+		fprintf(newfp, "\n");
+		FreeAndNull(mark_thread_unread[0]);
+		FreeAndNull(mark_thread_unread[1]);
+		FreeAndNull(mark_thread_unread[2]);
+	}
 	if (menu_filter_kill[0] || menu_filter_kill[1] || menu_filter_kill[2]) {
 		fprintf(newfp, "MenuFilterKill\t");
 		if (menu_filter_kill[0] && menu_filter_kill[1] && !strcmp(menu_filter_kill[0], menu_filter_kill[1]))
@@ -2113,6 +2209,7 @@ upgrade_keymap_file(
 		FreeAndNull(quick_filter_select[0]);
 		FreeAndNull(quick_filter_select[1]);
 	}
+
 	fclose(oldfp);
 	fclose(newfp);
 	rename(new, old);
@@ -2126,7 +2223,7 @@ upgrade_keymap_file(
 /*
  * add the default key bindings for still free keys
  */
-static void
+void
 setup_default_keys(
 	void)
 {
@@ -2135,7 +2232,7 @@ setup_default_keys(
 	add_default_key(&select_keys, ctrl('J'), SELECT_ENTER_GROUP);
 	add_default_key(&select_keys, ctrl('M'), SELECT_ENTER_GROUP);
 	add_default_key(&select_keys, ctrl('R'), SELECT_RESET_NEWSRC);
-	add_default_key(&select_keys, 'c', SELECT_CATCHUP);
+	add_default_key(&select_keys, 'c', CATCHUP);
 	add_default_key(&select_keys, 'd', SELECT_TOGGLE_DESCRIPTIONS);
 	add_default_key(&select_keys, 'g', SELECT_GOTO);
 	add_default_key(&select_keys, 'm', SELECT_MOVE_GROUP);
@@ -2145,7 +2242,7 @@ setup_default_keys(
 	add_default_key(&select_keys, 'u', SELECT_UNSUBSCRIBE);
 	add_default_key(&select_keys, 'y', SELECT_YANK_ACTIVE);
 	add_default_key(&select_keys, 'z', SELECT_MARK_GROUP_UNREAD);
-	add_default_key(&select_keys, 'C', SELECT_CATCHUP_NEXT_UNREAD);
+	add_default_key(&select_keys, 'C', CATCHUP_NEXT_UNREAD);
 	add_default_key(&select_keys, 'E', GLOBAL_EDIT_FILTER);
 	add_default_key(&select_keys, 'N', SELECT_NEXT_UNREAD_GROUP);
 	add_default_key(&select_keys, 'S', SELECT_SUBSCRIBE_PATTERN);
@@ -2164,7 +2261,7 @@ setup_default_keys(
 	add_default_key(&group_keys, ctrl('K'), GLOBAL_MENU_FILTER_KILL);
 	add_default_key(&group_keys, ctrl('M'), GROUP_READ_BASENOTE);
 	add_default_key(&group_keys, 'a', GLOBAL_SEARCH_AUTHOR_FORWARD);
-	add_default_key(&group_keys, 'c', GROUP_CATCHUP);
+	add_default_key(&group_keys, 'c', CATCHUP);
 	add_default_key(&group_keys, 'd', GROUP_TOGGLE_SUBJECT_DISPLAY);
 	add_default_key(&group_keys, 'g', GROUP_GOTO);
 	add_default_key(&group_keys, 'l', GROUP_LIST_THREAD);
@@ -2179,10 +2276,10 @@ setup_default_keys(
 	add_default_key(&group_keys, 't', GROUP_TAG);
 	add_default_key(&group_keys, 'u', GROUP_TOGGLE_THREADING);
 	add_default_key(&group_keys, 'x', GROUP_REPOST);
-	add_default_key(&group_keys, 'z', GROUP_MARK_ARTICLE_UNREAD);
+	add_default_key(&group_keys, 'z', MARK_ARTICLE_UNREAD);
 	add_default_key(&group_keys, 'A', GLOBAL_SEARCH_AUTHOR_BACKWARD);
 	add_default_key(&group_keys, 'B', GLOBAL_SEARCH_BODY);
-	add_default_key(&group_keys, 'C', GROUP_CATCHUP_NEXT_UNREAD);
+	add_default_key(&group_keys, 'C', CATCHUP_NEXT_UNREAD);
 	add_default_key(&group_keys, 'E', GLOBAL_EDIT_FILTER);
 	add_default_key(&group_keys, 'G', GROUP_TOGGLE_GET_ARTICLES_LIMIT);
 	add_default_key(&group_keys, 'K', GROUP_MARK_THREAD_READ);
@@ -2193,7 +2290,7 @@ setup_default_keys(
 	add_default_key(&group_keys, 'T', GROUP_TAG_PARTS);
 	add_default_key(&group_keys, 'U', GROUP_UNTAG);
 	add_default_key(&group_keys, 'X', GROUP_MARK_UNSELECTED_ARTICLES_READ);
-	add_default_key(&group_keys, 'Z', GROUP_MARK_THREAD_UNREAD);
+	add_default_key(&group_keys, 'Z', MARK_THREAD_UNREAD);
 	add_default_key(&group_keys, '\t', GROUP_NEXT_UNREAD_ARTICLE_OR_GROUP);
 	add_default_key(&group_keys, ' ', GLOBAL_PAGE_DOWN);
 	add_default_key(&group_keys, '-', GLOBAL_LAST_VIEWED);
@@ -2215,7 +2312,7 @@ setup_default_keys(
 	add_default_key(&thread_keys, ctrl('J'), THREAD_READ_ARTICLE);
 	add_default_key(&thread_keys, ctrl('M'), THREAD_READ_ARTICLE);
 	add_default_key(&thread_keys, 'a', GLOBAL_SEARCH_AUTHOR_FORWARD);
-	add_default_key(&thread_keys, 'c', THREAD_CATCHUP);
+	add_default_key(&thread_keys, 'c', CATCHUP);
 	add_default_key(&thread_keys, 'd', THREAD_TOGGLE_SUBJECT_DISPLAY);
 	add_default_key(&thread_keys, 'm', THREAD_MAIL);
 #ifndef DISABLE_PRINTING
@@ -2223,16 +2320,16 @@ setup_default_keys(
 #endif /* !DISABLE_PRINTING */
 	add_default_key(&thread_keys, 's', THREAD_SAVE);
 	add_default_key(&thread_keys, 't', THREAD_TAG);
-	add_default_key(&thread_keys, 'z', THREAD_MARK_ARTICLE_UNREAD);
+	add_default_key(&thread_keys, 'z', MARK_ARTICLE_UNREAD);
 	add_default_key(&thread_keys, 'A', GLOBAL_SEARCH_AUTHOR_BACKWARD);
 	add_default_key(&thread_keys, 'B', GLOBAL_SEARCH_BODY);
-	add_default_key(&thread_keys, 'C', THREAD_CATCHUP_NEXT_UNREAD);
+	add_default_key(&thread_keys, 'C', CATCHUP_NEXT_UNREAD);
 	add_default_key(&thread_keys, 'E', GLOBAL_EDIT_FILTER);
 	add_default_key(&thread_keys, 'K', THREAD_MARK_ARTICLE_READ);
 	add_default_key(&thread_keys, 'L', GLOBAL_LOOKUP_MESSAGEID);
 	add_default_key(&thread_keys, 'S', THREAD_AUTOSAVE);
 	add_default_key(&thread_keys, 'U', THREAD_UNTAG);
-	add_default_key(&thread_keys, 'Z', THREAD_MARK_THREAD_UNREAD);
+	add_default_key(&thread_keys, 'Z', MARK_THREAD_UNREAD);
 	add_default_key(&thread_keys, '\t', THREAD_READ_NEXT_ARTICLE_OR_THREAD);
 	add_default_key(&thread_keys, ' ', GLOBAL_PAGE_DOWN);
 	add_default_key(&thread_keys, '-', GLOBAL_LAST_VIEWED);
@@ -2256,7 +2353,7 @@ setup_default_keys(
 	add_default_key(&page_keys, ctrl('T'), PAGE_TOGGLE_TABS);
 	add_default_key(&page_keys, ctrl('W'), PAGE_FOLLOWUP_QUOTE_HEADERS);
 	add_default_key(&page_keys, 'a', GLOBAL_SEARCH_AUTHOR_FORWARD);
-	add_default_key(&page_keys, 'c', PAGE_CATCHUP);
+	add_default_key(&page_keys, 'c', CATCHUP);
 	add_default_key(&page_keys, 'e', PAGE_EDIT_ARTICLE);
 	add_default_key(&page_keys, 'f', PAGE_FOLLOWUP_QUOTE);
 	add_default_key(&page_keys, 'g', GLOBAL_FIRST_PAGE);
@@ -2272,10 +2369,10 @@ setup_default_keys(
 	add_default_key(&page_keys, 't', PAGE_TAG);
 	add_default_key(&page_keys, 'u', PAGE_GOTO_PARENT);
 	add_default_key(&page_keys, 'x', PAGE_REPOST);
-	add_default_key(&page_keys, 'z', PAGE_MARK_ARTICLE_UNREAD);
+	add_default_key(&page_keys, 'z', MARK_ARTICLE_UNREAD);
 	add_default_key(&page_keys, 'A', GLOBAL_SEARCH_AUTHOR_BACKWARD);
 	add_default_key(&page_keys, 'B', GLOBAL_SEARCH_BODY);
-	add_default_key(&page_keys, 'C', PAGE_CATCHUP_NEXT_UNREAD);
+	add_default_key(&page_keys, 'C', CATCHUP_NEXT_UNREAD);
 	add_default_key(&page_keys, 'D', PAGE_CANCEL);
 	add_default_key(&page_keys, 'E', GLOBAL_EDIT_FILTER);
 	add_default_key(&page_keys, 'F', PAGE_FOLLOWUP);
@@ -2289,7 +2386,7 @@ setup_default_keys(
 	add_default_key(&page_keys, 'T', PAGE_GROUP_SELECT);
 	add_default_key(&page_keys, 'U', PAGE_VIEW_URL);
 	add_default_key(&page_keys, 'V', PAGE_VIEW_ATTACHMENTS);
-	add_default_key(&page_keys, 'Z', PAGE_MARK_THREAD_UNREAD);
+	add_default_key(&page_keys, 'Z', MARK_THREAD_UNREAD);
 	add_default_key(&page_keys, '\t', PAGE_NEXT_UNREAD);
 	add_default_key(&page_keys, ' ', PAGE_PAGE_DOWN3);
 	add_default_key(&page_keys, '-', GLOBAL_LAST_VIEWED);
@@ -2328,6 +2425,15 @@ setup_default_keys(
 	add_default_key(&info_keys, '\\', GLOBAL_SEARCH_REPEAT);
 
 	/* options menu */
+	add_default_key(&option_menu_keys, '1', DIGIT_1);
+	add_default_key(&option_menu_keys, '2', DIGIT_2);
+	add_default_key(&option_menu_keys, '3', DIGIT_3);
+	add_default_key(&option_menu_keys, '4', DIGIT_4);
+	add_default_key(&option_menu_keys, '5', DIGIT_5);
+	add_default_key(&option_menu_keys, '6', DIGIT_6);
+	add_default_key(&option_menu_keys, '7', DIGIT_7);
+	add_default_key(&option_menu_keys, '8', DIGIT_8);
+	add_default_key(&option_menu_keys, '9', DIGIT_9);
 	add_default_key(&option_menu_keys, ctrl('B'), GLOBAL_PAGE_UP);
 	add_default_key(&option_menu_keys, ctrl('D'), GLOBAL_PAGE_DOWN);
 	add_default_key(&option_menu_keys, ctrl('F'), GLOBAL_PAGE_DOWN);
@@ -2342,6 +2448,7 @@ setup_default_keys(
 	add_default_key(&option_menu_keys, 'j', GLOBAL_LINE_DOWN);
 	add_default_key(&option_menu_keys, 'k', GLOBAL_LINE_UP);
 	add_default_key(&option_menu_keys, 'q', GLOBAL_QUIT);
+	add_default_key(&option_menu_keys, 'v', GLOBAL_VERSION);
 	add_default_key(&option_menu_keys, 'G', GLOBAL_LAST_PAGE);
 	add_default_key(&option_menu_keys, 'Q', CONFIG_NO_SAVE);
 	add_default_key(&option_menu_keys, '^', GLOBAL_FIRST_PAGE);
@@ -2376,9 +2483,11 @@ setup_default_keys(
 	add_default_key(&post_edit_keys, ESC, GLOBAL_ABORT);
 	add_default_key(&post_edit_keys, 'e', POST_EDIT);
 	add_default_key(&post_edit_keys, 'o', POST_POSTPONE);
+	add_default_key(&post_edit_keys, 'q', GLOBAL_QUIT);
 
 	add_default_key(&post_edit_ext_keys, ESC, GLOBAL_ABORT);
 	add_default_key(&post_edit_ext_keys, 'e', POST_EDIT);
+	add_default_key(&post_edit_ext_keys, 'q', GLOBAL_QUIT);
 	add_default_key(&post_edit_ext_keys, 'M', GLOBAL_OPTION_MENU);
 
 	add_default_key(&post_post_keys, ESC, GLOBAL_ABORT);
@@ -2468,8 +2577,6 @@ setup_default_keys(
 
 	/* pgp news */
 	add_default_key(&pgp_news_keys, ESC, GLOBAL_ABORT);
-	add_default_key(&pgp_news_keys, 'b', PGP_KEY_ENCRYPT_SIGN);
-	add_default_key(&pgp_news_keys, 'e', PGP_KEY_ENCRYPT);
 	add_default_key(&pgp_news_keys, 'i', PGP_INCLUDE_KEY);
 	add_default_key(&pgp_news_keys, 'q', GLOBAL_QUIT);
 	add_default_key(&pgp_news_keys, 's', PGP_KEY_SIGN);
diff -Nurp tin-1.7.8/src/lang.c tin-1.7.9/src/lang.c
--- tin-1.7.8/src/lang.c	2005-03-21 13:37:30.000000000 +0100
+++ tin-1.7.9/src/lang.c	2005-06-28 10:31:24.594479769 +0200
@@ -3,7 +3,7 @@
  *  Module    : lang.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-20
+ *  Updated   : 2005-06-20
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -458,9 +458,6 @@ constext txt_inverse_on[] = N_("Inverse 
 constext txt_keymap_missing_key[] = N_("Missing definition for %s\n");
 constext txt_keymap_invalid_key[] = N_("Invalid key definition '%s'\n");
 constext txt_keymap_invalid_name[] = N_("Invalid keyname '%s'\n");
-#if 0 /* unused */
-	constext txt_keymap_conflict[] = N_("Key '%s' is defined for both %s%s and %s%s\n");
-#endif /* 0 */
 constext txt_keymap_upgraded[] = N_("Keymap file was upgraded to version %s\n");
 constext txt_kill_from[] = N_("Kill From:     [%s] (y/n): ");
 constext txt_kill_lines[] = N_("Kill Lines: (</>num): ");
@@ -836,7 +833,6 @@ Warning: Posting is in %s and contains c
 #endif /* CHARSET_CONVERSION */
 
 #ifdef DEBUG
-	constext txt_keymap_redef[] = N_("Redefined key %s '%s' -> '%s'\n");
 	constext txt_usage_debug[] = N_("  -D       debug mode 1=NNTP 2=ALL");
 #endif /* DEBUG */
 
@@ -1099,7 +1095,8 @@ constext *txt_threading[] = {
 	N_("Subject"),
 	N_("References"),
 	N_("Both Subject and References"),
-	N_("Multipart Subject")
+	N_("Multipart Subject"),
+	N_("Percentage Match")
 };
 
 /*
@@ -1419,7 +1416,21 @@ struct opttxt txt_thread_articles = {
 #   1 = Subject\n\
 #   2 = References\n\
 # * 3 = Both (Subject and References)\n\
-#   4 = Multipart Subject\n")
+#   4 = Multipart Subject\n\
+#   5 = Percentage Match\n")
+};
+
+struct opttxt txt_thread_perc = {
+	N_("Enter percentage match required to thread together. <CR> sets."),
+	N_("Thread percentage match"),
+	N_("# Thread percentage match...\n\
+# the percentage of characters in the subject of an article that must match\n\
+# a base article for both those articles to be considered to belong to the\n\
+# same thread. This option is an integer percentage, eg. 80, no decimals may\n\
+# follow. If 80 is used here, then 80%% of the characters must match exactly,\n\
+# no insertion of a character, for the two articles to be put in the same\n\
+# thread. eg. 'happy' and 'harpy' would match, but 'harpie', 'happie' and\n\
+# 'harppy' would be threaded separately from 'happy'\n")
 };
 
 struct opttxt txt_thread_score = {
diff -Nurp tin-1.7.8/src/lock.c tin-1.7.9/src/lock.c
--- tin-1.7.8/src/lock.c	2004-12-30 14:33:10.000000000 +0100
+++ tin-1.7.9/src/lock.c	2005-06-28 10:31:21.810992185 +0200
@@ -62,7 +62,7 @@
  *
  * try to lock a file descriptor with fcntl(), flock() or lockf()
  *
- * returncodes:
+ * return codes:
  *  0 = file locked successfully
  * -1 = some error occured
  */
@@ -105,7 +105,7 @@ fd_lock(
  * check for an existing lock on file descriptor with fcntl(), lockf()
  * or flock()
  *
- * returncodes:
+ * return codes:
  *  0 = file is not locked
  *  1 = file is locked
  * -1 = some error occured
@@ -167,7 +167,7 @@ test_fd_lock(
  *
  * try to unlock a file descriptor with fcntl(), lockf() or flock()
  *
- * returncodes:
+ * return codes:
  *  0 = file unlocked successfully
  * -1 = some error occured
  */
@@ -209,7 +209,7 @@ fd_unlock(
  *
  * try to lock filename via dotfile locking
  *
- * returncodes:
+ * return codes:
  *  TRUE  = file locked successfully
  *  FALSE = some error occured
  */
@@ -255,7 +255,7 @@ t_bool dot_lock(
 /*
  * try to remove a dotlock for filename
  *
- * returncodes:
+ * return codes:
  *  TRUE  = file unlocked successfully
  *  FALSE = some error occured
  */
diff -Nurp tin-1.7.8/src/main.c tin-1.7.9/src/main.c
--- tin-1.7.8/src/main.c	2005-03-12 01:52:57.000000000 +0100
+++ tin-1.7.9/src/main.c	2005-06-28 10:31:21.837987216 +0200
@@ -3,7 +3,7 @@
  *  Module    : main.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-12
+ *  Updated   : 2005-05-04
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -129,6 +129,7 @@ main(
 	hash_init();
 	init_selfinfo();
 	init_group_hash();
+	setup_default_keys(); /* preinit keybindings */
 
 	/*
 	 * Read user local & global config files
@@ -186,9 +187,9 @@ main(
 
 	/*
 	 * exit early - unfortunately we can't do that in read_cmd_line_options()
-	 * as xover_cmd is set in nntp_open()
+	 * as nntp_caps.over_cmd is set in nntp_open()
 	 */
-	if (update_index && xover_cmd && !tinrc.cache_overview_files) {
+	if (update_index && nntp_caps.over_cmd && !tinrc.cache_overview_files) {
 		error_message(_(txt_batch_update_unavail), tin_progname);
 		giveup();
 	}
@@ -196,7 +197,7 @@ main(
 	/*
 	 * Check if overview indexes contain Xref: lines
 	 */
-	if (xover_cmd)
+	if (nntp_caps.over_cmd)
 		xref_supported = overview_xref_support();
 
 #ifdef DEBUG_NEWSRC
@@ -205,7 +206,9 @@ main(
 
 		joinpath(file, TMPDIR, "BITMAP");
 		unlink(file);
-		/* newsrc_test_harness(); */
+#	if 0
+		newsrc_test_harness();
+#	endif /* 0 */
 	}
 #endif /* DEBUG_NEWSRC */
 
diff -Nurp tin-1.7.8/src/makecfg.c tin-1.7.9/src/makecfg.c
--- tin-1.7.8/src/makecfg.c	2004-12-30 14:33:11.000000000 +0100
+++ tin-1.7.9/src/makecfg.c	2005-06-28 19:51:18.637744499 +0200
@@ -3,8 +3,8 @@
  *  Module    : makecfg.c
  *  Author    : Thomas E. Dickey
  *  Created   : 1997-08-23
- *  Updated   : 2004-06-03
- *  Notes     : #defines and structs for config.c
+ *  Updated   : 2005-06-21
+ *  Notes     : #defines and structs for options_menu.c
  *
  * Copyright (c) 1997-2005 Thomas E. Dickey <dickey@invisible-island.net>
  * All rights reserved.
@@ -36,6 +36,7 @@
 
 
 #define __BUILD__
+#define PROTO_H 1	/* don't include proto.h */
 #ifndef TIN_H
 #	include "tin.h"
 #endif /* !TIN_H */
@@ -204,16 +205,7 @@ generate_tbl(
 {
 	static const char *const table_1[] =
 	{
-		 ""
-		,"enum option_enum {"
-		,0
-	};
-	static const char *const table_2[] =
-	{
-		"\tVERY_LAST_OPT };"
-		,""
-		,"#define LAST_OPT VERY_LAST_OPT - 1"
-		,""
+		""
 		,"#define OPT_TITLE     0"
 		,"#define OPT_ON_OFF    1"
 		,"#define OPT_LIST      2"
@@ -224,7 +216,7 @@ generate_tbl(
 		,"struct t_option option_table[]={"
 		,0
 	};
-	static const char *const table_3[] =
+	static const char *const table_2[] =
 	{
 		"};"
 		,0
@@ -234,28 +226,8 @@ generate_tbl(
 	MYDATA *p;
 	char temp[BUFSIZ];
 
-	/* generate enumerated type */
-	write_it(ofp, table_1);
-	for (p = all_data; p != 0; p = p->link) {
-		if (p->name[0] == '#')
-			fprintf(ofp, "%s\n", p->name);
-		else {
-			char *s = p->name;
-
-			fprintf(ofp, "\tOPT_");
-			while (*s != '\0') {
-				fprintf(ofp, "%c",
-					 isalpha ((unsigned char)*s) && islower((unsigned char)*s)
-					 ? toupper ((unsigned char)*s)
-					 : *s);
-				s++;
-			}
-			fprintf(ofp, ",\n");
-		}
-	}
-
 	/* generate the access table */
-	write_it(ofp, table_2);
+	write_it(ofp, table_1);
 	for (p = all_data; p != 0; p = p->link) {
 		if (p->name[0] == '#')
 			fprintf(ofp, "%s\n", p->name);
@@ -289,7 +261,46 @@ generate_tbl(
 		}
 	}
 
-	write_it(ofp, table_3);
+	write_it(ofp, table_2);
+}
+
+static void
+generate_enum(
+	FILE *ofp2)
+{
+	MYDATA *p;
+
+	static const char *const table_1[] = {
+		"enum option_enum {",
+		0
+	};
+	static const char *const table_2[] = {
+		"\tSIGNAL_HANDLER };",
+		"",
+		"#define LAST_OPT SIGNAL_HANDLER - 1",
+		0
+	};
+
+	/* generate enumerated type */
+	write_it(ofp2, table_1);
+	for (p = all_data; p != 0; p = p->link) {
+		if (p->name[0] == '#')
+			fprintf(ofp2, "%s\n", p->name);
+		else {
+			char *s = p->name;
+
+			fprintf(ofp2, "\tOPT_");
+			while (*s != '\0') {
+				fprintf(ofp2, "%c",
+					 isalpha ((unsigned char)*s) && islower((unsigned char)*s)
+					 ? toupper ((unsigned char)*s)
+					 : *s);
+				s++;
+			}
+			fprintf(ofp2, ",\n");
+		}
+	}
+	write_it(ofp2, table_2);
 }
 
 static void
@@ -376,7 +387,8 @@ generate_ptr(
 static void
 makecfg(
 	FILE *ifp,
-	FILE *ofp)
+	FILE *ofp,
+	FILE *ofp2)
 {
 	char buffer[BUFSIZ];
 	MYDATA *p, *q;
@@ -385,8 +397,8 @@ makecfg(
 	{
 		"/* This file is generated by MAKECFG */"
 		,""
-		,"#ifndef TINTBL_H"
-		,"#define TINTBL_H 1"
+		,"#ifndef TINCFG_H"
+		,"#define TINCFG_H 1"
 		,""
 		,"/* Macros for defining symbolic offsets that can be ifdef'd */"
 		,"#undef OINX"
@@ -425,9 +437,22 @@ makecfg(
 		,"#undef OEND"
 		,"#undef OTYP"
 		,""
-		,"#endif /* TINTBL_H */"
+		,"#endif /* TINCFG_H */"
 		,0
 	};
+	static const char *const table_3[] = {
+		"/* This file is generated by MAKECFG */",
+		"",
+		"#ifndef OPTIONS_MENU_H",
+		"#define OPTIONS_MENU_H 1",
+		"",
+		0
+	};
+	static const char *const table_4[] = {
+		"",
+		"#endif /* OPTIONS_MENU_H */",
+		0
+	};
 
 	/*
 	 * Process the input file.
@@ -472,6 +497,16 @@ makecfg(
 	write_it(ofp, table_2);
 
 	fclose(ofp);
+
+	if (ofp2) {
+		write_it(ofp2, table_3);
+
+		generate_enum(ofp2);
+
+		write_it(ofp2, table_4);
+
+		fclose(ofp2);
+	}
 }
 
 int
@@ -481,12 +516,13 @@ main(
 {
 	FILE *input = stdin;
 	FILE *output = stdout;
+	FILE *output2 = open_it("options_menu.h", "w");
 
 	if (argc > 1)
 		input = open_it(argv[1], "r");
 	if (argc > 2)
 		output = open_it(argv[2], "w");
-	makecfg(input, output);
+	makecfg(input, output, output2);
 
 	return (0);
 }
diff -Nurp tin-1.7.8/src/memory.c tin-1.7.9/src/memory.c
--- tin-1.7.8/src/memory.c	2005-02-25 11:47:12.000000000 +0100
+++ tin-1.7.9/src/memory.c	2005-06-28 10:31:21.852984455 +0200
@@ -3,7 +3,7 @@
  *  Module    : memory.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-02-25
+ *  Updated   : 2005-05-06
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -254,6 +254,8 @@ free_all_arrays(
 		FreeAndNull(newnews);
 	}
 
+	FreeAndNull(nntp_caps.implementation);
+
 	tin_fgets(NULL, FALSE);
 }
 
diff -Nurp tin-1.7.8/src/misc.c tin-1.7.9/src/misc.c
--- tin-1.7.8/src/misc.c	2005-02-12 14:22:22.000000000 +0100
+++ tin-1.7.9/src/misc.c	2005-06-28 10:31:21.898975988 +0200
@@ -3,7 +3,7 @@
  *  Module    : misc.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-02-12
+ *  Updated   : 2005-05-12
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -199,7 +199,7 @@ copy_fp(
  * try to backup filename as backupname. on success backupname has the same
  * permissions as filename.
  *
- * returncodes:
+ * return codes:
  * TRUE  = backup complete or source file was missing
  * FALSE = backup failed
  */
@@ -1661,7 +1661,6 @@ strfpath(
 }
 
 
-
 /*
  * TODO: Properly explain this
  */
@@ -2029,7 +2028,7 @@ cleanup_tmp_files(
 #if 0
 	char acNovFile[PATH_LEN];
 
-	if (xover_cmd && !tinrc.cache_overview_files) {
+	if (nntp_caps.over_cmd && !tinrc.cache_overview_files) {
 		snprintf(acNovFile, sizeof(acNovFile), "%s%d.idx", TMPDIR, (int) process_id);
 		unlink(acNovFile);
 	}
@@ -3397,7 +3396,15 @@ gnksa_split_from(
 		}
 	}
 
+	/*
+	 * if we allow <> as From: we must disallow <> as Mesage-ID,
+	 * see code in post.c:check_article_to_be_posted()
+	 */
+#if 0
+	if (!strchr(address, '@') && *address) /* check for From: without an @ but allow <> */
+#else
 	if (!strchr(address, '@')) /* check for From: without an @ */
+#endif /* 0 */
 		return GNKSA_ATSIGN_MISSING;
 
 	/* split successful */
diff -Nurp tin-1.7.8/src/my_tmpfile.c tin-1.7.9/src/my_tmpfile.c
--- tin-1.7.8/src/my_tmpfile.c	2004-12-30 14:33:11.000000000 +0100
+++ tin-1.7.9/src/my_tmpfile.c	2005-06-28 10:31:22.432877701 +0200
@@ -44,10 +44,10 @@
  *
  * try to create a uniq tmp-file descriptor
  *
- * returncodes:
+ * return codes:
  * >0 = file descriptor of tmpfile
  *      if need_name is set to true and/or we have to unlink the file
- *      ourself. filename is set to the name of the tmp file located in
+ *      ourself filename is set to the name of the tmp file located in
  *      base_dir
  * -1 = some error occured
  */
diff -Nurp tin-1.7.8/src/newsrc.c tin-1.7.9/src/newsrc.c
--- tin-1.7.8/src/newsrc.c	2004-12-30 14:33:11.000000000 +0100
+++ tin-1.7.9/src/newsrc.c	2005-06-28 10:31:21.921971755 +0200
@@ -3,7 +3,7 @@
  *  Module    : newsrc.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2004-11-16
+ *  Updated   : 2005-05-04
  *  Notes     : ArtCount = (ArtMax - ArtMin) + 1  [could have holes]
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -91,7 +91,7 @@ read_newsrc(
 		selmenu.max = skip_newgroups();
 
 	/*
-	 * make a .newsrc if one doesn't exist & auto subscribe to set groups
+	 * make a .newsrc if none exist & auto subscribe to set groups
 	 */
 	if (stat(newsrc_file, &statbuf) == -1) {
 		if (!create_newsrc(newsrc_file))
@@ -274,24 +274,22 @@ create_newsrc(
 /*
  * Get a list of default groups to subscribe to
  */
-/* TODO: fixme/checkme
- *      - logic seems to be wrong, NNTP_ABLE && read_saved_news
- *        looks for a local subscriptions_file, but read_saved_news doesn't
- *        require a local server... (a missing subscriptions_file doesn't
- *        cause any trouble, we just have to bother with the read_saved_news
- *        and a existing local subscriptions_file file case).
- *        open_newgroups_fp() uses the same logic.
- */
 static FILE *
 open_subscription_fp(
 	void)
 {
+	if (!read_saved_news) {
 #ifdef NNTP_ABLE
-	if (read_news_via_nntp && !read_saved_news)
-		return (nntp_command("LIST SUBSCRIPTIONS", OK_GROUPS, NULL, 0));
-	else
+		if (read_news_via_nntp) {
+			/* if (nntp_caps.type = 2 && !nntp_caps.list_subscriptions)
+				return NULL;
+			else */
+				return (nntp_command("LIST SUBSCRIPTIONS", OK_GROUPS, NULL, 0));
+		} else
 #endif /* NNTP_ABLE */
-		return (fopen(subscriptions_file, "r"));
+			return (fopen(subscriptions_file, "r"));
+	} else
+		return NULL;
 }
 
 
@@ -1556,6 +1554,7 @@ set_default_bitmap(
 
 /* TEST harness */
 #ifdef DEBUG_NEWSRC
+#	if 0
 static void set_bitmap_range_read(struct t_newsrc *my_newsrc, long beg, long end);
 static void set_bitmap_range_unread(struct t_newsrc *my_newsrc, long beg, long end);
 
@@ -1690,4 +1689,5 @@ my_newsrc->xmin, my_newsrc->xmax, beg, e
 		}
 	}
 }
+#	endif /* 0 */
 #endif /* DEBUG_NEWSRC */
diff -Nurp tin-1.7.8/src/nntplib.c tin-1.7.9/src/nntplib.c
--- tin-1.7.8/src/nntplib.c	2005-02-14 11:16:30.000000000 +0100
+++ tin-1.7.9/src/nntplib.c	2005-06-28 10:31:21.954965681 +0200
@@ -3,7 +3,7 @@
  *  Module    : nntplib.c
  *  Author    : S. Barber & I. Lea
  *  Created   : 1991-01-12
- *  Updated   : 2005-02-12
+ *  Updated   : 2005-06-17
  *  Notes     : NNTP client routines taken from clientlib.c 1.5.11 (1991-02-10)
  *  Copyright : (c) Copyright 1991-99 by Stan Barber & Iain Lea
  *              Permission is hereby granted to copy, reproduce, redistribute
@@ -30,7 +30,6 @@
 #endif /* VMS */
 
 char *nntp_server = NULL;
-constext *xover_cmd = NULL;
 #ifdef NO_POSTING
 	t_bool can_post = FALSE;
 #else
@@ -48,11 +47,9 @@ static TCP *nntp_wr_fp = NULL;
 	static char last_put[NNTP_STRLEN];
 	static constext *xover_cmds = "XOVER";
 #	if 0 /* currently not used */
-	static constext *xhdr_cmd = NULL;
 	static constext *xhdr_cmds = "XHDR";
 #	endif /* 0 */
 	enum extension_type { NO, LIST_EXTENSIONS, CAPABILITIES };
-	static int have_list_extensions = NO;
 	/* Set so we don't reconnect just to QUIT */
 	static t_bool quitting = FALSE;
 #endif /* NNTP_ABLE */
@@ -61,11 +58,13 @@ static TCP *nntp_wr_fp = NULL;
  * local prototypes
  */
 #ifdef NNTP_ABLE
+	static int mode_reader(t_bool *sec);
 	static int new_nntp_command(const char *command, int success, char *message, size_t mlen);
 	static int reconnect(int retry);
 	static int server_init(char *machine, const char *cservice, int port, char *text, size_t mlen);
-	static void check_extensions(void);
+	static int check_extensions(t_bool *sec);
 	static void close_server(void);
+	static void list_motd(void);
 #	ifdef INET6
 		static int get_tcp6_socket(char *machine, unsigned short port);
 #	else
@@ -614,7 +613,7 @@ get_tcp6_socket(
 {
 	char mymachine[MAXHOSTNAMELEN + 1];
 	char myport[12];
-	int c = -1, s = -1, err = -1;
+	int s = -1, err = -1;
 	struct addrinfo hints, *res, *res0;
 
 	snprintf(mymachine, sizeof(mymachine), "%s", machine);
@@ -645,7 +644,7 @@ get_tcp6_socket(
 	for (res = res0; res; res = res->ai_next) {
 		if ((s = socket(res->ai_family, res->ai_socktype, res->ai_protocol)) < 0)
 			continue;
-		if ((c = connect(s, res->ai_addr, res->ai_addrlen)) < 0)
+		if (connect(s, res->ai_addr, res->ai_addrlen) != 0)
 			close(s);
 		else {
 			err = 0;
@@ -704,6 +703,7 @@ get_dnet_socket(
 			sdn.sdn_add.a_addr[0] = node % 256;
 			sdn.sdn_add.a_addr[1] = node / 256;
 			break;
+
 		default:
 			if ((np = getnodebyname(machine)) == NULL) {
 				my_fprintf(stderr, _(txt_gethostbyname), "", machine);
@@ -769,13 +769,12 @@ u_put_server(
  * Returns: Nothing.
  *
  *	Side effects: Talks to the server.
- *			Closes connection if things are not right.
+ *	              Closes connection if things are not right.
  *
  * Note: This routine flushes the buffer each time it is called. For large
- *	      transmissions (i.e., posting news) don't use it. Instead, do the
- *	      fprintf's yourself, and then a final fflush.
+ *       transmissions (i.e., posting news) don't use it. Instead, do the
+ *       fprintf's yourself, and then a final fflush.
  *       Only cache commands, don't cache data transmissions.
- *
  */
 void
 put_server(
@@ -958,119 +957,265 @@ close_server(
  * issuing other NNTP commands because the correct methods may be mentioned
  * in the list of extensions.
  *
- * Sets up: have_list_extensions, xover_cmd, (xhdr_cmd)
+ * Sets up: t_capabilities nntp_caps
  */
-static void
+static int
 check_extensions(
-	void)
+	t_bool *sec)
 {
 	char *ptr;
-	int i;
+	int ret = 0;
 #	if 0 /* "CAPABILITIES" will replace "LIST EXTENSIONS" */
 	FILE *fp;
+	char *d;
 
 	if ((fp = nntp_command("CAPABILITIES", INF_CAPABILITIES, NULL, 0)) != NULL) {
-		int cap_version = -1;
-
-		have_list_extensions = CAPABILITIES;
+		nntp_caps.type = CAPABILITIES;
 		while ((ptr = tin_fgets(fp, FALSE)) != NULL) {
 #		ifdef DEBUG
 			debug_nntp("<<<", ptr);
 #		endif /* DEBUG */
-			/* look for version number */
-			if (cap_version == -1 && have_list_extensions == CAPABILITIES) {
-				if (!strncasecmp(ptr, "VERSION", 7))
-					cap_version = atoi(ptr + 8);
+			/* look for version number(s) */
+			if (!nntp_caps.version && nntp_caps.type == CAPABILITIES) {
+				if (!strcasecmp(ptr, "VERSION")) {
+					d = ptr + 7;
+					d = strpbrk(d, " \t");
+					while (d != NULL && (d + 1 < (ptr + strlen(ptr)))) {
+						d++;
+						nntp_caps.version = MAX(nntp_caps.version, (unsigned int) atoi(d));
+						d = strpbrk(d, " \t");
+					}
+				}
 			}
 			/* we currently only support CAPABILITIES VERSION 2 */
-			if (cap_version == 2) {
+			if (nntp_caps.version == 2) {
 				/*
-				 * Check for (X)OVER
-				 * XOVER should not be listed in CAPABILITIES
-				 * but checking for it if OVER is not found does no harm.
+				 * check for LIST variants - this code is untested
 				 */
-				if (!xover_cmd) {
-					for (i = 1; i >= 0; i--) {
-						if (strcasecmp(ptr, &xover_cmds[i]) == 0) {
-							xover_cmd = &xover_cmds[i];
-							break;
-						}
+				if (!strcasecmp(ptr, "LIST")) {
+					d = ptr + 4;
+					d = strpbrk(d, " \t");
+					while (d != NULL && (d + 1 < (ptr + strlen(ptr)))) {
+						d++;
+						if (!strcasecmp(d, "ACTIVE.TIMES"))
+							nntp_caps.list_active_times = TRUE;
+						else if (!strcasecmp(d, "ACTIVE"))
+							nntp_caps.list_active_times = TRUE;
+						else if (!strcasecmp(d, "DISTRIB.PATS"))
+							nntp_caps.list_distrib_pats = TRUE;
+						else if (!strcasecmp(d, "DISTRIBUTIONS"))
+							nntp_caps.list_distributions = TRUE;
+						else if (!strcasecmp(d, "HEADERS"))
+							nntp_caps.list_headers = TRUE; /* HDR requires LIST HEADERS, but not vice versa */
+						else if (!strcasecmp(d, "NEWSGROUPS"))
+							nntp_caps.list_newsgroups = TRUE;
+						else if (!strcasecmp(d, "OVERVIEW.FMT")) /* OVER requires OVERVIEW.FMT, but not vice versa */
+							nntp_caps.list_overview_fmt = TRUE;
+						else if (!strcasecmp(d, "MOTD")) /* "private" extension */
+							nntp_caps.list_motd = TRUE;
+						else if (!strcasecmp(d, "SUBSCRIPTIONS")) /* "private" extension, RFC 2980 */
+							nntp_caps.list_subscriptions = TRUE;
+						d = strpbrk(d, " \t");
 					}
-				}
-#		if 0 /* currently not used */
+				} else if (!strcasecmp(ptr, "IMPLEMENTATION"))
+					nntp_caps.implementation = my_strdup(ptr + 14);
+				else if (!strcasecmp(ptr, "MODE-READER")) {
+					if (!nntp_caps.reader)
+						nntp_caps.mode_reader = TRUE;
+				} else if (!strcasecmp(ptr, "READER")) {
+					nntp_caps.reader = TRUE;
+					nntp_caps.mode_reader = FALSE;
+				} else if (!strcasecmp(d, "POST"))
+					nntp_caps.post = TRUE;
+				else if (!strcasecmp(ptr, "NEWNEWS"))
+					nntp_caps.newnews = TRUE;
+				else if (!strcasecmp(ptr, "XPAT")) /* extension, RFC 2980 */
+					nntp_caps.xpat = TRUE;
+				else if (!strcasecmp(ptr, "STARTTLS"))
+					nntp_caps.starttls = TRUE;
 				/*
-				 * Check for (X)HDR
-				 * XHDR should not be listed in EXTENSIONS (but sometimes is)
-				 * checking for it if HDR is not found does no harm.
+				 * NOTE: if we saw OVER, LIST OVERVIEW.FMT _must_ be implemented
 				 */
-				if (!xhdr_cmd) {
-					for (i = 1; i >= 0; i--) {
-						if (strcasecmp(ptr, &xhdr_cmds[i]) == 0) {
-							xhdr_cmd = &xhdr_cmds[i];
-							break;
-						}
+				else if (!strcasecmp(ptr, &xover_cmds[1])) {
+					nntp_caps.over = TRUE;
+					nntp_caps.list_overview_fmt = TRUE;
+					nntp_caps.over_cmd = &xover_cmds[1];
+					d = ptr + strlen(&xover_cmds[1]);
+					d = strpbrk(d, " \t");
+					while (d != NULL && (d + 1 < (ptr + strlen(ptr)))) {
+						d++;
+						if (!strcasecmp(d, "MSGID"))
+							nntp_caps.over_msgid = TRUE;
+						d = strpbrk(d, " \t");
+					}
+				} else if (!strcasecmp(ptr, "AUTHINFO")) {
+					d = ptr + 8;
+					d = strpbrk(d, " \t");
+					while (d != NULL && (d + 1 < (ptr + strlen(ptr)))) {
+						d++;
+						if (!strcasecmp(d, "USER"))
+							nntp_caps.authinfo_user = TRUE;
+						if (!strcasecmp(d, "SASL"))
+							nntp_caps.authinfo_sasl = TRUE;
+						d = strpbrk(d, " \t");
 					}
 				}
+#		if 0
+				/*
+				 * NOTE: if we saw HDR, LIST HEADERS _must_ be implemented
+				 */
+				else if (!strcasecmp(ptr, &xhdr_cmds[1])) {
+						nntp_caps.hdr_cmd = &xhdr_cmds[1];
+						nntp_caps.hdr = TRUE;
+						nntp_caps.list_headers = TRUE;
+				}
+				else if (!strcasecmp(ptr, "IHAVE"))
+						nntp_caps.ihave = TRUE;
 #		endif /* 0 */
 				/*
-				 * LIST, READER, SASL, STARTTLS, STREAMING, AUTHINFO, IHAVE
-				 * IMPLEMENTATION, (MODE-READER)
+				 * TODO: SASL, STREAMING
 				 */
 			} else
-				have_list_extensions = NO;
+				nntp_caps.type = NO;
 		}
 	}
-#	endif /* 0 */
+#		ifdef DEBUG
+	debug_print_nntp_extensions();
+#		endif /* DEBUG */
+	if (!*sec && !nntp_caps.reader) {
+		if (nntp_caps.type == CAPABILITIES && !nntp_caps.mode_reader)
+			return -1; /* no mode-switching and no reader mode, give up */
+		if ((ret = mode_reader(&*sec)) != 0)
+			return ret;
+		else if (nntp_caps.type == CAPABILITIES) /* 2nd pass */
+			ret = check_extensions(&*sec);
+	}
+
+#	else
 
-#	if 1
 	/*
 	 * "LIST EXTENSIONS" is somewhat troublesome as there are a lot
 	 * of broken implementations out there and it is a multiline response
 	 */
-	if (have_list_extensions == NO) {
+	if (nntp_caps.type == NO) {
 		char buf[NNTP_STRLEN];
+		int i;
 
 		buf[0] = '\0';
 		i = new_nntp_command("LIST EXTENSIONS", OK_EXTENSIONS, buf, sizeof(buf));
 		switch (i) {
 			case OK_EXTENSIONS:	/* as defined draft-ietf-nntpext-base-24.txt */
-				have_list_extensions = LIST_EXTENSIONS;
-				/* FALLTHROUGH */
 			case 205:	/* M$ Exchange 5.5 */
-			case 215:	/* Netscape-Collabra/3.52 && NetWare-News-Server/5.1*/
+			case 215:	/* Netscape-Collabra/3.52 && NetWare-News-Server/5.1 */
+				nntp_caps.type = LIST_EXTENSIONS;
 				while ((ptr = tin_fgets(FAKE_NNTP_FP, FALSE)) != NULL) {
-					if (have_list_extensions == LIST_EXTENSIONS) {
+					if (nntp_caps.type == LIST_EXTENSIONS) {
 #		ifdef DEBUG
 						debug_nntp("<<<", ptr);
 #		endif /* DEBUG */
 						/*
-						 * some servers (e.g. Hamster 1.3) have leading spaces in the
-						 * extension list
+						 * some servers (e.g. Hamster 1.3) have leading spaces in
+						 * the extension list
 						 */
 						str_trim(ptr);
 						/*
 						 * Check for (X)OVER
-						 * XOVER should not be listed in EXTENSIONS (but sometimes is)
-						 * checking for it if OVER is not found does no harm.
+						 * XOVER should not be listed in EXTENSIONS (but sometimes
+						 * is) checking for it if OVER is not found does no harm.
 						 */
-						if (!xover_cmd) {
+						if (!nntp_caps.over_cmd) {
 							for (i = 1; i >= 0; i--) {
 								if (strcasecmp(ptr, &xover_cmds[i]) == 0) {
-									xover_cmd = &xover_cmds[i];
+									nntp_caps.over_cmd = &xover_cmds[i];
 									break;
 								}
 							}
 						}
 					}
 				}
+				/*
+				 * as the server did support LIST EXTENSIONS it's likely that it
+				 * also can do LIST MOTD (we don't bother to parse the LIST
+				 * EXTENSIONS output for MOTD as it never was standartizised;
+				 * draft-ietf-nntpext-base-24.txt only described OVER, HDR and
+				 * LISTGROUP).
+				 */
+				nntp_caps.list_motd = TRUE;
 				break;
 
 			default:
 				break;
-			}
 		}
-#	endif /* 1 */
-	return;
+#		ifdef DEBUG
+		debug_print_nntp_extensions();
+#		endif /* DEBUG */
+		if (!*sec)
+			ret = mode_reader(&*sec);
+	}
+#	endif /* 0 */
+	return ret;
+}
+
+
+/*
+ * Switch INN into NNRP mode with 'mode reader'
+ */
+static int
+mode_reader(
+	t_bool *sec)
+{
+	int ret = 0;
+
+	if (!nntp_caps.reader) {
+		char line[NNTP_STRLEN];
+#ifdef DEBUG
+		debug_nntp("mode_reader", "mode reader");
+#endif /* DEBUG */
+		DEBUG_IO((stderr, "nntp_command(MODE READER)\n"));
+		put_server("MODE READER");
+
+		/*
+		 * According to the latest NNTP draft (May 2005), MODE READER may only
+		 * return the following response codes:
+		 *
+		 *   200 (OK_CANPOST)     Hello, you can post
+		 *   201 (OK_NOPOST)      Hello, you can't post
+		 *  (202 (OK_NOIHAVE)     discussed on the itef mailinglist; withdrawn)
+		 *  (203 (OK_NOPOSTIHAVE) discussed on the itef mailinglist; withdrawn)
+		 *   502 (ERR_ACCESS)     Service unavailable
+		 *
+		 * However, there may be old servers out there that do not implement this
+		 * command and therefore return ERR_COMMAND (500). Unfortunately there
+		 * are some new servers out there (i.e. INN 2.4.0 (20020220 prerelease)
+		 * which do return ERR_COMMAND if they are feed only servers.
+		 */
+
+		switch ((ret = get_respcode(line, sizeof(line)))) {
+			case OK_CANPOST:
+	/*		case OK_NOIHAVE: */
+				can_post = TRUE && !force_no_post;
+				*sec = TRUE;
+				ret = 0;
+				break;
+
+			case OK_NOPOST:
+	/*		case OK_NOPOSTIHAVE: */
+				can_post = FALSE;
+				*sec = TRUE;
+				ret = 0;
+				break;
+
+			case ERR_GOODBYE:
+			case ERR_ACCESS:
+				error_message(line);
+				return ret;
+
+			case ERR_COMMAND:
+			default:
+				break;
+		}
+	}
+	return ret;
 }
 #endif /* NNTP_ABLE */
 
@@ -1179,59 +1324,10 @@ nntp_open(
 	 * Find out which NNTP extensions are available
 	 * TODO: The authentication method required may be mentioned in the list of
 	 *       extensions. (For details about authentication methods, see
-	 *       draft-newman-nntpext-auth-01.txt).
-	 */
-	check_extensions();
-
-	/*
-	 * Switch INN into NNRP mode with 'mode reader'
+	 *       draft-ietf-nntpext-authinfo-07.txt).
 	 */
-#	ifdef DEBUG
-	debug_nntp("nntp_open", "mode reader");
-#	endif /* DEBUG */
-	DEBUG_IO((stderr, "nntp_command(MODE READER)\n"));
-	put_server("MODE READER");
-
-	/*
-	 * According to the latest NNTP draft (Jan 2002), MODE READER may only
-	 * return the following response codes:
-	 *
-	 *   200 (OK_CANPOST)     Hello, you can post
-	 *   201 (OK_NOPOST)      Hello, you can't post
-	 *  (202 (OK_NOIHAVE)     discussed on the itef mailinglist)
-	 *  (203 (OK_NOPOSTIHAVE) discussed on the itef mailinglist)
-	 *   400 (ERR_GOODBYE)    Service temporarily unavailable
-	 *   502 (ERR_ACCESS)     Service unavailable
-	 *
-	 * However, there may be old servers out there that do not implement this
-	 * command and therefore return ERR_COMMAND (500). Unfortunately there
-	 * are some new servers out there (i.e. INN 2.4.0 (20020220 prerelease)
-	 * which do return ERR_COMMAND if they are feed only servers.
-	 */
-
-	switch ((ret = get_respcode(line, sizeof(line)))) {
-		case OK_CANPOST:
-/*		case OK_NOIHAVE: */
-			can_post = TRUE && !force_no_post;
-			sec = TRUE;
-			break;
-
-		case OK_NOPOST:
-/*		case OK_NOPOSTIHAVE: */
-			can_post = FALSE;
-			sec = TRUE;
-			break;
-
-		case ERR_GOODBYE:
-		case ERR_ACCESS:
-			error_message(line);
-			return ret;
-
-		case ERR_COMMAND:
-		default:
-			break;
-
-	}
+	if ((ret = check_extensions(&sec)))
+		return ret; /* required "MODE READER" failed, exit */
 
 	/*
 	 * If the user wants us to authenticate on connection startup, do it now.
@@ -1245,30 +1341,8 @@ nntp_open(
 		debug_nntp("nntp_open", "authenticate");
 #	endif /* DEBUG */
 		authenticate(nntp_server, userid, TRUE);
-		put_server("MODE READER");
-		switch ((ret = get_respcode(line, sizeof(line)))) {
-			case OK_CANPOST:
-/*			case OK_NOIHAVE: */
-				can_post = TRUE && !force_no_post;
-				sec = TRUE;
-				break;
-
-			case OK_NOPOST:
-/*			case OK_NOPOSTIHAVE: */
-				can_post = FALSE;
-				sec = TRUE;
-				break;
-
-			case ERR_GOODBYE:
-			case ERR_ACCESS:
-				error_message(line);
-				return ret;
-
-			case ERR_COMMAND:	/* Uh-oh ... now we don't know if posting */
-			default:				/* is allowed or not ... so use last 200 */
-				break;			/* or 201 response to decide. */
-
-		}
+		if ((ret = mode_reader(&sec)))
+			return ret; /* "MODE READER" failed, exit */
 	}
 
 	if (!is_reconnect) {
@@ -1317,35 +1391,35 @@ nntp_open(
 	 * (successor of XOVER as of latest NNTP Draft (Jan 2002)
 	 * We have to check that we _don't_ get an ERR_COMMAND
 	 */
-	if (have_list_extensions == NO) {
+	if (nntp_caps.type == NO) {
 		for (i = 0; i < 2; i++) {
 			if (!nntp_command(&xover_cmds[i], ERR_COMMAND, NULL, 0)) {
-				xover_cmd = &xover_cmds[i];
+				nntp_caps.over_cmd = &xover_cmds[i];
 				break;
 			}
 		}
 	} else {
-		if (!xover_cmd) {
+		if (!nntp_caps.over_cmd) {
 			/*
-			 * LIST EXTENSIONS didn't mention OVER or XOVER, try
+			 * CAPABILITIES/LIST EXTENSIONS didn't mention OVER or XOVER, try
 			 * XOVER
 			 */
 			if (!nntp_command(xover_cmds, ERR_COMMAND, NULL, 0))
-				xover_cmd = xover_cmds;
+				nntp_caps.over_cmd = xover_cmds;
 		}
 #	if 0 /* unused */
-		if (!xhdr_cmd) {
+		if (!nntp_caps.hdr_cmd) {
 			/*
 			 * LIST EXTENSIONS didn't mention HDR or XHDR, try
 			 * XHDR
 			 */
 			if (!nntp_command(xhdr_cmds, ERR_COMMAND, NULL, 0))
-				xhdr_cmd = xhdr_cmds;
+				nntp_caps.hdr_cmd = xhdr_cmds;
 		}
 #	endif /* 0 */
 	}
 
-	if (!xover_cmd) {
+	if (!nntp_caps.over_cmd) {
 		if (!is_reconnect && !batch_mode) {
 			wait_message(2, _(txt_no_xover_support));
 
@@ -1365,14 +1439,24 @@ nntp_open(
 
 #	if 0
 	/*
-	 * TODO: if we're using -n, check for LIST NEWSGROUPS <wildmat> */
-	 * see also comments in open_newsgroups_fp() */
+	 * TODO: if we're using -n, check for LIST NEWSGROUPS <wildmat>
+	 * see also comments in open_newsgroups_fp()
 	 */
 	if (newsrc_active && !list_active) { /* -n */
 		/* code goes here */
 	}
 #	endif /* 0 */
 
+	if (!is_reconnect && !batch_mode && show_description && check_for_new_newsgroups) {
+		/*
+		 * TODO:
+		 * - document that "-d" and/or "-q" turns off "LIST MOTD" (or add
+		 *   a tinrc var to turn LIST MOTD on/off)
+		 */
+		if (nntp_caps.list_motd)
+			list_motd();
+	}
+
 	is_reconnect = TRUE;
 
 #endif /* NNTP_ABLE */
@@ -1566,7 +1650,7 @@ DEBUG_IO((stderr, "nntp_command(%s)\n", 
 
 
 /*
- * same as above, but with a slightly more usefull returncode.
+ * same as above, but with a slightly more usefull return code.
  * TODO: use it instead of nntp_command in the rest of the code
  *       (wherever it is more usefull).
  */
@@ -1598,4 +1682,50 @@ DEBUG_IO((stderr, "nntp_command(%s)\n", 
 #	endif /* DEBUG */
 	return respcode;
 }
+
+
+static void
+list_motd(
+	void)
+{
+	char *ptr;
+	char buf[NNTP_STRLEN];
+	int i;
+	unsigned int l = 0;
+
+	buf[0] = '\0';
+	i = new_nntp_command("LIST MOTD", OK_MOTD, buf, sizeof(buf));
+
+	switch (i) {
+		case OK_MOTD:
+#	ifdef HAVE_COLOR
+			fcol(tinrc.col_message);
+#	endif /* HAVE_COLOR */
+			while ((ptr = tin_fgets(FAKE_NNTP_FP, FALSE)) != NULL) {
+#	ifdef DEBUG
+				debug_nntp("<<<", ptr);
+#	endif /* DEBUG */
+				/*
+				 * TODO: - store a hash value of the entire motd in the server-rc
+				 *         and only if it differs from the old value display the
+				 *         motd?
+				 *       - use some sort of pager?
+				 *       - -> lang.c
+				 */
+				my_printf("%s%s\n", _("MOTD: "), ptr);
+				l++;
+			}
+#	ifdef HAVE_COLOR
+			fcol(tinrc.col_normal);
+#	endif /* HAVE_COLOR */
+			if (l) {
+				my_flush();
+				sleep((l >> 1) | 0x01);
+			}
+			break;
+
+		default:	/* common response codes are 500, 501, 503 */
+			break;
+	}
+}
 #endif /* NNTP_ABLE */
diff -Nurp tin-1.7.8/src/options_menu.c tin-1.7.9/src/options_menu.c
--- tin-1.7.8/src/options_menu.c	2005-03-20 17:27:57.000000000 +0100
+++ tin-1.7.9/src/options_menu.c	2005-06-28 10:31:24.435509034 +0200
@@ -3,7 +3,7 @@
  *  Module    : options_menu.c
  *  Author    : Michael Bienia <michael@vorlon.ping.de>
  *  Created   : 2004-09-05
- *  Updated   : 2005-03-20
+ *  Updated   : 2005-06-22
  *  Notes     : Split from config.c
  *
  * Copyright (c) 2004-2005 Michael Bienia <michael@vorlon.ping.de>
@@ -38,9 +38,9 @@
 #ifndef TIN_H
 #	include "tin.h"
 #endif /* !TIN_H */
-#ifndef TINTBL_H
+#ifndef TINCFG_H
 #	include "tincfg.h"
-#endif /* !TINTBL_H */
+#endif /* !TINCFG_H */
 #ifndef TCURSES_H
 #	include "tcurses.h"
 #endif /* !TCURSES_H */
@@ -85,10 +85,10 @@ static void unhighlight_option(enum opti
  */
 int
 option_row(
-	int option)
+	enum option_enum option)
 {
 	int i = 0;
-	int j = first_option_on_screen;
+	enum option_enum j = first_option_on_screen;
 
 	while (j < option) {
 		if (option_is_visible(j))
@@ -139,7 +139,7 @@ set_option_num(
  */
 t_bool
 option_is_visible(
-	int option)
+	enum option_enum option)
 {
 	switch (option) {
 #ifdef HAVE_COLOR
@@ -178,6 +178,9 @@ option_is_visible(
 		case OPT_MONO_MARKSTROKE:
 			return tinrc.word_highlight;
 
+		case OPT_THREAD_PERC:
+			return (tinrc.thread_articles == THREAD_PERC);
+
 		default:
 			return TRUE;
 	}
@@ -211,7 +214,7 @@ fmt_option_prompt(
 	char *dst,
 	size_t len,
 	t_bool editing,
-	int option)
+	enum option_enum option)
 {
 	char *buf;
 	size_t option_width = MAX(35, cCOLS / 2 - 9);
@@ -224,6 +227,7 @@ fmt_option_prompt(
 
 	if (!option_is_title(option)) {
 		int num = get_option_num(option);
+
 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
 		if (wbuf != NULL) {
 			wbuf2 = wstrunc(wbuf, option_width);
@@ -323,6 +327,7 @@ print_any_option(
 #endif /* USE_CURSES */
 }
 
+
 static void
 repaint_option(
 	enum option_enum option)
@@ -586,12 +591,12 @@ unhighlight_option(
  */
 void
 refresh_config_page(
-	int act_option)
+	enum option_enum act_option)
 {
-	static int last_option = 0;
+	static enum option_enum last_option = 0;
 	/* t_bool force_redraw = FALSE; */
 
-	if (act_option < 0) {	/* called by signal handler */
+	if (act_option == SIGNAL_HANDLER) {	/* called by signal handler */
 		/* force_redraw = TRUE; */
 		act_option = last_option;
 		set_last_option_on_screen(first_option_on_screen); /* terminal size may have changed */
@@ -871,6 +876,10 @@ change_config_file(
 				redraw_screen(option);
 				break;
 
+			case GLOBAL_VERSION:
+				info_message(cvers);
+				break;
+
 			default:
 				break;
 		} /* switch (ch) */
@@ -1098,6 +1107,8 @@ change_config_file(
 										grpmenu.curr = n;
 								}
 							}
+							set_last_option_on_screen(first_option_on_screen);
+							redraw_screen(option);
 							clear_message();
 							break;
 
@@ -1438,6 +1449,12 @@ change_config_file(
 							redraw_screen(option);
 							break;
 
+						case OPT_THREAD_PERC:
+							prompt_option_num(option);
+							if (tinrc.thread_perc < 0 || tinrc.thread_perc > 100)
+								tinrc.thread_perc = THREAD_PERC_DEFAULT;
+							break;
+
 						case OPT_WRAP_COLUMN:
 							prompt_option_num(option);
 							/* recook if in an article is open */
diff -Nurp tin-1.7.8/src/page.c tin-1.7.9/src/page.c
--- tin-1.7.8/src/page.c	2005-03-14 14:37:00.000000000 +0100
+++ tin-1.7.9/src/page.c	2005-06-28 10:31:21.990959055 +0200
@@ -3,7 +3,7 @@
  *  Module    : page.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-14
+ *  Updated   : 2005-06-18
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -686,7 +686,7 @@ page_goto_next_unread:
 
 			case GLOBAL_QUICK_FILTER_SELECT:	/* quickly auto-select article */
 			case GLOBAL_QUICK_FILTER_KILL:		/* quickly kill article */
-				if ((filtered_articles = quick_filter((func == GLOBAL_QUICK_FILTER_KILL) ? FILTER_KILL : FILTER_SELECT, group, &arts[this_resp])))
+				if ((filtered_articles = quick_filter(func, group, &arts[this_resp])))
 					goto return_to_index;
 
 				draw_page(group->name, 0);
@@ -695,7 +695,7 @@ page_goto_next_unread:
 			case GLOBAL_MENU_FILTER_SELECT:		/* auto-select article menu */
 			case GLOBAL_MENU_FILTER_KILL:			/* kill article menu */
 				XFACE_CLEAR();
-				if (filter_menu((func == GLOBAL_MENU_FILTER_KILL) ? FILTER_KILL : FILTER_SELECT, group, &arts[this_resp])) {
+				if (filter_menu(func, group, &arts[this_resp])) {
 					if ((filtered_articles = filter_articles(group)))
 						goto return_to_index;
 				}
@@ -734,23 +734,27 @@ page_goto_next_unread:
 				}
 				break;
 
-			case PAGE_CATCHUP:			/* catchup - mark read, goto next */
-			case PAGE_CATCHUP_NEXT_UNREAD:	/* goto next unread */
-				snprintf(buf, sizeof(buf), _(txt_mark_thread_read), (func == PAGE_CATCHUP_NEXT_UNREAD) ? _(txt_enter_next_thread) : "");
+			case CATCHUP:			/* catchup - mark read, goto next */
+			case CATCHUP_NEXT_UNREAD:	/* goto next unread */
+				/*
+				 * TODO: if (group->attribute->thread_arts == THREAD_NONE)
+				 *       	snprintf(buf, sizeof(buf), _("Mark article as read%s?"), (func == CATCHUP_NEXT_UNREAD) ? _(" and enter next unread article") : "");
+				 *       else
+				 */
+				snprintf(buf, sizeof(buf), _(txt_mark_thread_read), (func == CATCHUP_NEXT_UNREAD) ? _(txt_enter_next_thread) : "");
 				if ((!TINRC_CONFIRM_ACTION) || prompt_yn(buf, TRUE) == 1) {
 					thd_mark_read(group, base[which_thread(this_resp)]);
 					XFACE_CLEAR();
-					return (func == PAGE_CATCHUP_NEXT_UNREAD) ? GRP_NEXTUNREAD : GRP_NEXT;
+					return (func == CATCHUP_NEXT_UNREAD) ? GRP_NEXTUNREAD : GRP_NEXT;
 				}
 				break;
 
-			case PAGE_MARK_THREAD_UNREAD:
+			case MARK_THREAD_UNREAD:
 				thd_mark_unread(group, base[which_thread(this_resp)]);
-				/*
-				 * FIXME: replace txt_thread by txt_article_upper
-				 * if THREAD_NONE
-				 */
-				info_message(_(txt_marked_as_unread), _(txt_thread_upper));
+				if (group->attribute->thread_arts != THREAD_NONE)
+					info_message(_(txt_marked_as_unread), _(txt_thread_upper));
+				else
+					info_message(_(txt_marked_as_unread), _(txt_article_upper));
 				break;
 
 			case PAGE_CANCEL:			/* cancel an article */
@@ -936,7 +940,7 @@ return_to_index:
 				XFACE_SHOW();
 				break;
 
-			case PAGE_MARK_ARTICLE_UNREAD:	/* mark article as unread(to return) */
+			case MARK_ARTICLE_UNREAD:	/* mark article as unread(to return) */
 				art_mark(group, &arts[this_resp], ART_WILL_RETURN);
 				info_message(_(txt_marked_as_unread), _(txt_article_upper));
 				break;
@@ -1694,7 +1698,8 @@ load_article(
 	struct t_group *group)
 {
 #ifdef DEBUG
-	fprintf(stderr, "load_art %s(new=%d, curr=%d)\n", (new_respnum == this_resp) ? "ALREADY OPEN!" : "", new_respnum, this_resp);
+	if (debug == 2)
+		fprintf(stderr, "load_art %s(new=%d, curr=%d)\n", (new_respnum == this_resp) ? "ALREADY OPEN!" : "", new_respnum, this_resp);
 #endif /* DEBUG */
 
 	if (new_respnum != this_resp) {
diff -Nurp tin-1.7.8/src/parsdate.y tin-1.7.9/src/parsdate.y
--- tin-1.7.8/src/parsdate.y	2004-11-15 18:44:25.000000000 +0100
+++ tin-1.7.9/src/parsdate.y	2005-06-28 10:31:22.007955926 +0200
@@ -19,10 +19,10 @@
  *  Copyright : This code is in the public domain and has no copyright.
  */
 
-/* SUPPRESS 530 *//* Empty body for statement */
-/* SUPPRESS 593 on yyerrlab *//* Label was not used */
-/* SUPPRESS 593 on yynewstate *//* Label was not used */
-/* SUPPRESS 595 on yypvt *//* Automatic variable may be used before set */
+/* SUPPRESS 530 */ /* Empty body for statement */
+/* SUPPRESS 593 on yyerrlab */ /* Label was not used */
+/* SUPPRESS 593 on yynewstate */ /* Label was not used */
+/* SUPPRESS 595 on yypvt */ /* Automatic variable may be used before set */
 
 #include "tin.h"
 
@@ -544,7 +544,7 @@ Convert(
 	}
     if (Year < EPOCH || Year > END_OF_TIME
      || Month < 1 || Month > 12
-     /* NOSTRICT *//* conversion from long may lose accuracy */
+     /* NOSTRICT */ /* conversion from long may lose accuracy */
      || Day < 1 || Day > mp[(int)Month])
 	return -1;
 
@@ -774,7 +774,7 @@ GetTimeInfo(
 #endif	/* !defined(DONT_HAVE_TM_GMTOFF) */
 
     /* Get the basic time. */
-#if	defined(HAVE_GETTIMEOFDAY)
+#if defined(HAVE_GETTIMEOFDAY)
     if (gettimeofday(&tv, (struct timezone *)NULL) == -1)
 	return -1;
     Now->time = tv.tv_sec;
@@ -783,7 +783,7 @@ GetTimeInfo(
     /* Can't check for -1 since that might be a time, I guess. */
     (void)time(&Now->time);
     Now->usec = 0;
-#endif	/* defined(HAVE_GETTIMEOFDAY) */
+#endif /* defined(HAVE_GETTIMEOFDAY) */
 
     /* Now get the timezone if it's been an hour since the last time. */
     if (Now->time - LastTime > 60 * 60) {
diff -Nurp tin-1.7.8/src/pgp.c tin-1.7.9/src/pgp.c
--- tin-1.7.8/src/pgp.c	2005-02-12 14:23:18.000000000 +0100
+++ tin-1.7.9/src/pgp.c	2005-06-28 10:31:22.047948563 +0200
@@ -3,7 +3,7 @@
  *  Module    : pgp.c
  *  Author    : Steven J. Madsen
  *  Created   : 1995-05-12
- *  Updated   : 2005-02-12
+ *  Updated   : 2005-06-22
  *  Notes     : PGP support
  *
  * Copyright (c) 1995-2005 Steven J. Madsen <steve@erinet.com>
@@ -59,7 +59,7 @@
 #		define PGP_PUBRING	"pubring.pgp"
 #		define CHECK_SIGN	"%s %s -f <%s %s"
 #		define ADD_KEY		"%s %s -ka %s"
-#		define APPEND_KEY	"%s %s -kxa %s %s"
+#		define APPEND_KEY	"%s %s -kxa %s %s", PGPNAME, pgpopts, buf, keyfile
 #		define DO_ENCRYPT	"%s %s -ate %s %s", PGPNAME, pgpopts, pt, mailto
 #		define DO_SIGN		"%s %s -ats %s %s", PGPNAME, pgpopts, pt, mailto
 #		define DO_SIGN1		"%s %s -ats %s %s -u %s", PGPNAME, pgpopts, pt, mailto, mailfrom
@@ -73,7 +73,7 @@
 #		define PGP_PUBRING	"pubring.pkr"
 #		define CHECK_SIGN	"%sv %s -f <%s %s"
 #		define ADD_KEY		"%sk %s -a %s"
-#		define APPEND_KEY	"%sk %s -xa %s -o %s"
+#		define APPEND_KEY	"%sk %s -xa %s -o %s", PGPNAME, pgpopts, keyfile, buf
 #		define DO_ENCRYPT	"%se %s -at %s %s", PGPNAME, pgpopts, pt, mailto
 #		define DO_SIGN		"%ss %s -at %s %s", PGPNAME, pgpopts, pt, mailto
 #		define DO_SIGN1		"%ss %s -at %s %s -u %s", PGPNAME, pgpopts, pt, mailto, mailfrom
@@ -87,7 +87,7 @@
 #		define PGP_PUBRING	"pubring.gpg"
 #		define CHECK_SIGN	"%s %s --no-batch --decrypt <%s %s"
 #		define ADD_KEY		"%s %s --no-batch --import %s"
-#		define APPEND_KEY	"%s %s --no-batch --armor --output %s --export %s"
+#		define APPEND_KEY	"%s %s --no-batch --armor --output %s --export %s", PGPNAME, pgpopts, keyfile, buf
 /* #		define LOCAL_USER	"--local-user %s" */
 #		define DO_ENCRYPT	\
 "%s %s --textmode --armor --no-batch --output %s.asc --recipient %s --encrypt %s", \
@@ -121,14 +121,11 @@ PGPNAME, pgpopts, pt, mailto, mailfrom, 
 #	endif /* HAVE_LONG_FILE_NAMES */
 
 
-#	define PGP_SIGN 0x01
-#	define PGP_ENCRYPT 0x02
-
 /*
  * local prototypes
  */
 static t_bool pgp_available(void);
-static void do_pgp(int what, const char *file, const char *mail_to);
+static void do_pgp(t_function what, const char *file, const char *mail_to);
 static void join_files(const char *file);
 static void pgp_append_public_key(char *file);
 static void split_file(const char *file);
@@ -234,7 +231,7 @@ err_art:
 
 static void
 do_pgp(
-	int what,
+	t_function what,
 	const char *file,
 	const char *mail_to)
 {
@@ -249,24 +246,35 @@ do_pgp(
 	/*
 	 * <mailfrom> is valid only when signing and a local address exists
 	 */
-	if (what & PGP_SIGN) {
-		if ((CURR_GROUP.attribute->from) != NULL)
-			strip_name(CURR_GROUP.attribute->from, mailfrom);
-		if (strlen(mailfrom)) {
-			if (what & PGP_ENCRYPT)
-				sh_format(cmd, sizeof(cmd), DO_BOTH1);
-			else
+	if ((CURR_GROUP.attribute->from) != NULL)
+		strip_name(CURR_GROUP.attribute->from, mailfrom);
+
+	switch (what) {
+		case PGP_KEY_SIGN:
+			if (strlen(mailfrom))
 				sh_format(cmd, sizeof(cmd), DO_SIGN1);
-		} else {
-			if (what & PGP_ENCRYPT)
-				sh_format(cmd, sizeof(cmd), DO_BOTH);
 			else
 				sh_format(cmd, sizeof(cmd), DO_SIGN);
-		}
-	} else
-		sh_format(cmd, sizeof(cmd), DO_ENCRYPT);
+			invoke_cmd(cmd);
+			break;
+
+		case PGP_KEY_ENCRYPT_SIGN:
+			if (strlen(mailfrom))
+				sh_format(cmd, sizeof(cmd), DO_BOTH1);
+			else
+				sh_format(cmd, sizeof(cmd), DO_BOTH);
+			invoke_cmd(cmd);
+			break;
+
+		case PGP_KEY_ENCRYPT:
+			sh_format(cmd, sizeof(cmd), DO_ENCRYPT);
+			invoke_cmd(cmd);
+			break;
+
+		default:
+			break;
+	}
 
-	invoke_cmd(cmd);
 	join_files(file);
 }
 
@@ -289,8 +297,7 @@ pgp_append_public_key(
  * TODO: I'm guessing the pgp append key command creates 'keyfile' and that
  * we should remove it
  */
-	sh_format(cmd, sizeof(cmd), APPEND_KEY, PGPNAME, pgpopts, keyfile, buf);
-
+	sh_format(cmd, sizeof(cmd), APPEND_KEY);
 	if (invoke_cmd(cmd)) {
 		if ((fp = fopen(file, "a")) != NULL) {
 			if ((key = fopen(keyfile, "r")) != NULL) {
@@ -334,7 +341,7 @@ invoke_pgp_mail(
 {
 	char keyboth[MAXKEYLEN], keyencrypt[MAXKEYLEN], keyquit[MAXKEYLEN];
 	char keysign[MAXKEYLEN];
-	t_function func, default_func = PGP_SIGN;
+	t_function func, default_func = PGP_KEY_SIGN;
 
 	if (!pgp_available())
 		return;
@@ -345,16 +352,12 @@ invoke_pgp_mail(
 			printascii(keyboth, func_to_key(PGP_KEY_ENCRYPT_SIGN, pgp_mail_keys)),
 			printascii(keyquit, func_to_key(GLOBAL_QUIT, pgp_mail_keys)));
 	switch (func) {
-		case GLOBAL_ABORT:
-		case GLOBAL_QUIT:
-			break;
-
 		case PGP_KEY_SIGN:
 #ifdef HAVE_PGPK
 			ClearScreen();
 			MoveCursor(cLINES - 7, 0);
 #endif /* HAVE_PGPK */
-			do_pgp(PGP_SIGN, nam, NULL);
+			do_pgp(func, nam, NULL);
 			break;
 
 		case PGP_KEY_ENCRYPT_SIGN:
@@ -362,13 +365,15 @@ invoke_pgp_mail(
 			ClearScreen();
 			MoveCursor(cLINES - 7, 0);
 #endif /* HAVE_PGPK */
-			do_pgp(PGP_SIGN | PGP_ENCRYPT, nam, mail_to);
+			do_pgp(func, nam, mail_to);
 			break;
 
 		case PGP_KEY_ENCRYPT:
-			do_pgp(PGP_ENCRYPT, nam, mail_to);
+			do_pgp(func, nam, mail_to);
 			break;
 
+		case GLOBAL_ABORT:
+		case GLOBAL_QUIT:
 		default:
 			break;
 	}
@@ -380,7 +385,7 @@ invoke_pgp_news(
 	char *artfile)
 {
 	char keyinclude[MAXKEYLEN], keyquit[MAXKEYLEN], keysign[MAXKEYLEN];
-	t_function func, default_func = PGP_SIGN;
+	t_function func, default_func = PGP_KEY_SIGN;
 
 	if (!pgp_available())
 		return;
@@ -400,7 +405,7 @@ invoke_pgp_news(
 			MoveCursor(cLINES - 7, 0);
 			my_printf("\n");
 #endif /* HAVE_PGPK */
-			do_pgp(PGP_SIGN, artfile, NULL);
+			do_pgp(func, artfile, NULL);
 			break;
 
 		case PGP_INCLUDE_KEY:
@@ -409,7 +414,7 @@ invoke_pgp_news(
 			MoveCursor(cLINES - 7, 0);
 			my_printf("\n");
 #endif /* HAVE_PGPK */
-			do_pgp(PGP_SIGN, artfile, NULL);
+			do_pgp(PGP_KEY_SIGN, artfile, NULL);
 			pgp_append_public_key(artfile);
 			break;
 
@@ -470,6 +475,7 @@ pgp_check_article(
 		Raw(TRUE);
 	}
 
+	prompt_continue();
 	if (pgp_key) {
 		if (prompt_yn(_(txt_pgp_add), FALSE) == 1) {
 			Raw(FALSE);
@@ -481,7 +487,6 @@ pgp_check_article(
 		}
 	}
 
-	prompt_continue();
 	unlink(artfile);
 	return TRUE;
 }
diff -Nurp tin-1.7.8/src/pgp.c.o tin-1.7.9/src/pgp.c.o
--- tin-1.7.8/src/pgp.c.o	1970-01-01 01:00:00.000000000 +0100
+++ tin-1.7.9/src/pgp.c.o	2005-06-28 10:31:23.445691250 +0200
@@ -0,0 +1,488 @@
+/*
+ *  Project   : tin - a Usenet reader
+ *  Module    : pgp.c
+ *  Author    : Steven J. Madsen
+ *  Created   : 1995-05-12
+ *  Updated   : 2005-02-12
+ *  Notes     : PGP support
+ *
+ * Copyright (c) 1995-2005 Steven J. Madsen <steve@erinet.com>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. The name of the author may not be used to endorse or promote
+ *    products derived from this software without specific prior written
+ *    permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
+ * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
+ * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#ifndef TIN_H
+#	include "tin.h"
+#endif /* !TIN_H */
+
+#ifdef HAVE_PGP_GPG
+#	ifndef TCURSES_H
+#		include "tcurses.h"
+#	endif /* !TCURSES_H */
+#	ifndef KEYMAP_H
+#		include "keymap.h"
+#	endif /* !KEYMAP_H */
+
+
+/*
+ * The first two args are typically the PGP command name and then $PGPOPTS
+ * NB: The '1' variations on DO_{SIGN,BOTH} are used when local-user name is
+ * used and are valid only when signing
+ */
+#	if defined(HAVE_PGP) /* pgp-2 */
+#		define PGPNAME		PATH_PGP
+#		define PGPDIR		".pgp"
+#		define PGP_PUBRING	"pubring.pgp"
+#		define CHECK_SIGN	"%s %s -f <%s %s"
+#		define ADD_KEY		"%s %s -ka %s"
+#		define APPEND_KEY	"%s %s -kxa %s %s"
+#		define DO_ENCRYPT	"%s %s -ate %s %s", PGPNAME, pgpopts, pt, mailto
+#		define DO_SIGN		"%s %s -ats %s %s", PGPNAME, pgpopts, pt, mailto
+#		define DO_SIGN1		"%s %s -ats %s %s -u %s", PGPNAME, pgpopts, pt, mailto, mailfrom
+#		define DO_BOTH		"%s %s -ates %s %s", PGPNAME, pgpopts, pt, mailto
+#		define DO_BOTH1		"%s %s -ates %s %s -u %s", PGPNAME, pgpopts, pt, mailto, mailfrom
+#	endif /* HAVE_PGP */
+
+#	if defined(HAVE_PGPK) /* pgp-5 */
+#		define PGPNAME		"pgp"	/* FIXME: this is AFAIK not PATH_PGPK */
+#		define PGPDIR		".pgp"
+#		define PGP_PUBRING	"pubring.pkr"
+#		define CHECK_SIGN	"%sv %s -f <%s %s"
+#		define ADD_KEY		"%sk %s -a %s"
+#		define APPEND_KEY	"%sk %s -xa %s -o %s"
+#		define DO_ENCRYPT	"%se %s -at %s %s", PGPNAME, pgpopts, pt, mailto
+#		define DO_SIGN		"%ss %s -at %s %s", PGPNAME, pgpopts, pt, mailto
+#		define DO_SIGN1		"%ss %s -at %s %s -u %s", PGPNAME, pgpopts, pt, mailto, mailfrom
+#		define DO_BOTH		"%se %s -ats %s %s", PGPNAME, pgpopts, pt, mailto
+#		define DO_BOTH1		"%se %s -ats %s %s -u %s", PGPNAME, pgpopts, pt, mailto, mailfrom
+#	endif /* HAVE_PGPK */
+
+#	if defined(HAVE_GPG) /* gpg */
+#		define PGPNAME		PATH_GPG
+#		define PGPDIR		".gnupg"
+#		define PGP_PUBRING	"pubring.gpg"
+#		define CHECK_SIGN	"%s %s --no-batch --decrypt <%s %s"
+#		define ADD_KEY		"%s %s --no-batch --import %s"
+#		define APPEND_KEY	"%s %s --no-batch --armor --output %s --export %s"
+/* #		define LOCAL_USER	"--local-user %s" */
+#		define DO_ENCRYPT	\
+"%s %s --textmode --armor --no-batch --output %s.asc --recipient %s --encrypt %s", \
+PGPNAME, pgpopts, pt, mailto, pt
+#		define DO_SIGN		\
+"%s %s --textmode --armor --no-batch --output %s.asc --escape-from --clearsign %s", \
+PGPNAME, pgpopts, pt, pt
+#		define DO_SIGN1		\
+"%s %s --textmode --armor --no-batch --local-user %s --output %s.asc --escape-from --clearsign %s", \
+PGPNAME, pgpopts, mailfrom, pt, pt
+#		define DO_BOTH		\
+"%s %s --textmode --armor --no-batch --output %s.asc --recipient %s --sign --encrypt %s", \
+PGPNAME, pgpopts, pt, mailto, pt
+#		define DO_BOTH1		\
+"%s %s --textmode --armor --no-batch --output %s.asc --recipient %s --local-user %s --sign --encrypt %s", \
+PGPNAME, pgpopts, pt, mailto, mailfrom, pt
+#	endif /* HAVE_GPG */
+
+#	define PGP_SIG_TAG "-----BEGIN PGP SIGNED MESSAGE-----\n"
+#	define PGP_KEY_TAG "-----BEGIN PGP PUBLIC KEY BLOCK-----\n"
+
+#	define HEADERS	"%stin-%d.h"
+#	ifdef HAVE_LONG_FILE_NAMES
+#		define PLAINTEXT	"%stin-%d.pt"
+#		define CIPHERTEXT	"%stin-%d.pt.asc"
+#		define KEYFILE		"%stin-%d.k.asc"
+#	else
+#		define PLAINTEXT	"%stn-%d.p"
+#		define CIPHERTEXT	"%stn-%d.p.asc"
+#		define KEYFILE		"%stn-%d.k.asc"
+#	endif /* HAVE_LONG_FILE_NAMES */
+
+
+#	define PGP_SIGN 0x01
+#	define PGP_ENCRYPT 0x02
+
+/*
+ * local prototypes
+ */
+static t_bool pgp_available(void);
+static void do_pgp(int what, const char *file, const char *mail_to);
+static void join_files(const char *file);
+static void pgp_append_public_key(char *file);
+static void split_file(const char *file);
+
+static char pgp_data[PATH_LEN];
+static char hdr[PATH_LEN], pt[PATH_LEN], ct[PATH_LEN];
+static const char *pgpopts = "";
+
+
+void
+init_pgp(
+	void)
+{
+	char *ptr;
+
+	pgpopts = get_val("PGPOPTS", "");
+
+#ifdef HAVE_GPG
+	if ((ptr = getenv("GNUPGHOME")) != NULL)
+		my_strncpy(pgp_data, ptr, sizeof(pgp_data) - 1);
+	else
+#endif /* HAVE_GPG */
+	{
+		if ((ptr = getenv("PGPPATH")) != NULL)
+			my_strncpy(pgp_data, ptr, sizeof(pgp_data) - 1);
+		else
+			joinpath(pgp_data, homedir, PGPDIR);
+	}
+}
+
+
+/*
+ * Write the header file then the ciphertext file to the art file
+ * This function is void, no way to return errs
+ */
+static void
+join_files(
+	const char *file)
+{
+	FILE *art, *header, *text;
+
+	if ((header = fopen(hdr, "r")) != NULL) {
+		if ((text = fopen(ct, "r")) != NULL) {
+			if ((art = fopen(file, "w")) != NULL) {
+				if (copy_fp(header, art))
+					copy_fp(text, art);
+				fclose(art);
+			}
+			fclose(text);
+		}
+		fclose(header);
+	}
+
+	unlink(hdr);
+	unlink(pt);
+	unlink(ct);
+}
+
+
+/*
+ * Split the file parameter into a header file 'hdr' and a plaintext
+ * file 'pt'
+ */
+static void
+split_file(
+	const char *file)
+{
+	FILE *art, *header, *plaintext;
+	char buf[LEN];
+	mode_t mask;
+
+	snprintf(hdr, sizeof(hdr), HEADERS, TMPDIR, process_id);
+	snprintf(pt, sizeof(pt), PLAINTEXT, TMPDIR, process_id);
+	snprintf(ct, sizeof(ct), CIPHERTEXT, TMPDIR, process_id);
+
+	if ((art = fopen(file, "r")) == NULL)
+		return;
+
+	mask = umask((mode_t) (S_IRWXO|S_IRWXG));
+
+	if ((header = fopen(hdr, "w")) == NULL)
+		goto err_art;
+
+	if ((plaintext = fopen(pt, "w")) == NULL)
+		goto err_hdr;
+
+	fgets(buf, LEN, art);			/* Copy the hdr up to and including the \n */
+	while (strcmp(buf, "\n")) {
+		fputs(buf, header);
+		fgets(buf, LEN, art);
+	}
+	fputs(buf, header);
+	copy_fp(art, plaintext);
+
+	fclose(plaintext);
+err_hdr:
+	fclose(header);
+err_art:
+	fclose(art);
+	umask(mask);
+}
+
+
+static void
+do_pgp(
+	int what,
+	const char *file,
+	const char *mail_to)
+{
+	char cmd[LEN];
+	char mailfrom[LEN];
+	const char *mailto = BlankIfNull(mail_to);
+
+	mailfrom[0] = '\0';
+
+	split_file(file);
+
+	/*
+	 * <mailfrom> is valid only when signing and a local address exists
+	 */
+	if (what & PGP_SIGN) {
+		if ((CURR_GROUP.attribute->from) != NULL)
+			strip_name(CURR_GROUP.attribute->from, mailfrom);
+		if (strlen(mailfrom)) {
+			if (what & PGP_ENCRYPT)
+				sh_format(cmd, sizeof(cmd), DO_BOTH1);
+			else
+				sh_format(cmd, sizeof(cmd), DO_SIGN1);
+		} else {
+			if (what & PGP_ENCRYPT)
+				sh_format(cmd, sizeof(cmd), DO_BOTH);
+			else
+				sh_format(cmd, sizeof(cmd), DO_SIGN);
+		}
+	} else
+		sh_format(cmd, sizeof(cmd), DO_ENCRYPT);
+
+	invoke_cmd(cmd);
+	join_files(file);
+}
+
+
+static void
+pgp_append_public_key(
+	char *file)
+{
+	FILE *fp, *key;
+	char keyfile[PATH_LEN], cmd[LEN], buf[LEN];
+
+	if ((CURR_GROUP.attribute->from) != NULL && strlen(CURR_GROUP.attribute->from))
+		strip_name(CURR_GROUP.attribute->from, buf);
+	else
+		snprintf(buf, sizeof(buf), "%s@%s", userid, BlankIfNull(get_host_name()));
+
+	snprintf(keyfile, sizeof(keyfile), KEYFILE, TMPDIR, process_id);
+
+/*
+ * TODO: I'm guessing the pgp append key command creates 'keyfile' and that
+ * we should remove it
+ */
+	sh_format(cmd, sizeof(cmd), APPEND_KEY, PGPNAME, pgpopts, keyfile, buf);
+
+	if (invoke_cmd(cmd)) {
+		if ((fp = fopen(file, "a")) != NULL) {
+			if ((key = fopen(keyfile, "r")) != NULL) {
+				fputc('\n', fp);			/* Add a blank line */
+				copy_fp(key, fp);			/* and copy in the key */
+				fclose(key);
+			}
+			fclose(fp);
+		}
+		unlink(keyfile);
+	}
+	return;
+}
+
+
+/*
+ * Simply check for existence of keyring file
+ */
+static t_bool
+pgp_available(
+	void)
+{
+	FILE *fp;
+	char keyring[PATH_LEN];
+
+	joinpath(keyring, pgp_data, PGP_PUBRING);
+	if ((fp = fopen(keyring, "r")) == NULL) {
+		wait_message(2, _(txt_pgp_not_avail), keyring);
+		return FALSE;
+	}
+
+	fclose(fp);
+	return TRUE;
+}
+
+
+void
+invoke_pgp_mail(
+	const char *nam,
+	char *mail_to)
+{
+	char keyboth[MAXKEYLEN], keyencrypt[MAXKEYLEN], keyquit[MAXKEYLEN];
+	char keysign[MAXKEYLEN];
+	t_function func, default_func = PGP_SIGN;
+
+	if (!pgp_available())
+		return;
+
+	func = prompt_slk_response(default_func, pgp_mail_keys, _(txt_pgp_mail),
+			printascii(keyencrypt, func_to_key(PGP_KEY_ENCRYPT, pgp_mail_keys)),
+			printascii(keysign, func_to_key(PGP_KEY_SIGN, pgp_mail_keys)),
+			printascii(keyboth, func_to_key(PGP_KEY_ENCRYPT_SIGN, pgp_mail_keys)),
+			printascii(keyquit, func_to_key(GLOBAL_QUIT, pgp_mail_keys)));
+	switch (func) {
+		case GLOBAL_ABORT:
+		case GLOBAL_QUIT:
+			break;
+
+		case PGP_KEY_SIGN:
+#ifdef HAVE_PGPK
+			ClearScreen();
+			MoveCursor(cLINES - 7, 0);
+#endif /* HAVE_PGPK */
+			do_pgp(PGP_SIGN, nam, NULL);
+			break;
+
+		case PGP_KEY_ENCRYPT_SIGN:
+#ifdef HAVE_PGPK
+			ClearScreen();
+			MoveCursor(cLINES - 7, 0);
+#endif /* HAVE_PGPK */
+			do_pgp(PGP_SIGN | PGP_ENCRYPT, nam, mail_to);
+			break;
+
+		case PGP_KEY_ENCRYPT:
+			do_pgp(PGP_ENCRYPT, nam, mail_to);
+			break;
+
+		default:
+			break;
+	}
+}
+
+
+void
+invoke_pgp_news(
+	char *artfile)
+{
+	char keyinclude[MAXKEYLEN], keyquit[MAXKEYLEN], keysign[MAXKEYLEN];
+	t_function func, default_func = PGP_SIGN;
+
+	if (!pgp_available())
+		return;
+
+	func = prompt_slk_response(default_func, pgp_news_keys, _(txt_pgp_news),
+				printascii(keysign, func_to_key(PGP_KEY_SIGN, pgp_news_keys)),
+				printascii(keyinclude, func_to_key(PGP_INCLUDE_KEY, pgp_news_keys)),
+				printascii(keyquit, func_to_key(GLOBAL_QUIT, pgp_news_keys)));
+	switch (func) {
+		case GLOBAL_ABORT:
+		case GLOBAL_QUIT:
+			break;
+
+		case PGP_KEY_SIGN:
+#ifdef HAVE_PGPK
+			info_message(" ");
+			MoveCursor(cLINES - 7, 0);
+			my_printf("\n");
+#endif /* HAVE_PGPK */
+			do_pgp(PGP_SIGN, artfile, NULL);
+			break;
+
+		case PGP_INCLUDE_KEY:
+#ifdef HAVE_PGPK
+			info_message(" ");
+			MoveCursor(cLINES - 7, 0);
+			my_printf("\n");
+#endif /* HAVE_PGPK */
+			do_pgp(PGP_SIGN, artfile, NULL);
+			pgp_append_public_key(artfile);
+			break;
+
+		default:
+			break;
+	}
+}
+
+
+t_bool
+pgp_check_article(
+	t_openartinfo *artinfo)
+{
+	FILE *art;
+	char artfile[PATH_LEN], buf[LEN], cmd[LEN];
+	t_bool pgp_signed = FALSE;
+	t_bool pgp_key = FALSE;
+
+	if (!pgp_available())
+		return FALSE;
+
+	joinpath(artfile, homedir, TIN_ARTICLE_NAME);
+#	ifdef APPEND_PID
+	snprintf(artfile + strlen(artfile), sizeof(artfile) - strlen(artfile), ".%d", (int) process_id);
+#	endif /* APPEND_PID */
+	if ((art = fopen(artfile, "w")) == NULL) {
+		info_message(_(txt_cannot_open), artfile);
+		return FALSE;
+	}
+	fseek(artinfo->raw, artinfo->hdr.ext->offset, SEEK_SET);		/* -> start of body */
+
+	fgets(buf, LEN, artinfo->raw);		/* Copy the body whilst looking for SIG/KEY tags */
+	while (!feof(artinfo->raw)) {
+		if (!pgp_signed && !strcmp(buf, PGP_SIG_TAG))
+			pgp_signed = TRUE;
+		if (!pgp_key && !strcmp(buf, PGP_KEY_TAG))
+			pgp_key = TRUE;
+		fputs(buf, art);
+		fgets(buf, LEN, artinfo->raw);
+	}
+	fclose(art);
+
+	if (!(pgp_signed || pgp_key)) {
+		info_message(_(txt_pgp_nothing));
+		return FALSE;
+	}
+	ClearScreen();
+
+	if (pgp_signed) {
+		Raw(FALSE);
+
+		/*
+		 * We don't use sh_format here else the redirection get misquoted
+		 */
+		snprintf(cmd, sizeof(cmd), CHECK_SIGN, PGPNAME, pgpopts, artfile, REDIRECT_PGP_OUTPUT);
+		invoke_cmd(cmd);
+		my_printf("\n");
+		Raw(TRUE);
+	}
+
+	if (pgp_key) {
+		if (prompt_yn(_(txt_pgp_add), FALSE) == 1) {
+			Raw(FALSE);
+
+			sh_format(cmd, sizeof(cmd), ADD_KEY, PGPNAME, pgpopts, artfile);
+			invoke_cmd(cmd);
+			my_printf("\n");
+			Raw(TRUE);
+		}
+	}
+
+	prompt_continue();
+	unlink(artfile);
+	return TRUE;
+}
+#endif /* HAVE_PGP_GPG */
diff -Nurp tin-1.7.8/src/post.c tin-1.7.9/src/post.c
--- tin-1.7.8/src/post.c	2005-03-04 14:54:39.000000000 +0100
+++ tin-1.7.9/src/post.c	2005-06-28 10:31:22.091940465 +0200
@@ -3,7 +3,7 @@
  *  Module    : post.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-04
+ *  Updated   : 2005-06-21
  *  Notes     : mail/post/replyto/followup/repost & cancel articles
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -115,7 +115,6 @@
 /* When prompting for subject, display no more than 20 characters */
 #define DISPLAY_SUBJECT_LEN 20
 
-extern char article[PATH_LEN];			/* Fixed path of the file holding temp. article */
 static int start_line_offset = 1;		/* used by invoke_editor for line no. */
 
 char bug_addr[LEN];			/* address to add send bug reports to */
@@ -283,7 +282,7 @@ repair_article(
 
 	*result = func;
 	if (func == POST_EDIT) {
-		if (invoke_editor(article, start_line_offset))
+		if (invoke_editor(article_name, start_line_offset))
 			return TRUE;
 	} else if (func == GLOBAL_OPTION_MENU) {
 		(void) change_config_file(group); /*OD:*/
@@ -350,7 +349,7 @@ msg_add_header(
 {
 	const char *p;
 	char *ptr;
-	char *new_name = NULL;
+	char *new_name;
 	char *new_text = NULL;
 	int i;
 	t_bool done = FALSE;
@@ -759,6 +758,7 @@ check_article_to_be_posted(
 	t_bool mime_7bit = TRUE;
 	t_bool mime_usascii = FALSE;
 	t_bool contains_8bit = FALSE;
+	int must_break_line = 0;
 #ifdef CHARSET_CONVERSION
 	t_bool charset_conversion_fails = FALSE;
 	int mmnwcharset = *group ? (*group)->attribute->mm_network_charset : tinrc.mm_network_charset;
@@ -907,8 +907,17 @@ check_article_to_be_posted(
 		}
 
 		if (cp - line == 10 && !strncasecmp(line, "Message-ID", 10)) {
+#if 0 /* see comment about "<>" in misc.c:gnksa_split_from() */
+			char addr[HEADER_LEN], name[HEADER_LEN];
+			int type;
+
+			i = gnksa_check_from(cp + 1);
+			gnksa_split_from(cp + 1, addr, name, &type);
+			if (((GNKSA_OK != i) && (GNKSA_LOCALPART_MISSING > i)) || !*addr) {
+#else
 			i = gnksa_check_from(cp + 1);
 			if ((GNKSA_OK != i) && (GNKSA_LOCALPART_MISSING > i)) {
+#endif /* 0 */
 				setup_check_article_screen(&init);
 				StartInverse();
 				my_fprintf(stderr, _(txt_error_bad_msgidfqdn), i);
@@ -1067,9 +1076,9 @@ check_article_to_be_posted(
 	if (found_newsgroups_lines > 1)
 		errors_catbp |= CA_ERROR_DUPLICATED_NEWSGROUPS;
 
-	if (!found_subject_lines) {
+	if (!found_subject_lines)
 		errors_catbp |= CA_ERROR_MISSING_SUBJECT;
-	} else {
+	else {
 		if (found_subject_lines > 1)
 			errors_catbp |= CA_ERROR_DUPLICATED_SUBJECT;
 	}
@@ -1127,36 +1136,32 @@ check_article_to_be_posted(
 			got_long_line = TRUE;
 			warnings++;
 		}
-#if 0 /* disabled till 1.7.x */
+		if (strlen(line) > 998 && !must_break_line)
+			must_break_line = cnt;
+	}
+
+#if 1
 /*
- * TODO: cleanup, test me, move to the right location (after testing the
- *       whole body for 8bit chars), adjust and translate warings, ...
+ * TODO: cleanup, test me, move to the right location, strings -> lang.c, ...
  */
-		if (strlen(line) > 998 && strcasecmp(txt_mime_encodings[tinrc.post_mime_encoding], txt_base64)) {
-			setup_check_article_screen(&init);
+	if (must_break_line && strcasecmp(txt_mime_encodings[tinrc.post_mime_encoding], txt_base64)) {
+		setup_check_article_screen(&init);
 #	ifdef MIME_BREAK_LONG_LINES
-			if (contains_8bit) { /* we only know if the body contained 8bits till this line, that is not 100% correct */
-				if (strcasecmp(txt_mime_encodings[tinrc.post_mime_encoding], txt_quoted_printable)) {
-					my_fprintf(stderr, "Line %d is longer than 998 octets and should be folded, but\n", cnt);
-					my_fprintf(stderr, "encoding is neither set to %s nor to %s\n", txt_quoted_printable, txt_base64);
-				}
-			} else
+		if (contains_8bit) {
+			if (strcasecmp(txt_mime_encodings[tinrc.post_mime_encoding], txt_quoted_printable))
+				my_fprintf(stderr, _("Line %d is longer than 998 octets and should be folded, but\nencoding is neither set to %s nor to %s\n"), must_break_line, txt_quoted_printable, txt_base64);
+		} else
 #	endif /* MIME_BREAK_LONG_LINES */
-			{
-				if (!strcasecmp(txt_mime_encodings[tinrc.post_mime_encoding], txt_quoted_printable)) {
-					my_fprintf(stderr, "Line %d is longer than 998 octets, and should be folded, but\n", cnt);
-					my_fprintf(stderr, "encoding is set to %s without enabling MIME_BREAK_LONG_LINES or\n", txt_quoted_printable);
-					my_fprintf(stderr, "posting doesn't contain any 8bit chars and thus folding won't happen\n");
-				} else {
-					my_fprintf(stderr, "Line %d is longer than 998 octets, and should be folded, but\n", cnt);
-					my_fprintf(stderr, "encoding is not set to %s\n", txt_base64);
-				}
-			}
+		{
+			if (!strcasecmp(txt_mime_encodings[tinrc.post_mime_encoding], txt_quoted_printable))
+				my_fprintf(stderr, _("Line %d is longer than 998 octets, and should be folded, but\nencoding is set to %s without enabling MIME_BREAK_LONG_LINES or\nposting doesn't contain any 8bit chars and thus folding won't happen\n"), must_break_line, txt_quoted_printable);
+			else
+				my_fprintf(stderr, _("Line %d is longer than 998 octets, and should be folded, but\nencoding is not set to %s\n"), must_break_line, txt_base64);
+		}
 		my_fflush(stderr);
 		warnings++;
-		}
-#endif /* 0 */
 	}
+#endif /* 1 */
 
 	if (saw_sig_dashes > 1)
 		warnings_catbp |= CA_WARNING_MULTIPLE_SIGDASHES;
@@ -1449,14 +1454,14 @@ post_loop(
 	int type,				/* type of posting */
 	struct t_group *group,
 	t_function func,
-	const char *posting_msg,/* displayed just prior to article submission */
+	const char *posting_msg, /* displayed just prior to article submission */
 	int art_type,			/* news, mail etc. */
 	int offset)				/* editor start offset */
 {
 	char a_message_id[HEADER_LEN];	/* Message-ID of the article if known */
 	int ret_code = POSTED_NONE;
 	int i = 1;
-	long artchanged = 0L;		/* artchanged work was not done in post_postponed_article */
+	long artchanged;		/* artchanged work was not done in post_postponed_article */
 	struct t_group *ogroup = curr_group;
 	t_bool art_unchanged;
 
@@ -1471,12 +1476,12 @@ post_article_loop:
 				 * This was VERY different in repost_article Code existed to
 				 * recheck subject and restart editor, but is not enabled
 				 */
-				artchanged = file_mtime(article);
-				if (!invoke_editor(article, offset)) {
-					if (file_size(article) > 0L) {
-						if (artchanged != file_mtime(article)) {
-							unlink(backup_article_name(article));
-							rename_file(article, dead_article);
+				artchanged = file_mtime(article_name);
+				if (!invoke_editor(article_name, offset)) {
+					if (file_size(article_name) > 0L) {
+						if (artchanged != file_mtime(article_name)) {
+							unlink(backup_article_name(article_name));
+							rename_file(article_name, dead_article);
 							if (tinrc.keep_dead_articles)
 								append_file(dead_articles, dead_article);
 						}
@@ -1486,10 +1491,10 @@ post_article_loop:
 				ret_code = POSTED_REDRAW;
 
 				/* This might be erroneous with posting postponed */
-				if (file_size(article) > 0L) {
-					if (artchanged == file_mtime(article))
+				if (file_size(article_name) > 0L) {
+					if (artchanged == file_mtime(article_name))
 						art_unchanged = TRUE;
-					while ((i = check_article_to_be_posted(article, art_type, &group, art_unchanged)) == 1 && repair_article(&func, group))
+					while ((i = check_article_to_be_posted(article_name, art_type, &group, art_unchanged)) == 1 && repair_article(&func, group))
 						;
 					if (func == POST_EDIT || func == GLOBAL_OPTION_MENU)
 						break;
@@ -1503,58 +1508,58 @@ post_article_loop:
 					if (tinrc.keep_dead_articles)
 						append_file(dead_articles, dead_article);
 #endif /* 0 */
-					unlink(article);
+					unlink(article_name);
 				}
 				clear_message();
 				return ret_code;
 
 			case GLOBAL_OPTION_MENU:
 				(void) change_config_file(group);
-				while ((i = check_article_to_be_posted(article, art_type, &group, art_unchanged) == 1) && repair_article(&func, group))
+				while ((i = check_article_to_be_posted(article_name, art_type, &group, art_unchanged) == 1) && repair_article(&func, group))
 					;
 				break;
 
 #ifdef HAVE_ISPELL
 			case POST_ISPELL:
-				invoke_ispell(article, group);
+				invoke_ispell(article_name, group);
 				ret_code = POSTED_REDRAW; /* not all versions did this */
 				break;
 #endif /* HAVE_ISPELL */
 
 #ifdef HAVE_PGP_GPG
 			case POST_PGP:
-				invoke_pgp_news(article);
+				invoke_pgp_news(article_name);
 				break;
 #endif /* HAVE_PGP_GPG */
 
 			case GLOBAL_POST:
 				wait_message(0, posting_msg);
-				backup_article(article);
+				backup_article(article_name);
 
 				/* Functions that didn't handle mail didn't do this */
 				if (art_type == GROUP_TYPE_NEWS) {
-					if (submit_news_file(article, group, a_message_id))
+					if (submit_news_file(article_name, group, a_message_id))
 						ret_code = POSTED_OK;
 				} else {
-					if (submit_mail_file(article, group, NULL, FALSE)) /* mailing_list */
+					if (submit_mail_file(article_name, group, NULL, FALSE)) /* mailing_list */
 						ret_code = POSTED_OK;
 				}
 
 				if (ret_code == POSTED_OK) {
-					unlink(backup_article_name(article));
+					unlink(backup_article_name(article_name));
 					wait_message(2, _(txt_art_posted), *a_message_id ? a_message_id : "");
 					goto post_article_done;
 				} else {
 					if ((func = prompt_rejected()) == POST_POSTPONE)
 						/* reuse clean copy which didn't get modified by submit_news_file() */
-						postpone_article(backup_article_name(article));
+						postpone_article(backup_article_name(article_name));
 					else if (func == POST_EDIT) {
 						/* replace modified article with clean backup */
-						rename_file(backup_article_name(article), article);
+						rename_file(backup_article_name(article_name), article_name);
 						goto post_article_loop;
 					} else {
-						unlink(backup_article_name(article));
-						rename_file(article, dead_article);
+						unlink(backup_article_name(article_name));
+						rename_file(article_name, dead_article);
 						if (tinrc.keep_dead_articles)
 							append_file(dead_articles, dead_article);
 						wait_message(2, _(txt_art_rejected), dead_article);
@@ -1563,7 +1568,7 @@ post_article_loop:
 				}
 
 			case POST_POSTPONE:
-				postpone_article(article);
+				postpone_article(article_name);
 				goto post_article_postponed;
 
 			default:
@@ -1634,8 +1639,8 @@ post_article_done:
 
 		memset(&header, 0, sizeof(struct t_header));
 
-		if ((art_fp = fopen(article, "r")) == NULL)
-			perror_message(_(txt_cannot_open), article);
+		if ((art_fp = fopen(article_name, "r")) == NULL)
+			perror_message(_(txt_cannot_open), article_name);
 		else {
 			curr_group = group;
 			parse_rfc822_headers(&header, art_fp, NULL);
@@ -1711,10 +1716,10 @@ post_article_done:
 			 * log Message-ID if given in a_message_id,
 			 * add Date:, remove empty headers
 			 */
-			add_headers(article, a_message_id);
+			add_headers(article_name, a_message_id);
 			if (!strfpath(posted_msgs_file, a_mailbox, sizeof(a_mailbox), group))
 				STRCPY(a_mailbox, posted_msgs_file);
-			if (!append_mail(article, userid, a_mailbox)) {
+			if (!append_mail(article_name, userid, a_mailbox)) {
 				/* TODO: error message */
 			}
 		}
@@ -1724,7 +1729,7 @@ post_article_done:
 post_article_postponed:
 	curr_group = ogroup;
 	if (tinrc.unlink_article)
-		unlink(article);
+		unlink(article_name);
 
 	return ret_code;
 }
@@ -1838,8 +1843,8 @@ create_normal_article_headers(
 	free(prompt);
 	free(tmp2);
 
-	if ((fp = fopen(article, "w")) == NULL) {
-		perror_message(_(txt_cannot_open), article);
+	if ((fp = fopen(article_name, "w")) == NULL) {
+		perror_message(_(txt_cannot_open), article_name);
 		return FALSE;
 	}
 
@@ -1953,9 +1958,9 @@ post_postponed_article(
 	const char *subject,
 	const char *newsgroups)
 {
-	char buf[LEN];
 	char *ng;
 	char *p;
+	char buf[LEN];
 
 	if (!can_post) {
 		info_message(_(txt_cannot_post));
@@ -2128,7 +2133,7 @@ pickup_postponed_articles(
 		return FALSE;
 
 	for (i = 0; i < count; i++) {
-		if (!fetch_postponed_article(article, subject, newsgroups))
+		if (!fetch_postponed_article(article_name, subject, newsgroups))
 			return TRUE;
 
 		if (!all) {
@@ -2166,12 +2171,13 @@ pickup_postponed_articles(
 			case PROMPT_NO:
 			case GLOBAL_QUIT:
 			case GLOBAL_ABORT:
-				if (!append_mail(article, userid, postponed_articles_file)) {
+				if (!append_mail(article_name, userid, postponed_articles_file)) {
 					/* TODO: : error -message */
 				}
-				unlink(article);
+				unlink(article_name);
 				if (func != PROMPT_NO)
 					return TRUE;
+				break;
 
 			default:
 				break;
@@ -2546,8 +2552,8 @@ post_response(
 		}
 	}
 
-	if ((fp = fopen(article, "w")) == NULL) {
-		perror_message(_(txt_cannot_open), article);
+	if ((fp = fopen(article_name, "w")) == NULL) {
+		perror_message(_(txt_cannot_open), article_name);
 		return ret_code;
 	}
 
@@ -2579,11 +2585,10 @@ post_response(
 		} else {
 			msg_add_header("Newsgroups", note_h.newsgroups);
 			if (tinrc.prompt_followupto)
-				msg_add_header("Followup-To",
-				(strchr(note_h.newsgroups, ',') != NULL) ? note_h.newsgroups : "");
-			if (group && group->attribute->followup_to != NULL) {
+				msg_add_header("Followup-To", (strchr(note_h.newsgroups, ',') != NULL) ? note_h.newsgroups : "");
+			if (group && group->attribute->followup_to != NULL)
 				msg_add_header("Followup-To", group->attribute->followup_to);
-			} else {
+			else {
 				if ((ptr = strchr(note_h.newsgroups, ',')))
 					msg_add_header("Followup-To", note_h.newsgroups);
 			}
@@ -2807,7 +2812,7 @@ mail_loop(
 {
 	FILE *fp;
 	int ret = POSTED_NONE;
-	long artchanged = 0L;
+	long artchanged;
 	struct t_header hdr;
 	struct t_group *group = (struct t_group *) 0;
 	t_bool is_changed = FALSE;
@@ -2916,8 +2921,8 @@ add_mail_quote(
 	FILE *fp,
 	int respnum)
 {
-	char buf[HEADER_LEN];
 	char *s;
+	char buf[HEADER_LEN];
 	int line_count = 0;
 
 	if (strfquote(CURR_GROUP.name, respnum, buf, sizeof(buf), tinrc.mail_quote_format)) {
@@ -3040,7 +3045,7 @@ mail_bug_report(
 		DEFAULT_ACTIVE_NUM,
 		DEFAULT_ARTICLE_NUM,
 		tinrc.reread_active_file_secs,
-		bool_unparse(xover_cmd != NULL));
+		bool_unparse(nntp_caps.over_cmd != NULL));
 	fprintf(fp, "CFG2 : debug=%d, threading=%d\n", debug, tinrc.thread_articles);
 	fprintf(fp, "CFG3 : domain=[%s]\n", BlankIfNull(domain));
 	start_line_offset += 4;
@@ -3053,7 +3058,10 @@ mail_bug_report(
 		fprintf(fp, "NNTP2: %s\n", bug_nntpserver2);
 		start_line_offset++;
 	}
-
+	if (nntp_caps.implementation){
+		fprintf(fp, "IMPLE: %s\n", nntp_caps.implementation);
+		start_line_offset++;
+	}
 	fprintf(fp, "\nPlease enter _detailed_ bug report, gripe or comment:\n\n");
 	start_line_offset += 2;
 
@@ -3093,13 +3101,11 @@ mail_to_author(
 	char initials[64];
 	int ret_code = POSTED_NONE;
 	struct t_header note_h = pgart.hdr;
-	t_bool spamtrap_found = FALSE;
 
 	wait_message(0, _(txt_reply_to_author));
 	find_reply_to_addr(from_addr, FALSE, &pgart.hdr);
-	spamtrap_found = check_for_spamtrap(from_addr);
 
-	if (spamtrap_found) {
+	if (check_for_spamtrap(from_addr)) {
 		char keyabort[MAXKEYLEN], keycont[MAXKEYLEN];
 		t_function func;
 
@@ -3559,8 +3565,8 @@ repost_article(
 	if ((group = check_moderated(groupname, &art_type, _(txt_art_not_posted))) == NULL)
 		return ret_code;
 
-	if ((fp = fopen(article, "w")) == NULL) {
-		perror_message(_(txt_cannot_open), article);
+	if ((fp = fopen(article_name, "w")) == NULL) {
+		perror_message(_(txt_cannot_open), article_name);
 		return ret_code;
 	}
 	fchmod(fileno(fp), (mode_t) (S_IRUSR|S_IWUSR));
@@ -3685,7 +3691,7 @@ repost_article(
 	 * on supersede change default-key
 	 *
 	 * FIXME: this is only useful when entering the editor.
-	 * After leaving the editor it should be iKeyPostPost3
+	 * After leaving the editor it should be GLOBAL_POST
 	 */
 	if (Superseding) {
 		default_func = POST_EDIT;
@@ -4464,7 +4470,7 @@ get_recipients(
 {
 	char **to_addresses, **cc_addresses, **bcc_addresses, **all_addresses;
 	char *dest, *src;
-	unsigned int num_to = 0, num_cc = 0, num_bcc = 0, num_all = 0, j = 0, i;
+	unsigned int num_to = 0, num_cc = 0, num_bcc = 0, num_all, j = 0, i;
 
 	/* get individual e-mail addresses from To, Cc and Bcc headers */
 	to_addresses = split_address_list(hdr->to, &num_to);
@@ -4689,7 +4695,7 @@ add_headers(
 	FILE *fp_in;
 	char *line;
 	char outfile[PATH_LEN];
-	int fd_out = -1;
+	int fd_out;
 	t_bool inhdrs = TRUE, writesuccess = TRUE;
 	t_bool addmid = TRUE;
 	t_bool adddate = TRUE;
diff -Nurp tin-1.7.8/src/prompt.c tin-1.7.9/src/prompt.c
--- tin-1.7.8/src/prompt.c	2005-02-12 14:23:40.000000000 +0100
+++ tin-1.7.9/src/prompt.c	2005-06-28 10:31:24.656468358 +0200
@@ -3,7 +3,7 @@
  *  Module    : prompt.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-02-12
+ *  Updated   : 2005-06-21
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -361,7 +361,7 @@ prompt_list(
  */
 t_bool
 prompt_option_on_off(
-	int option)
+	enum option_enum option)
 {
 	char prompt[LEN];
 	t_bool *variable = OPT_ON_OFF_list[option_table[option].var_index];
@@ -378,7 +378,7 @@ prompt_option_on_off(
  */
 t_bool
 prompt_option_list(
-	int option)
+	enum option_enum option)
 {
 	char prompt[LEN];
 	int *variable = option_table[option].variable;
@@ -400,10 +400,10 @@ prompt_option_list(
  */
 t_bool
 prompt_option_string(
-	int option) /* return value is always ignored */
+	enum option_enum option) /* return value is always ignored */
 {
-	char prompt[LEN];
 	char *variable = OPT_STRING_list[option_table[option].var_index];
+	char prompt[LEN];
 
 	show_menu_help(option_table[option].txt->help);
 	fmt_option_prompt(prompt, sizeof(prompt) - 1, TRUE, option);
@@ -421,7 +421,7 @@ prompt_option_string(
  */
 t_bool
 prompt_option_num(
-	int option) /* return value is always ignored */
+	enum option_enum option) /* return value is always ignored */
 {
 	char prompt[LEN];
 	char number[LEN];
@@ -453,7 +453,7 @@ prompt_option_num(
  */
 t_bool
 prompt_option_char(
-	int option) /* return value is always ignored */
+	enum option_enum option) /* return value is always ignored */
 {
 	char prompt[LEN];
 	char input[2];
diff -Nurp tin-1.7.8/src/read.c tin-1.7.9/src/read.c
--- tin-1.7.8/src/read.c	2005-02-12 14:23:50.000000000 +0100
+++ tin-1.7.9/src/read.c	2005-06-28 10:31:22.110936967 +0200
@@ -64,7 +64,7 @@ static int offset = 0;
  */
 static char *tin_read(char *buffer, size_t len, FILE *fp, t_bool header);
 #ifdef NNTP_ABLE
-	static t_bool wait_for_input(void /*FILE *fd*/);
+	static t_bool wait_for_input(void);
 #endif /* NNTP_ABLE */
 
 
@@ -77,7 +77,7 @@ static char *tin_read(char *buffer, size
  */
 static t_bool
 wait_for_input(
-	void /*FILE *fd*/)
+	void)
 {
 #	ifndef HAVE_SELECT
 #		ifdef VMS
@@ -210,7 +210,7 @@ tin_read(
 	partial_read = FALSE;
 
 #ifdef NNTP_ABLE
-	if (wait_for_input(/* fp */)) {			/* Check if okay to read */
+	if (wait_for_input()) {			/* Check if okay to read */
 		info_message(_("Aborting read, please wait..."));
 		drain_buffer(fp);
 		clear_message();
diff -Nurp tin-1.7.8/src/refs.c tin-1.7.9/src/refs.c
--- tin-1.7.8/src/refs.c	2004-12-30 14:33:11.000000000 +0100
+++ tin-1.7.9/src/refs.c	2005-06-28 10:31:22.124934391 +0200
@@ -98,10 +98,10 @@ static struct t_msgid *msgids[MSGID_HASH
  *
  *    When threading on Refs, a much better view of the original thread
  *    can be built up using this data, and threading is much faster
- *	   because all the article relationships are automatically available
- *	   to us.
+ *    because all the article relationships are automatically available
+ *    to us.
  *
- *	  NB: We don't cache msgids from the filter file.
+ * NB: We don't cache msgids from the filter file.
  */
 
 /*
diff -Nurp tin-1.7.8/src/rfc1524.c tin-1.7.9/src/rfc1524.c
--- tin-1.7.8/src/rfc1524.c	2004-12-30 14:33:11.000000000 +0100
+++ tin-1.7.9/src/rfc1524.c	2005-06-28 10:31:22.152929237 +0200
@@ -3,7 +3,7 @@
  *  Module    : rfc1524.c
  *  Author    : Urs Janssen <urs@tin.org>, Jason Faultless <jason@altarstone.com>
  *  Created   : 2000-05-15
- *  Updated   : 2004-11-28
+ *  Updated   : 2005-05-10
  *  Notes     : mailcap parsing as defined in RFC 1524
  *
  * Copyright (c) 2000-2005 Urs Janssen <urs@tin.org>, Jason Faultless <jason@altarstone.com>
@@ -65,7 +65,7 @@ get_mailcap_entry(
 	t_part *part,
 	const char *path)
 {
-	FILE *fp = NULL;
+	FILE *fp;
 	char *ptr, *ptr2, *nptr;
 	char buf[LEN];
 	char filename[LEN];	/* name of current mailcap file */
diff -Nurp tin-1.7.8/src/rfc2045.c tin-1.7.9/src/rfc2045.c
--- tin-1.7.8/src/rfc2045.c	2004-12-30 14:33:11.000000000 +0100
+++ tin-1.7.9/src/rfc2045.c	2005-06-28 10:31:22.165926844 +0200
@@ -3,7 +3,7 @@
  *  Module    : rfc2045.c
  *  Author    : Chris Blum <chris@resolution.de>
  *  Created   : 1995-09-01
- *  Updated   : 2004-11-04
+ *  Updated   : 2005-05-10
  *  Notes     : RFC 2045/2047 encoding
  *
  * Copyright (c) 1995-2005 Chris Blum <chris@resolution.de>
@@ -323,9 +323,9 @@ read_decoded_base64_line(
 {
 	char *buf2;	/* holds the entire decoded line */
 	char *buf;	/* holds the entire encoded line*/
-	int count = 0;
+	int count;
 	int lines_read = 0;
-	int put_chars = 0;
+	int put_chars;
 
 	/*
 	 * First of all, catch everything that is left over from the last decoding.
@@ -437,9 +437,9 @@ read_decoded_qp_line(
 	char *ptr;
 	char c;
 	int buflen = LEN;
-	int count = 0;
+	int count;
 	int lines_read = 0;
-	size_t chars_to_add = 0;
+	size_t chars_to_add;
 
 	buf = my_malloc(buflen); /* initial internal line buffer */
 	*buf = '\0';
diff -Nurp tin-1.7.8/src/rfc2046.c tin-1.7.9/src/rfc2046.c
--- tin-1.7.8/src/rfc2046.c	2004-12-30 14:33:11.000000000 +0100
+++ tin-1.7.9/src/rfc2046.c	2005-06-28 10:31:22.192921875 +0200
@@ -1001,6 +1001,7 @@ dump_uue(
 	}
 }
 
+
 static void
 dump_art(
 	t_openartinfo *art)
diff -Nurp tin-1.7.8/src/save.c tin-1.7.9/src/save.c
--- tin-1.7.8/src/save.c	2005-02-12 14:24:01.000000000 +0100
+++ tin-1.7.9/src/save.c	2005-06-28 10:31:22.247911751 +0200
@@ -3,7 +3,7 @@
  *  Module    : save.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-02-12
+ *  Updated   : 2005-04-28
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -100,10 +100,10 @@ check_start_save_any_news(
 	FILE *artfp, *savefp;
 	FILE *fp_log = (FILE *) 0;
 	char *line;
-	char buf[LEN], logfile[LEN];
+	char buf[LEN];
 	char group_path[PATH_LEN];
 	char path[PATH_LEN];
-	char savefile[PATH_LEN];
+	char logfile[PATH_LEN], savefile[PATH_LEN];
 	char subject[HEADER_LEN];
 	int group_count = 0;
 	int i, j;
@@ -364,6 +364,7 @@ open_save_filename(
 		}
 /* TODO: will this get called every art? Should only be done once/batch */
 /* TODO: or add an option for defaulting on all future queries */
+/* TODO: 'truncate' path if query exceeds screen-width */
 		func = prompt_slk_response((tinrc.default_save_mode == 'a' ? SAVE_APPEND_FILE : SAVE_OVERWRITE_FILE),
 				save_append_overwrite_keys,
 				_(txt_append_overwrite_quit), path,
diff -Nurp tin-1.7.8/src/search.c tin-1.7.9/src/search.c
--- tin-1.7.8/src/search.c	2005-03-07 16:23:52.000000000 +0100
+++ tin-1.7.9/src/search.c	2005-06-28 10:31:25.292351299 +0200
@@ -3,7 +3,7 @@
  *  Module    : search.c
  *  Author    : I. Lea & R. Skrenta
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-07
+ *  Updated   : 2005-06-21
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>, Rich Skrenta <skrenta@pbm.com>
@@ -135,17 +135,16 @@ get_search_pattern(
 /*
  * called by config.c
  */
-int
+enum option_enum
 search_config(
 	t_bool forward,
 	t_bool repeat,
-	int current,
-	int last)
+	enum option_enum current,
+	enum option_enum last)
 {
 	char *pattern, *buf;
-	int n;
-	int incr;
-	int result = current;
+	enum option_enum n = current;
+	enum option_enum result = current;
 
 	if (!(pattern = get_search_pattern(&forward, repeat, _(txt_search_forwards), _(txt_search_backwards), tinrc.default_search_config, HIST_CONFIG_SEARCH)))
 		return result;
@@ -153,16 +152,14 @@ search_config(
 	if (tinrc.wildcard && !(compile_regex(pattern, &search_regex, PCRE_CASELESS)))
 		return result;
 
-	incr = forward ? 1 : -1;
-
-	current += incr;
-	n = current;
 	do {
-		if (n < 0)
+		if (n == 0 && !forward)
 			n = last;
 		else {
-			if (n > last)
+			if (n == last && forward)
 				n = 0;
+			else
+				n += forward ? 1 : -1;
 		}
 		/* search only visible options */
 		if (option_is_visible(n)) {
@@ -180,7 +177,6 @@ search_config(
 			}
 			free(buf);
 		}
-		n += incr;
 	} while (n != current);
 
 	clear_message();
@@ -203,8 +199,8 @@ search_active(
 	t_bool repeat)
 {
 	char *buf;
+	char *ptr;
 	char buf2[LEN];
-	char *ptr = buf2;
 	int i;
 
 	if (!selmenu.max) {
@@ -390,9 +386,9 @@ subject_search(
 	char *buf;
 
 #ifdef HAVE_UNICODE_NORMALIZATION
-	if (IS_LOCAL_CHARSET("UTF-8")) {
+	if (IS_LOCAL_CHARSET("UTF-8"))
 		buf = normalize(arts[i].subject);
-	} else
+	else
 #endif /* HAVE_UNICODE_NORMALIZATION */
 		buf = my_strdup(arts[i].subject);
 
diff -Nurp tin-1.7.8/src/select.c tin-1.7.9/src/select.c
--- tin-1.7.8/src/select.c	2005-03-14 14:09:42.000000000 +0100
+++ tin-1.7.9/src/select.c	2005-06-28 10:31:22.287904389 +0200
@@ -244,10 +244,10 @@ selection_page(
 				}
 				break;
 
-			case SELECT_CATCHUP:			/* catchup - mark all articles as read */
-			case SELECT_CATCHUP_NEXT_UNREAD:	/* and goto next unread group */
+			case CATCHUP:			/* catchup - mark all articles as read */
+			case CATCHUP_NEXT_UNREAD:	/* and goto next unread group */
 				if (selmenu.max)
-					catchup_group(&CURR_GROUP, (func == SELECT_CATCHUP_NEXT_UNREAD));
+					catchup_group(&CURR_GROUP, (func == CATCHUP_NEXT_UNREAD));
 				else
 					info_message(_(txt_no_groups));
 				break;
@@ -814,8 +814,8 @@ int
 choose_new_group(
 	void)
 {
-	int idx;
 	char *prompt;
+	int idx;
 
 	prompt = fmt_string(_(txt_newsgroup), tinrc.default_goto_group);
 
diff -Nurp tin-1.7.8/src/signal.c tin-1.7.9/src/signal.c
--- tin-1.7.8/src/signal.c	2004-12-30 14:33:12.000000000 +0100
+++ tin-1.7.9/src/signal.c	2005-06-28 10:31:24.336527255 +0200
@@ -3,7 +3,7 @@
  *  Module    : signal.c
  *  Author    : I.Lea
  *  Created   : 1991-04-01
- *  Updated   : 2004-03-14
+ *  Updated   : 2004-06-21
  *  Notes     : signal handlers for different modes and window resizing
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -278,7 +278,7 @@ handle_resize(
 			break;
 
 		case cConfig:
-			refresh_config_page(-1);
+			refresh_config_page(SIGNAL_HANDLER);
 			break;
 
 		case cFilter:
diff -Nurp tin-1.7.8/src/string.c tin-1.7.9/src/string.c
--- tin-1.7.8/src/string.c	2005-03-21 01:19:09.000000000 +0100
+++ tin-1.7.9/src/string.c	2005-06-28 10:31:22.340894634 +0200
@@ -3,7 +3,7 @@
  *  Module    : string.c
  *  Author    : Urs Janssen <urs@tin.org>
  *  Created   : 1997-01-20
- *  Updated   : 2005-03-30
+ *  Updated   : 2005-04-16
  *  Notes     :
  *
  * Copyright (c) 1997-2005 Urs Janssen <urs@tin.org>
@@ -73,19 +73,23 @@
 
 /*
  * special ltoa()
- * converts value into a string with a len of digits
- * last char may be one of the following
- * Kilo, Mega, Giga, Terra
+ * converts value into a string with a maxlen of digits (usualy should be
+ * >=4), last char may be one of the following:
+ * Kilo, Mega, Giga, Terra, Peta, Exa, Zetta, Yotta,
+ * Xona, Weka, Vunda, Uda (these last 4 are no official SI-prefixes)
  */
 char *
 tin_ltoa(
 	long value,
 	int digits)
 {
-	static char buffer[256];
-	static const char power[] = " KMGT";
+	static char buffer[64];
+	static const char power[] = { ' ', 'K', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y', 'X', 'W', 'V', 'U', '\0' };
 	int len;
-	int i = 0;
+	size_t i = 0;
+
+	if (digits <= 0)
+		return NULL;
 
 	snprintf(buffer, sizeof(buffer), "%ld", value);
 	len = (int) strlen(buffer);
@@ -95,6 +99,11 @@ tin_ltoa(
 		i++;
 	}
 
+	if (i >= strlen(power)) {
+		buffer[(digits & 0xff)] = '\0';
+		return buffer;
+	}
+
 	if (i) {
 		while (len < (digits - 1))
 			buffer[len++] = ' ';
@@ -564,11 +573,11 @@ sh_format(
 	const char *fmt,
 	...)
 {
-	int result = 0;
 	char *src;
 	char temp[20];
-	va_list ap;
+	int result = 0;
 	int quote = 0;
+	va_list ap;
 
 	va_start(ap, fmt);
 
@@ -724,8 +733,8 @@ char *
 wchar_t2char(
 	const wchar_t *wstr)
 {
-	size_t len;
 	char *str;
+	size_t len;
 
 	len = wcstombs(NULL, wstr, 0);
 	if (len == (size_t) (-1))
@@ -821,6 +830,7 @@ strunc(
 	return tmp;
 }
 
+
 /*
  * if you use UTF-8 as local charset and want to use
  * U+2026 (HORIZONTAL_ELLIPSIS) instead of "..." uncomment
@@ -919,8 +929,8 @@ static char *
 UChar2char(
 	const UChar *ustr)
 {
-	int32_t needed;
 	char *str;
+	int32_t needed;
 	UErrorCode status = U_ZERO_ERROR;
 
 	u_strToUTF8(NULL, 0, &needed, ustr, -1, &status);
@@ -1069,8 +1079,8 @@ render_bidi(
 	const char *str,
 	t_bool *is_rtl)
 {
-	int32_t ustr_len;
 	char *tmp;
+	int32_t ustr_len;
 	UBiDi *bidi_data;
 	UChar *ustr, *ustr_reordered;
 	UErrorCode status = U_ZERO_ERROR;
diff -Nurp tin-1.7.8/src/tags.c tin-1.7.9/src/tags.c
--- tin-1.7.8/src/tags.c	2004-12-30 14:33:12.000000000 +0100
+++ tin-1.7.9/src/tags.c	2005-06-28 10:31:22.366889848 +0200
@@ -3,7 +3,7 @@
  *  Module    : tags.c
  *  Author    : Jason Faultless <jason@altarstone.com>
  *  Created   : 1999-12-06
- *  Updated   : 2004-03-14
+ *  Updated   : 2005-05-10
  *  Notes     : Split out from other modules
  *
  * Copyright (c) 1999-2005 Jason Faultless <jason@altarstone.com>
@@ -85,8 +85,8 @@ look_for_multipart_info(
 	int *offset)
 {
 	MultiPartInfo tmp;
-	char *subj = NULL;
-	char *pch = NULL;
+	char *subj;
+	char *pch;
 
 	*offset = 0;
 
@@ -137,7 +137,7 @@ get_multiparts(
 {
 	MultiPartInfo tmp, tmp2;
 	MultiPartInfo *info = 0;
-	int i = 0;
+	int i;
 	int part_index;
 
 	/* entry assertions */
@@ -208,7 +208,7 @@ tag_multipart(
 	int base_index)
 {
 	MultiPartInfo *info = 0;
-	int i = 0;
+	int i;
 	const int qty = get_multiparts(base_index, &info);
 
 	/* check for failure... */
diff -Nurp tin-1.7.8/src/thread.c tin-1.7.9/src/thread.c
--- tin-1.7.8/src/thread.c	2005-03-14 18:32:18.000000000 +0100
+++ tin-1.7.9/src/thread.c	2005-06-28 10:31:22.463871995 +0200
@@ -3,7 +3,7 @@
  *  Module    : thread.c
  *  Author    : I. Lea
  *  Created   : 1991-04-01
- *  Updated   : 2005-03-14
+ *  Updated   : 2005-05-10
  *  Notes     :
  *
  * Copyright (c) 1991-2005 Iain Lea <iain@bricbrac.de>
@@ -45,7 +45,7 @@
 #	include "keymap.h"
 #endif /* !KEYMAP_H */
 
-#define EXPIRED(a) ((a)->article == ART_UNAVAILABLE || arts[(a)->article].thread == ART_EXPIRED)
+#define IS_EXPIRED(a) ((a)->article == ART_UNAVAILABLE || arts[(a)->article].thread == ART_EXPIRED)
 
 int thread_basenote = 0;				/* Index in base[] of basenote */
 static int thread_respnum = 0;			/* Index in arts[] of basenote ie base[thread_basenote] */
@@ -149,6 +149,11 @@ build_tline(
 	 * Start with 2 spaces for ->
 	 * then index number of the message and whitespace (2+4+1 chars)
 	 */
+#if 0 /* usefull? see also group.c:build_sline() */
+	if (!tinrc.draw_arrow)
+		sprintf(buffer, "%s ", tin_ltoa(l + 1, 6));
+	else
+#endif /* 0 */
 	sprintf(buffer, "  %s ", tin_ltoa(l + 1, 4));
 	rest_of_line -= 7;
 
@@ -242,7 +247,7 @@ build_tline(
 		if (gap > 0) {
 			size_t len = strlen(buffer);
 
-			for (ptr = art->refptr->parent; ptr && EXPIRED(ptr); ptr = ptr->parent)
+			for (ptr = art->refptr->parent; ptr && IS_EXPIRED(ptr); ptr = ptr->parent)
 				;
 			if (!(ptr && arts[ptr->article].subject == art->subject)) {
 #if defined(MULTIBYTE_ABLE) && !defined(NO_LOCALE)
@@ -543,7 +548,7 @@ thread_page(
 				 *        is 'troublesome'
 				 */
 				n = find_response(thread_basenote, thdmenu.curr);
-				filter_menu((func == GLOBAL_MENU_FILTER_KILL) ? FILTER_KILL : FILTER_SELECT, group, &arts[n]);
+				filter_menu(func, group, &arts[n]);
 				if (filter_articles(group)) {
 					make_threads(group, FALSE);
 					if ((n = next_unread(n)) == -1) {
@@ -615,8 +620,8 @@ thread_page(
 				break;
 
 			case SPECIAL_CATCHUP_LEFT:				/* come here when exiting thread via <- */
-			case THREAD_CATCHUP:				/* catchup thread, move to next one */
-			case THREAD_CATCHUP_NEXT_UNREAD:	/* -> next with unread arts */
+			case CATCHUP:				/* catchup thread, move to next one */
+			case CATCHUP_NEXT_UNREAD:	/* -> next with unread arts */
 				ret_code = thread_catchup(func);
 				break;
 
@@ -732,7 +737,7 @@ thread_page(
 				info_message(cvers);
 				break;
 
-			case THREAD_MARK_ARTICLE_UNREAD:	/* mark article as unread */
+			case MARK_ARTICLE_UNREAD:	/* mark article as unread */
 				n = find_response(thread_basenote, thdmenu.curr);
 				art_mark(group, &arts[n], ART_WILL_RETURN);
 				mark[0] = get_art_mark(&arts[n]);
@@ -741,7 +746,7 @@ thread_page(
 				info_message(_(txt_marked_as_unread), _(txt_article_upper));
 				break;
 
-			case THREAD_MARK_THREAD_UNREAD:		/* mark thread as unread */
+			case MARK_THREAD_UNREAD:		/* mark thread as unread */
 				thd_mark_unread(group, base[thread_basenote]);
 				update_thread_page();
 				info_message(_(txt_marked_as_unread), _(txt_thread_upper));
@@ -807,8 +812,8 @@ static void
 show_thread_page(
 	void)
 {
-	int i, art;
 	char *title;
+	int i, art;
 
 	signal_context = cThread;
 	currmenu = &thdmenu;
@@ -1269,7 +1274,7 @@ static t_bool
 find_unexpired(
 	struct t_msgid *ptr)
 {
-	return ptr && (!EXPIRED(ptr) || find_unexpired(ptr->child) || find_unexpired(ptr->sibling));
+	return ptr && (!IS_EXPIRED(ptr) || find_unexpired(ptr->child) || find_unexpired(ptr->sibling));
 }
 
 
@@ -1281,7 +1286,7 @@ has_sibling(
 		if (find_unexpired(ptr->sibling))
 			return TRUE;
 		ptr = ptr->parent;
-	} while (ptr && EXPIRED(ptr));
+	} while (ptr && IS_EXPIRED(ptr));
 	return FALSE;
 }
 
@@ -1306,7 +1311,7 @@ make_prefix(
 	struct t_msgid *ptr;
 
 	for (ptr = art->parent; ptr; ptr = ptr->parent)
-		depth += (!EXPIRED(ptr) ? 1 : 0);
+		depth += (!IS_EXPIRED(ptr) ? 1 : 0);
 
 	if ((depth == 0) || (maxlen < 1)) {
 		prefix[0] = '\0';
@@ -1333,7 +1338,7 @@ make_prefix(
 	buf[--prefix_ptr] = (has_sibling(art) ? '+' : '`');
 
 	for (ptr = art->parent; prefix_ptr > 1; ptr = ptr->parent) {
-		if (EXPIRED(ptr))
+		if (IS_EXPIRED(ptr))
 			continue;
 		buf[--prefix_ptr] = ' ';
 		buf[--prefix_ptr] = (has_sibling(ptr) ? '|' : ' ');
@@ -1372,18 +1377,23 @@ thread_catchup(
 	}
 
 	if (i != -1) {				/* still unread arts in this thread */
-		snprintf(buf, sizeof(buf), _(txt_mark_thread_read), (func == THREAD_CATCHUP_NEXT_UNREAD) ? _(txt_enter_next_thread) : "");
+		/*
+		 * TODO: if (group->attribute->thread_arts == THREAD_NONE)
+		 *          snprintf(buf, sizeof(buf), _("Mark article as read%s?"), (func == CATCHUP_NEXT_UNREAD) ? _(" and enter next unread article") : "");
+		 *       else
+		 */
+		snprintf(buf, sizeof(buf), _(txt_mark_thread_read), (func == CATCHUP_NEXT_UNREAD) ? _(txt_enter_next_thread) : "");
 		if ((!TINRC_CONFIRM_ACTION) || (pyn = prompt_yn(buf, TRUE)) == 1)
 			thd_mark_read(curr_group, base[thread_basenote]);
 	}
 
 	switch (func) {
-		case THREAD_CATCHUP:				/* 'c' */
+		case CATCHUP:				/* 'c' */
 			if (pyn == 1)
 				return GRP_NEXT;
 			break;
 
-		case THREAD_CATCHUP_NEXT_UNREAD:	/* 'C' */
+		case CATCHUP_NEXT_UNREAD:	/* 'C' */
 			if (pyn == 1)
 				return GRP_NEXTUNREAD;
 			break;
@@ -1520,7 +1530,7 @@ mark_art_read(
 	struct t_group *group)
 {
 	char keytagged[MAXKEYLEN], keycurrent[MAXKEYLEN], keyquit[MAXKEYLEN];
-	int n = -1, cnt = 0;
+	int n, cnt = 0;
 	int tmp_num_of_tagged_arts = num_of_tagged_arts;
 	t_function func = MARK_READ_CURRENT;
 
diff -Nurp tin-1.7.8/src/tincfg.tbl tin-1.7.9/src/tincfg.tbl
--- tin-1.7.8/src/tincfg.tbl	2004-12-30 14:33:54.000000000 +0100
+++ tin-1.7.9/src/tincfg.tbl	2005-06-28 10:31:24.690462100 +0200
@@ -2,7 +2,7 @@
 ;   Module    : tincfg.tbl
 ;   Author    : Thomas E. Dickey
 ;   Created   : 1996-11-01
-;   Updated   : 2004-06-06
+;   Updated   : 2005-06-20
 ;   Notes     : #defines and structs for config.c
 ;
 ; Copyright (c) 1996-2005 Thomas E. Dickey <dickey@invisible-island.net>
@@ -43,6 +43,7 @@
 	inverse_okay			OPT_ON_OFF
 	strip_blanks			OPT_ON_OFF
 	thread_articles			txt_threading	THREAD_MAX+1
+	thread_perc			OPT_NUM
 	sort_article_type		txt_sort_a_type	SORT_ARTICLES_BY_LINES_ASCEND+1
 	sort_threads_type		txt_sort_t_type	SORT_THREADS_BY_SCORE_ASCEND+1
 	pos_first_unread		OPT_ON_OFF
diff -Nurp tin-1.7.8/src/tmpfile.c tin-1.7.9/src/tmpfile.c
--- tin-1.7.8/src/tmpfile.c	2004-12-30 14:33:12.000000000 +0100
+++ tin-1.7.9/src/tmpfile.c	2005-06-28 10:31:22.407882302 +0200
@@ -53,10 +53,10 @@ FILE *
 tmpfile(
 	void)
 {
-	sigset_t set, oset;
 	FILE *fp;
-	int sverrno, fd = -1;
 	char buf[sizeof(_PATH_TMP) + sizeof(TRAILER)];
+	int sverrno, fd = -1;
+	sigset_t set, oset;
 
 	(void) memcpy(buf, _PATH_TMP, sizeof(_PATH_TMP) - 1);
 	(void) memcpy(buf + sizeof(_PATH_TMP) - 1, TRAILER, sizeof(TRAILER));
diff -Nurp tin-1.7.8/src/xref.c tin-1.7.9/src/xref.c
--- tin-1.7.8/src/xref.c	2005-02-11 02:26:25.000000000 +0100
+++ tin-1.7.9/src/xref.c	2005-06-28 10:31:22.527860215 +0200
@@ -3,7 +3,7 @@
  *  Module    : xref.c
  *  Author    : I. Lea & H. Brugge
  *  Created   : 1993-07-01
- *  Updated   : 2005-02-11
+ *  Updated   : 2005-05-04
  *  Notes     :
  *
  * Copyright (c) 1993-2005 Iain Lea <iain@bricbrac.de>
@@ -62,7 +62,7 @@ open_overview_fmt_fp(
 
 #ifdef NNTP_ABLE
 	if (read_news_via_nntp && !read_saved_news) {
-		if (!xover_cmd)
+		if (!nntp_caps.over_cmd)
 			return (FILE *) 0;
 
 		snprintf(line, sizeof(line), "LIST %s", OVERVIEW_FMT);
diff -Nurp tin-1.7.8/tools/tinews.pl tin-1.7.9/tools/tinews.pl
--- tin-1.7.8/tools/tinews.pl	2005-02-17 15:45:03.000000000 +0100
+++ tin-1.7.9/tools/tinews.pl	2005-06-28 10:31:20.625210482 +0200
@@ -696,6 +696,8 @@ These options are accepted for compatibi
 
 These options are accepted but do not have any functionality yet.
 
+=back
+
 =head1 EXIT STATUS
 
 The following exit values are returned:
