about summary refs log tree commit diff stats
diff options
context:
space:
mode:
-rw-r--r--.Lynx.prcs_aux380
-rw-r--r--CHANGES.chartrans135
-rw-r--r--CHANGES.configure62
-rw-r--r--CHANGES.new345
-rw-r--r--Lynx.prj428
-rw-r--r--MAKEFILE.W32729
-rw-r--r--Makefile44
-rw-r--r--README.chartrans191
-rw-r--r--README.configure35
-rw-r--r--README.win-38628
-rw-r--r--WWW/Library/Implementation/BSDI_Makefile6
-rw-r--r--WWW/Library/Implementation/CommonMakefile10
-rw-r--r--WWW/Library/Implementation/HTAAProt.c4
-rw-r--r--WWW/Library/Implementation/HTAccess.h6
-rw-r--r--WWW/Library/Implementation/HTAnchor.c168
-rw-r--r--WWW/Library/Implementation/HTAnchor.h29
-rw-r--r--WWW/Library/Implementation/HTCJK.h2
-rw-r--r--WWW/Library/Implementation/HTDOS.c95
-rw-r--r--WWW/Library/Implementation/HTDOS.h34
-rw-r--r--WWW/Library/Implementation/HTFTP.c16
-rw-r--r--WWW/Library/Implementation/HTFile.c192
-rw-r--r--WWW/Library/Implementation/HTFile.h3
-rw-r--r--WWW/Library/Implementation/HTGopher.c16
-rw-r--r--WWW/Library/Implementation/HTMIME.c95
-rw-r--r--WWW/Library/Implementation/HTML.h13
-rw-r--r--WWW/Library/Implementation/HTMLDTD.c174
-rw-r--r--WWW/Library/Implementation/HTMLDTD.h49
-rw-r--r--WWW/Library/Implementation/HTMLGen.c13
-rw-r--r--WWW/Library/Implementation/HTNews.c6
-rw-r--r--WWW/Library/Implementation/HTParse.c2
-rw-r--r--WWW/Library/Implementation/HTPlain.c274
-rw-r--r--WWW/Library/Implementation/HTStyle.c4
-rw-r--r--WWW/Library/Implementation/HTTCP.c39
-rw-r--r--WWW/Library/Implementation/HTTCP.h6
-rw-r--r--WWW/Library/Implementation/HTTP.c4
-rw-r--r--WWW/Library/Implementation/HTTelnet.c10
-rw-r--r--WWW/Library/Implementation/HTUU.c2
-rw-r--r--WWW/Library/Implementation/HTUtils.h147
-rw-r--r--WWW/Library/Implementation/LYexit.h6
-rw-r--r--WWW/Library/Implementation/SGML.c478
-rw-r--r--WWW/Library/Implementation/SGML.h15
-rw-r--r--WWW/Library/Implementation/UCAux.h41
-rw-r--r--WWW/Library/Implementation/UCDefs.h79
-rw-r--r--WWW/Library/Implementation/UCMap.h20
-rw-r--r--WWW/Library/Implementation/tcp.h196
-rw-r--r--WWW/Library/djgpp/CommonMakefile379
-rw-r--r--WWW/Library/djgpp/makefile29
-rw-r--r--WWW/Library/unix/Makefile2
-rw-r--r--WWW/Library/unix/makefile.in54
-rw-r--r--aclocal.m4737
-rwxr-xr-xconfig.guess693
-rw-r--r--config.hin113
-rwxr-xr-xconfig.sub927
-rwxr-xr-xconfigure5517
-rw-r--r--configure.in234
-rwxr-xr-xinstall.sh238
-rw-r--r--lynx.cfg28
-rw-r--r--makefile.in711
-rw-r--r--newfiles.chartrans37
-rw-r--r--newfiles.configure11
-rw-r--r--samples/lynx.cfg28
-rw-r--r--src/GridText.c243
-rw-r--r--src/HTAlert.c1
-rw-r--r--src/HTFWriter.c28
-rw-r--r--src/HTInit.c2
-rw-r--r--src/HTML.c244
-rw-r--r--src/HTML.h13
-rw-r--r--src/LYBookmark.c28
-rw-r--r--src/LYBookmark.h10
-rw-r--r--src/LYCgi.c2
-rw-r--r--src/LYCharSets.c191
-rw-r--r--src/LYCharSets.h14
-rw-r--r--src/LYCharUtils.c209
-rw-r--r--src/LYCharUtils.h1
-rw-r--r--src/LYClean.c15
-rw-r--r--src/LYCookie.c2
-rw-r--r--src/LYCurses.c296
-rw-r--r--src/LYCurses.h123
-rw-r--r--src/LYDownload.c13
-rw-r--r--src/LYEdit.c31
-rw-r--r--src/LYForms.c43
-rw-r--r--src/LYGetFile.c11
-rw-r--r--src/LYGetFile.h2
-rw-r--r--src/LYGlobalDefs.h17
-rw-r--r--src/LYHistory.c6
-rw-r--r--src/LYJump.c10
-rw-r--r--src/LYJump.h2
-rw-r--r--src/LYKeymap.h2
-rw-r--r--src/LYList.c2
-rw-r--r--src/LYLocal.c96
-rw-r--r--src/LYMail.c138
-rw-r--r--src/LYMail.h2
-rw-r--r--src/LYMain.c186
-rw-r--r--src/LYMainLoop.c52
-rw-r--r--src/LYMainLoop.h4
-rw-r--r--src/LYMap.c2
-rw-r--r--src/LYNews.c19
-rw-r--r--src/LYOptions.c45
-rw-r--r--src/LYOptions.h2
-rw-r--r--src/LYPrint.c46
-rw-r--r--src/LYReadCFG.c61
-rw-r--r--src/LYSearch.c2
-rw-r--r--src/LYShowInfo.c16
-rw-r--r--src/LYStrings.c335
-rw-r--r--src/LYStrings.h9
-rw-r--r--src/LYTraversal.c10
-rw-r--r--src/LYUpload.c2
-rw-r--r--src/LYUtils.c205
-rw-r--r--src/LYUtils.h8
-rw-r--r--src/LYexit.c15
-rw-r--r--src/LYrcFile.c14
-rw-r--r--src/Makefile45
-rw-r--r--src/UCAuto.c215
-rw-r--r--src/UCAuto.h1
-rw-r--r--src/UCAux.c213
-rw-r--r--src/UCdomap.c1386
-rw-r--r--src/UCdomap.h58
-rw-r--r--src/chrtrans/MAKEFILE.W32129
-rw-r--r--src/chrtrans/MAKEW32.BAT25
-rw-r--r--src/chrtrans/Makefile78
-rw-r--r--src/chrtrans/README.format103
-rw-r--r--src/chrtrans/README.tables52
-rw-r--r--src/chrtrans/UCkd.h59
-rw-r--r--src/chrtrans/cp1250_uni.tbl281
-rw-r--r--src/chrtrans/cp1252_uni.tbl287
-rw-r--r--src/chrtrans/cp437_uni.tbl303
-rw-r--r--src/chrtrans/cp850_uni.tbl292
-rw-r--r--src/chrtrans/cp852_uni.tbl287
-rw-r--r--src/chrtrans/def7_uni.tbl2150
-rw-r--r--src/chrtrans/iso01_uni.tbl427
-rw-r--r--src/chrtrans/iso02_uni.tbl155
-rw-r--r--src/chrtrans/iso03_uni.tbl149
-rw-r--r--src/chrtrans/iso04_uni.tbl149
-rw-r--r--src/chrtrans/iso05_uni.tbl149
-rw-r--r--src/chrtrans/iso06_uni.tbl98
-rw-r--r--src/chrtrans/iso07_uni.tbl143
-rw-r--r--src/chrtrans/iso08_uni.tbl84
-rw-r--r--src/chrtrans/iso09_uni.tbl63
-rw-r--r--src/chrtrans/iso10_uni.tbl123
-rw-r--r--src/chrtrans/koi8r_uni.tbl139
-rw-r--r--src/chrtrans/makefile.in100
-rw-r--r--src/chrtrans/makeuctb.c564
-rw-r--r--src/chrtrans/mnem_suni.tbl1899
-rw-r--r--src/chrtrans/mnemonic_suni.tbl1899
-rw-r--r--src/chrtrans/rfc_suni.tbl1981
-rw-r--r--src/chrtrans/utf8_uni.tbl33
-rw-r--r--src/makefile.dos54
-rw-r--r--src/makefile.in111
-rw-r--r--userdefs.h65
149 files changed, 30775 insertions, 773 deletions
diff --git a/.Lynx.prcs_aux b/.Lynx.prcs_aux
new file mode 100644
index 00000000..72567de3
--- /dev/null
+++ b/.Lynx.prcs_aux
@@ -0,0 +1,380 @@
+;; This file is automatically generated, editing may cause PRCS to do
+;; REALLY bad things.
+(Created-By-Prcs-Version 1 2 0)
+(WWW/Library/Implementation/HTList.c 6153 856833014 h/4_HTList.c 1.1)
+(src/tcpwareolb.opt 24 856833014 d/8_tcpwareolb 1.1)
+(WWW/Library/djgpp/makefile 857 861154413 0_makefile 1.4)
+(WWW/Library/Implementation/HTGroup.h 5641 856833014 f/49_HTGroup.h 1.1)
+(src/LYGlobalDefs.h 10510 861154416 d/25_LYGlobalDe 1.1.2.3)
+(CHANGES2-3 18114 856833014 h/46_CHANGES2-3 1.1)
+(WWW/Library/freebsd/Makefile 600 856833014 f/10_Makefile 1.1)
+(lynx_help/Lynx_users_guide.html 105776 860475643 e/14_Lynx_users 1.2.1.1)
+(CHANGES2-4 48390 856833014 h/45_CHANGES2-4 1.1)
+(src/LYMail.h 475 860064663 c/43_LYMail.h 1.2)
+(lynx_help/keystroke_commands/cookie_help.html 2652 856833014 e/15_cookie_hel 1.1)
+(lynx_help/keystroke_commands/xterm_help.html 1162 856833014 e/19_xterm_help 1.1)
+(CHANGES2-5 93256 856833014 h/44_CHANGES2-5 1.1)
+(CHANGES2-6 41847 856833014 b/0_CHANGES2-6 1.1)
+(WWW/Library/Implementation/HTList.h 3636 856833014 g/17_HTList.h 1.1)
+(docs/README.txt 580 856833014 e/35_README.txt 1.1)
+(WWW/Library/Implementation/HTUtils.h 10114 861154413 g/7_HTUtils.h 1.5)
+(src/LYSystem.h 211 856833014 c/38_LYSystem.h 1.1)
+(WWW/Library/sco/Makefile 793 856833014 f/4_Makefile 1.1)
+(utils/inews/version.c 100 856833014 c/0_version.c 1.1)
+(WWW/Library/Implementation/LYexit.h 961 860064663 f/25_LYexit.h 1.1.1.2)
+(about_lynx/COPYHEADER 825 856833014 e/40_COPYHEADER 1.1)
+(src/chrtrans/rfc_suni.tbl 20516 860516309 i/0_rfc_suni.tbl 1.2)
+(utils/inews/conf.h 3852 857398594 c/3_conf.h 1.1.1.1)
+(WWW/README.txt 9430 856833014 e/47_README.txt 1.1)
+(WWW/Library/Implementation/HTCJK.h 2933 860064663 f/30_HTCJK.h 1.2)
+(src/LYDownload.c 14873 860588360 c/47_LYDownload 1.3)
+(WWW/Library/apollo_m68k/Makefile 723 856833014 f/19_Makefile 1.1)
+(test/ISO_LATIN1_test.html 3608 856833014 c/14_ISO_LATIN1 1.1)
+(build.com 7376 856833014 e/38_build.com 1.1)
+(src/chrtrans/cp852_uni.tbl 11362 860516309 i/6_cp852_uni. 1.2)
+(lynx_help/lynx_url_support.html 27493 856833014 e/13_lynx_url_s 1.1)
+(configure.in 5943 861154415 10_configure. 1.5)
+(src/LYDownload.h 315 856833014 c/46_LYDownload 1.1)
+(makefile.in 26415 861154415 8_makefile.i 1.1.1.4)
+(src/chrtrans/cp1252_uni.tbl 10789 856856948 h/51_cp1252_uni 1.1)
+(utils/inews/config.h-dist 13461 856833014 b/51_config.h-d 1.1)
+(src/GridText.c 129950 860064663 e/5_GridText.c 1.1.1.3)
+(WWW/Library/Implementation/HTFTP.c 90317 858077955 h/14_HTFTP.c 1.4)
+(src/LYMain.c 73136 861154416 d/44_LYMain.c 1.1.2.1.1.5)
+(src/tcpwareshr.opt 30 856833014 d/6_tcpwareshr 1.1)
+(src/LYGetFile.c 30319 860589397 d/48_LYGetFile. 1.6)
+(src/chrtrans/mnem_suni.tbl 24067 856856948 h/50_mnem_suni. 1.1)
+(src/chrtrans/iso05_uni.tbl 1865 856925688 i/8_iso05_uni. 1.2)
+(src/LYTraversal.c 4377 860064663 c/25_LYTraversa 1.1.1.2)
+(src/UCAuto.c 6135 856856948 h/0_UCAuto.c 1.1)
+(WWW/Makefile 203 856833014 e/44_Makefile 1.1)
+(README.configure 1047 861154413 14_README.con 1.3)
+(WWW/Library/Implementation/HTAAProt.c 16206 857148169 g/40_HTAAProt.c 1.2)
+(WWW/Library/Implementation/crypt.c 3468 856833014 f/38_crypt.c 1.1)
+(src/GridText.h 5770 856833014 d/33_GridText.h 1.1)
+(README 4344 856833014 h/34_README 1.1)
+(WWW/Library/Implementation/HTFTP.h 1458 856833014 g/31_HTFTP.h 1.1)
+(WWW/Library/Implementation/HTVMSUtils.c 32547 856833014 h/23_HTVMSUtils 1.1)
+(src/LYGetFile.h 597 860064663 d/18_LYGetFile. 1.2)
+(utils/inews/config.h 13461 856833014 b/50_config.h 1.1)
+(docs/RFC-MAILCAP.txt 31538 856833014 e/34_RFC-MAILCA 1.1)
+(src/UCAuto.h 75 856856948 g/0_UCAuto.h 1.1)
+(WWW/Library/unix/Makefile 713 861154414 f/9_Makefile 1.2)
+(test/README.txt 377 856833014 c/15_README.txt 1.1)
+(fixed512.com 1726 856833014 e/33_fixed512.c 1.1)
+(src/LYTraversal.h 497 856833014 c/24_LYTraversa 1.1)
+(lynx_help/keystroke_commands/gopher_types_help.html 1091 856833014 e/26_gopher_typ 1.1)
+(WWW/Library/Implementation/HTVMSUtils.h 2354 856833014 f/39_HTVMSUtils 1.1)
+(WWW/Library/Implementation/HTAAProt.h 7708 856833014 f/46_HTAAProt.h 1.1)
+(LYMessages_en.h 29525 858840837 h/37_LYMessages 1.3)
+(lynx_help/keystroke_commands/keystroke_help.html 4640 856833014 e/28_keystroke_ 1.1)
+(WWW/Library/umaxv-m88k/Makefile 678 856833014 e/48_Makefile 1.1)
+(WWW/Library/Implementation/HTBTree.c 26907 856833014 h/15_HTBTree.c 1.1)
+(src/LYCookie.c 37402 860064663 c/18_LYCookie.c 1.3)
+(src/DefaultStyle.c 9514 856833014 c/51_DefaultSty 1.1)
+(VMSWAIS.announce 1549 856833014 h/29_VMSWAIS.an 1.1)
+(WWW/Copyright.txt 944 856833014 e/46_Copyright. 1.1)
+(src/chrtrans/Makefile 1873 860516309 i/3_Makefile 1.6)
+(WWW/Library/Implementation/HTBTree.h 2196 856833014 g/32_HTBTree.h 1.1)
+(src/LYKeymap.c 26251 856833014 d/31_LYKeymap.c 1.1)
+(src/LYCookie.h 508 856833014 c/17_LYCookie.h 1.1)
+(utils/lpansi/vmsbuild.com 1582 856833014 b/45_vmsbuild.c 1.1)
+(CMU.announce 1178 856833014 h/43_CMU.announ 1.1)
+(WWW/Library/convex/Makefile 723 856833014 f/2_Makefile 1.1)
+(config.sub 19236 861154414 30_config.sub 1.1)
+(src/LYKeymap.h 3384 860064663 d/30_LYKeymap.h 1.2)
+(src/gnuc.opt 84 856833014 d/12_gnuc.opt 1.1)
+(WWW/Library/Implementation/HTML.h 5588 856856948 g/28_HTML.h 1.2)
+(src/LYSearch.c 6841 860064663 d/38_LYSearch.c 1.3)
+(WWW/Library/Implementation/ufc-crypt.h 2491 856833014 f/33_ufc-crypt. 1.1)
+(src/socketshr_tcp.opt 16 856833014 d/9_socketshr_ 1.1)
+(src/HTAlert.c 10814 860064663 e/4_HTAlert.c 1.2)
+(src/LYSearch.h 326 856833014 d/28_LYSearch.h 1.1)
+(src/LYUtils.c 91060 860590375 d/27_LYUtils.c 1.12)
+(PROBLEMS 6522 856833014 h/35_PROBLEMS 1.1)
+(src/LYCharUtils.c 59125 860590375 c/22_LYCharUtil 1.2.1.4)
+(WWW/Library/next/Makefile 992 856833014 f/16_Makefile 1.1)
+(src/LYCgi.c 11218 860064663 c/28_LYCgi.c 1.2)
+(utils/lpansi/lpansi.c 4570 856833014 b/49_lpansi.c 1.1)
+(src/HTAlert.h 3198 856833014 d/1_HTAlert.h 1.1)
+(src/chrtrans/iso09_uni.tbl 857 856925688 i/11_iso09_uni. 1.2)
+(lynx_help/lynx_help_main.html 2668 857014209 e/29_lynx_help_ 1.2)
+(src/LYUtils.h 3987 860064663 d/34_LYUtils.h 1.1.1.3)
+(src/LYCharUtils.h 2043 856856948 c/19_LYCharUtil 1.2)
+(WWW/Library/decstation/Makefile 409 856833014 f/18_Makefile 1.1)
+(src/LYCgi.h 133 856833014 c/27_LYCgi.h 1.1)
+(WWW/Library/Implementation/HTChunk.c 2033 856833014 h/8_HTChunk.c 1.1)
+(WWW/Library/clix/Makefile 683 856833014 e/49_Makefile 1.1)
+(RELEASE_STATEMENT 1212 860264978 h/33_RELEASE_ST 1.2)
+(utils/inews/README 2391 856833014 c/7_README 1.1)
+(src/LYHistory.c 13985 860064663 d/21_LYHistory. 1.1.1.2)
+(utils/inews/Makefile 1484 857398594 c/9_Makefile 1.1.1.1)
+(src/chrtrans/makeuctb.c 13310 860516309 i/1_makeuctb.c 1.7)
+(WWW/Library/Implementation/HTChunk.h 3543 856833014 g/26_HTChunk.h 1.1)
+(src/ucxolb.opt 28 856833014 c/36_ucxolb.opt 1.1)
+(lynx_help/keystroke_commands/option_help.html 11623 860264978 e/23_option_hel 1.2)
+(lynx_help/keystroke_commands/bookmark_help.html 891 856833014 e/27_bookmark_h 1.1)
+(src/LYList.c 4220 857148169 d/3_LYList.c 1.2)
+(src/LYHistory.h 623 856833014 d/11_LYHistory. 1.1)
+(src/chrtrans/README.tables 2315 856856948 i/4_README.tab 1.1)
+(samples/jumpsUnix.html 3328 856833014 e/8_jumpsUnix. 1.1)
+(WWW/Library/Implementation/HTStyle.c 8994 860475643 h/5_HTStyle.c 1.3)
+(src/chrtrans/cp850_uni.tbl 10229 860516309 i/19_cp850_uni. 1.2)
+(WWW/Library/Implementation/HTMLGen.c 9582 856856948 h/9_HTMLGen.c 1.2)
+(WWW/Library/Implementation/HTStream.h 1802 856833014 g/21_HTStream.h 1.1)
+(WWW/Library/Implementation/HTFormat.c 21592 856833014 h/0_HTFormat.c 1.1)
+(WWW/Library/vms/libmake.com 6288 856833014 f/21_libmake.co 1.1)
+(src/chrtrans/iso04_uni.tbl 1858 856925688 i/15_iso04_uni. 1.2)
+(WWW/Library/Implementation/HTUU.c 7512 860064663 g/37_HTUU.c 1.2)
+(src/chrtrans/koi8r_uni.tbl 4570 860516880 24_koi8r_uni. 1.1)
+(WWW/Library/Implementation/CommonMakefile 12712 861154413 f/41_CommonMake 1.3)
+(DESC 664 856833014 h/41_DESC 1.1)
+(src/LYVMSdef.h 562 856833014 c/16_LYVMSdef.h 1.1)
+(src/LYList.h 222 856833014 c/26_LYList.h 1.1)
+(src/decc.opt 58 856833014 d/13_decc.opt 1.1)
+(src/chrtrans/cp1250_uni.tbl 10813 856856948 h/48_cp1250_uni 1.1)
+(WWW/Library/Implementation/HTStyle.h 6741 856833014 g/18_HTStyle.h 1.1)
+(WWW/Library/Implementation/HTMLGen.h 753 856833014 g/22_HTMLGen.h 1.1)
+(CHANGES.new 19874 861154493 6_CHANGES.ne 1.22)
+(WWW/Library/Implementation/HTFormat.h 10966 856833014 g/13_HTFormat.h 1.1)
+(WWW/Library/Implementation/HTUU.h 964 856833014 f/43_HTUU.h 1.1)
+(WWW/Library/Implementation/HTWSRC.c 10851 856833014 h/20_HTWSRC.c 1.1)
+(src/chrtrans/UCkd.h 1317 856856948 i/2_UCkd.h 1.1)
+(WWW/Library/Implementation/HTFile.c 56600 860590375 h/27_HTFile.c 1.1.2.3)
+(src/chrtrans/mnemonic_suni.tbl 22264 856856948 h/49_mnemonic_s 1.1)
+(WWW/Library/vms/COPYING.LIB 25265 856833014 f/20_COPYING.LI 1.1)
+(WWW/Library/Implementation/HTWSRC.h 1320 856833014 g/3_HTWSRC.h 1.1)
+(src/chrtrans/MAKEW32.BAT 831 860899928 3_MAKEW32.BA 1.2)
+(WWW/Library/sgi/Makefile 683 856833014 f/14_Makefile 1.1)
+(WWW/Library/Implementation/HTFile.h 4772 856856948 g/33_HTFile.h 1.2)
+(WWW/Library/isc/Makefile 679 856833014 e/50_Makefile 1.1)
+(src/LYMap.c 9053 860064663 c/21_LYMap.c 1.2)
+(src/LYPrint.c 27053 861154416 d/40_LYPrint.c 1.5)
+(WWW/Library/Implementation/HTTelnet.c 15473 860899928 h/24_HTTelnet.c 1.3)
+(about_lynx/about_lynx.html 4135 856833014 e/43_about_lynx 1.1)
+(samples/mime.types 1057 856833014 e/9_mime.types 1.1)
+(src/HTNestedList.h 1188 856833014 c/30_HTNestedLi 1.1)
+(src/LYMap.h 222 856833014 c/20_LYMap.h 1.1)
+(samples/jumpsVMS.html 1417 856833014 e/7_jumpsVMS.h 1.1)
+(src/LYReadCFG.c 31182 861154416 d/39_LYReadCFG. 1.1.1.1.1.5)
+(WWW/Library/vms/descrip.mms 9051 856833014 f/22_descrip.mm 1.1)
+(src/LYPrint.h 304 856833014 d/7_LYPrint.h 1.1)
+(src/chrtrans/iso10_uni.tbl 1565 856925688 i/10_iso10_uni. 1.2)
+(WWW/Library/Implementation/HTAccess.c 35510 856836688 h/17_HTAccess.c 1.2)
+(WWW/Library/Implementation/HTTelnet.h 582 856833014 g/5_HTTelnet.h 1.1)
+(WWW/Library/Implementation/HTAnchor.c 32223 860064663 h/6_HTAnchor.c 1.1.1.2)
+(utils/inews/inews.c 7996 856833014 c/2_inews.c 1.1)
+(src/LYReadCFG.h 219 856833014 c/41_LYReadCFG. 1.1)
+(docs/README.html 686 856833014 e/36_README.htm 1.1)
+(src/LYrcFile.c 25393 860590375 d/15_LYrcFile.c 1.3)
+(WWW/Library/Implementation/HTAccess.h 7620 860064663 g/35_HTAccess.h 1.3)
+(src/UCAux.c 6244 860064663 f/0_UCAux.c 1.3)
+(WWW/Library/Implementation/HTPasswd.c 7766 856833014 g/43_HTPasswd.c 1.1)
+(WWW/Library/Implementation/HTAAFile.c 5620 856833014 g/44_HTAAFile.c 1.1)
+(samples/mailcap 4771 856833014 e/11_mailcap 1.1)
+(WWW/Library/Implementation/HTAtom.c 3868 856833014 h/7_HTAtom.c 1.1)
+(WWW/Library/Implementation/HTAnchor.h 13255 856856948 g/19_HTAnchor.h 1.2)
+(src/chrtrans/iso06_uni.tbl 1204 856856948 i/14_iso06_uni. 1.1)
+(Makefile 42942 860475643 h/36_Makefile 1.1.1.1.1.4)
+(src/LYrcFile.h 194 856833014 d/5_LYrcFile.h 1.1)
+(src/LYUpload.c 7538 857148169 d/35_LYUpload.c 1.2)
+(src/HTForms.h 3106 856833014 d/32_HTForms.h 1.1)
+(WWW/Library/Implementation/HTAAFile.h 4408 856833014 f/51_HTAAFile.h 1.1)
+(src/descrip.mms 4835 856833014 e/6_descrip.mm 1.1)
+(src/LYSignal.h 300 856833014 d/23_LYSignal.h 1.1)
+(WWW/Library/Implementation/HTAtom.h 1210 856833014 g/20_HTAtom.h 1.1)
+(lynx_help/keystroke_commands/other_help.html 6088 856833014 e/22_other_help 1.1)
+(WWW/Library/Implementation/HTPasswd.h 4717 856833014 f/50_HTPasswd.h 1.1)
+(WWW/Library/Implementation/patchlevel.h 959 856833014 f/34_patchlevel 1.1)
+(aclocal.m4 22941 861154414 12_aclocal.m4 1.5)
+(userdefs.h 52108 861154417 c/10_userdefs.h 1.1.2.1.1.1.1.5)
+(WWW/Library/Implementation/HTAssoc.c 1736 856833014 g/39_HTAssoc.c 1.1)
+(TCPWARE.announce 1352 856833014 h/31_TCPWARE.an 1.1)
+(WWW/Library/sun4/Makefile 578 856833014 f/11_Makefile 1.1)
+(WWW/Library/Implementation/HTMLDTD.c 33276 860516309 h/26_HTMLDTD.c 1.4)
+(WWW/Library/vax_ultrix/Makefile 678 856833014 f/8_Makefile 1.1)
+(src/LYUpload.h 300 856833014 c/49_LYUpload.h 1.1)
+(lynx_help/keystroke_commands/edit_help.html 1409 856833014 e/17_edit_help. 1.1)
+(src/LYLeaks.c 14684 856833014 c/31_LYLeaks.c 1.1)
+(src/LYMainLoop.c 120193 860590375 d/43_LYMainLoop 1.2.3.6)
+(about_lynx/about_lynx-dev.html 2500 856833014 e/42_about_lynx 1.1)
+(VMSPrint.com 616 856833014 h/30_VMSPrint.c 1.1)
+(WWW/Library/netbsd/Makefile 613 856833014 f/0_Makefile 1.1)
+(WWW/Library/Implementation/UCAux.h 947 856856948 i/23_UCAux.h 1.1)
+(WWW/Library/Implementation/HTMLDTD.h 25833 856856948 g/27_HTMLDTD.h 1.2)
+(src/Makefile 2321 860520828 d/29_Makefile 1.2.2.2)
+(WWW/Library/Implementation/HTAssoc.h 1096 856833014 f/45_HTAssoc.h 1.1)
+(build-slang.com 8432 856833014 e/39_build-slan 1.1)
+(src/LYMainLoop.h 101 860064663 d/19_LYMainLoop 1.2)
+(WWW/Library/osf/Makefile 388 856833014 f/7_Makefile 1.1)
+(lynx.man 12866 860264978 e/30_lynx.man 1.3)
+(WWW/Library/Implementation/HTAAUtil.c 15696 856833014 g/47_HTAAUtil.c 1.1)
+(samples/lynx.com 2192 856833014 e/10_lynx.com 1.1)
+(WWW/Library/unix/makefile.in 1188 861154414 16_makefile.i 1.3)
+(src/LYCharSets.c 109559 860516309 c/45_LYCharSets 1.3)
+(src/LYStrings.c 28885 861154417 d/36_LYStrings. 1.8)
+(src/HTFont.h 438 856833014 d/0_HTFont.h 1.1)
+(WWW/Library/Implementation/Makefile 15116 856833014 f/40_Makefile 1.1)
+(src/chrtrans/README.format 3551 860516309 i/5_README.for 1.2)
+(WWW/Library/Implementation/HTDOS.c 1855 860588360 28_HTDOS.C 1.1)
+(src/LYShowInfo.c 10635 857398594 d/37_LYShowInfo 1.4)
+(utils/inews/README.NN 3051 856833014 c/6_README.NN 1.1)
+(lynx_help/keystroke_commands/movement_help.html 1795 856833014 e/24_movement_h 1.1)
+(src/HTML.c 168962 860520828 e/2_HTML.c 1.1.2.4)
+(utils/inews/clientlib.c 11163 856833014 c/5_clientlib. 1.1)
+(src/LYEdit.c 3448 860588360 d/50_LYEdit.c 1.2)
+(WWW/Library/Implementation/HTAAUtil.h 12046 856833014 g/2_HTAAUtil.h 1.1)
+(src/chrtrans/iso01_uni.tbl 5204 860516309 i/18_iso01_uni. 1.2)
+(src/LYCharSets.h 1071 856856948 c/44_LYCharSets 1.2)
+(WWW/Library/sun3/Makefile 636 856833014 f/12_Makefile 1.1)
+(src/LYStrings.h 4742 860064663 d/20_LYStrings. 1.1.1.2)
+(WWW/Library/Implementation/HTWAIS.c 29606 856833014 h/22_HTWAIS.c 1.1)
+(CHANGES 58482 860264978 h/47_CHANGES 1.2)
+(WWW/Library/Implementation/HTDOS.h 771 860588360 27_HTDOS.H 1.1)
+(src/LYShowInfo.h 316 856833014 c/39_LYShowInfo 1.1)
+(WWW/Library/Implementation/HTRules.c 11040 856833014 h/1_HTRules.c 1.1)
+(WWW/Library/Implementation/SGML.c 66677 860423030 h/12_SGML.c 1.1.1.1.1.1.1.1)
+(install.sh 4771 858077955 9_install.sh 1.1)
+(src/HTML.h 5588 856856948 c/48_HTML.h 1.2)
+(utils/inews/clientlib.h 230 856833014 c/4_clientlib. 1.1)
+(src/LYEdit.h 134 856833014 d/16_LYEdit.h 1.1)
+(newfiles.chartrans 1286 860620937 b/0_newfiles.chartrans 1.4)
+(src/HTFWriter.c 31210 860590375 d/2_HTFWriter. 1.1.2.4)
+(WWW/Library/Implementation/HTParse.c 20852 860064663 h/18_HTParse.c 1.3)
+(WWW/Library/unix_x/Makefile 15482 856833014 f/1_Makefile 1.1)
+(WWW/Library/Implementation/HTWAIS.h 1554 856833014 g/4_HTWAIS.h 1.1)
+(lynx.cfg 66857 861154415 e/32_lynx.cfg 1.2.1.5)
+(WWW/Library/Implementation/HTRules.h 4105 856833014 g/14_HTRules.h 1.1)
+(WWW/Library/Implementation/SGML.h 6221 856856948 g/29_SGML.h 1.2)
+(WWW/Library/snake/Makefile 649 856833014 f/13_Makefile 1.1)
+(src/HTInit.c 30657 857148169 e/3_HTInit.c 1.2)
+(test/tabtest.html 1412 856833014 c/11_tabtest.ht 1.1)
+(WWW/Library/Implementation/UCDefs.h 2623 856856948 i/21_UCDefs.h 1.1)
+(WWW/Library/Implementation/HTParse.h 4930 856833014 g/36_HTParse.h 1.1)
+(SOCKETSHR.announce 1704 856833014 h/32_SOCKETSHR. 1.1)
+(lynx_help/keystroke_commands/print_help.html 1235 856833014 e/21_print_help 1.1)
+(WWW/Library/Implementation/HTAAServ.c 18320 856833014 g/46_HTAAServ.c 1.1)
+(WWW/Library/Implementation/HTInit.c 9452 856833014 g/51_HTInit.c 1.1)
+(src/LYStructs.h 2650 856833014 d/26_LYStructs. 1.1)
+(utils/lpansi/lpansi.1 3039 856833014 b/47_lpansi.1 1.1)
+(WWW/Library/ptx/Makefile 626 856833014 e/51_Makefile 1.1)
+(src/cmu_tcp.opt 34 856833014 d/14_cmu_tcp.op 1.1)
+(WWW/Library/Implementation/HTVMS_WaisProt.c 70622 856833014 f/32_HTVMS_Wais 1.1)
+(WWW/Library/Implementation/HTMIME.c 60906 856856948 g/50_HTMIME.c 1.2)
+(src/HTSaveToFile.h 554 856833014 c/50_HTSaveToFi 1.1)
+(lynx.hlp 13216 860264978 e/31_lynx.hlp 1.3)
+(WWW/Library/Implementation/HTAuth.c 5776 856833014 h/28_HTAuth.c 1.1)
+(src/chrtrans/makefile.in 2279 860520828 18_makefile.i 1.2)
+(src/LYCurses.c 29281 861154644 d/51_LYCurses.c 1.1.2.6)
+(test/iso8859-1.html 12169 856833014 c/12_iso8859-1. 1.1)
+(WWW/Library/mips/Makefile 663 856833014 f/3_Makefile 1.1)
+(WWW/Library/Implementation/HTAAServ.h 4950 856833014 g/1_HTAAServ.h 1.1)
+(WWW/Library/Implementation/HTInit.h 613 856833014 g/12_HTInit.h 1.1)
+(WWW/Library/Implementation/HTTP.c 43811 859500450 h/16_HTTP.c 1.2)
+(about_lynx/COPYING 17982 856833014 e/41_COPYING 1.1)
+(WWW/Library/Implementation/UCMap.h 838 858077955 i/22_UCMap.h 1.2)
+(WWW/Library/Implementation/HTVMS_WaisProt.h 13173 856833014 f/28_HTVMS_Wais 1.1)
+(WWW/Library/Implementation/LYLeaks.h 4165 856833014 f/29_LYLeaks.h 1.1)
+(WWW/Library/Implementation/HTMIME.h 2004 856833014 g/11_HTMIME.h 1.1)
+(WWW/Library/Implementation/HTString.c 3364 856833014 h/3_HTString.c 1.1)
+(README.win-386 1477 857398594 2_386-WIN.TX 1.2)
+(WWW/Library/Implementation/HTAuth.h 1791 856833014 f/47_HTAuth.h 1.1)
+(descrip.mms 3640 856833014 e/37_descrip.mm 1.1)
+(src/LYCurses.h 6747 860064663 d/22_LYCurses.h 1.4.1.2)
+(WWW/Library/Implementation/HTTCP.c 28080 860590375 h/13_HTTCP.c 1.2.2.3)
+(src/chrtrans/utf8_uni.tbl 936 856856948 i/7_utf8_uni.t 1.1)
+(test/TestComment.html 2032 856833014 c/13_TestCommen 1.1)
+(WWW/Library/Implementation/HTTP.h 598 856833014 g/34_HTTP.h 1.1)
+(WWW/Library/Implementation/Version.make 10 856833014 f/42_Version.ma 1.1)
+(WWW/Library/Implementation/HTString.h 1153 856833014 g/16_HTString.h 1.1)
+(src/makefile.dos 2178 860588360 1_makefile.d 1.3)
+(MAKEFILE.W32 17274 857398594 5_MAKEFILE.W 1.1)
+(src/win_tcp.opt 36 856833014 c/33_win_tcp.op 1.1)
+(WWW/Library/Implementation/HTTCP.h 3160 860899928 g/30_HTTCP.h 1.3)
+(src/chrtrans/iso03_uni.tbl 1872 856925688 i/16_iso03_uni. 1.2)
+(WWW/Library/djgpp/CommonMakefile 13489 860588360 26_CommonMake 1.1)
+(config.guess 20370 861154414 31_config.gue 1.1)
+(config.hin 3817 861154414 11_config.hin 1.5)
+(FM.announce 3655 856833014 h/40_FM.announc 1.1)
+(src/LYGCurses.h 6123 856833014 c/32_LYGCurses. 1.1)
+(WWW/Library/svr4/Makefile 590 856833014 f/5_Makefile 1.1)
+(WWW/Library/Implementation/HTPlain.c 15394 858077955 h/11_HTPlain.c 1.4)
+(src/vaxc.opt 54 856833014 c/34_vaxc.opt 1.1)
+(WWW/Library/Implementation/HTAlert.c 3039 856833014 h/2_HTAlert.c 1.1)
+(src/chrtrans/MAKEFILE.W32 1857 857398594 4_MAKEFILE.W 1.1)
+(WWW/Library/Implementation/HTPlain.h 460 856833014 g/25_HTPlain.h 1.1)
+(configure 150613 861154415 13_configure 1.5)
+(src/ucxshr.opt 28 856833014 c/35_ucxshr.opt 1.1)
+(utils/inews/Manifest 649 856833014 c/8_Manifest 1.1)
+(WWW/Library/Implementation/HTLex.c 3090 856833014 g/38_HTLex.c 1.1)
+(WWW/Library/Implementation/HTAlert.h 3198 856833014 g/15_HTAlert.h 1.1)
+(WWW/Library/Implementation/HText.h 6841 856833014 g/6_HText.h 1.1)
+(WWW/Library/Implementation/getpass.c 1649 856833014 f/35_getpass.c 1.1)
+(lynx_help/keystroke_commands/dired_help.html 1683 856833014 e/18_dired_help 1.1)
+(src/LYJump.c 11334 860064663 d/47_LYJump.c 1.2)
+(WWW/Library/Implementation/HTLex.h 1293 856833014 f/44_HTLex.h 1.1)
+(WWW/Library/Implementation/HTWriter.c 3883 856833014 h/21_HTWriter.c 1.1)
+(lynx_help/keystroke_commands/visited_help.html 1401 856833014 e/16_visited_he 1.1)
+(WWW/Library/Implementation/crypt_util.c 25993 856833014 f/37_crypt_util 1.1)
+(src/LYJump.h 553 860064663 c/29_LYJump.h 1.2)
+(src/LYLocal.c 55563 859825979 d/46_LYLocal.c 1.5)
+(WWW/Library/Implementation/HTWriter.h 632 856833014 g/24_HTWriter.h 1.1)
+(CHANGES.configure 3061 861154413 15_CHANGES.co 1.1.1.3)
+(INSTALLATION 18767 856833014 h/38_INSTALLATI 1.1)
+(src/LYLocal.h 2561 856833014 c/37_LYLocal.h 1.1)
+(utils/inews/nntp.h 2530 856833014 c/1_nntp.h 1.1)
+(WWW/Library/Implementation/HTVMS_WaisUI.c 60814 856833014 f/27_HTVMS_Wais 1.1)
+(src/chrtrans/iso07_uni.tbl 1791 856925688 i/13_iso07_uni. 1.2)
+(src/LYOptions.c 36155 859167360 d/41_LYOptions. 1.1.1.2)
+(utils/lpansi/README 3202 856833014 b/48_README 1.1)
+(WWW/Library/rs6000/Makefile 610 856833014 f/15_Makefile 1.1)
+(src/LYNews.c 9613 860064663 d/42_LYNews.c 1.3)
+(WWW/Library/Implementation/HTVMS_WaisUI.h 21281 856833014 f/26_HTVMS_Wais 1.1)
+(WWW/Library/Implementation/HTNews.c 61601 860064663 h/25_HTNews.c 1.2)
+(WWW/BUILD 1376 856833014 e/45_BUILD 1.1)
+(WWW/Library/Implementation/BSDI_Makefile 13904 859167360 f/31_BSDI_Makef 1.2)
+(WWW/Library/Implementation/HTACL.c 6107 856833014 g/41_HTACL.c 1.1)
+(CRAWL.announce 5978 856833014 h/42_CRAWL.anno 1.1)
+(src/LYOptions.h 908 860064663 d/17_LYOptions. 1.2)
+(src/LYNews.h 212 856833014 c/42_LYNews.h 1.1)
+(WWW/Library/Implementation/HTNews.h 1150 856833014 g/9_HTNews.h 1.1)
+(CHANGES.chartrans 4727 860520828 c/0_CHANGES.chartrans 1.9.1.5)
+(WWW/Library/Implementation/HTACL.h 3535 856833014 f/48_HTACL.h 1.1)
+(src/UCdomap.c 41762 860516309 i/20_UCdomap.c 1.4)
+(IBMPC-charsets.announce 7674 856833014 h/39_IBMPC-char 1.1)
+(WWW/Library/Implementation/HTFinger.c 11475 856833014 f/24_HTFinger.c 1.1)
+(src/chrtrans/iso08_uni.tbl 1048 856856948 i/12_iso08_uni. 1.1)
+(src/UCdomap.h 1414 858077955 e/0_UCdomap.h 1.2)
+(src/makefile.in 2726 860520828 17_makefile.i 1.3)
+(WWW/Library/Implementation/HTAABrow.c 30644 856833014 g/45_HTAABrow.c 1.1)
+(src/chrtrans/cp437_uni.tbl 10794 860516309 i/9_cp437_uni. 1.2)
+(src/chrtrans/iso02_uni.tbl 2035 860516309 i/17_iso02_uni. 1.3)
+(src/LYBookmark.c 23031 860590375 e/1_LYBookmark 1.1.1.3)
+(WWW/Library/Implementation/HTFinger.h 476 856833014 f/23_HTFinger.h 1.1)
+(src/LYClean.c 3537 857148169 e/0_LYClean.c 1.2)
+(lynx_help/keystroke_commands/scrolling_help.html 2366 856833014 e/20_scrolling_ 1.1)
+(WWW/Library/Implementation/HTAABrow.h 5511 856833014 g/0_HTAABrow.h 1.1)
+(WWW/Library/Implementation/HTHistory.c 3973 856833014 g/49_HTHistory. 1.1)
+(WWW/Library/Implementation/getline.c 1882 856833014 f/36_getline.c 1.1)
+(src/LYBookmark.h 534 857148169 c/40_LYBookmark 1.2)
+(src/chrtrans/def7_uni.tbl 24891 860516880 25_def7_uni.t 1.1)
+(src/LYForms.c 27593 861154416 d/49_LYForms.c 1.5)
+(src/LYEditmap.c 5899 856833014 c/23_LYEditmap. 1.1)
+(WWW/Library/Implementation/HTFWriter.c 7487 856833014 h/10_HTFWriter. 1.1)
+(newfiles.configure 272 861154567 7_newfiles.c 1.4)
+(src/LYClean.h 340 856833014 d/24_LYClean.h 1.1)
+(WWW/Library/Implementation/HTGopher.c 53261 860064663 g/48_HTGopher.c 1.3)
+(src/multinet.opt 39 856833014 d/10_multinet.o 1.1)
+(lynx_help/keystroke_commands/history_help.html 1801 856833014 e/25_history_he 1.1)
+(WWW/Library/Implementation/HTHistory.h 2830 856833014 g/10_HTHistory. 1.1)
+(WWW/Library/Implementation/HTGroup.c 18502 856833014 g/42_HTGroup.c 1.1)
+(utils/lpansi/Makefile 447 856833014 b/46_Makefile 1.1)
+(WWW/Library/solaris2/Makefile 655 856833014 f/6_Makefile 1.1)
+(src/LYMail.c 29276 861154416 d/45_LYMail.c 1.1.1.5)
+(src/LYexit.c 3587 860064663 d/4_LYexit.c 1.1.1.2)
+(WWW/Library/Implementation/HTFWriter.h 998 856833014 g/23_HTFWriter. 1.1)
+(WWW/Library/Implementation/tcp.h 16331 858971640 h/19_tcp.h 1.5)
+(README.chartrans 7938 858212819 d/0_README.chartrans 1.4)
+(WWW/Library/duns/Makefile 15116 856833014 f/17_Makefile 1.1)
+(samples/lynx.cfg 66857 861154415 e/12_lynx.cfg 1.2.1.4)
+(WWW/Library/Implementation/HTGopher.h 562 856833014 g/8_HTGopher.h 1.1)
diff --git a/CHANGES.chartrans b/CHANGES.chartrans
new file mode 100644
index 00000000..c213ec77
--- /dev/null
+++ b/CHANGES.chartrans
@@ -0,0 +1,135 @@
+$Id: CHANGES.chartrans,v 1.1 1997/04/08 17:33:48 tom Exp $
+$ProjectHeader: Lynx 2.7.1ac-0.5 Sat, 12 Apr 1997 20:52:08 -0600 buttles $
+
+1997-04-08
+ Lynx 2.7.1wb+ct-0.3
+  New translation tables def7_uni and koi8r_uni.  Use them.
+  Table def7 is based on RFC1345 and mnemonic,ds from ftp://dkuug.dk/i18n/
+  and previous Lynx replacements in LYCharSets.c and some IPA FAQ
+  convention and stuff for Ethiopic and KOI8-R.  It maps many of
+  the accented Latin characters to their unaccented counterparts.
+  Make def7_uni default table and associate it with us-ascii and
+  "7 bit approximations".
+  Lots of new entities from Hynek Med finally integrated.
+  Those include ascii characters and characters common between
+  Latin1 and Latin2.  Let's see what happens.
+  Added mappings for some "smart quote" characters to several
+  translation tables.
+  Make makeuctb slightly more flexible (accept Unicode range for
+  mapping to single code point).
+  Also changes for Đ, ETH;, and ð in LYCharSets.c.
+  These are basically just data changes; code still hasn't progressed
+  much, so for example translation of ALT strings (from anything but
+  iso-8859-1) still doesn't work.
+
+1997-03-20
+ Lynx 2.7ac-0.20
+  merged with FM's 27bugfixes up to 1997-03-20
+
+1997-03-20
+ Lynx 2.7ac-0.9
+  merged with FM's 27bugfixes up to 1997-03-17; adapted part of
+  FM's change re trademark character to the present chartrans code,
+  as follows:
+* Modified SGML.c to handle the numeric character reference ™ as
+  the named entity ™ also in the non-chartrans case.  The
+  trademark character (given by ™ or ™) will be shown as
+  "(TM)" as the ASCII substitution unless the current display character
+  has a code point for the trademark character or unless overridden by a
+  chartrans translation table. The code of 1997-02-25 prevented showing
+  the trademark sign as "(R)" but did not work in all non-chartrans
+  cases. - KW
+
+1997-03-12
+ Lynx 2.7ac-0.6
+  some doc changes, make compilation in src/chrtrans less verbose,
+  no more *.h_old backup copies.
+
+1997-03-12
+ Lynx 2.7ac-0.5
+  patch from Tom Dickey for refinement of SVr4 (ncurses) color support
+
+1997-03-11
+ Lynx 2.7ac-0.4
+  New patches from Wayne for Win32/DOS applied.
+
+1997-03-11
+ Lynx 2.7ac-0.3
+  today's 27bugfixes also merged in.
+
+1997-03-11
+ Lynx 2.7ac-0.2
+* Merged code from Thomas E. Dickey and Jim Spath for auto configuration
+  and simple (SLang-like) curses color, which was based on 2.7wb+ct-0.4,
+  with 27bugfixes up to 1997-03-10.
+
+1997-03-03
+ Lynx 2.7wb+ct-0.4
+* (chartrans) Minor cleanups (makeuctb.c, chrtrans/Makefile, HTPlain.c)
+  to enable successful compilation on Win32.
+  Also changes and new files from Wayne to fix FTP and enable Mail for Win32,
+  and to compile chartrans code.
+
+1997-03-03
+ Lynx 2.7ct-0.8
+  Lynx 2.7 chartrans + 27bugfixes up to 1997-03-02
+
+1997-02-28
+ Lynx 2.7ct-0.7
+  Lynx 2.7 chartrans + 27bugfixes up to 1997-02-28
+  small correction in SGML.c (set_chartrans_handling)
+
+1997-02-27
+ Lynx 2.7ct-0.6
+  Lynx 2.7 chartrans + 27bugfixes up to 1997-02-26
+
+1997-02-26
+ Lynx 2.7ct-0.5
+  minor tweaks for packaging
+
+1997-02-26
+ Lynx 2.7ct-0.4
+  Ok, now really remove local configuration changes (for distribution)...
+
+1997-02-25
+ Lynx 2.7ct-0.3
+  merged with Fote's 27bugfixes up to 1997-02-25
+
+1997-02-25
+ Lynx 2.7ct-0.2
+  Removed some local changes from userdefs.h and Makefile.
+  Mapping of U+fffd (replacement) to 0x00 removed from the used
+  iso0x table files.
+
+1997-02-25
+ Lynx 2.7ct-0.1
+  Update to work with official Lynx 2.7 distribution.
+  Add showing of effective charset in LYShowInfo.c even if not explicitly
+  given.
+  No showing of (TM) as (R) any more - mostly changes in LYCharUtils.c
+  (but these are independent of the chartrans stuff, translation routines 
+  in LYCharUtils.c still not chartrans-ified).
+  Prefer HTTP-EQUIV over NAME in META tags.
+  Start managing changes with PRCS - the Project Revision Control System.
+ 
+1996-12-01
+ lynx-patch-2.6ct-0.2.pch
+  Update to work with 11-30-96 Composite Patch.
+  Two new translation tables: cp852, windows-1250.
+  Compiling without -DEXP_CHARTRANS now also works... but one still has to
+  manually remove (comment out) first line of src/Makefile for that.
+  Minor changes to README files, this file.
+
+1996-11-29
+ add-to-cp-2.6ct-0.1a.zip - install over Lynx2.6 + 11-28-96 CP.
+  Full files no diffs.
+ add-to-offi-2.6ct-0.1a.zip - install over Lynx2.6 to get 11-28-96 CP +
+  chartrans.  Full files, no diffs.
+
+ lynx-patch-2.6ct-0.1a.pch
+  Update to work with 11-28-96 Composite Patch.
+
+1996-11-28
+ lynx-newfiles-2.6ct-0.1.{zip,tar.gz}, lynx-patch-2.6ct-0.1.pch
+  First packaged and announced.  Works with 11-24-96 Composite Patch
+  from Hiram Lester.
diff --git a/CHANGES.configure b/CHANGES.configure
new file mode 100644
index 00000000..7e501966
--- /dev/null
+++ b/CHANGES.configure
@@ -0,0 +1,62 @@
+1997-04-15
+----------
+* refined logic of SVr4 curses color support to test the no_color_video
+  attribute - TD
+* ifdef'd NCURSES_MOUSE_VERSION logic to allow build with ncurses 1.9.4 - TD
+* ifdef'd wgetbkgd misspelling to allow build with ncurses prior to 1.9.9g - TD
+* document USE_MOUSE configuration-option - TD
+* modify configure script and makefile.in templates to make BSDI_Makefile
+  obsolete - TD
+* rename config.h to lynx_cfg.h to minimize conflict when configuring against
+  ncurses or slang in nonstandard locations - TD
+* new autoconf macro CF_HEADER_PATH is used to make header-search for slang
+  the same as ncurses - TD
+* modify CF_CURSES_LIBS, CF_NCURSES_LIBS and CF_SLANG_LIBS to accommodate
+  predefinition of $LIBS variable - TD
+* corrected autoconf'd compiler flags for Ultrix - TD
+* add config.guess & config.sub to allow specialized host-type checks - TD
+* guard against redefinition of NO_FILIO_H - TD
+* use new autoconf macro CF_SYSTEM_MAIL_FLAGS /jes
+
+1997-04-06
+----------
+* modified LYMain.c, LYMail.c, LYPrint.c, LYReadCFG.c, LYGlobalDefs.h
+  to add SYSTEM_MAIL_FLAGS define and system_mail_flags global
+  variable and remove MMDF from internal code.  /jes
+
+1997-04-02
+----------
+* add Andrew Kuchling's patch to support mouse-clicks with ncurses.
+* refine tests that address porting problems to SCO (detecting struct winsize,
+  workaround for misdefinition of 'remove')
+* refine CF_COLOR_CURSES test to avoid ncurses 1.9.9e bugs.
+* refine CF_PATH_PROG to allow for machines that haven't the given programs,
+  by using only the program name and added configure option
+  --disable-full-paths to enforce this behavior.
+* fixes for some gcc compiler warnings (missing prototypes, unused variables,
+  unintialized variables, shadowed variables, 2-3 places where assignments were
+  not being performed due to syntax errors -- LYHistory.c, LYMail.c).
+* correct cast in HTFWriter.c that may break if atoi() is not prototyped.
+* add top-level makefile target 'maintainer-clean', use this to remove Lynx.prj
+
+1997-03-22
+----------
+* Further reduction of top-level makefile.in by moving definitions out of
+  WWW/Implementation/*/Makefile, so only one is needed for autoconfigured
+  build (i.e., WWW/Implementation/unix/Makefile).  This highlights the
+  remaining differences between the top-level targets - TD
+* Make configure script generate Unix makefiles in subdirectories, a step
+  toward being able to run make from any directory, for development - TD
+* Add autoconf tests for paths of programs, including sendmail vs mmdf - TD
+* Add configure script options for development (--disable-echo, --enable-debug,
+  --enable-find-leaks, --enable-warnings) - TD
+* Allow user to override search path for ncurses header by setting $CFLAGS or
+  $CPPFLAGS - TD
+* Correct array limit in LYCurses.c for SVr4 color support - TD
+* Use addstr rather than printw in popup-forms to address concern about 8-bit
+  characters - TD
+
+1997-3-9
+--------
+* Integrated (simple) color, auto-configure patches with 2.7 following
+  chrtrans patch - T.Dickey, J.Spath.
diff --git a/CHANGES.new b/CHANGES.new
new file mode 100644
index 00000000..bed0e341
--- /dev/null
+++ b/CHANGES.new
@@ -0,0 +1,345 @@
+	Changes in the development code based on Lynx v2.7.
+	===================================================
+[ This file might finally become the CHANGES file for a new Lynx release.
+More detailed change information may be in separate files, which could
+later disappear.  Currently included are changes from Foteos Macrides'
+bugfixes, changes in chartrans code (see also CHANGES.chartrans), changes
+for compilation on Win32 and DOS platforms (see also README.win-386),
+changes for auto-configure and simple curses color (see also
+README.configure), and miscellaneous other changes.  Note that the 2.7 ->
+2.7.1 changes (which are listed at the beginning of the current CHANGES
+file) are duplicated here. - KW]
+
+1997-04-15
+----------
+* refined logic of SVr4 curses color support to test the no_color_video
+  attribute - TD
+* ifdef'd NCURSES_MOUSE_VERSION logic to allow build with ncurses 1.9.4 - TD
+* ifdef'd wgetbkgd misspelling to allow build with ncurses prior to 1.9.9g - TD
+* document USE_MOUSE configuration-option - TD
+* modify configure script and makefile.in templates to make BSDI_Makefile
+  obsolete - TD
+* rename config.h to lynx_cfg.h to minimize conflict when configuring against
+  ncurses or slang in nonstandard locations - TD
+* new autoconf macro CF_HEADER_PATH is used to make header-search for slang
+  the same as ncurses - TD
+* modify CF_CURSES_LIBS, CF_NCURSES_LIBS and CF_SLANG_LIBS to accommodate
+  predefinition of $LIBS variable - TD
+* corrected autoconf'd compiler flags for Ultrix - TD
+* add config.guess & config.sub to allow specialized host-type checks - TD
+* guard against redefinition of NO_FILIO_H - TD
+* use new autoconf macro CF_SYSTEM_MAIL_FLAGS /jes
+
+1997-04-09
+* Many changes to further the Win32 and 386 ports.  An emulation of
+  the HTVMS_ calls was used to try and cover all the DOS'izms.
+  A specialized ifdef for pdcurses color mapping added.  Some keypad
+  tweaks.  More generalized process spawing.  .lynrc is lynx.rc for 386.
+  - WB
+* Moved handling for NEWS_POSTING in LYReadCFG.c to the right place,
+  so that it can actually have an effect. - LWV
+1997-04-08
+* New translation table koi8r_uni for KOI8-R charset.  Lynx can now
+  translate between iso-8859-5 and KOI8-R, at least for the cyrillic
+  characters present in both. - KW
+* New translation table def7_uni with default 7-bit mappings 
+  (replacement representation).  Based on RFC1345 and mnemonic,ds
+  from ftp://dkuug.dk/i18n/ and previous Lynx replacements
+  in LYCharSets.c and IPA FAQ convention and stuff for Ethiopic and
+  KOI8-R.  It maps many of the accented Latin characters present in
+  Unicode to their unaccented counterparts.  This table is now
+  used for the "7 bit approximations" display "character set". - KW
+* Entities for Latin2 characters added to HTMLDTD.c  These also
+  include many entity names for ASCII characters, and characters
+  which are in both iso-8859-1 and iso-8859-2. - Hynek Med
+* Changes to the non-chartrans translation tables in LYCharSets.c
+  for Đ, Ð, and ð.  Treat Đ more like
+  an entity for the (Latin-2) Unicode character U+0110, since
+  that seems to be SGML standard usage. - KW
+* Added mappings for some "smart quote" characters to several
+  translation tables. - KW
+* Make makeuctb slightly more flexible (accept unicode range for
+  mapping to single code point). - KW
+1997-04-07
+* Took out special-case handling in the curses-color code for underlining 
+  when lynx is running under linux using the linux console with color.  
+  The code was introduced on 1997-03-12 and would ignore "smul" capability
+  info from terminfo or termcap under those circumstances, always using
+  bold instead of underline. - KW
+* Slightly modified the FORM handling patch of 1997-04-05, as follows:
+  Use a generic test for a non-SGML_EMPTY element for bypassing the
+  stack pop in HTML_end_element() of HTML.c instead of an explicit
+  test for HTML_FORM. - KW
+1997-04-06
+* Patch for IMG elements which have both ISMAP and USEMAP in effect.
+  In HTML_start_element() don't generate the "[ISMAP]-" string for 
+  output in this case, unless clickable_images is set TRUE. - KW
+1997-04-05
+* Patch for Lynx v2.7.1 to handle invalidly interdigitated container
+  elements or spurious container end tags without substitutions of
+  "expected" FORM end tags by the SGML.c stack-based parser, and
+  without messing up the HTML.c stack-based parser.  Reliably succeeds
+  in not closing FORMs before all of the FORM elements, including
+  submit buttons, have been processed.  Should be reasonably crash
+  safe (hopefully as safe as the vanilla v2.7.1), but there are no
+  guarantees. - FM
+=======================================================================
+---  Release of Lynx2-7 + BUGFIXES as Lynx v2.7.1 (April 4, 1997)   ---
+-----------------------------------------------------------------------
+  Changes listed below were made to the development code in parallel 
+  to the bugfixes which resulted in 2.7.1, and include those bugfixes
+  (or equivalent changes).
+=======================================================================
+1997-04-02
+* add Andrew Kuchling's patch to support mouse-clicks with ncurses. - TD
+* refine tests that address porting problems to SCO (detecting struct winsize,
+  workaround for misdefinition of 'remove')
+* refine CF_COLOR_CURSES test to avoid ncurses 1.9.9e bugs. - TD
+* refine CF_PATH_PROG to allow for machines that haven't the given programs,
+  by using only the program name and added configure option
+  --disable-full-paths to enforce this behavior. - TD
+* fixes for some gcc compiler warnings (missing prototypes, unused variables,
+  unintialized variables, shadowed variables). - TD
+* Fixed typos in LYHistory.c, LYMail.c and LYMain.c which caused
+  failures of flag setting in the distributed code. - TD
+* correct cast in HTFWriter.c that may break if atoi() is not prototyped. - TD
+* add top-level makefile target 'maintainer-clean', use this to remove
+  Lynx.prj - TD
+1997-03-31
+* Added a missing check for whether the fragment token is NULL in
+  LYConvertToURL() of LYUtils.c.  Without the check, the for-Unix code
+  could crash if a local file spec was entered as a startfile or goto
+  with escaped characters. - KW
+* Mod in HTML.c to retain "[INLINE]" as the default ALT string if an
+  IMG element has an ISMAP attribute but is not in Anchor content such
+  that it could not in fact function as a server-side image map. - FM
+1997-03-27
+* In mainloop(), after the call to HText_pageDisplay() following a change
+  of the document view, ensure that curdoc.link does not remain set to -1 
+  if there are any links on the screen.  This would otherwise happen if
+  a document is pushed to the history stack while there are no links, and
+  later popped (and refreshed) after one or more links have been created.
+  This change prevents segmentation faults which occurred after creation
+  of a new file in a previously empty directory via the DIRED menu.  The
+  access to invalid memory only occurred if the screen showing the empty
+  directory did not have a parent dir reference link (which is always the
+  case if NO_PARENT_DIR_REFERENCE was specified at compilation time). - KW
+* In LYLocal.c, modified the code handling DIRED_MENU to do more careful
+  checking of the selected file.  In addition to "TAG", "FILE", and "DIR", 
+  DIRED_MENU definitions in lynx.cfg now also recognize LINK as a type.
+  DIRED_MENU definitions with a type field of "LINK" are only used if the
+  current selection is a symbolic link ("FILE" and "DIR" definitions are
+  not used in that case).  The default menu definitions have been updated
+  to reflect this change, and to avoid the showing of menu items whose
+  action would always fail - KW
+* Some cleanup to eliminate compiler warnings, remove some unused 
+  variables - KW
+* Fixed a typo and added comments for the code in LYMainLoop.c which
+  decides whether to load the URLs for homepage and/or startfile into
+  the goto buffer at startup.  The typo in the distributed code caused
+  the startfile URL always to be added to the goto buffer, even if
+  it had POST content such that it could be resent inappropriately
+  as a GET request via the goto buffer. - FM
+* Added a bsdi-slang target to the Makefile. - LE
+1997-03-26
+* Changed highlighting of strings found by a WHEREIS ('/') search.
+  Now uses Christmas tree attribute combination ("all bits are on"),
+  which with color support translates to COLOR:7. - KW
+* Modified the HTStream structure and associated code in src/HTFWriter.c
+  so that we save and use the relevant content of the associated
+  HTPresentation structure as two HTFormat elements rather than via a
+  pointer to the HTPresentation structure itself, because the latter
+  structure might not be valid under some circumstances when
+  HTFWriter_free() is called.  The distributed code might indirectly
+  result in segmentation faults during downloading on linux and some
+  other flavors of Unix (though they don't occur for most flavors, or
+  on VMS). - KW
+1997-03-23
+* Further reduction of top-level makefile.in by moving definitions out of
+  WWW/Implementation/*/Makefile, so only one is needed for autoconfigured
+  build (i.e., WWW/Implementation/unix/Makefile).  This highlights the
+  remaining differences between the top-level targets - TD
+* Make configure script generate Unix makefiles in subdirectories, a step
+  toward being able to run make from any directory, for development - TD
+* Add autoconf tests for paths of programs, including sendmail vs mmdf - TD
+* Add configure script options for development (--disable-echo, --enable-debug,
+  --enable-find-leaks, --enable-warnings) - TD
+* Allow user to override search path for ncurses header by setting $CFLAGS or
+  $CPPFLAGS - TD
+* Correct array limit in LYCurses.c for SVr4 color support - TD
+* Use addstr rather than printw in popup-forms to address concern about 8-bit
+  characters - TD
+1997-03-21
+* Changes in auto config handling of ncurses header location, function
+  used for reading terminal input, some other system dependent tweaks
+  (including SCO broken remove, time.h) - TD
+* Fix for popup handling with late ncurses versions (uses wprintw
+  instead of waddstr in LYForms.c) - TD
+* Mods in LYPrint.c to use ".txt" as the output file extension for
+  all rendered text/html files regardless of their original extension.
+  The distributed code was doing this only for ones with an extension
+  of ".html".  The original extension still is retained if the file
+  is being output as source. - FM
+* Added protection against passing a NULL pointer for path_url to
+  render_item() from dired_options() in LYLocal.c. - GN
+1997-03-20
+* Tweaked the protection against URLs directed to port 19 or port 25 so
+  that it can't be circumvented via lead zeros in the port numbers. - FM
+* Changed the compilation default so as not to send From MIME headers to
+  http or https servers.  The default can still be changed via lynx.cfg.
+  Replaced the -nofrom disabling switch to a -from switch for toggling
+  the compilation or configuration default.  Sending the From header
+  has become widely regarded as an invasion of privacy risk, particularly
+  in conjunction with cookie support. - FM
+* Corrected a typo in the lynx.cfg comments concerning TRUSTED_LYNXCGI
+  rules. - KW
+1997-03-17
+* Mods of LYNews.c and LYMail.c to prepend a "-- " separator before
+  appending the LYNX_SIG_FILE signature file to news and email
+  messages. - FM
+* Made the installation mode 755 in the top-level Makefile.  The
+  distributed code used 555, and some install commands were unable
+  to do the strip. - LWV
+1997-03-14
+* Corrected typos and expanded the comments concerning lynxcgi symbols
+  in userdefs.h and lynx.cfg. - FM
+* Modified SGML.c to handle the numeric character reference ™ as
+  the named entity ™ also in the non-chartrans case.  The
+  trademark character (given by ™ or ™) will be shown as
+  "(TM)" as the ASCII substitution unless the current display character
+  has a code point for the trademark character or unless overridden by a
+  chartrans translation table. The code of 1997-02-25 prevented showing
+  the trademark sign as "(R)" but did not work in all non-chartrans
+  cases. - KW
+* Include time.h via tcp.h for SVR4 systems.  The tcp.h header does include
+  sys/time.h for Unix systems, but this apparently doesn't get  struct tm 
+  and  extern char * ctime()  declared for SVR4. - FM
+1997-03-13
+* Added protection in LYGetFile.c against connections to the port 25
+  ESMTP service. - FM
+1997-03-12
+* (chartrans) Make compilation in src/chrtrans less verbose, no more 
+  generating automatic *.h_old backup copies. - KW
+* Refinement to the SVr4 (ncurses) color support, allowing it
+  to more closely model the slang support. - TD
+1997-03-11
+* Tweak for command line parsing of files with no URL in LYUtils.c.
+  Also added ability to pass partial domain names in the DJGPP version. - WB
+* Added the closing function for Win32 TCP in LYExit.c (did anyone see a
+  difference?!). - WB
+* Altered LYCurses.c so that the DJGPP version could spawn other programs
+  without certain death. - WB
+* Ignoring the whole ~/lynx.cfg problem (expanding '~') entirely for the 
+  Win32 version for now. - WB
+* Some other tweaks for Win32 and DJGPP - WB
+* Added protection in LYGetFile.c against denial of service attacks via
+  the port 19 CHARGEN service.  The distributed code left Lynx or proxies
+  vulnerable to such attacks via direct or redirection URLs. - FM
+1997-03-10
+* Fixed error in the handling of numeric character references with values
+  greater than 255 in SGML.c.  The distributed code was breaking after
+  substitutions instead of falling through to reset the string chunk and
+  recycle the terminator if not a semi-colon. - FM
+1997-03-09
+* Integrated (simple) color, auto-configure patches with 2.7 following
+  chrtrans patch - T.Dickey, J.Spath.
+1997-03-08
+* Fixed error in the switch positioning of checks for XLOADIMAGE_COMMAND
+  and wais_proxy in LYReadCFG.c.  The distributed code had them reversed
+  under case 'W' versus case 'X'. - PDS
+* Expanded the copyright and licensing statements in the -version
+  output. - FM
+1997-03-04
+* Corrected the offset computation in textsearch() of LYSearch.c so that
+  WHEREIS searches repeated on a page with no links seek the target
+  starting at the line immediately following the last displayed.  The
+  distributed code was setting a greater offset. - JS
+1997-03-02
+* Don't entify post content for the showinfo display, now that we are
+  making it an XMP block in that display to handle all of the supported
+  enctypes. - FM
+* Patches to fix mail and FTP for Win32 (LYMail.c, HTFile.c). - WB
+* Makefiles to compile chartrans code for Win32. - WB
+* (chartrans) Minor cleanups (makeuctb.c, chrtrans/Makefile, HTPlain.c)
+  to enable successful compilation on Win32. - KW
+1997-02-28
+* Changed all references to "image/*" to just "image" in the userdefs.h
+  and lynx.cfg comments about XLOADIMAGE_COMMAND.  The "/*" within the
+  userdefs.h comments was generating warnings from some compilers. - FM
+* Added a snake-slang target to the Makefile, and added -DUNIX to the
+  LYFLAGS for the snake3 and snake3-slang targets (HP-UX apparently does
+  not define "unix" itself with the -Ae switch, and thus needs to have
+  that definition forced via -DUNIX). - HL
+* Merged with patches and makefiles from Wayne Buttles 
+  (buttles@wsb.champlain.edu) to enable compilation in two new environments: 
+  Win32 (95/NT) with Borland C++ 4.52 compiler, and 386 DOS with DJGPP 
+  compiler.  See README.win-386 for more info.  Separate utility programs
+  needed for compiling and running Lynx on those platforms are available
+  from Wayne at <http://www.fdisk.com/doslynx/wlynx/>. - WB, KW
+* Fixed Telnet for Win32 - WB
+* (chartrans) Small correction in SGML.c (set_chartrans_handling) - KW
+1997-02-26
+* Close both descriptors of the pipe() for the NSL_FORK enabled code
+  in HTTCP.c.  The distributed code was closing only one of them on
+  completed gethostbyname() calls, and neither on 'z'aps. - FM
+* Changed the HREF for the "Lynx FAQ" link in the online 'h'elp to
+  its new URL (http://www.slcc.edu/lynx/faq.html). - FM
+1997-02-25
+* More reverse engineering to cope with Netscape's bogus cookie header
+  parsing.  The parser must not require an '=' between the expires
+  attribute name and value, because Set-Cookie headers are being
+  transmitted without it (e.g., by http://law.agps.gov.au).  So Lynx
+  now treats that as another special case. - FM
+* Cope with invalid use of expires attributes in Version 1 cookies.
+  An -06 State Management draft recommends that for "backward
+  compatibility", and has been severely criticized in the HTTP-WG,
+  but it would be foolish not to assume Netscape will do that.  See the
+  expanded comments in LYSetCookie() of LYCookie.c for more information.
+  Note that "expires" thus cannot be used as a Version 1 cookie name, but
+  a provider would be foolish to use that, anyway.  Note also that the
+  possibility of using different header names for Version 1 versus
+  Version 0 (a.k.a., "Netscape") cookies is being discussed in the
+  HTTP-WG, which might have been better to do in the first place, but
+  the -05 draft has been approved as RFC 2109:
+    http://info.internet.isi.edu/in-notes/rfc/files/rfc2109.txt
+  so it would be a while before that were done, if ever. - FM
+* chartrans code for translation of character sets, handling of Unicode,
+  and i18n updated for Lynx 2.7.  Support for CHARSET attribute on A
+  tags.  New directory src/chrtrans with table files.  Compilation flags
+  -DEXP_CHARTRANS, -DEXP_CHARTRANS_AUTOSWITCH (for linux), 
+  -DSLANG_MBCS_HACK (for raw unicode console).  
+  New command line options when compiled with -DEXP_CHARTRANS: 
+  -assume_charset, -assume_local_charset, -assume_unrec_charset.  
+  See README.chartrans and README files in src/chrtrans for more info. - KW
+* No showing of &trade; or &#8482; as (R) any more, use (TM) instead. - KW
+* Prefer HTTP-EQUIV over NAME in META tags. - KW
+1997-02-22
+* Fixed a memory management glitch which could cause a crash if the
+  MIME type of a reply to a FORM submission with METHOD=POST caused a
+  download offer to be invoked. - FM
+* Don't simplify ftp URLs by trimming trailing slashes if the URL is
+  being proxied.  The Netscape proxy server for some unknown reason
+  can return redirection for ftp URLs with the slash appended, and
+  trimming it can result in a redirection loop.  Based on a posted
+  patch from KW. - FM
+* Fixed two typos in the checks for HTPassHighCtrlRaw in LYExpandString()
+  of LYCharUtils.c. - KW
+* Fixed typo in the equality check on line 1553 in HTGopher.c. - AM
+1997-02-19
+* Reset the host string after an '@', if present, when trimming default
+  ":port" fields in the new code aimed at compliance with the Masinter
+  and Fielding URL drafts, expected to replace RFCs 1738 and 1808.  The
+  distributed code neglected to do that, and was ending up on a ":password"
+  field, if present, instead of on the ":port" field, causing the username
+  to be treated as the host name.  - FM
+* Expand the default port trimming so as to include all of the registered
+  URL schemes which support a port field in the v2.7 release. - FM
+* Correctly uncache the current directory listing when invoking an 'u'pload,
+  so that it will be updated to include the uploaded file if placed in the
+  current directory.  The released code attempted to do this in a manner
+  which prevented a pop, so that the directory listing couldn't be restored
+  on return from the uploader menu. - FM
+* Recognize a bookmark file used as the startfile, whether it resides in the
+  home directory or in a subdirectory off home.  The released code failed if
+  the file was in home, and not in a subdirectory, unless the -book switch
+  was used instead of a startfile entry or WWW_HOME variable. - FM
diff --git a/Lynx.prj b/Lynx.prj
new file mode 100644
index 00000000..34c70df0
--- /dev/null
+++ b/Lynx.prj
@@ -0,0 +1,428 @@
+;; -*- Lisp -*-
+(Created-By-Prcs-Version 1 2 0)
+(Project-Description "PRCS Project for The Lynx browser")
+(Project-Version Lynx 2.7.1ac-0 6)
+(Parent-Version Lynx 2.7.1ac-0 5)
+
+(Version-Log "fixes for ncurses+slang autoconfigure when $LIBS is defined, making library
+search redundant.  fixes for pre-1.9.9g ncurses, ultrix and bsdi.
+")
+(New-Version-Log "")
+(Checkin-Time "Tue, 15 Apr 1997 19:40:10 -0600")
+(Checkin-Login dickey)
+(Populate-Ignore ("\\.o$" "\\.a$" "~$" "^a.out$" "^core$"
+                  "\\.dvi$" "\\.aux$" "^\\..*_aux$" "\\.log"
+                  "\\.zip$" "^obsolete" "/obsolete"
+                  "/chrtrans/.*uni_h" "\\.h_old$"
+                  "^lynx$" "/lynx$" "\\.bak$" "\\.old$" "\\.rej$" "\\.orig$"
+		  "w3chttp\\."))
+(Project-Keywords)
+(Files
+;; This is a comment.  Fill in files here.
+;; For example:  (prcs/checkout.cc ())
+
+;; Files added by populate at Mon, 24 Feb 1997 18:11:17 -0600:
+
+  (CHANGES2-6 (Lynx/b/0_CHANGES2-6 1.1 644))
+  (utils/lpansi/vmsbuild.com (Lynx/b/45_vmsbuild.c 1.1 644))
+  (utils/lpansi/Makefile (Lynx/b/46_Makefile 1.1 644))
+  (utils/lpansi/lpansi.1 (Lynx/b/47_lpansi.1 1.1 644))
+  (utils/lpansi/README (Lynx/b/48_README 1.1 644))
+  (utils/lpansi/lpansi.c (Lynx/b/49_lpansi.c 1.1 644))
+  (utils/inews/config.h (Lynx/b/50_config.h 1.1 644))
+  (utils/inews/config.h-dist (Lynx/b/51_config.h-d 1.1 644))
+  (utils/inews/version.c (Lynx/c/0_version.c 1.1 644))
+  (utils/inews/nntp.h (Lynx/c/1_nntp.h 1.1 644))
+  (utils/inews/inews.c (Lynx/c/2_inews.c 1.1 644))
+  (utils/inews/conf.h (Lynx/c/3_conf.h 1.1.1.1 644) :no-keywords)
+  (utils/inews/clientlib.h (Lynx/c/4_clientlib. 1.1 644))
+  (utils/inews/clientlib.c (Lynx/c/5_clientlib. 1.1 644))
+  (utils/inews/README.NN (Lynx/c/6_README.NN 1.1 644))
+  (utils/inews/README (Lynx/c/7_README 1.1 644))
+  (utils/inews/Manifest (Lynx/c/8_Manifest 1.1 644))
+  (utils/inews/Makefile (Lynx/c/9_Makefile 1.1.1.1 644) :no-keywords)
+  (userdefs.h (Lynx/c/10_userdefs.h 1.1.2.1.1.1.1.5 644))
+  (test/tabtest.html (Lynx/c/11_tabtest.ht 1.1 644))
+  (test/iso8859-1.html (Lynx/c/12_iso8859-1. 1.1 644))
+  (test/TestComment.html (Lynx/c/13_TestCommen 1.1 644))
+  (test/ISO_LATIN1_test.html (Lynx/c/14_ISO_LATIN1 1.1 644))
+  (test/README.txt (Lynx/c/15_README.txt 1.1 644))
+  (src/LYVMSdef.h (Lynx/c/16_LYVMSdef.h 1.1 644))
+  (src/LYCookie.h (Lynx/c/17_LYCookie.h 1.1 644))
+  (src/LYCookie.c (Lynx/c/18_LYCookie.c 1.3 644))
+  (src/LYCharUtils.h (Lynx/c/19_LYCharUtil 1.2 644))
+  (src/LYMap.h (Lynx/c/20_LYMap.h 1.1 644))
+  (src/LYMap.c (Lynx/c/21_LYMap.c 1.2 644))
+  (src/LYCharUtils.c (Lynx/c/22_LYCharUtil 1.2.1.4 644))
+  (src/LYEditmap.c (Lynx/c/23_LYEditmap. 1.1 644))
+  (src/LYTraversal.h (Lynx/c/24_LYTraversa 1.1 644))
+  (src/LYTraversal.c (Lynx/c/25_LYTraversa 1.1.1.2 644))
+  (src/LYList.h (Lynx/c/26_LYList.h 1.1 644))
+  (src/LYCgi.h (Lynx/c/27_LYCgi.h 1.1 644))
+  (src/LYCgi.c (Lynx/c/28_LYCgi.c 1.2 644))
+  (src/LYJump.h (Lynx/c/29_LYJump.h 1.2 644))
+  (src/HTNestedList.h (Lynx/c/30_HTNestedLi 1.1 644))
+  (src/LYLeaks.c (Lynx/c/31_LYLeaks.c 1.1 644))
+  (src/LYGCurses.h (Lynx/c/32_LYGCurses. 1.1 644))
+  (src/win_tcp.opt (Lynx/c/33_win_tcp.op 1.1 644))
+  (src/vaxc.opt (Lynx/c/34_vaxc.opt 1.1 644))
+  (src/ucxshr.opt (Lynx/c/35_ucxshr.opt 1.1 644))
+  (src/ucxolb.opt (Lynx/c/36_ucxolb.opt 1.1 644))
+  (src/LYLocal.h (Lynx/c/37_LYLocal.h 1.1 644))
+  (src/LYSystem.h (Lynx/c/38_LYSystem.h 1.1 644))
+  (src/LYShowInfo.h (Lynx/c/39_LYShowInfo 1.1 644))
+  (src/LYBookmark.h (Lynx/c/40_LYBookmark 1.2 644))
+  (src/LYReadCFG.h (Lynx/c/41_LYReadCFG. 1.1 644))
+  (src/LYNews.h (Lynx/c/42_LYNews.h 1.1 644))
+  (src/LYMail.h (Lynx/c/43_LYMail.h 1.2 644))
+  (src/LYCharSets.h (Lynx/c/44_LYCharSets 1.2 644))
+  (src/LYCharSets.c (Lynx/c/45_LYCharSets 1.3 644))
+  (src/LYDownload.h (Lynx/c/46_LYDownload 1.1 644))
+  (src/LYDownload.c (Lynx/c/47_LYDownload 1.3 644))
+  (src/HTML.h (Lynx/c/48_HTML.h 1.2 644))
+  (src/LYUpload.h (Lynx/c/49_LYUpload.h 1.1 644))
+  (src/HTSaveToFile.h (Lynx/c/50_HTSaveToFi 1.1 644))
+  (src/DefaultStyle.c (Lynx/c/51_DefaultSty 1.1 644))
+  (src/HTFont.h (Lynx/d/0_HTFont.h 1.1 644))
+  (src/HTAlert.h (Lynx/d/1_HTAlert.h 1.1 644))
+  (src/HTFWriter.c (Lynx/d/2_HTFWriter. 1.1.2.4 644))
+  (src/LYList.c (Lynx/d/3_LYList.c 1.2 644))
+  (src/LYexit.c (Lynx/d/4_LYexit.c 1.1.1.2 644))
+  (src/LYrcFile.h (Lynx/d/5_LYrcFile.h 1.1 644))
+  (src/tcpwareshr.opt (Lynx/d/6_tcpwareshr 1.1 644))
+  (src/LYPrint.h (Lynx/d/7_LYPrint.h 1.1 644))
+  (src/tcpwareolb.opt (Lynx/d/8_tcpwareolb 1.1 644))
+  (src/socketshr_tcp.opt (Lynx/d/9_socketshr_ 1.1 644))
+  (src/multinet.opt (Lynx/d/10_multinet.o 1.1 644))
+  (src/LYHistory.h (Lynx/d/11_LYHistory. 1.1 644))
+  (src/gnuc.opt (Lynx/d/12_gnuc.opt 1.1 644))
+  (src/decc.opt (Lynx/d/13_decc.opt 1.1 644))
+  (src/cmu_tcp.opt (Lynx/d/14_cmu_tcp.op 1.1 644))
+  (src/LYrcFile.c (Lynx/d/15_LYrcFile.c 1.3 644))
+  (src/LYEdit.h (Lynx/d/16_LYEdit.h 1.1 644))
+  (src/LYOptions.h (Lynx/d/17_LYOptions. 1.2 644))
+  (src/LYGetFile.h (Lynx/d/18_LYGetFile. 1.2 644))
+  (src/LYMainLoop.h (Lynx/d/19_LYMainLoop 1.2 644))
+  (src/LYStrings.h (Lynx/d/20_LYStrings. 1.1.1.2 644))
+  (src/LYHistory.c (Lynx/d/21_LYHistory. 1.1.1.2 644))
+  (src/LYCurses.h (Lynx/d/22_LYCurses.h 1.4.1.2 644))
+  (src/LYSignal.h (Lynx/d/23_LYSignal.h 1.1 644))
+  (src/LYClean.h (Lynx/d/24_LYClean.h 1.1 644))
+  (src/LYGlobalDefs.h (Lynx/d/25_LYGlobalDe 1.1.2.3 644))
+  (src/LYStructs.h (Lynx/d/26_LYStructs. 1.1 644))
+  (src/LYUtils.c (Lynx/d/27_LYUtils.c 1.12 644))
+  (src/LYSearch.h (Lynx/d/28_LYSearch.h 1.1 644))
+  (src/Makefile (Lynx/d/29_Makefile 1.2.2.2 644))
+  (src/LYKeymap.h (Lynx/d/30_LYKeymap.h 1.2 644))
+  (src/LYKeymap.c (Lynx/d/31_LYKeymap.c 1.1 644))
+  (src/HTForms.h (Lynx/d/32_HTForms.h 1.1 644))
+  (src/GridText.h (Lynx/d/33_GridText.h 1.1 644))
+  (src/LYUtils.h (Lynx/d/34_LYUtils.h 1.1.1.3 644))
+  (src/LYUpload.c (Lynx/d/35_LYUpload.c 1.2 644))
+  (src/LYStrings.c (Lynx/d/36_LYStrings. 1.8 644))
+  (src/LYShowInfo.c (Lynx/d/37_LYShowInfo 1.4 644))
+  (src/LYSearch.c (Lynx/d/38_LYSearch.c 1.3 644))
+  (src/LYReadCFG.c (Lynx/d/39_LYReadCFG. 1.1.1.1.1.5 644))
+  (src/LYPrint.c (Lynx/d/40_LYPrint.c 1.5 644))
+  (src/LYOptions.c (Lynx/d/41_LYOptions. 1.1.1.2 644))
+  (src/LYNews.c (Lynx/d/42_LYNews.c 1.3 644))
+  (src/LYMainLoop.c (Lynx/d/43_LYMainLoop 1.2.3.6 644))
+  (src/LYMain.c (Lynx/d/44_LYMain.c 1.1.2.1.1.5 644))
+  (src/LYMail.c (Lynx/d/45_LYMail.c 1.1.1.5 644))
+  (src/LYLocal.c (Lynx/d/46_LYLocal.c 1.5 644))
+  (src/LYJump.c (Lynx/d/47_LYJump.c 1.2 644))
+  (src/LYGetFile.c (Lynx/d/48_LYGetFile. 1.6 644))
+  (src/LYForms.c (Lynx/d/49_LYForms.c 1.5 644))
+  (src/LYEdit.c (Lynx/d/50_LYEdit.c 1.2 644))
+  (src/LYCurses.c (Lynx/d/51_LYCurses.c 1.1.2.6 644))
+  (src/LYClean.c (Lynx/e/0_LYClean.c 1.2 644))
+  (src/LYBookmark.c (Lynx/e/1_LYBookmark 1.1.1.3 644))
+  (src/HTML.c (Lynx/e/2_HTML.c 1.1.2.4 644))
+  (src/HTInit.c (Lynx/e/3_HTInit.c 1.2 644))
+  (src/HTAlert.c (Lynx/e/4_HTAlert.c 1.2 644))
+  (src/GridText.c (Lynx/e/5_GridText.c 1.1.1.3 644))
+  (src/descrip.mms (Lynx/e/6_descrip.mm 1.1 644))
+  (samples/jumpsVMS.html (Lynx/e/7_jumpsVMS.h 1.1 644))
+  (samples/jumpsUnix.html (Lynx/e/8_jumpsUnix. 1.1 644))
+  (samples/mime.types (Lynx/e/9_mime.types 1.1 644))
+  (samples/lynx.com (Lynx/e/10_lynx.com 1.1 644))
+  (samples/mailcap (Lynx/e/11_mailcap 1.1 644))
+  (samples/lynx.cfg (Lynx/e/12_lynx.cfg 1.2.1.4 644))
+  (lynx_help/lynx_url_support.html (Lynx/e/13_lynx_url_s 1.1 644))
+  (lynx_help/Lynx_users_guide.html (Lynx/e/14_Lynx_users 1.2.1.1 644))
+  (lynx_help/keystroke_commands/cookie_help.html (Lynx/e/15_cookie_hel 1.1 644))
+  (lynx_help/keystroke_commands/visited_help.html (Lynx/e/16_visited_he 1.1 644))
+  (lynx_help/keystroke_commands/edit_help.html (Lynx/e/17_edit_help. 1.1 644))
+  (lynx_help/keystroke_commands/dired_help.html (Lynx/e/18_dired_help 1.1 644))
+  (lynx_help/keystroke_commands/xterm_help.html (Lynx/e/19_xterm_help 1.1 644))
+  (lynx_help/keystroke_commands/scrolling_help.html (Lynx/e/20_scrolling_ 1.1 644))
+  (lynx_help/keystroke_commands/print_help.html (Lynx/e/21_print_help 1.1 644))
+  (lynx_help/keystroke_commands/other_help.html (Lynx/e/22_other_help 1.1 644))
+  (lynx_help/keystroke_commands/option_help.html (Lynx/e/23_option_hel 1.2 644))
+  (lynx_help/keystroke_commands/movement_help.html (Lynx/e/24_movement_h 1.1 644))
+  (lynx_help/keystroke_commands/history_help.html (Lynx/e/25_history_he 1.1 644))
+  (lynx_help/keystroke_commands/gopher_types_help.html (Lynx/e/26_gopher_typ 1.1 644))
+  (lynx_help/keystroke_commands/bookmark_help.html (Lynx/e/27_bookmark_h 1.1 644))
+  (lynx_help/keystroke_commands/keystroke_help.html (Lynx/e/28_keystroke_ 1.1 644))
+  (lynx_help/lynx_help_main.html (Lynx/e/29_lynx_help_ 1.2 644))
+  (lynx.man (Lynx/e/30_lynx.man 1.3 644))
+  (lynx.hlp (Lynx/e/31_lynx.hlp 1.3 644))
+  (lynx.cfg (Lynx/e/32_lynx.cfg 1.2.1.5 644))
+  (fixed512.com (Lynx/e/33_fixed512.c 1.1 644))
+  (docs/RFC-MAILCAP.txt (Lynx/e/34_RFC-MAILCA 1.1 644))
+  (docs/README.txt (Lynx/e/35_README.txt 1.1 644))
+  (docs/README.html (Lynx/e/36_README.htm 1.1 644))
+  (descrip.mms (Lynx/e/37_descrip.mm 1.1 644))
+  (build.com (Lynx/e/38_build.com 1.1 644))
+  (build-slang.com (Lynx/e/39_build-slan 1.1 644))
+  (about_lynx/COPYHEADER (Lynx/e/40_COPYHEADER 1.1 644))
+  (about_lynx/COPYING (Lynx/e/41_COPYING 1.1 644))
+  (about_lynx/about_lynx-dev.html (Lynx/e/42_about_lynx 1.1 644))
+  (about_lynx/about_lynx.html (Lynx/e/43_about_lynx 1.1 644))
+  (WWW/Makefile (Lynx/e/44_Makefile 1.1 644))
+  (WWW/BUILD (Lynx/e/45_BUILD 1.1 644))
+  (WWW/Copyright.txt (Lynx/e/46_Copyright. 1.1 644))
+  (WWW/README.txt (Lynx/e/47_README.txt 1.1 644))
+  (WWW/Library/umaxv-m88k/Makefile (Lynx/e/48_Makefile 1.1 644))
+  (WWW/Library/clix/Makefile (Lynx/e/49_Makefile 1.1 644))
+  (WWW/Library/isc/Makefile (Lynx/e/50_Makefile 1.1 644))
+  (WWW/Library/ptx/Makefile (Lynx/e/51_Makefile 1.1 644))
+  (WWW/Library/netbsd/Makefile (Lynx/f/0_Makefile 1.1 644))
+  (WWW/Library/unix_x/Makefile (Lynx/f/1_Makefile 1.1 644))
+  (WWW/Library/convex/Makefile (Lynx/f/2_Makefile 1.1 644))
+  (WWW/Library/mips/Makefile (Lynx/f/3_Makefile 1.1 644))
+  (WWW/Library/sco/Makefile (Lynx/f/4_Makefile 1.1 644))
+  (WWW/Library/svr4/Makefile (Lynx/f/5_Makefile 1.1 644))
+  (WWW/Library/solaris2/Makefile (Lynx/f/6_Makefile 1.1 644))
+  (WWW/Library/osf/Makefile (Lynx/f/7_Makefile 1.1 644))
+  (WWW/Library/vax_ultrix/Makefile (Lynx/f/8_Makefile 1.1 644))
+  (WWW/Library/unix/Makefile (Lynx/f/9_Makefile 1.2 644))
+  (WWW/Library/freebsd/Makefile (Lynx/f/10_Makefile 1.1 644))
+  (WWW/Library/sun4/Makefile (Lynx/f/11_Makefile 1.1 644))
+  (WWW/Library/sun3/Makefile (Lynx/f/12_Makefile 1.1 644))
+  (WWW/Library/snake/Makefile (Lynx/f/13_Makefile 1.1 644))
+  (WWW/Library/sgi/Makefile (Lynx/f/14_Makefile 1.1 644))
+  (WWW/Library/rs6000/Makefile (Lynx/f/15_Makefile 1.1 644))
+  (WWW/Library/next/Makefile (Lynx/f/16_Makefile 1.1 644))
+  (WWW/Library/duns/Makefile (Lynx/f/17_Makefile 1.1 644))
+  (WWW/Library/decstation/Makefile (Lynx/f/18_Makefile 1.1 644))
+  (WWW/Library/apollo_m68k/Makefile (Lynx/f/19_Makefile 1.1 644))
+  (WWW/Library/vms/COPYING.LIB (Lynx/f/20_COPYING.LI 1.1 644))
+  (WWW/Library/vms/libmake.com (Lynx/f/21_libmake.co 1.1 644))
+  (WWW/Library/vms/descrip.mms (Lynx/f/22_descrip.mm 1.1 644))
+  (WWW/Library/Implementation/HTFinger.h (Lynx/f/23_HTFinger.h 1.1 644))
+  (WWW/Library/Implementation/HTFinger.c (Lynx/f/24_HTFinger.c 1.1 644))
+  (WWW/Library/Implementation/LYexit.h (Lynx/f/25_LYexit.h 1.1.1.2 644))
+  (WWW/Library/Implementation/HTVMS_WaisUI.h (Lynx/f/26_HTVMS_Wais 1.1 644))
+  (WWW/Library/Implementation/HTVMS_WaisUI.c (Lynx/f/27_HTVMS_Wais 1.1 644))
+  (WWW/Library/Implementation/HTVMS_WaisProt.h (Lynx/f/28_HTVMS_Wais 1.1 644))
+  (WWW/Library/Implementation/LYLeaks.h (Lynx/f/29_LYLeaks.h 1.1 644))
+  (WWW/Library/Implementation/HTCJK.h (Lynx/f/30_HTCJK.h 1.2 644))
+  (WWW/Library/Implementation/BSDI_Makefile (Lynx/f/31_BSDI_Makef 1.2 644))
+  (WWW/Library/Implementation/HTVMS_WaisProt.c (Lynx/f/32_HTVMS_Wais 1.1 644))
+  (WWW/Library/Implementation/ufc-crypt.h (Lynx/f/33_ufc-crypt. 1.1 644))
+  (WWW/Library/Implementation/patchlevel.h (Lynx/f/34_patchlevel 1.1 644))
+  (WWW/Library/Implementation/getpass.c (Lynx/f/35_getpass.c 1.1 644))
+  (WWW/Library/Implementation/getline.c (Lynx/f/36_getline.c 1.1 644))
+  (WWW/Library/Implementation/crypt_util.c (Lynx/f/37_crypt_util 1.1 644))
+  (WWW/Library/Implementation/crypt.c (Lynx/f/38_crypt.c 1.1 644))
+  (WWW/Library/Implementation/HTVMSUtils.h (Lynx/f/39_HTVMSUtils 1.1 644))
+  (WWW/Library/Implementation/Makefile (Lynx/f/40_Makefile 1.1 644))
+  (WWW/Library/Implementation/CommonMakefile (Lynx/f/41_CommonMake 1.3 644))
+  (WWW/Library/Implementation/Version.make (Lynx/f/42_Version.ma 1.1 644))
+  (WWW/Library/Implementation/HTUU.h (Lynx/f/43_HTUU.h 1.1 644))
+  (WWW/Library/Implementation/HTLex.h (Lynx/f/44_HTLex.h 1.1 644))
+  (WWW/Library/Implementation/HTAssoc.h (Lynx/f/45_HTAssoc.h 1.1 644))
+  (WWW/Library/Implementation/HTAAProt.h (Lynx/f/46_HTAAProt.h 1.1 644))
+  (WWW/Library/Implementation/HTAuth.h (Lynx/f/47_HTAuth.h 1.1 644))
+  (WWW/Library/Implementation/HTACL.h (Lynx/f/48_HTACL.h 1.1 644))
+  (WWW/Library/Implementation/HTGroup.h (Lynx/f/49_HTGroup.h 1.1 644))
+  (WWW/Library/Implementation/HTPasswd.h (Lynx/f/50_HTPasswd.h 1.1 644))
+  (WWW/Library/Implementation/HTAAFile.h (Lynx/f/51_HTAAFile.h 1.1 644))
+  (WWW/Library/Implementation/HTAABrow.h (Lynx/g/0_HTAABrow.h 1.1 644))
+  (WWW/Library/Implementation/HTAAServ.h (Lynx/g/1_HTAAServ.h 1.1 644))
+  (WWW/Library/Implementation/HTAAUtil.h (Lynx/g/2_HTAAUtil.h 1.1 644))
+  (WWW/Library/Implementation/HTWSRC.h (Lynx/g/3_HTWSRC.h 1.1 644))
+  (WWW/Library/Implementation/HTWAIS.h (Lynx/g/4_HTWAIS.h 1.1 644))
+  (WWW/Library/Implementation/HTTelnet.h (Lynx/g/5_HTTelnet.h 1.1 644))
+  (WWW/Library/Implementation/HText.h (Lynx/g/6_HText.h 1.1 644))
+  (WWW/Library/Implementation/HTUtils.h (Lynx/g/7_HTUtils.h 1.5 644))
+  (WWW/Library/Implementation/HTGopher.h (Lynx/g/8_HTGopher.h 1.1 644))
+  (WWW/Library/Implementation/HTNews.h (Lynx/g/9_HTNews.h 1.1 644))
+  (WWW/Library/Implementation/HTHistory.h (Lynx/g/10_HTHistory. 1.1 644))
+  (WWW/Library/Implementation/HTMIME.h (Lynx/g/11_HTMIME.h 1.1 644))
+  (WWW/Library/Implementation/HTInit.h (Lynx/g/12_HTInit.h 1.1 644))
+  (WWW/Library/Implementation/HTFormat.h (Lynx/g/13_HTFormat.h 1.1 644))
+  (WWW/Library/Implementation/HTRules.h (Lynx/g/14_HTRules.h 1.1 644))
+  (WWW/Library/Implementation/HTAlert.h (Lynx/g/15_HTAlert.h 1.1 644))
+  (WWW/Library/Implementation/HTString.h (Lynx/g/16_HTString.h 1.1 644))
+  (WWW/Library/Implementation/HTList.h (Lynx/g/17_HTList.h 1.1 644))
+  (WWW/Library/Implementation/HTStyle.h (Lynx/g/18_HTStyle.h 1.1 644))
+  (WWW/Library/Implementation/HTAnchor.h (Lynx/g/19_HTAnchor.h 1.2 644))
+  (WWW/Library/Implementation/HTAtom.h (Lynx/g/20_HTAtom.h 1.1 644))
+  (WWW/Library/Implementation/HTStream.h (Lynx/g/21_HTStream.h 1.1 644))
+  (WWW/Library/Implementation/HTMLGen.h (Lynx/g/22_HTMLGen.h 1.1 644))
+  (WWW/Library/Implementation/HTFWriter.h (Lynx/g/23_HTFWriter. 1.1 644))
+  (WWW/Library/Implementation/HTWriter.h (Lynx/g/24_HTWriter.h 1.1 644))
+  (WWW/Library/Implementation/HTPlain.h (Lynx/g/25_HTPlain.h 1.1 644))
+  (WWW/Library/Implementation/HTChunk.h (Lynx/g/26_HTChunk.h 1.1 644))
+  (WWW/Library/Implementation/HTMLDTD.h (Lynx/g/27_HTMLDTD.h 1.2 644))
+  (WWW/Library/Implementation/HTML.h (Lynx/g/28_HTML.h 1.2 644))
+  (WWW/Library/Implementation/SGML.h (Lynx/g/29_SGML.h 1.2 644))
+  (WWW/Library/Implementation/HTTCP.h (Lynx/g/30_HTTCP.h 1.3 644))
+  (WWW/Library/Implementation/HTFTP.h (Lynx/g/31_HTFTP.h 1.1 644))
+  (WWW/Library/Implementation/HTBTree.h (Lynx/g/32_HTBTree.h 1.1 644))
+  (WWW/Library/Implementation/HTFile.h (Lynx/g/33_HTFile.h 1.2 644))
+  (WWW/Library/Implementation/HTTP.h (Lynx/g/34_HTTP.h 1.1 644))
+  (WWW/Library/Implementation/HTAccess.h (Lynx/g/35_HTAccess.h 1.3 644))
+  (WWW/Library/Implementation/HTParse.h (Lynx/g/36_HTParse.h 1.1 644))
+  (WWW/Library/Implementation/HTUU.c (Lynx/g/37_HTUU.c 1.2 644))
+  (WWW/Library/Implementation/HTLex.c (Lynx/g/38_HTLex.c 1.1 644))
+  (WWW/Library/Implementation/HTAssoc.c (Lynx/g/39_HTAssoc.c 1.1 644))
+  (WWW/Library/Implementation/HTAAProt.c (Lynx/g/40_HTAAProt.c 1.2 644))
+  (WWW/Library/Implementation/HTACL.c (Lynx/g/41_HTACL.c 1.1 644))
+  (WWW/Library/Implementation/HTGroup.c (Lynx/g/42_HTGroup.c 1.1 644))
+  (WWW/Library/Implementation/HTPasswd.c (Lynx/g/43_HTPasswd.c 1.1 644))
+  (WWW/Library/Implementation/HTAAFile.c (Lynx/g/44_HTAAFile.c 1.1 644))
+  (WWW/Library/Implementation/HTAABrow.c (Lynx/g/45_HTAABrow.c 1.1 644))
+  (WWW/Library/Implementation/HTAAServ.c (Lynx/g/46_HTAAServ.c 1.1 644))
+  (WWW/Library/Implementation/HTAAUtil.c (Lynx/g/47_HTAAUtil.c 1.1 644))
+  (WWW/Library/Implementation/HTGopher.c (Lynx/g/48_HTGopher.c 1.3 644))
+  (WWW/Library/Implementation/HTHistory.c (Lynx/g/49_HTHistory. 1.1 644))
+  (WWW/Library/Implementation/HTMIME.c (Lynx/g/50_HTMIME.c 1.2 644))
+  (WWW/Library/Implementation/HTInit.c (Lynx/g/51_HTInit.c 1.1 644))
+  (WWW/Library/Implementation/HTFormat.c (Lynx/h/0_HTFormat.c 1.1 644))
+  (WWW/Library/Implementation/HTRules.c (Lynx/h/1_HTRules.c 1.1 644))
+  (WWW/Library/Implementation/HTAlert.c (Lynx/h/2_HTAlert.c 1.1 644))
+  (WWW/Library/Implementation/HTString.c (Lynx/h/3_HTString.c 1.1 644))
+  (WWW/Library/Implementation/HTList.c (Lynx/h/4_HTList.c 1.1 644))
+  (WWW/Library/Implementation/HTStyle.c (Lynx/h/5_HTStyle.c 1.3 644))
+  (WWW/Library/Implementation/HTAnchor.c (Lynx/h/6_HTAnchor.c 1.1.1.2 644))
+  (WWW/Library/Implementation/HTAtom.c (Lynx/h/7_HTAtom.c 1.1 644))
+  (WWW/Library/Implementation/HTChunk.c (Lynx/h/8_HTChunk.c 1.1 644))
+  (WWW/Library/Implementation/HTMLGen.c (Lynx/h/9_HTMLGen.c 1.2 644))
+  (WWW/Library/Implementation/HTFWriter.c (Lynx/h/10_HTFWriter. 1.1 644))
+  (WWW/Library/Implementation/HTPlain.c (Lynx/h/11_HTPlain.c 1.4 644))
+  (WWW/Library/Implementation/SGML.c (Lynx/h/12_SGML.c 1.1.1.1.1.1.1.1 644))
+  (WWW/Library/Implementation/HTTCP.c (Lynx/h/13_HTTCP.c 1.2.2.3 644))
+  (WWW/Library/Implementation/HTFTP.c (Lynx/h/14_HTFTP.c 1.4 644))
+  (WWW/Library/Implementation/HTBTree.c (Lynx/h/15_HTBTree.c 1.1 644))
+  (WWW/Library/Implementation/HTTP.c (Lynx/h/16_HTTP.c 1.2 644))
+  (WWW/Library/Implementation/HTAccess.c (Lynx/h/17_HTAccess.c 1.2 644))
+  (WWW/Library/Implementation/HTParse.c (Lynx/h/18_HTParse.c 1.3 644))
+  (WWW/Library/Implementation/tcp.h (Lynx/h/19_tcp.h 1.5 644))
+  (WWW/Library/Implementation/HTWSRC.c (Lynx/h/20_HTWSRC.c 1.1 644))
+  (WWW/Library/Implementation/HTWriter.c (Lynx/h/21_HTWriter.c 1.1 644))
+  (WWW/Library/Implementation/HTWAIS.c (Lynx/h/22_HTWAIS.c 1.1 644))
+  (WWW/Library/Implementation/HTVMSUtils.c (Lynx/h/23_HTVMSUtils 1.1 644))
+  (WWW/Library/Implementation/HTTelnet.c (Lynx/h/24_HTTelnet.c 1.3 644))
+  (WWW/Library/Implementation/HTNews.c (Lynx/h/25_HTNews.c 1.2 644))
+  (WWW/Library/Implementation/HTMLDTD.c (Lynx/h/26_HTMLDTD.c 1.4 644))
+  (WWW/Library/Implementation/HTFile.c (Lynx/h/27_HTFile.c 1.1.2.3 644))
+  (WWW/Library/Implementation/HTAuth.c (Lynx/h/28_HTAuth.c 1.1 644))
+  (VMSWAIS.announce (Lynx/h/29_VMSWAIS.an 1.1 644))
+  (VMSPrint.com (Lynx/h/30_VMSPrint.c 1.1 644))
+  (TCPWARE.announce (Lynx/h/31_TCPWARE.an 1.1 644))
+  (SOCKETSHR.announce (Lynx/h/32_SOCKETSHR. 1.1 644))
+  (RELEASE_STATEMENT (Lynx/h/33_RELEASE_ST 1.2 644))
+  (README (Lynx/h/34_README 1.1 644))
+  (PROBLEMS (Lynx/h/35_PROBLEMS 1.1 644))
+  (Makefile (Lynx/h/36_Makefile 1.1.1.1.1.4 644))
+  (LYMessages_en.h (Lynx/h/37_LYMessages 1.3 644))
+  (INSTALLATION (Lynx/h/38_INSTALLATI 1.1 644))
+  (IBMPC-charsets.announce (Lynx/h/39_IBMPC-char 1.1 644))
+  (FM.announce (Lynx/h/40_FM.announc 1.1 644))
+  (DESC (Lynx/h/41_DESC 1.1 644))
+  (CRAWL.announce (Lynx/h/42_CRAWL.anno 1.1 644))
+  (CMU.announce (Lynx/h/43_CMU.announ 1.1 644))
+  (CHANGES2-5 (Lynx/h/44_CHANGES2-5 1.1 644))
+  (CHANGES2-4 (Lynx/h/45_CHANGES2-4 1.1 644))
+  (CHANGES2-3 (Lynx/h/46_CHANGES2-3 1.1 644))
+  (CHANGES (Lynx/h/47_CHANGES 1.2 644))
+
+;; Files added by populate at Mon, 24 Feb 1997 20:09:28 -0600:
+
+  
+
+
+  (newfiles.chartrans (Lynx/b/0_newfiles.chartrans 1.4 644))
+  (CHANGES.chartrans (Lynx/c/0_CHANGES.chartrans 1.9.1.5 644))
+  (README.chartrans (Lynx/d/0_README.chartrans 1.4 644))
+  (src/UCdomap.h (Lynx/e/0_UCdomap.h 1.2 644))
+  (src/UCAux.c (Lynx/f/0_UCAux.c 1.3 644))
+  (src/UCAuto.h (Lynx/g/0_UCAuto.h 1.1 644))
+  (src/UCAuto.c (Lynx/h/0_UCAuto.c 1.1 644))
+  (src/chrtrans/cp1250_uni.tbl (Lynx/h/48_cp1250_uni 1.1 644))
+  (src/chrtrans/mnemonic_suni.tbl (Lynx/h/49_mnemonic_s 1.1 644))
+  (src/chrtrans/mnem_suni.tbl (Lynx/h/50_mnem_suni. 1.1 644))
+  (src/chrtrans/cp1252_uni.tbl (Lynx/h/51_cp1252_uni 1.1 644))
+  (src/chrtrans/rfc_suni.tbl (Lynx/i/0_rfc_suni.tbl 1.2 644))
+  (src/chrtrans/makeuctb.c (Lynx/i/1_makeuctb.c 1.7 644))
+  (src/chrtrans/UCkd.h (Lynx/i/2_UCkd.h 1.1 644))
+  (src/chrtrans/Makefile (Lynx/i/3_Makefile 1.6 644))
+  (src/chrtrans/README.tables (Lynx/i/4_README.tab 1.1 644))
+  (src/chrtrans/README.format (Lynx/i/5_README.for 1.2 644))
+  (src/chrtrans/cp852_uni.tbl (Lynx/i/6_cp852_uni. 1.2 644))
+  (src/chrtrans/utf8_uni.tbl (Lynx/i/7_utf8_uni.t 1.1 644))
+  (src/chrtrans/iso05_uni.tbl (Lynx/i/8_iso05_uni. 1.2 644))
+  (src/chrtrans/cp437_uni.tbl (Lynx/i/9_cp437_uni. 1.2 644))
+  (src/chrtrans/iso10_uni.tbl (Lynx/i/10_iso10_uni. 1.2 644))
+  (src/chrtrans/iso09_uni.tbl (Lynx/i/11_iso09_uni. 1.2 644))
+  (src/chrtrans/iso08_uni.tbl (Lynx/i/12_iso08_uni. 1.1 644))
+  (src/chrtrans/iso07_uni.tbl (Lynx/i/13_iso07_uni. 1.2 644))
+  (src/chrtrans/iso06_uni.tbl (Lynx/i/14_iso06_uni. 1.1 644))
+  (src/chrtrans/iso04_uni.tbl (Lynx/i/15_iso04_uni. 1.2 644))
+  (src/chrtrans/iso03_uni.tbl (Lynx/i/16_iso03_uni. 1.2 644))
+  (src/chrtrans/iso02_uni.tbl (Lynx/i/17_iso02_uni. 1.3 644))
+  (src/chrtrans/iso01_uni.tbl (Lynx/i/18_iso01_uni. 1.2 644))
+  (src/chrtrans/cp850_uni.tbl (Lynx/i/19_cp850_uni. 1.2 644))
+  (src/UCdomap.c (Lynx/i/20_UCdomap.c 1.4 644))
+  (WWW/Library/Implementation/UCDefs.h (Lynx/i/21_UCDefs.h 1.1 644))
+  (WWW/Library/Implementation/UCMap.h (Lynx/i/22_UCMap.h 1.2 644))
+  (WWW/Library/Implementation/UCAux.h (Lynx/i/23_UCAux.h 1.1 644))
+
+  (WWW/Library/djgpp/makefile (Lynx/0_makefile 1.4 644))
+  (src/makefile.dos (Lynx/1_makefile.d 1.3 644))
+  (README.win-386 (Lynx/2_386-WIN.TX 1.2 644))
+;; Files added by populate at Mon, 03 Mar 1997 04:38:33 -0600:
+
+  (src/chrtrans/MAKEW32.BAT (Lynx/3_MAKEW32.BA 1.2 644))
+  (src/chrtrans/MAKEFILE.W32 (Lynx/4_MAKEFILE.W 1.1 644))
+  (MAKEFILE.W32 (Lynx/5_MAKEFILE.W 1.1 644))
+
+;; Files added by populate at Mon, 03 Mar 1997 06:05:56 -0600:
+
+  (CHANGES.new (Lynx/6_CHANGES.ne 1.22 644))
+
+;; Files added by populate at Tue, 11 Mar 1997 04:22:39 -0600:
+
+  (newfiles.configure (Lynx/7_newfiles.c 1.4 644))
+  (makefile.in (Lynx/8_makefile.i 1.1.1.4 644))
+  (install.sh (Lynx/9_install.sh 1.1 755))
+  (configure.in (Lynx/10_configure. 1.5 644))
+  (config.hin (Lynx/11_config.hin 1.5 644))
+  (aclocal.m4 (Lynx/12_aclocal.m4 1.5 644))
+  (configure (Lynx/13_configure 1.5 755))
+  (README.configure (Lynx/14_README.con 1.3 644))
+  (CHANGES.configure (Lynx/15_CHANGES.co 1.1.1.3 644))
+
+;; Files added by populate at Wed, 09 Apr 1997 06:18:01 -0600:
+
+  (WWW/Library/djgpp/CommonMakefile (Lynx/26_CommonMake 1.1 644))
+  (WWW/Library/Implementation/HTDOS.h (Lynx/27_HTDOS.H 1.1 644))
+  (WWW/Library/Implementation/HTDOS.c (Lynx/28_HTDOS.C 1.1 644))
+
+
+  (WWW/Library/unix/makefile.in (Lynx/16_makefile.i 1.3 644))
+  (src/makefile.in (Lynx/17_makefile.i 1.3 644))
+  (src/chrtrans/makefile.in (Lynx/18_makefile.i 1.2 644))
+
+  (src/chrtrans/koi8r_uni.tbl (Lynx/24_koi8r_uni. 1.1 644))
+  (src/chrtrans/def7_uni.tbl (Lynx/25_def7_uni.t 1.1 644))
+;; Files added by populate at Tue, 15 Apr 1997 19:38:35 -0600:
+
+  (config.sub (Lynx/30_config.sub 1.1 755))
+  (config.guess (Lynx/31_config.gue 1.1 755))
+)
+(Merge-Parents)
+(New-Merge-Parents)
diff --git a/MAKEFILE.W32 b/MAKEFILE.W32
new file mode 100644
index 00000000..f3883538
--- /dev/null
+++ b/MAKEFILE.W32
@@ -0,0 +1,729 @@
+#

+# Borland C++ IDE generated makefile

+#

+.AUTODEPEND

+

+

+#

+# Borland C++ tools

+#

+IMPLIB  = Implib

+BCC32   = Bcc32 +BccW32.cfg 

+TLINK32 = TLink32

+TLIB    = TLib

+BRC32   = Brc32

+TASM32  = Tasm32

+#

+# IDE macros

+#

+

+

+#

+# Options

+#

+IDE_LFLAGS32 =  -LD:\BC45\LIB

+LLATC32_lynxdexe =  -LCURSES;D:\BC45\LIB -Tpe -ap -c -wdpl -wdup

+RLATC32_lynxdexe =  -w32 -k

+BLATC32_lynxdexe = 

+CNIEAT_lynxdexe = -I.\;CURSES;SRC;WWW\LIBRARY\IMPLEMENTATION;D:\BC45\INCLUDE;SRC\CHRTRANS -DNO_UNISTD_H;_WINDOWS;NCURSES;FANCY_CURSES;XMOSAIC_HACK;ACCESS_AUTH;NO_UTMP;NO_CUSERID;NO_TTYTYPE;NOSIGHUP;DOSPATH;NOUSERS;EXP_CHARTRANS

+LNIEAT_lynxdexe = -x

+LEAT_lynxdexe = $(LLATC32_lynxdexe)

+REAT_lynxdexe = $(RLATC32_lynxdexe)

+BEAT_lynxdexe = $(BLATC32_lynxdexe)

+CLATW16_cursesbpdcursesdlib = 

+LLATW16_cursesbpdcursesdlib = 

+RLATW16_cursesbpdcursesdlib = 

+BLATW16_cursesbpdcursesdlib = 

+CEAT_cursesbpdcursesdlib = $(CEAT_lynxdexe) $(CLATW16_cursesbpdcursesdlib)

+CNIEAT_cursesbpdcursesdlib = -I.\;CURSES;SRC;WWW\LIBRARY\IMPLEMENTATION;D:\BC45\INCLUDE;SRC\CHRTRANS -DNO_UNISTD_H;_WINDOWS;NCURSES;FANCY_CURSES;XMOSAIC_HACK;ACCESS_AUTH;NO_UTMP;NO_CUSERID;NO_TTYTYPE;NOSIGHUP;DOSPATH;NOUSERS;EXP_CHARTRANS

+LNIEAT_cursesbpdcursesdlib = -x

+LEAT_cursesbpdcursesdlib = $(LEAT_lynxdexe) $(LLATW16_cursesbpdcursesdlib)

+REAT_cursesbpdcursesdlib = $(REAT_lynxdexe) $(RLATW16_cursesbpdcursesdlib)

+BEAT_cursesbpdcursesdlib = $(BEAT_lynxdexe) $(BLATW16_cursesbpdcursesdlib)

+

+#

+# Dependency List

+#

+Dep_lynx = \

+   lynx.exe

+

+lynx : BccW32.cfg $(Dep_lynx)

+  echo MakeNode 

+

+Dep_lynxdexe = \

+   OBJ\ucauto.obj\

+   OBJ\ucaux.obj\

+   OBJ\ucdomap.obj\

+   OBJ\htalert.obj\

+   OBJ\htfwrite.obj\

+   OBJ\htinit.obj\

+   OBJ\httcp.obj\

+   OBJ\crypt.obj\

+   OBJ\crypt_ut.obj\

+   OBJ\getline.obj\

+   OBJ\htaabrow.obj\

+   OBJ\htaafile.obj\

+   OBJ\htaaprot.obj\

+   OBJ\htaaserv.obj\

+   OBJ\htaautil.obj\

+   OBJ\htaccess.obj\

+   OBJ\htacl.obj\

+   OBJ\htanchor.obj\

+   OBJ\htassoc.obj\

+   OBJ\htatom.obj\

+   OBJ\htauth.obj\

+   OBJ\htbtree.obj\

+   OBJ\htchunk.obj\

+   OBJ\htfile.obj\

+   OBJ\htfinger.obj\

+   OBJ\htformat.obj\

+   OBJ\htftp.obj\

+   OBJ\htgopher.obj\

+   OBJ\htgroup.obj\

+   OBJ\hthistor.obj\

+   OBJ\htlex.obj\

+   OBJ\htlist.obj\

+   OBJ\htmime.obj\

+   OBJ\htmldtd.obj\

+   OBJ\htmlgen.obj\

+   OBJ\htnews.obj\

+   OBJ\htparse.obj\

+   OBJ\htpasswd.obj\

+   OBJ\htplain.obj\

+   OBJ\htrules.obj\

+   OBJ\htstring.obj\

+   OBJ\htstyle.obj\

+   OBJ\httelnet.obj\

+   OBJ\http.obj\

+   OBJ\htuu.obj\

+   OBJ\htwriter.obj\

+   OBJ\htwsrc.obj\

+   OBJ\sgml.obj\

+   OBJ\defaults.obj\

+   OBJ\gridtext.obj\

+   OBJ\html.obj\

+   OBJ\lybookma.obj\

+   OBJ\lycgi.obj\

+   OBJ\lycharse.obj\

+   OBJ\lycharut.obj\

+   OBJ\lyclean.obj\

+   OBJ\lycookie.obj\

+   OBJ\lycurses.obj\

+   OBJ\lydownlo.obj\

+   OBJ\lyedit.obj\

+   OBJ\lyeditma.obj\

+   OBJ\lyexit.obj\

+   OBJ\lyforms.obj\

+   OBJ\lygetfil.obj\

+   OBJ\lyhistor.obj\

+   OBJ\lyjump.obj\

+   OBJ\lykeymap.obj\

+   OBJ\lyleaks.obj\

+   OBJ\lylist.obj\

+   OBJ\lylocal.obj\

+   OBJ\lymail.obj\

+   OBJ\lymain.obj\

+   OBJ\lymainlo.obj\

+   OBJ\lymap.obj\

+   OBJ\lynews.obj\

+   OBJ\lyoption.obj\

+   OBJ\lyprint.obj\

+   OBJ\lyrcfile.obj\

+   OBJ\lyreadcf.obj\

+   OBJ\lysearch.obj\

+   OBJ\lyshowin.obj\

+   OBJ\lystring.obj\

+   OBJ\lytraver.obj\

+   OBJ\lyupload.obj\

+   OBJ\lyutils.obj\

+   curses\pdcurses.lib

+

+lynx.exe : $(Dep_lynxdexe)

+  $(TLINK32) @&&|

+ /v $(IDE_LFLAGS32) $(LEAT_lynxdexe) $(LNIEAT_lynxdexe) +

+D:\BC45\LIB\c0x32.obj+

+OBJ\ucauto.obj+

+OBJ\ucaux.obj+

+OBJ\ucdomap.obj+

+OBJ\htalert.obj+

+OBJ\htfwrite.obj+

+OBJ\htinit.obj+

+OBJ\httcp.obj+

+OBJ\crypt.obj+

+OBJ\crypt_ut.obj+

+OBJ\getline.obj+

+OBJ\htaabrow.obj+

+OBJ\htaafile.obj+

+OBJ\htaaprot.obj+

+OBJ\htaaserv.obj+

+OBJ\htaautil.obj+

+OBJ\htaccess.obj+

+OBJ\htacl.obj+

+OBJ\htanchor.obj+

+OBJ\htassoc.obj+

+OBJ\htatom.obj+

+OBJ\htauth.obj+

+OBJ\htbtree.obj+

+OBJ\htchunk.obj+

+OBJ\htfile.obj+

+OBJ\htfinger.obj+

+OBJ\htformat.obj+

+OBJ\htftp.obj+

+OBJ\htgopher.obj+

+OBJ\htgroup.obj+

+OBJ\hthistor.obj+

+OBJ\htlex.obj+

+OBJ\htlist.obj+

+OBJ\htmime.obj+

+OBJ\htmldtd.obj+

+OBJ\htmlgen.obj+

+OBJ\htnews.obj+

+OBJ\htparse.obj+

+OBJ\htpasswd.obj+

+OBJ\htplain.obj+

+OBJ\htrules.obj+

+OBJ\htstring.obj+

+OBJ\htstyle.obj+

+OBJ\httelnet.obj+

+OBJ\http.obj+

+OBJ\htuu.obj+

+OBJ\htwriter.obj+

+OBJ\htwsrc.obj+

+OBJ\sgml.obj+

+OBJ\defaults.obj+

+OBJ\gridtext.obj+

+OBJ\html.obj+

+OBJ\lybookma.obj+

+OBJ\lycgi.obj+

+OBJ\lycharse.obj+

+OBJ\lycharut.obj+

+OBJ\lyclean.obj+

+OBJ\lycookie.obj+

+OBJ\lycurses.obj+

+OBJ\lydownlo.obj+

+OBJ\lyedit.obj+

+OBJ\lyeditma.obj+

+OBJ\lyexit.obj+

+OBJ\lyforms.obj+

+OBJ\lygetfil.obj+

+OBJ\lyhistor.obj+

+OBJ\lyjump.obj+

+OBJ\lykeymap.obj+

+OBJ\lyleaks.obj+

+OBJ\lylist.obj+

+OBJ\lylocal.obj+

+OBJ\lymail.obj+

+OBJ\lymain.obj+

+OBJ\lymainlo.obj+

+OBJ\lymap.obj+

+OBJ\lynews.obj+

+OBJ\lyoption.obj+

+OBJ\lyprint.obj+

+OBJ\lyrcfile.obj+

+OBJ\lyreadcf.obj+

+OBJ\lysearch.obj+

+OBJ\lyshowin.obj+

+OBJ\lystring.obj+

+OBJ\lytraver.obj+

+OBJ\lyupload.obj+

+OBJ\lyutils.obj

+$<,$*

+curses\pdcurses.lib+

+D:\BC45\LIB\bidsf.lib+

+D:\BC45\LIB\import32.lib+

+D:\BC45\LIB\cw32.lib

+

+|

+

+OBJ\ucauto.obj :  src\ucauto.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\ucauto.c

+|

+

+OBJ\ucaux.obj :  src\ucaux.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\ucaux.c

+|

+

+OBJ\ucdomap.obj :  src\ucdomap.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\ucdomap.c

+|

+

+OBJ\htalert.obj :  src\htalert.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\htalert.c

+|

+

+OBJ\htfwrite.obj :  src\htfwrite.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\htfwrite.c

+|

+

+OBJ\htinit.obj :  src\htinit.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\htinit.c

+|

+

+OBJ\httcp.obj :  www\library\implemen\httcp.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\httcp.c

+|

+

+OBJ\crypt.obj :  www\library\implemen\crypt.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\crypt.c

+|

+

+OBJ\crypt_ut.obj :  www\library\implemen\crypt_ut.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\crypt_ut.c

+|

+

+OBJ\getline.obj :  www\library\implemen\getline.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\getline.c

+|

+

+OBJ\htaabrow.obj :  www\library\implemen\htaabrow.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htaabrow.c

+|

+

+OBJ\htaafile.obj :  www\library\implemen\htaafile.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htaafile.c

+|

+

+OBJ\htaaprot.obj :  www\library\implemen\htaaprot.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htaaprot.c

+|

+

+OBJ\htaaserv.obj :  www\library\implemen\htaaserv.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htaaserv.c

+|

+

+OBJ\htaautil.obj :  www\library\implemen\htaautil.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htaautil.c

+|

+

+OBJ\htaccess.obj :  www\library\implemen\htaccess.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htaccess.c

+|

+

+OBJ\htacl.obj :  www\library\implemen\htacl.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htacl.c

+|

+

+OBJ\htanchor.obj :  www\library\implemen\htanchor.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htanchor.c

+|

+

+OBJ\htassoc.obj :  www\library\implemen\htassoc.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htassoc.c

+|

+

+OBJ\htatom.obj :  www\library\implemen\htatom.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htatom.c

+|

+

+OBJ\htauth.obj :  www\library\implemen\htauth.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htauth.c

+|

+

+OBJ\htbtree.obj :  www\library\implemen\htbtree.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htbtree.c

+|

+

+OBJ\htchunk.obj :  www\library\implemen\htchunk.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htchunk.c

+|

+

+OBJ\htfile.obj :  www\library\implemen\htfile.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htfile.c

+|

+

+OBJ\htfinger.obj :  www\library\implemen\htfinger.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htfinger.c

+|

+

+OBJ\htformat.obj :  www\library\implemen\htformat.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htformat.c

+|

+

+OBJ\htftp.obj :  www\library\implemen\htftp.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htftp.c

+|

+

+OBJ\htgopher.obj :  www\library\implemen\htgopher.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htgopher.c

+|

+

+OBJ\htgroup.obj :  www\library\implemen\htgroup.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htgroup.c

+|

+

+OBJ\hthistor.obj :  www\library\implemen\hthistor.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\hthistor.c

+|

+

+OBJ\htlex.obj :  www\library\implemen\htlex.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htlex.c

+|

+

+OBJ\htlist.obj :  www\library\implemen\htlist.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htlist.c

+|

+

+OBJ\htmime.obj :  www\library\implemen\htmime.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htmime.c

+|

+

+OBJ\htmldtd.obj :  www\library\implemen\htmldtd.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htmldtd.c

+|

+

+OBJ\htmlgen.obj :  www\library\implemen\htmlgen.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htmlgen.c

+|

+

+OBJ\htnews.obj :  www\library\implemen\htnews.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htnews.c

+|

+

+OBJ\htparse.obj :  www\library\implemen\htparse.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htparse.c

+|

+

+OBJ\htpasswd.obj :  www\library\implemen\htpasswd.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htpasswd.c

+|

+

+OBJ\htplain.obj :  www\library\implemen\htplain.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htplain.c

+|

+

+OBJ\htrules.obj :  www\library\implemen\htrules.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htrules.c

+|

+

+OBJ\htstring.obj :  www\library\implemen\htstring.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htstring.c

+|

+

+OBJ\htstyle.obj :  www\library\implemen\htstyle.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htstyle.c

+|

+

+OBJ\httelnet.obj :  www\library\implemen\httelnet.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\httelnet.c

+|

+

+OBJ\http.obj :  www\library\implemen\http.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\http.c

+|

+

+OBJ\htuu.obj :  www\library\implemen\htuu.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htuu.c

+|

+

+OBJ\htwriter.obj :  www\library\implemen\htwriter.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htwriter.c

+|

+

+OBJ\htwsrc.obj :  www\library\implemen\htwsrc.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\htwsrc.c

+|

+

+OBJ\sgml.obj :  www\library\implemen\sgml.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ www\library\implemen\sgml.c

+|

+

+OBJ\defaults.obj :  src\defaults.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\defaults.c

+|

+

+OBJ\gridtext.obj :  src\gridtext.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\gridtext.c

+|

+

+OBJ\html.obj :  src\html.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\html.c

+|

+

+OBJ\lybookma.obj :  src\lybookma.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lybookma.c

+|

+

+OBJ\lycgi.obj :  src\lycgi.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lycgi.c

+|

+

+OBJ\lycharse.obj :  src\lycharse.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lycharse.c

+|

+

+OBJ\lycharut.obj :  src\lycharut.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lycharut.c

+|

+

+OBJ\lyclean.obj :  src\lyclean.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyclean.c

+|

+

+OBJ\lycookie.obj :  src\lycookie.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lycookie.c

+|

+

+OBJ\lycurses.obj :  src\lycurses.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lycurses.c

+|

+

+OBJ\lydownlo.obj :  src\lydownlo.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lydownlo.c

+|

+

+OBJ\lyedit.obj :  src\lyedit.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyedit.c

+|

+

+OBJ\lyeditma.obj :  src\lyeditma.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyeditma.c

+|

+

+OBJ\lyexit.obj :  src\lyexit.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyexit.c

+|

+

+OBJ\lyforms.obj :  src\lyforms.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyforms.c

+|

+

+OBJ\lygetfil.obj :  src\lygetfil.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lygetfil.c

+|

+

+OBJ\lyhistor.obj :  src\lyhistor.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyhistor.c

+|

+

+OBJ\lyjump.obj :  src\lyjump.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyjump.c

+|

+

+OBJ\lykeymap.obj :  src\lykeymap.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lykeymap.c

+|

+

+OBJ\lyleaks.obj :  src\lyleaks.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyleaks.c

+|

+

+OBJ\lylist.obj :  src\lylist.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lylist.c

+|

+

+OBJ\lylocal.obj :  src\lylocal.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lylocal.c

+|

+

+OBJ\lymail.obj :  src\lymail.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lymail.c

+|

+

+OBJ\lymain.obj :  src\lymain.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lymain.c

+|

+

+OBJ\lymainlo.obj :  src\lymainlo.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lymainlo.c

+|

+

+OBJ\lymap.obj :  src\lymap.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lymap.c

+|

+

+OBJ\lynews.obj :  src\lynews.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lynews.c

+|

+

+OBJ\lyoption.obj :  src\lyoption.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyoption.c

+|

+

+OBJ\lyprint.obj :  src\lyprint.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyprint.c

+|

+

+OBJ\lyrcfile.obj :  src\lyrcfile.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyrcfile.c

+|

+

+OBJ\lyreadcf.obj :  src\lyreadcf.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyreadcf.c

+|

+

+OBJ\lysearch.obj :  src\lysearch.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lysearch.c

+|

+

+OBJ\lyshowin.obj :  src\lyshowin.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyshowin.c

+|

+

+OBJ\lystring.obj :  src\lystring.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lystring.c

+|

+

+OBJ\lytraver.obj :  src\lytraver.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lytraver.c

+|

+

+OBJ\lyupload.obj :  src\lyupload.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyupload.c

+|

+

+OBJ\lyutils.obj :  src\lyutils.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_lynxdexe) $(CNIEAT_lynxdexe) -o$@ src\lyutils.c

+|

+

+# Compiler configuration file

+BccW32.cfg : 

+   Copy &&|

+-R

+-v

+-vi

+-H

+-H=lynx.csm

+-w-

+-A-

+-wcpt

+-wrpt

+-wrng

+-w-voi

+-w-ret

+-w-sus

+-w-dup

+-w-big

+-w-ext

+-w-zdi

+-w-bei

+-w-obi

+-w-ofp

+-w-eas

+-w-hid

+-w-ncf

+-w-ibc

+-w-dsz

+-w-nst

+-w-mpc

+-w-mpd

+-w-ntd

+-w-nvf

+-w-hch

+-w-inl

+-w-lin

+-w-lvc

+-w-pia

+-w-def

+-w-nod

+-w-pro

+-w-rvl

+-w-ccc

+-w-aus

+-w-par

+-w-rch

+-w-eff

+-w-ill

+-w-ias

+-w-msg

+-WC

+-Ot

+-d-

+-K

+-a-

+-w-stu

+-wbbf

+-w-dpu

+-wcln

+-wsig

+-wucp

+-g200

+-H-

+-v-

+| $@

+

+

diff --git a/Makefile b/Makefile
index 79229408..618eeea2 100644
--- a/Makefile
+++ b/Makefile
@@ -173,7 +173,8 @@ DIRED_PERMIT   =   -DOK_PERMIT
 # If you are not, then you should edit the generic: entry below.
 #
 # If you need ncurses, the latest version can always be found
-# in ftp://ftp.netcom.com/pub/zm/zmbenhal/ncurses/
+# in ftp://ftp.clark.net/pub/dickey/ncurses/
+# or ftp://ftp.netcom.com/pub/zm/zmbenhal/ncurses/
 # (you may need -DNCURSESHEADER in addition to -DNCURSES for old
 # versions of ncurses; see below).
 #
@@ -268,10 +269,10 @@ DIR_DEFS = $(DIRED_SUPPORT) $(DIRED_ARCHIVE) $(DIRED_TAR) $(DIRED_ZIP) $(DIRED_G
 #SITE_LIBS= # Your libraries here (remove the "#")
 
 # Set SITE_LYDEFS to one or more of the defines for the WWW Library:
-SITE_LYDEFS = $(DIR_LYDEFS) # Your defines here
+SITE_LYDEFS = $(DIR_LYDEFS) -DEXP_CHARTRANS # Your defines here
 
 # Set SITE_DEFS to one or more of the defines for lynx below:
-SITE_DEFS = $(DIR_DEFS) # Your defines here
+SITE_DEFS = $(DIR_DEFS) -DEXP_CHARTRANS # Your defines here
 
 # if you are compiling on a previously unsupported system, modify
 # this generic entry!!
@@ -282,6 +283,7 @@ SITE_DEFS = $(DIR_DEFS) # Your defines here
 # -Dvfork=fork     if you don't have vfork()
 # -DMMDF	   if you use MMDF instead of sendmail
 # -DFANCY_CURSES   enables fancy curses (bold, underline, reverse)
+# -DCOLOR_CURSES   enables color in SVr4 curses & clones such as ncurses
 # -DNCURSES        for ncurses support (also indicate the LIBS path)
 # -DNCURSESHEADER  seek ncurses.h instead of ncurses/curses.h in LYCurses.h
 # -DNO_KEYPAD      if you don't have keypad() and related defines
@@ -299,6 +301,10 @@ SITE_DEFS = $(DIR_DEFS) # Your defines here
 # -DNOPORT         if you must use PASV instead of PORT for FTP
 # -DNO_TTYTYPE	   if your system lacks a ttytype variable
 # -DNSL_FORK	   For fork-based name server lookups that can be 'z'apped.
+# -DEXP_CHARTRANS  enable chartrans support w/ new charsets, UTF8 mode etc.
+#                  (needed in SITE_DEFS *and* SITE_LYDEFS !)
+# -DEXP_CHARTRANS_AUTOSWITCH also let lynx switch term mode(Linux console only)
+# -DSLANG_MBCS_HACK prevent cutoff lines when using UTF8 console (slang only)
 #
 # if you are linking to freeWAIS-0.202 or older, you should define this
 # in MCFLAGS (SITE_DEFS)
@@ -371,7 +377,7 @@ convex-ncurses:
 	cd WWW/Library/convex; $(MAKE) LYFLAGS="$(SITE_LYDEFS)"
 	cd src; $(MAKE) all CC="cc" MCFLAGS="-O \
 		-I/usr/local/include \
-		-DNCURSES -DFANCY_CURSES \
+		-DNCURSES -DCOLOR_CURSES -DFANCY_CURSES \
 		-D__STDC__ \
 		-DNO_PUTENV -DNO_CBREAK -DUSE_DIRENT -DUNIX \
 		-DSTDC_HEADERS -I../$(WWWINC) $(SITE_DEFS)" \
@@ -409,7 +415,7 @@ freebsd:
 # FreeBSD doesn't have or need ranlib. (ignore the error message about that :)
 freebsd-ncurses:
 	cd WWW/Library/freebsd; $(MAKE) LYFLAGS="$(SITE_LYDEFS)"
-	cd src; $(MAKE) all MCFLAGS="$(CFLAGS) -DFANCY_CURSES -DNCURSES \
+	cd src; $(MAKE) all MCFLAGS="$(CFLAGS) -DFANCY_CURSES -DCOLOR_CURSES -DNCURSES \
 		-DNCURSESHEADER -DUNIX -DNO_TTYTYPE -DNO_CUSERID -DLOCALE \
 		-I../$(WWWINC) $(SITE_DEFS)" \
 		LIBS="-lncurses -lmytinfo \
@@ -439,7 +445,7 @@ netbsd:
 # NetBSD doesn't have or need ranlib. (ignore the error message about that :)
 netbsd-ncurses:
 	cd WWW/Library/netbsd; $(MAKE) LYFLAGS="$(SITE_LYDEFS)"
-	cd src; $(MAKE) all CC="cc" MCFLAGS="-O -DFANCY_CURSES -DNCURSES \
+	cd src; $(MAKE) all CC="cc" MCFLAGS="-O -DFANCY_CURSES -DCOLOR_CURSES -DNCURSES \
 		-DUNIX -DNO_CUSERID -I../$(WWWINC) $(SITE_DEFS) \
 		-I/usr/include/ncurses" \
 		LIBS="-lncurses -lcompat \
@@ -657,7 +663,7 @@ bsdi:
 bsdi-ncurses:
 	cd WWW/Library/Implementation; $(MAKE) -f BSDI_Makefile CC="gcc" \
 		LYFLAGS="-DBSDI $(SITE_LYDEFS)"
-	cd src; $(MAKE) all CC="gcc" MCFLAGS="-O -DNO_CUSERID -DUNIX -DNCURSES \
+	cd src; $(MAKE) all CC="gcc" MCFLAGS="-O -DNO_CUSERID -DUNIX -DCOLOR_CURSES -DNCURSES \
 		-DFANCY_CURSES -DBSDI -DSVR4 \
 		-I/usr/include/ncurses -I../$(WWWINC) $(SITE_DEFS)" \
 		LIBS="-lncurses \
@@ -681,7 +687,7 @@ bsdi-slang:
 #  nothing and is only there to make Makefiles like this one happy)
 solaris2:
 	cd WWW/Library/solaris2; $(MAKE) CC="gcc" LYFLAGS="$(SITE_LYDEFS)"
-	cd src; $(MAKE) all CC="gcc" MCFLAGS="-O -DFANCY_CURSES -DUNIX -DSVR4 \
+	cd src; $(MAKE) all CC="gcc" MCFLAGS="-O -DCOLOR_CURSES -DFANCY_CURSES -DUNIX -DSVR4 \
 		-DSOLARIS2 -DCURS_PERFORMANCE -DUTMPX_FOR_UTMP -DUSE_DIRENT \
 		-DLOCALE -DHAVE_TERMIOS_H \
 		-I../$(WWWINC) $(SITE_DEFS)" \
@@ -694,7 +700,7 @@ solaris2:
 # Solaris2 doesn't have or need ranlib. (ignore the error message about that :)
 solaris2cc:
 	cd WWW/Library/solaris2; $(MAKE) CC="cc" LYFLAGS="$(SITE_LYDEFS)"
-	cd src; $(MAKE) all CC="cc" MCFLAGS="-O -DFANCY_CURSES -DUNIX -DSVR4 \
+	cd src; $(MAKE) all CC="cc" MCFLAGS="-O -DCOLOR_CURSES -DFANCY_CURSES -DUNIX -DSVR4 \
 		-DSOLARIS2 -DCURS_PERFORMANCE -DUTMPX_FOR_UTMP -DUSE_DIRENT \
 		-DLOCALE -DHAVE_TERMIOS_H \
 		-I../$(WWWINC) $(SITE_DEFS)" \
@@ -787,9 +793,9 @@ linux:
 linux-ncurses:
 	cd WWW/Library/unix; $(MAKE) CC="gcc" LYFLAGS="-DLINUX $(SITE_LYDEFS)"
 	cd src; $(MAKE) all CC="gcc" MCFLAGS="-O -DUNIX -DLINUX -DNCURSES \
-		-DFANCY_CURSES -DNO_TTYTYPE \
+		-DFANCY_CURSES -DCOLOR_CURSES -DNO_TTYTYPE \
 		-I/usr/include/ncurses -I../$(WWWINC) $(SITE_DEFS)" \
-		LIBS="-lncurses \
+		LIBS="-lncurses -lgpm \
 		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
 		WWWLIB="../WWW/Library/unix/libwww.a"
 
@@ -880,7 +886,7 @@ sun4:
 sun4-ncurses:
 	cd WWW/Library/sun4; $(MAKE) CC="gcc" LYFLAGS="$(SITE_LYDEFS)"
 	cd src; $(MAKE) all CC="gcc" \
-		MCFLAGS="-O -DUNIX -DFANCY_CURSES -DNCURSES \
+		MCFLAGS="-O -DUNIX -DFANCY_CURSES -DCOLOR_CURSES -DNCURSES \
 		-I/usr/local/include -I../$(WWWINC) -DSUN -DSUN4 \
 		-DLOCALE $(SITE_DEFS)" \
 		LIBS="-L/usr/local/lib -lncurses \
@@ -927,7 +933,7 @@ news-ncurses:
 	@echo "You must first compile the WWW library in WWW/Library"
 	cd WWW/Library/unix; $(MAKE) LYFLAGS="$(SITE_LYDEFS)"
 	cd src; $(MAKE) all CC="gcc -O" MCFLAGS="-O -DUNIX \
-		-DNO_CUSERID -DNCURSES -DFANCY_CURSES \
+		-DNO_CUSERID -DNCURSES -DCOLOR_CURSES -DFANCY_CURSES \
 		-I../$(WWWINC) $(SITE_DEFS)" \
 		LIBS="-lncurses $(WAISLIB) $(SOCKSLIB)" \
 		WWWLIB="../WWW/Library/unix/libwww.a"
@@ -955,7 +961,7 @@ next:
 next-ncurses:
 	cd WWW/Library/next; $(MAKE) LYFLAGS="$(SITE_LYDEFS)"
 	cd src; $(MAKE) all CC="cc" MCFLAGS="-O -DUNIX -DNEXT -DNO_UNISTD_H \
-		-DNCURSES -DFANCY_CURSES \
+		-DNCURSES -DCOLOR_CURSES -DFANCY_CURSES \
 		-DNO_CUSERID -DNO_GETCWD -DNO_PUTENV \
 		-I/usr/local/include -I../$(WWWINC) $(SITE_DEFS)" \
 		LIBS="-L/usr/local/lib -lncurses \
@@ -983,6 +989,16 @@ clean:
 	cd src; $(MAKE) clean
 	rm -f *.b src/lynx core Lynx.leaks
 
+distclean: clean
+	-rm -f WWW/Library/*/*~
+	-rm -f WWW/Library/*/*.bak
+	-rm -rf WWW/Library/*/obsolete
+	-rm -rf src/obsolete
+	-cd src; $(MAKE) clean
+	-cd src/chrtrans; $(MAKE) distclean
+	-rm -f Lynx.prj *~ *.bak *.sav .*_aux
+	rm lynx
+
 tar:  clean
 	rm -f lynx
 	$(MAKE) save
diff --git a/README.chartrans b/README.chartrans
new file mode 100644
index 00000000..1c1e9187
--- /dev/null
+++ b/README.chartrans
@@ -0,0 +1,191 @@
+Lynx CHARTRANS
+
+ Features (in addition to those which Lynx already has):
+ 
+- Can (attempt to) translate from any document charset to any display
+   character set, *IF* the document charset is known by a translation 
+   table (compiled in at installation).
+
+ - Old method for specifying translations of Latin1 characters and
+   SGML entities still supported. (IBMPC-charsets.announce is still
+   relevant.)
+
+ - New method to define character sets: used for input charset as well
+   as display character set, translation tables compiled in from 
+   separate files (one per charset).
+
+ - Unicode (UTF8) support: can (attempt to) decode and translate UTF8 to
+   display character set, or pass through UTF to display (if terminal
+   or console understands UTF8).  [raw display of UTF only tested with Slang 
+   so far, does not always position everything correctly on screen]
+
+ - Support for CHARSET attribute on A tag [but not yet on LINK], as in
+   HTML i18n RFC 2070.  A link can suggest the target's charset in this way.
+
+ - EXPERIMENTAL, currently enabled only for Linux console: 
+   can (attempt to) automatically switch terminal mode and load new
+   code pages on change of display character set.
+
+ - some minor changes: sometimes invalid characters are displayed in a hex
+   notation Uxxxx (helps debugging, but I also regard it as at least not
+   worse than showing the wrong char without warning).  KOI8 -> other cs
+   will just strip high bit from cyrillic chars (gives somewhat readable
+   ASCII, KOI was constructed that way...)
+
+Additions/changes to user interface:
+
+ - many new Display Character Sets are available on O)ptions screen.
+   (also can now use arrow keys, HOME, END etc. for cycling through the list). 
+
+ - new command line flags:
+   -assume_charset=...  assume this as charset for documents that don't
+                        specify a charset parameter in HTTP headers
+   -assume_unknown_charset=...  in case a charset parameter is not recognized 
+   -assume_local_charset=... assume this as charset of local file: docs 
+
+ - The "Raw" toggle (from -raw flag, '@' key, or Options screen)
+   o  should work as before for CJK charsets,
+   o  otherwise toggles the assumption "Default remote charset is same 
+      as Display Character Set" on or off.
+   (Try the "Transparent" Display Character Set for more "rawness".)
+
+Requirements:  same as for Lynx in general :)
+
+The chartrans code is now merged with Wayne Buttle's changes for
+32-bit MS Windows and DOS/DJGPP, with Thomas Dickey's and Jim Spath's
+emerging auto-configure mechanism, and with BUGFIXES from Foteos
+Macrides.  See the accompanying file CHANGES.few for the current
+status.
+
+
+A WARNING BEFORE YOU PROCEDE:
+
+This is experimental.  It works already nicely for me, but I have only
+tested it on Linux, compiled with Slang.  In some cases undisplayable bytes
+may get sent to the terminal which are then interpreted as control chars.
+Other usual warnings about alpha software apply...
+
+
+HOW TO GET SOURCES:
+
+The location of files mentioned below is currently at
+         <URL: http://www.tezcat.com/~kweide/lynx-chartrans/> or
+(preferred location:)
+         <URL: http://sol.slcc.edu/lynx/klaus/merged/all/>.
+Check both locations to find the newest version.
+
+There are three alternatives:
+( Replace the * in the followin filenames with the appropriate subversion )
+
+(1.)
+   Provided as a full Lynx distribution (for now..) - in zip format.
+   This contains the complete Lynx source package.
+
+   Just get lynx-2.7ac-*.zip.
+
+(2.)
+   Provided as add-on over the Lynx 2.7 distribution, i.e. all files that
+   are new or have changed - in zip format.
+   (a) Get the official Lynx 2.7 distribution - see list of download sites at
+           <URL: http://www.crl.com/~subir/lynx/sources.html>.
+   (b) Get add-to-offi-2.7ac-*.zip.
+   (c) Unpack the official 2.7 package, then unzip add-to-offi-2.7ac-*.zip
+       over that directory tree.
+
+(3.)
+   Provided in two files (for minimal download time) to install over the
+   Lynx 2.7 distribution - needs gunzip, tar, and patch.
+   (a) Get the official Lynx 2.7 distribution - see list of download sites at
+           <URL: http://www.crl.com/~subir/lynx/sources.html>.
+   (b) Get lynx-newfiles-2.7ac-*.tar.gz.
+   (c) Get lynx-patch-2.7ac-*.pch.gz.
+   (d) Unpack the official 2.7 package, then unpack lynx-newfiles-2.7ac-*.tar.gz
+       over that directory tree.
+   (d) Apply patches from lynx-patch-2.7ac-*.pch.
+
+
+HOW TO INSTALL:
+
+(4) before compiling:
+
+    Check top level Makefile and userdefs.h as usual.
+
+    NOTE that there is a new "#define" in userdefs.h for MAX_CHARSETS
+    near the end (in "Section 3.").
+
+    NOTE that in the top-level Makefile, the -DEXP_CHARTRANS must be
+    in *both* SITE_DEFS *and* SITE_LYDEFS.
+
+(5) Building Lynx:
+
+    If you are compiling for VMS you have to figure out for yourself
+    how to modify the procedure, sorry.
+
+    What's supposed to happen (in addition to the usual things when
+    building Lynx): in the new subdirectory src/chrtrans, make should
+    first compile the auxiliary program `makeuctb', then invoke that
+    program to create xxxxx_yyy.h files from the provided xxxxx.yyy
+    translation table files.  (See README.* files in src/chrtrans for
+    more info.)
+
+    If all goes well, just invoking make from the top-level Lynx dir
+    as usual should do everything automatically.  If not, the Makefiles
+    may need some tweaking... or:
+
+(6) Some things to look at if compilation fails:
+
+    In src/chrtrans/UCkd.h there is a typedef for an unsigned 16bit
+    numeric type which may need to be changed for your system.  
+    See comment near top there.
+
+    For recompiling Lynx, `make clean' should not be necessary if only
+    files in src/chrtrans have been changed.  On the other hand 
+    `make clean' from the top directory doesn' currently propagate to
+    the src/chrtrans directory, so you have to cd to that directory 
+    and `make clean' there to really clean up there.
+
+(7) To customize (add/change translation tables etc.):
+
+     See README.* files in src/chrtrans.
+     Make the necessary changes there, then recompile.
+     (A general `make clean' should not be necessary, but make sure
+     the ...uni.h file in src/chrtrans gets regenerated.)
+
+     Note that definition of new character entities (if e.g. you want
+     Lynx to recognize &Zcaron;) are not covered by these table files,
+     they have to be listed in HTMLDTD.c.  
+
+     _If you are on a Linux system_ and using Lynx on the console (i.e.
+     not xterm, not a dialup *into* the Linux box), you can compile
+     with -DEXP_CHARTRANS_AUTOSWITCH.  This is very useful for testing
+     the various Display Character Sets, Lynx will try to automatically
+     chage the console state.  You need to have the Linux kbd package
+     installed, with a working `setfont' command executable by the user,
+     and the right font files - check the source in src/UCAuto.c for
+     the files used and/or to change them!  
+     NOTE that with this enabled,
+     - Lynx currently will not clean up the console state at exit,
+       it will probably left like the last Display Character Set you used.
+     - Loading a font is global across _all_ virtual text consoles, so
+       using Lynx (compiled with this flag) may change the appearance of
+       text on other consoles (if that text contains characters 
+       beyond ASCII).
+
+(8) Some suggested Web pages for testing:
+
+    <URL:  http://www.tezcat.com/~kweide/lynx-chartrans/test/>
+
+    <URL:  http://www.isoc.org:8080/>,
+      especially 
+    <URL:  http://www.isoc.org:8080/liste_ml.htm>.
+
+    <URL:  http://www.accentsoft.com/un/un-all.htm>
+
+(9) Please report bugs, unexpected behavior, etc. 
+    to <lynx-dev@sig.net> or <kweide@tezcat.com>.
+
+    Suggestions for improvement would be welcome, as well as 
+    contributed translation tables (for stuff that is not available
+    at ftp://dkuug.dk or ftp://unicode.org).
+
+KW  1996-03-12
diff --git a/README.configure b/README.configure
new file mode 100644
index 00000000..79234d40
--- /dev/null
+++ b/README.configure
@@ -0,0 +1,35 @@
+-- 1997/3/20 - T.Dickey <dickey@clark.net>
+
+This is the first pass of an auto-configure script which I and Jim Spath
+have been working on.  It uses autoconf 2.12 to generate a Bourne shell
+script (configure), which can be run on a UNIX platform to generate:
+
+	lynx_cfg.h
+	makefile
+
+to replace the top-level Makefile of Lynx.  Ultimately the generated
+makefile will have a single target (rather than the multitude of specific
+platforms).  At this stage, we've gotten as far as combining several of the
+more common configurations (noted in makefile according to when they were
+tested).
+
+To use the configure script, simply type
+
+	configure
+or	configure --with-screen=ncurses
+or	configure --with-screen=slang
+
+and
+	make <platform>
+
+e.g., one of
+
+	make linux
+	make sgi
+	make solaris
+	make sun4
+
+Since the linux target has only a minor special case #ifdef, I've also built
+AIX (cc), CLIX (cc), SCO (cc) and HP-UX (K&R c, gcc) configurations using that
+target.  Jim has tested additionally the FreeBSD, NetBSD configurations, and
+will investigate DGUX.
diff --git a/README.win-386 b/README.win-386
new file mode 100644
index 00000000..2f36fb23
--- /dev/null
+++ b/README.win-386
@@ -0,0 +1,28 @@
+Ports have been added for Win32 (95/NT) and 386 DOS computers with a
+packet driver.  I created four new defines to accomplish this.
+
+_WINDOWS Defined for Win32 specific code (Mostly TCP related)
+DJGPP    Defined for 386 specific code (Mostly TCP related)
+DOSPATH  Defined for any DOS'ish computer
+NOSIGHUP Defined for computers not supporting sighup signal calls.
+
+To make the Win32 version you need Borland C++ 4.52 or complete
+compatable and the win32.zip package unziped into the lynx directory.
+This code expects you to have BC make in your path at the console
+prompt and also to be able to compile from the console as well.
+I can provide an IDE if needed but did not want to force on into the
+standard Lynx package.  Text mode compiling is much faster anyhow (IMHO).
+The current default configuration is to have the Character Translation
+code linked in.  For this to be successful you need to go into
+src\chrtrans and run makew32.  After that you can come back to the
+Lynx root and run make -f makefile.w32.
+
+The DJGPP version is a little screwy.  You need DJGPP 2.0, the djgpp.zip
+package unziped into the lynx directory and some paitence.  I kludged it
+to compile with long filenames under Win95 so some fooling around may be
+required.  To compile, run djgpp.bat that was extracted from the zip
+file.  There is currently a problem with compiling HTML.c and I have
+contacted the author of DJGPP for help with getting this port further.
+
+Wayne Buttles
+lynx-port@fdisk.com
diff --git a/WWW/Library/Implementation/BSDI_Makefile b/WWW/Library/Implementation/BSDI_Makefile
index 65653ca3..31f5dfef 100644
--- a/WWW/Library/Implementation/BSDI_Makefile
+++ b/WWW/Library/Implementation/BSDI_Makefile
@@ -1,11 +1,11 @@
-#  Make WWW under svr4
+#  Make WWW under unix
 #
 
 # For W3 distribution, machine type for subdirectories
-WWW_MACH = svr4
+WWW_MACH = unix
 
 # The ASIS repository's name for the machine we are on
-ASIS_MACH = generic/svr4
+ASIS_MACH = generic/unix
 
 
 CFLAGS =  -O -DDEBUG -DUSE_DIRENT -DSVR4 -DNO_FILIO_H
diff --git a/WWW/Library/Implementation/CommonMakefile b/WWW/Library/Implementation/CommonMakefile
index bd32f131..dea974b0 100644
--- a/WWW/Library/Implementation/CommonMakefile
+++ b/WWW/Library/Implementation/CommonMakefile
@@ -30,6 +30,8 @@
 #  If this env var is set to something else Some makes will use that instead
 SHELL = /bin/sh
 
+RANLIB	= ranlib
+
 #	.h files are distributed but originally are made from the
 #	self-documenting hypertext files.
 
@@ -60,12 +62,6 @@ LOB = $(WTMP)/Library/$(WWW_MACH)
 #WAISCFLAGS = -DDIRECT_WAIS 
 #
 
-# This path, if relative, is taken relative to the directory
-# in which this makefile is, not the pwd.  This screws up the 
-# recursive invocation
-# include $(CMN)Version.make
-include $(ABS)$(WWW)/Library/Implementation/Version.make
-
 # XMOsAIC hack is only for server to cope with xmosaic kludge for mmedia
 #
 # add -DNEW_GATEWAY here for the new gateway config stuff
@@ -142,7 +138,7 @@ SPECIFIC = $(WWW)/All/*/Makefile.include $(WWW)/All/Implementation/Makefile* \
 # for that step
 $(LOB)/libwww.a : $(COMMON)
 	ar r $(LOB)/libwww.a $(COMMON)
-	-ranlib $(LOB)/libwww.a
+	-$(RANLIB) $(LOB)/libwww.a
 
 #	Clean up everything generatable except final products
 clean :
diff --git a/WWW/Library/Implementation/HTAAProt.c b/WWW/Library/Implementation/HTAAProt.c
index 751b51fc..91fc81bd 100644
--- a/WWW/Library/Implementation/HTAAProt.c
+++ b/WWW/Library/Implementation/HTAAProt.c
@@ -21,8 +21,10 @@
 
 #include <string.h>
 #ifndef VMS
+#ifndef NOUSERS
 #include <pwd.h>	/* Unix password file routine: getpwnam()	*/
 #include <grp.h>	/* Unix group file routine: getgrnam()		*/
+#endif /* NOUSERS */
 #endif /* not VMS */
 
 #include "HTAAUtil.h"
@@ -70,7 +72,7 @@ PRIVATE BOOL isNumber ARGS1(CONST char *, s)
 }
 
 
-#ifdef VMS
+#if defined (VMS) || defined (NOUSERS)
 /* PUBLIC							HTAA_getUidName()
 **		GET THE USER ID NAME (VMS ONLY)
 ** ON ENTRY:
diff --git a/WWW/Library/Implementation/HTAccess.h b/WWW/Library/Implementation/HTAccess.h
index 78685f8d..d883e10f 100644
--- a/WWW/Library/Implementation/HTAccess.h
+++ b/WWW/Library/Implementation/HTAccess.h
@@ -140,7 +140,7 @@ Load a document from absolute name
   
   addr                    The absolute address of the document to be accessed.
                          
-  filter                  if YES, treat document as HTML
+  filter_it               if YES, treat document as HTML
                          
  */
 
@@ -168,7 +168,7 @@ Load a document from absolute name to a stream
   
   addr                    The absolute address of the document to be accessed.
                          
-  filter                  if YES, treat document as HTML
+  filter_it               if YES, treat document as HTML
                          
   ON EXIT,
   
@@ -179,7 +179,7 @@ Load a document from absolute name to a stream
    Note: This is equivalent to HTLoadDocument
    
  */
-extern BOOL HTLoadToStream PARAMS((CONST char * addr, BOOL filter,
+extern BOOL HTLoadToStream PARAMS((CONST char * addr, BOOL filter_it,
                                 HTStream * sink));
 
 
diff --git a/WWW/Library/Implementation/HTAnchor.c b/WWW/Library/Implementation/HTAnchor.c
index f9b44054..40032d8a 100644
--- a/WWW/Library/Implementation/HTAnchor.c
+++ b/WWW/Library/Implementation/HTAnchor.c
@@ -173,7 +173,7 @@ PUBLIC HTChildAnchor * HTAnchor_findChild ARGS2(
 	    fprintf(stderr, "HTAnchor_findChild called with NULL parent.\n");
         return NULL;
     }
-    if (kids = parent->children) {  /* parent has children : search them */
+    if ((kids = parent->children) != 0) {  /* parent has children : search them */
         if (tag && *tag) {		/* TBL */
 	    while (NULL != (child=(HTChildAnchor *)HTList_nextObject(kids))) {
 #ifdef CASE_INSENSITIVE_ANCHORS
@@ -465,7 +465,7 @@ PRIVATE void deleteLinks ARGS1(
 	 *  their parents to know that they are no longer
 	 *  the destination of me's anchor.
 	 */
-	while (target = (HTLink *)HTList_removeLastObject(me->links)) {
+	while ((target = (HTLink *)HTList_removeLastObject(me->links)) != 0) {
 	    parent = target->dest->parent;
 	    if (!HTList_isEmpty(parent->sources)) {
 	        /*
@@ -555,7 +555,7 @@ PUBLIC BOOL HTAnchor_delete ARGS1(
 	 */
 	if (!HTList_isEmpty(me->children)) {
 	    cur = me->children; 
-	    while (child = (HTChildAnchor *)HTList_nextObject(cur)) {
+	    while ((child = (HTChildAnchor *)HTList_nextObject(cur)) != 0) {
 		if (child != NULL) {
 		    deleteLinks((HTAnchor *)child);
 		}
@@ -573,8 +573,8 @@ PUBLIC BOOL HTAnchor_delete ARGS1(
      *  First, recursively delete children and their links.
      */
     if (!HTList_isEmpty(me->children)) {
-	while (child = (HTChildAnchor *)HTList_removeLastObject(
-							me->children)) {
+	while ((child = (HTChildAnchor *)HTList_removeLastObject(
+							me->children)) != 0) {
 	    if (child) {
 		deleteLinks((HTAnchor *)child);
 		if (child->tag) {
@@ -628,7 +628,7 @@ PUBLIC BOOL HTAnchor_delete ARGS1(
     FREE(me->RevTitle);
     if (me->FileCache) {
 	FILE *fd;
-	if (fd = fopen(me->FileCache, "r")) {
+	if ((fd = fopen(me->FileCache, "r")) != 0) {
 	    fclose(fd);
 	    remove(me->FileCache);
 	}
@@ -671,6 +671,10 @@ PUBLIC BOOL HTAnchor_delete ARGS1(
      */
     FREE(me->address);
 
+#ifdef EXP_CHARTRANS
+    FREE (me->UCStages);
+#endif
+
     /*
      *  Finally, kill the parent anchor passed in.
      */
@@ -1088,3 +1092,155 @@ PUBLIC void HTAnchor_setPhysical ARGS2(
         StrAllocCopy(me->physical, physical);
     }
 }
+
+#ifdef EXP_CHARTRANS
+
+#include "UCMap.h"
+extern LYUCcharset LYCharSet_UC[];
+
+/* We store charset info in the HTParentAnchor object, for several
+** "stages".  (See UCDefs.h)
+** A stream method is supposed to know what stage in the model it is.
+** 
+** General model       MIME     ->  parser  ->  structured  ->  HText
+** e.g. text/html
+**     from HTTP:      HTMIME.c ->  SGML.c  ->  HTML.c      ->  GridText.c
+**   text/plain  
+**     from file:      HTFile.c ->  HTPlain.c               ->  GridText.c
+**
+** The lock/set_by is used to lock e.g. a charset set by an explicit
+** HTTP MIME header against overriding by a HTML META tag - the MIME 
+** header has higher priority.  Defaults (from -assume_.. options etc.) 
+** will not override charset explicitly given by server.
+**
+** Some advantages of keeping this in the HTAnchor:
+** - Global variables are bad.
+** - Can remember a charset given by META tag when toggling to SOURCE view.
+** - Can remember a charset given by <A CHARSET=...> href in another doc.
+**
+** We don't modify the HTParentAnchor's charset element
+** here, that one will only be set when explicitly given.
+*/
+PUBLIC LYUCcharset * HTAnchor_getUCInfoStage ARGS2(
+    HTParentAnchor *, me,
+    int, 	which_stage)
+{
+    if (me && !me->UCStages) {
+	int i;
+	int chndl = UCLYhndl_for_unspec;
+	UCAnchorInfo * stages =
+	    (UCAnchorInfo*) calloc(1, sizeof(UCAnchorInfo));
+	if (stages == NULL)
+            outofmem(__FILE__, "HTAnchor_getUCInfoStage");
+	for(i = 0; i < UCT_STAGEMAX; i++) {
+	    stages->s[i].C.MIMEname = "";
+	    stages->s[i].LYhndl = -1;
+	}
+	if (me->charset) {
+	    chndl = UCGetLYhndl_byMIME(me->charset);
+	    if (chndl < 0) {
+		chndl = UCLYhndl_for_unrec;
+	    }
+	}
+	if (chndl >= 0) {
+	    memcpy(&stages->s[UCT_STAGE_MIME].C, &LYCharSet_UC[chndl],
+		   sizeof(LYUCcharset));
+	    stages->s[UCT_STAGE_MIME].lock = UCT_SETBY_DEFAULT;
+	}
+	else {			/* should not happen... */
+	    stages->s[UCT_STAGE_MIME].C.UChndl = -1;
+	    stages->s[UCT_STAGE_MIME].lock = UCT_SETBY_NONE;
+	}
+	stages->s[UCT_STAGE_MIME].LYhndl = chndl;
+	me->UCStages = stages;
+    }
+    if (me) {
+	return &me->UCStages->s[which_stage].C;
+    }
+    return NULL;
+}
+
+PUBLIC int HTAnchor_getUCLYhndl ARGS2(
+    HTParentAnchor *, me,
+    int,	 which_stage)
+{
+    if (me) {
+	if (!me->UCStages) {
+	    /* this will allocate and initialize, if not yet done */
+	    (void) HTAnchor_getUCInfoStage(me, which_stage);
+	}
+	if (me->UCStages->s[which_stage].lock > UCT_SETBY_NONE)
+	    return me->UCStages->s[which_stage].LYhndl;
+    }
+    return -1;
+}
+
+PUBLIC LYUCcharset * HTAnchor_setUCInfoStage ARGS4(
+    HTParentAnchor *, me,
+    int,	 LYhndl,
+    int,	 which_stage,
+    int,	 set_by)
+{
+    if (me) {
+	/* this will allocate and initialize, if not yet done */
+	LYUCcharset * p = HTAnchor_getUCInfoStage(me, which_stage);
+	/* Can we override? */
+	if (set_by >= me->UCStages->s[which_stage].lock) {
+	    me->UCStages->s[which_stage].lock = set_by;
+	    me->UCStages->s[which_stage].LYhndl = LYhndl;
+	    if (LYhndl >= 0) {
+		memcpy(p, &LYCharSet_UC[LYhndl],
+		       sizeof(LYUCcharset));
+	    }
+	    else {
+		p->UChndl = -1;
+	    }
+	    return p;
+	}
+    }
+    return NULL;
+}
+PUBLIC LYUCcharset * HTAnchor_resetUCInfoStage ARGS4(
+    HTParentAnchor *, me,
+    int,	 LYhndl,
+    int,	 which_stage,
+    int,	 set_by)
+{
+    if (!me || !me->UCStages)
+	return NULL;
+    me->UCStages->s[which_stage].lock = set_by;
+    me->UCStages->s[which_stage].LYhndl = LYhndl;
+    return &me->UCStages->s[which_stage].C;
+}
+
+/* A set_by of (-1) means use the lock value from the from_stage */
+PUBLIC LYUCcharset * HTAnchor_copyUCInfoStage ARGS4(
+    HTParentAnchor *, me,
+    int,	 to_stage,
+    int,	 from_stage,
+    int,	 set_by)
+{
+    if (me) {
+	/* this will allocate and initialize, if not yet done */
+	LYUCcharset * p_from = HTAnchor_getUCInfoStage(me, from_stage);
+	LYUCcharset * p_to = HTAnchor_getUCInfoStage(me, to_stage);
+	/* Can we override? */
+	if (set_by == -1)
+	    set_by = me->UCStages->s[from_stage].lock;
+	if (set_by == UCT_SETBY_NONE)
+	    set_by = UCT_SETBY_DEFAULT;
+	if (set_by >= me->UCStages->s[to_stage].lock) {
+	    me->UCStages->s[to_stage].lock = set_by;
+	    me->UCStages->s[to_stage].LYhndl =
+		me->UCStages->s[from_stage].LYhndl;
+
+	    memcpy(p_to, p_from,
+		       sizeof(LYUCcharset));
+
+	    return p_to;
+	}
+    }
+    return NULL;
+}
+
+#endif /* EXP_CHARTRANS */
diff --git a/WWW/Library/Implementation/HTAnchor.h b/WWW/Library/Implementation/HTAnchor.h
index 934fe2c7..efa2a307 100644
--- a/WWW/Library/Implementation/HTAnchor.h
+++ b/WWW/Library/Implementation/HTAnchor.h
@@ -16,6 +16,9 @@
 
 #include "HTList.h"
 #include "HTAtom.h"
+#ifdef EXP_CHARTRANS
+#include "UCDefs.h"
+#endif
 
 #ifdef SHORT_NAMES
 #define HTAnchor_findChild                      HTAnFiCh
@@ -119,6 +122,9 @@ struct _HTParentAnchor {
   char *	expires;		/* Expires */
   char *	last_modified;		/* Last-Modified */
   char *	server;			/* Server */
+#ifdef EXP_CHARTRANS
+  UCAnchorInfo *	UCStages;
+#endif
 };
 
 typedef struct {
@@ -372,6 +378,29 @@ extern void HTAnchor_setPhysical PARAMS((
 
 #endif /* HTANCHOR_H */
 
+#ifdef EXP_CHARTRANS
+
+extern LYUCcharset * HTAnchor_getUCInfoStage PARAMS((HTParentAnchor * me,
+						     int which_stage));
+extern int HTAnchor_getUCLYhndl PARAMS((HTParentAnchor * me,
+						     int which_stage));
+extern LYUCcharset * HTAnchor_setUCInfoStage PARAMS((HTParentAnchor * me,
+						     int LYhndl,
+						     int which_stage,
+						     int set_by));
+extern LYUCcharset * HTAnchor_setUCInfoStage PARAMS((HTParentAnchor * me,
+						     int LYhndl,
+						     int which_stage,
+						     int set_by));
+extern LYUCcharset * HTAnchor_resetUCInfoStage PARAMS((HTParentAnchor * me,
+						     int LYhndl,
+						     int which_stage,
+						     int set_by));
+extern LYUCcharset * HTAnchor_copyUCInfoStage PARAMS((HTParentAnchor * me,
+						     int to_stage,
+						     int from_stage,
+						     int set_by));
+#endif
 /*
 
     */
diff --git a/WWW/Library/Implementation/HTCJK.h b/WWW/Library/Implementation/HTCJK.h
index 8944cd42..c5fa51af 100644
--- a/WWW/Library/Implementation/HTCJK.h
+++ b/WWW/Library/Implementation/HTCJK.h
@@ -79,7 +79,7 @@ extern void JISx0201TO0208_SJIS PARAMS((
 extern unsigned char * SJIS_TO_EUC1 PARAMS((
 	unsigned char		HI,
 	unsigned char		LO,
-	unsigned char *		EUC));
+	unsigned char *		EUCp));
 
 extern unsigned char * SJIS_TO_EUC PARAMS((
 	unsigned char *		src,
diff --git a/WWW/Library/Implementation/HTDOS.c b/WWW/Library/Implementation/HTDOS.c
new file mode 100644
index 00000000..79a8b463
--- /dev/null
+++ b/WWW/Library/Implementation/HTDOS.c
@@ -0,0 +1,95 @@
+/*             DOS specific routines

+

+ */

+

+#include <mem.h>

+#include <dos.h>

+#include "htstring.h"

+

+/* PUBLIC                                                       HTDOS_wwwName()

+**              CONVERTS DOS Name into WWW Name

+** ON ENTRY:

+**      dosname         DOS file specification (NO NODE)

+**

+** ON EXIT:

+**	returns 	www file specification

+**

+*/

+char * HTDOS_wwwName (char *dosname)

+{

+	static char wwwname[1024];

+	char *cp_url = wwwname;

+

+	strcpy(wwwname,dosname);
+
+	for ( ; *cp_url != '\0' ; cp_url++)
+	  if(*cp_url == '\\') *cp_url = '/';
+
+	 if(strlen(wwwname) > 3 && *cp_url == '/')
+		*cp_url = '\0';
+
+	 if(*cp_url == ':')
+	 {
+		cp_url++;
+		*cp_url = '/';
+	 }
+
+/*
+	if((strlen(wwwname)>2)&&(wwwname[1]==':')) wwwname[1]='|';
+	printf("\n\nwww: %s\n\ndos: %s\n\n",wwwname,dosname);

+	sleep(5);

+*/

+	return(wwwname);
+}

+

+

+/* PUBLIC                                                       HTDOS_name()

+**              CONVERTS WWW name into a DOS name

+** ON ENTRY:

+**	fn		WWW file name

+**

+** ON EXIT:

+**      returns         dos file specification

+**

+** Bug:	Returns pointer to static -- non-reentrant

+*/

+char * HTDOS_name(char *dosname)	{

+

+	static char cp_url[1024];
+	int joe;
+
+	memset(cp_url, 0, 1023);
+/*	strset(cp_url,0); */
+	sprintf(cp_url, "%s",dosname);
+
+	for(joe = 0; cp_url[joe] != '\0'; joe++)	{
+		if(cp_url[joe] == '/')	{
+			cp_url[joe] = '\\';
+		}
+	}
+
+//	if(strlen(cp_url) < 4) cp_url[] = ':';
+	if(strlen(cp_url) == 3) cp_url[3] = '\\';
+
+	if(strlen(cp_url) == 4) cp_url[4] = '.';
+
+	if((strlen(cp_url) > 2) && (cp_url[1] == '|'))
+		cp_url[1] = ':';
+
+	if((cp_url[1] == '\\') || (cp_url[0]  != '\\'))
+	{
+/*
+		printf("\n\n%s = i%\n\n",cp_url,strlen(cp_url));
+		sleep(5);
+/**/
+		return(cp_url);
+	} else {
+/*
+		printf("\n\n%s = %i\n\n",cp_url+1,strlen(cp_url));
+		sleep(5);
+/**/
+		return(cp_url+1);
+	}
+}
+
+


diff --git a/WWW/Library/Implementation/HTDOS.h b/WWW/Library/Implementation/HTDOS.h
new file mode 100644
index 00000000..2247c5ef
--- /dev/null
+++ b/WWW/Library/Implementation/HTDOS.h
@@ -0,0 +1,34 @@
+/*             DOS specific routines

+

+ */

+

+#ifndef HTDOS_H

+#define HTDOS_H

+

+/* PUBLIC                                                       HTDOS_wwwName()

+**              CONVERTS DOS Name into WWW Name

+** ON ENTRY:

+**      dosname         DOS file specification (NO NODE)

+**

+** ON EXIT:

+**	returns 	www file specification

+**

+*/

+char * HTDOS_wwwName (char * dosname);

+

+/* PUBLIC                                                       HTDOS_name()

+**              CONVERTS WWW name into a DOS name

+** ON ENTRY:

+**	fn		WWW file name

+**

+** ON EXIT:

+**      returns         dos file specification

+**

+** Bug:	Returns pointer to static -- non-reentrant

+*/

+char * HTDOS_name (char * fn);

+

+#endif /* not HTDOS_H */

+/*

+

+	End of file HTDOS.h.  */

diff --git a/WWW/Library/Implementation/HTFTP.c b/WWW/Library/Implementation/HTFTP.c
index c90b3473..8be44d44 100644
--- a/WWW/Library/Implementation/HTFTP.c
+++ b/WWW/Library/Implementation/HTFTP.c
@@ -71,6 +71,10 @@ BUGS:	@@@  	Limit connection cache size!
 **		same time.
 */		
 
+#ifdef DJGPP
+#define u_long unsigned long
+#endif
+
 #include "HTUtils.h"
 #include "tcp.h"
 
@@ -108,12 +112,6 @@ BUGS:	@@@  	Limit connection cache size!
 
 #include "LYLeaks.h"
 
-#ifdef REMOVED_CODE
-extern char *malloc();
-extern void free();
-extern char *strncpy();
-#endif /* REMOVED_CODE */
-
 typedef struct _connection {
     struct _connection *	next;	/* Link on list 	*/
     u_long			addr;	/* IP address		*/
@@ -2775,7 +2773,7 @@ PUBLIC int HTFTPLoad ARGS4(
 	} else {
 	    format = HTFileFormat(filename, &encoding);
 	}
-	format = HTCharsetFormat(format, anchor);
+	format = HTCharsetFormat(format, anchor, -1);
 	binary = (encoding != HTAtom_for("8bit") &&
 		  encoding != HTAtom_for("7bit"));
 	if (!binary &&
@@ -3203,7 +3201,7 @@ listen:
 		
 		FileName[len - 2] = '\0';
 		format = HTFileFormat(FileName, &encoding);
-		format = HTCharsetFormat(format, anchor);
+		format = HTCharsetFormat(format, anchor, -1);
 		StrAllocCopy(anchor->content_type, format->name);
 		StrAllocCopy(anchor->content_encoding, "x-compress");
 		format = HTAtom_for("www/compressed");
@@ -3214,7 +3212,7 @@ listen:
 		    FileName[len - 3] == '_') {
 		    FileName[len - 3] = '\0';
 		    format = HTFileFormat(FileName, &encoding);
-		    format = HTCharsetFormat(format, anchor);
+		    format = HTCharsetFormat(format, anchor, -1);
 		    StrAllocCopy(anchor->content_type, format->name);
 		    StrAllocCopy(anchor->content_encoding, "x-gzip");
 		    format = HTAtom_for("www/compressed");
diff --git a/WWW/Library/Implementation/HTFile.c b/WWW/Library/Implementation/HTFile.c
index af433de7..40097a96 100644
--- a/WWW/Library/Implementation/HTFile.c
+++ b/WWW/Library/Implementation/HTFile.c
@@ -25,6 +25,13 @@
 /* #define NO_PARENT_DIR_REFERENCE */ /* Define this for no parent links */
 #endif /* !VMS */
 
+#ifdef DOSPATH
+#define GOT_READ_DIR
+#include <dirent.h>
+#define USE_DIRENT
+#include "HTDOS.h"
+#endif
+
 #include "HTUtils.h"
 #include "tcp.h"
 #include "HTFile.h"		/* Implemented here */
@@ -63,6 +70,11 @@
 #include "HTBTree.h"
 #include "HTAlert.h"
 #include "HTCJK.h"
+#ifdef EXP_CHARTRANS
+#include "UCDefs.h"
+#include "UCMap.h"
+#include "UCAux.h"
+#endif /* EXP_CHARTRANS */
 
 #include "LYexit.h"
 #include "LYLeaks.h"
@@ -82,13 +94,6 @@ typedef struct _HTSuffix {
 #endif /* NGROUPS_MAX */
 #endif /* NGROUPS */
 
-
-#ifdef USE_DIRENT		/* Set this for Sys V systems */
-#define STRUCT_DIRENT struct dirent
-#else
-#define STRUCT_DIRENT struct direct
-#endif /* USE_DIRENT */
-
 #include "HTML.h"		/* For directory object building */
 
 #define PUTC(c) (*target->isa->put_character)(target, c)
@@ -120,6 +125,9 @@ extern int current_char_set;
 extern char *LYchar_set_names[];
 extern BOOL HTPassEightBitRaw;
 extern HTCJKlang HTCJK;
+#ifndef EXP_CHARTRANS
+#define UCLYhndl_HTFile_for_unspec 0 /* a dummy define */
+#endif
 
 PRIVATE char *HTMountRoot = "/Net/";		/* Where to find mounts */
 #ifdef VMS
@@ -138,6 +146,14 @@ PRIVATE HTSuffix no_suffix = { "*", NULL, NULL, 1.0 };
 PRIVATE HTSuffix unknown_suffix = { "*.*", NULL, NULL, 1.0};
 
 
+#ifdef _WINDOWS
+int exists(char *filename)
+{
+ return (access(filename,0)==0);
+}
+#endif
+
+
 /*	To free up the suffixes at program exit.
 **	----------------------------------------
 */
@@ -535,7 +551,11 @@ PUBLIC char * HTLocalName ARGS1(
 	    FREE(host);
 	    if (TRACE)
 	        fprintf(stderr, "Node `%s' means path `%s'\n", name, path);
+#ifdef DOSPATH
+		 return(HTDOS_name(path));
+#else
 	    return(path);
+#endif /* DOSPATH */
 	} else {
 	    char * result = (char *)malloc(
 	    			strlen("/Net/")+strlen(host)+strlen(path)+1);
@@ -606,6 +626,7 @@ PUBLIC char * WWW_nameOfFile ARGS1(
     }
     if (TRACE)
         fprintf(stderr, "File `%s'\n\tmeans node `%s'\n", name, result);
+
     return result;
 }
 
@@ -744,12 +765,15 @@ PUBLIC HTFormat HTFileFormat ARGS2(
 **	indicated, sets Lynx up for proper handling in relation
 **	to the currently selected character set. - FM
 */
-PUBLIC HTFormat HTCharsetFormat ARGS2(
+PUBLIC HTFormat HTCharsetFormat ARGS3(
 	HTFormat,		format,
-	HTParentAnchor *,	anchor)
+	HTParentAnchor *,	anchor,
+	int,			default_LYhndl)
 
 {
-    char *cp = NULL, *cp1, *cp2;
+    char *cp = NULL, *cp1, *cp2, *cp3 = NULL, *cp4;
+    BOOL chartrans_ok = FALSE;
+    int chndl = -1;
     int i;
 
     FREE(anchor->charset);
@@ -765,6 +789,84 @@ PUBLIC HTFormat HTCharsetFormat ARGS2(
 	cp2 += 7;
 	while (*cp2 == ' ' || *cp2 == '=')
 	    cp2++;
+#ifdef EXP_CHARTRANS
+			    StrAllocCopy(cp3, cp2); /* copy to mutilate more */
+			    for (cp4=cp3; (*cp4 != '\0' && *cp4 != '"' &&
+					   *cp4 != ';'  && *cp4 != ':' &&
+					   !WHITE(*cp4));	cp4++)
+				/* nothing */ ;
+			    *cp4 = '\0';
+			    cp4 = cp3;
+			    chndl = UCGetLYhndl_byMIME(cp3);
+			    if (chndl < 0) {
+				if (0==strcmp(cp4, "cn-big5")) {
+				    cp4 += 3;
+				    chndl = UCGetLYhndl_byMIME(cp4);
+				}
+				else if (0==strncmp(cp4, "cn-gb", 5)) {
+				    StrAllocCopy(cp3, "gb2312");
+				    cp4 = cp3;
+				    chndl = UCGetLYhndl_byMIME(cp4);
+				}
+			    }
+			    if (UCCanTranslateFromTo(chndl, current_char_set))
+			    {
+				chartrans_ok = YES;
+				*cp1 = '\0';
+				format = HTAtom_for(cp);
+				StrAllocCopy(anchor->charset, cp4);
+				HTAnchor_setUCInfoStage(anchor, chndl,
+				   UCT_STAGE_MIME, UCT_SETBY_MIME);
+			    }
+			    else if (chndl < 0)	{/* got something but we don't
+						 recognize it */
+				chndl = UCLYhndl_for_unrec;
+				if (UCCanTranslateFromTo(chndl,
+							 current_char_set))
+				{
+				    chartrans_ok = YES;
+				    HTAnchor_setUCInfoStage(anchor, chndl,
+				       UCT_STAGE_MIME, UCT_SETBY_DEFAULT);
+				}
+			    }
+			    FREE(cp3);
+			    if (chartrans_ok) {
+				LYUCcharset * p_in =
+				    HTAnchor_getUCInfoStage(anchor,
+							     UCT_STAGE_MIME);
+				LYUCcharset * p_out =
+				    HTAnchor_setUCInfoStage(anchor,
+							    current_char_set,
+					 UCT_STAGE_HTEXT, UCT_SETBY_DEFAULT);
+				if (!p_out) /* try again */
+				    p_out =
+				      HTAnchor_getUCInfoStage(anchor,
+							     UCT_STAGE_HTEXT);
+
+				if (0==strcmp(p_in->MIMEname,"x-transparent"))
+				{
+				    HTPassEightBitRaw = TRUE;
+				    HTAnchor_setUCInfoStage(anchor,
+				       HTAnchor_getUCLYhndl(anchor,
+							    UCT_STAGE_HTEXT),
+				       UCT_STAGE_MIME, UCT_SETBY_DEFAULT);
+				}
+				if (0==strcmp(p_out->MIMEname,"x-transparent"))
+				{
+				    HTPassEightBitRaw = TRUE;
+				    HTAnchor_setUCInfoStage(anchor,
+				       HTAnchor_getUCLYhndl(anchor,
+							    UCT_STAGE_MIME),
+				       UCT_STAGE_HTEXT, UCT_SETBY_DEFAULT);
+				}
+				if (!(p_in->enc & UCT_ENC_CJK) &&
+				    (p_in->codepoints & UCT_CP_SUBSETOF_LAT1)){
+				    HTCJK = NOCJK;
+				} else if (chndl == current_char_set) {
+				HTPassEightBitRaw = TRUE;
+				}
+			} else  /* Fall through to old behavior */
+#endif /* EXP_CHARTRANS */
 	if (!strncmp(cp2, "us-ascii", 8) ||
 	    !strncmp(cp2, "iso-8859-1", 10)) {
 	    *cp1 = '\0';
@@ -853,6 +955,16 @@ PUBLIC HTFormat HTCharsetFormat ARGS2(
     }
     FREE(cp);
 
+#ifdef EXP_CHARTRANS
+    if (!chartrans_ok && !anchor->charset && default_LYhndl >= 0) {
+	HTAnchor_setUCInfoStage(anchor, default_LYhndl,
+				UCT_STAGE_MIME, UCT_SETBY_DEFAULT);
+    }
+    HTAnchor_copyUCInfoStage(anchor,
+			    UCT_STAGE_PARSER, UCT_STAGE_MIME,
+			    -1);
+#endif
+
     return format;
 }
 
@@ -906,6 +1018,9 @@ PUBLIC float HTFileValue ARGS1(
 #ifdef PCNFS
 #define NO_GROUPS
 #endif /* PCNFS */
+#ifdef NOUSERS
+#define NO_GROUPS
+#endif /* PCNFS */
 
 PUBLIC BOOL HTEditable ARGS1(
 	CONST char *,	filename)
@@ -1033,7 +1148,7 @@ PUBLIC void HTDirEntry ARGS3(
 **	------------------------------
 **
 **    This gives the TITLE and H1 header, and also a link
-/**    to the parent directory if appropriate.
+**    to the parent directory if appropriate.
 **
 **  On exit:
 **	Returns TRUE if an "Up to <parent>" link was not created
@@ -1054,6 +1169,10 @@ PUBLIC BOOL HTDirTitles ARGS3(
     BOOL need_parent_link = FALSE;
     int i;
 
+#ifdef DOSPATH
+	 BOOL local_link = FALSE;
+	 if (logical[18] == ':') local_link = TRUE;
+#endif
     /*
     **  Check tildeIsTop for treating home directory as Welcome
     **  (assume the tilde is not followed by a username). - FM
@@ -1160,8 +1279,19 @@ PUBLIC BOOL HTDirTitles ARGS3(
 	relative = (char*) malloc(strlen(current) + 4);
 	if (relative == NULL)
 	    outofmem(__FILE__, "HTDirTitles");
+
 	sprintf(relative, "%s/..", current);
-#ifndef VMS
+
+#ifdef DOSPATH
+		if(local_link)
+	  if (strlen(parent) == 3 )
+		StrAllocCat(relative, "/.");
+#endif
+
+#if !defined (VMS)
+#ifdef DOSPATH
+	if(!local_link)
+#endif
 	{
 	    /*
 	    **  On Unix, if it's not ftp and the directory cannot
@@ -1324,7 +1454,7 @@ PUBLIC int HTLoadFile ARGS4(
     **  using that, Lynx users should make the current character
     **  set "ISO Latin 1" so that 8-bit characters are passed raw.
     */
-    format = HTCharsetFormat(format, anchor);
+    format = HTCharsetFormat(format, anchor, UCLYhndl_HTFile_for_unspec);
 
 #ifdef VMS
     /*
@@ -1424,7 +1554,8 @@ PUBLIC int HTLoadFile ARGS4(
 		    cp[len - 2] = '\0';
 		    format = HTFileFormat(cp, &encoding);
 		    FREE(cp);
-		    format = HTCharsetFormat(format, anchor);
+		    format = HTCharsetFormat(format, anchor,
+					     UCLYhndl_HTFile_for_unspec);
 		    StrAllocCopy(anchor->content_type, format->name);
 		    StrAllocCopy(anchor->content_encoding, "x-compress");
 		    format = HTAtom_for("www/compressed");
@@ -1437,7 +1568,8 @@ PUBLIC int HTLoadFile ARGS4(
 			cp[len - 3] = '\0';
 			format = HTFileFormat(cp, &encoding);
 			FREE(cp);
-			format = HTCharsetFormat(format, anchor);
+			format = HTCharsetFormat(format, anchor,
+						 UCLYhndl_HTFile_for_unspec);
 			StrAllocCopy(anchor->content_type, format->name);
 			StrAllocCopy(anchor->content_encoding, "x-gzip");
 			format = HTAtom_for("www/compressed");
@@ -1511,9 +1643,10 @@ forget_multi:
 		/*
 		**  While there are directory entries to be read...
 		*/
+#ifndef DOSPATH
 		if (dirbuf->d_ino == 0)
 		    continue;	/* if the entry is not being used, skip it */
-
+#endif
 		if ((int)strlen(dirbuf->d_name) > baselen &&     /* Match? */
 		    !strncmp(dirbuf->d_name, base, baselen)) {	
 		    HTFormat rep = HTFileFormat(dirbuf->d_name, &encoding);
@@ -1561,13 +1694,21 @@ forget_multi:
 	**  will hold the directory entry, and a type 'DIR' which is used
 	**  to point to the current directory being read.
 	*/
+#ifdef _WINDOWS
+	if (!exists(localname)) {
+#else
 	if (stat(localname,&dir_info) == -1) {     /* get file information */
+#endif
 	                               /* if can't read file information */
 	    if (TRACE)
 	        fprintf(stderr, "HTLoadFile: can't stat %s\n", localname);
 
 	}  else {		/* Stat was OK */
 		
+#ifdef _WINDOWS
+	if (stat(localname,&dir_info) == -1) dir_info.st_mode = S_IFDIR;
+#endif
+
 	    if (((dir_info.st_mode) & S_IFMT) == S_IFDIR) {
 		/*
 		**  If localname is a directory.
@@ -1637,7 +1778,15 @@ forget_multi:
         	    StrAllocCopy(tail, p+1); /* take slash off the beginning */
     		}
     		FREE(pathname);
-		
+
+#ifdef EXP_CHARTRANS
+		if (UCLYhndl_HTFile_for_unspec >= 0) {
+		    HTAnchor_setUCInfoStage(anchor,
+					    UCLYhndl_HTFile_for_unspec,
+					    UCT_STAGE_PARSER,
+					    UCT_SETBY_DEFAULT);
+		}
+#endif		
 		target = HTML_new(anchor, format_out, sink);
 		targetClass = *target->isa;	/* Copy routine entry points */
 		    
@@ -1673,12 +1822,13 @@ forget_multi:
 		        char * dirname = NULL;
 			extern BOOLEAN no_dotfiles, show_dotfiles;
 
+#ifndef DOSPATH
 		        if (dirbuf->d_ino == 0)
 			    /*
 			    **  If the entry is not being used, skip it.
 			    */
 			    continue;
-
+#endif
 			/*
 			**  Skip self, parent if handled in HTDirTitles()
 			**  or if NO_PARENT_DIR_REFERENCE is not defined,
@@ -1902,7 +2052,8 @@ open_file:
 			cp[len - 2] = '\0';
 			format = HTFileFormat(cp, &encoding);
 			FREE(cp);
-			format = HTCharsetFormat(format, anchor);
+			format = HTCharsetFormat(format, anchor,
+						 UCLYhndl_HTFile_for_unspec);
 			StrAllocCopy(anchor->content_type, format->name);
 			StrAllocCopy(anchor->content_encoding, "x-compress");
 			format = HTAtom_for("www/compressed");
@@ -1914,7 +2065,8 @@ open_file:
 			cp[len - 3] = '\0';
 			format = HTFileFormat(cp, &encoding);
 			FREE(cp);
-			format = HTCharsetFormat(format, anchor);
+			format = HTCharsetFormat(format, anchor,
+						 UCLYhndl_HTFile_for_unspec);
 			StrAllocCopy(anchor->content_type, format->name);
 			StrAllocCopy(anchor->content_encoding, "x-gzip");
 			format = HTAtom_for("www/compressed");
diff --git a/WWW/Library/Implementation/HTFile.h b/WWW/Library/Implementation/HTFile.h
index b2a51103..2d37a537 100644
--- a/WWW/Library/Implementation/HTFile.h
+++ b/WWW/Library/Implementation/HTFile.h
@@ -127,7 +127,8 @@ extern HTFormat HTFileFormat PARAMS((
 */
 extern HTFormat HTCharsetFormat PARAMS((
 	HTFormat		format,
-	HTParentAnchor *	anchor));
+	HTParentAnchor *	anchor,
+	int			default_LYhndl));
 
 /*
 **  Determine file value from file name.
diff --git a/WWW/Library/Implementation/HTGopher.c b/WWW/Library/Implementation/HTGopher.c
index c4f47b76..46ed05f4 100644
--- a/WWW/Library/Implementation/HTGopher.c
+++ b/WWW/Library/Implementation/HTGopher.c
@@ -761,7 +761,7 @@ PRIVATE int interpret_cso_key ARGS5(
 {
     CSOfield_info *fld;
 
-    if (fld = ctx->fld) {
+    if ((fld = ctx->fld) != 0) {
 	/*
 	**  Most substitutions only recognized inside of loops.
 	*/
@@ -937,8 +937,8 @@ PRIVATE int parse_cso_fields ARGS2(
 {
     char ch;
     char *p = buf;
-    int i, code, prev_code, alen;
-    char *index, *name;
+    int i, code = 0, prev_code, alen;
+    char *indx, *name;
     CSOfield_info *last, *new;
     extern int interrupted_in_htgetcharacter;
     
@@ -1004,14 +1004,14 @@ PRIVATE int parse_cso_fields ARGS2(
 	    /*
 	    **  Parse fields within returned line into status, ndx, name, data.
 	    */
-	    index = NULL;
+	    indx = NULL;
 	    name = NULL;
 	    for (i = 0; p[i]; i++)
 	        if (p[i] == ':' ) {
 		    p[i] = '\0';
-		    if (!index) {
-		        index = (char *)&p[i+1];
-			code = atoi (index);
+		    if (!indx) {
+		        indx = (char *)&p[i+1];
+			code = atoi (indx);
 		    } else if (!name) {
 		        name = (char *)&p[i+1];
 		    } else {
@@ -1073,7 +1073,7 @@ PRIVATE int parse_cso_fields ARGS2(
 		        strcpy((char *)&new->attributes[alen-2], " ");
 		        new->description = new->desc_buf; 
 		        new->desc_buf[0] = '\0';
-		        new->id = atoi(index);
+		        new->id = atoi(indx);
 		        /*
 		        **  Scan for keywords.
 		        */
diff --git a/WWW/Library/Implementation/HTMIME.c b/WWW/Library/Implementation/HTMIME.c
index 65c6694e..59d0313b 100644
--- a/WWW/Library/Implementation/HTMIME.c
+++ b/WWW/Library/Implementation/HTMIME.c
@@ -15,6 +15,11 @@
 #include "HTMIME.h"		/* Implemented here */
 #include "HTAlert.h"
 #include "HTCJK.h"
+#ifdef EXP_CHARTRANS
+#include "UCMap.h"
+#include "UCDefs.h"
+#include "UCAux.h"
+#endif
 
 #include "LYLeaks.h"
 
@@ -332,7 +337,7 @@ PRIVATE void HTMIME_put_character ARGS2(
 	    {
 	        me->net_ascii = NO;
 		if (strchr(HTAtom_name(me->format), ';') != NULL) {
-		    char *cp = NULL, *cp1, *cp2, *cp3;
+		    char *cp = NULL, *cp1, *cp2, *cp3 = NULL, *cp4;
 
 		    if (TRACE)
 		        fprintf(stderr,
@@ -351,10 +356,92 @@ PRIVATE void HTMIME_put_character ARGS2(
 		    for (i = 0; cp[i]; i++)
 		        cp[i] = TOLOWER(cp[i]);
 		    if ((cp1=strchr(cp, ';')) != NULL) {
+			BOOL chartrans_ok = NO;
 		        if ((cp2=strstr(cp1, "charset")) != NULL) {
+			    int chndl;
 			    cp2 += 7;
 			    while (*cp2 == ' ' || *cp2 == '=' || *cp2 == '\"')
 			        cp2++;
+#ifdef EXP_CHARTRANS
+			    StrAllocCopy(cp3, cp2); /* copy to mutilate more */
+			    for (cp4=cp3; (*cp4 != '\0' && *cp4 != '\"' &&
+					   *cp4 != ';'  && *cp4 != ':' &&
+					   !WHITE(*cp4));	cp4++)
+				/* nothing */ ;
+			    *cp4 = '\0';
+			    cp4 = cp3;
+			    chndl = UCGetLYhndl_byMIME(cp3);
+			    if (chndl < 0) {
+				if (0==strcmp(cp4, "cn-big5")) {
+				    cp4 += 3;
+				    chndl = UCGetLYhndl_byMIME(cp4);
+				}
+				else if (0==strncmp(cp4, "cn-gb", 5)) {
+				    StrAllocCopy(cp3, "gb2312");
+				    cp4 = cp3;
+				    chndl = UCGetLYhndl_byMIME(cp4);
+				}
+			    }
+			    if (UCCanTranslateFromTo(chndl, current_char_set))
+			    {
+				chartrans_ok = YES;
+				*cp1 = '\0';
+				me->format = HTAtom_for(cp);
+				StrAllocCopy(me->anchor->charset, cp4);
+				HTAnchor_setUCInfoStage(me->anchor, chndl,
+				   UCT_STAGE_MIME, UCT_SETBY_MIME);
+			    }
+			    else if (chndl < 0)	{/* got something but we don't
+						 recognize it */
+				chndl = UCLYhndl_for_unrec;
+				if (UCCanTranslateFromTo(chndl,
+							 current_char_set))
+				{
+				    chartrans_ok = YES;
+				    *cp1 = '\0';
+				    me->format = HTAtom_for(cp);
+				    HTAnchor_setUCInfoStage(me->anchor, chndl,
+				       UCT_STAGE_MIME, UCT_SETBY_DEFAULT);
+				}
+			    }
+			    FREE(cp3);
+			    if (chartrans_ok) {
+				LYUCcharset * p_in =
+				    HTAnchor_getUCInfoStage(me->anchor,
+							     UCT_STAGE_MIME);
+				LYUCcharset * p_out =
+				    HTAnchor_setUCInfoStage(me->anchor,
+							    current_char_set,
+					 UCT_STAGE_HTEXT, UCT_SETBY_DEFAULT);
+				if (!p_out) /* try again */
+				    p_out =
+				      HTAnchor_getUCInfoStage(me->anchor,
+							     UCT_STAGE_HTEXT);
+
+				if (0==strcmp(p_in->MIMEname,"x-transparent"))
+				{
+				    HTPassEightBitRaw = TRUE;
+				    HTAnchor_setUCInfoStage(me->anchor,
+				       HTAnchor_getUCLYhndl(me->anchor,
+							    UCT_STAGE_HTEXT),
+				       UCT_STAGE_MIME, UCT_SETBY_DEFAULT);
+				}
+				if (0==strcmp(p_out->MIMEname,"x-transparent"))
+				{
+				    HTPassEightBitRaw = TRUE;
+				    HTAnchor_setUCInfoStage(me->anchor,
+				       HTAnchor_getUCLYhndl(me->anchor,
+							    UCT_STAGE_MIME),
+				       UCT_STAGE_HTEXT, UCT_SETBY_DEFAULT);
+				}
+				if (!(p_in->enc & UCT_ENC_CJK) &&
+				    (p_in->codepoints & UCT_CP_SUBSETOF_LAT1)){
+				    HTCJK = NOCJK;
+				} else if (chndl == current_char_set) {
+				HTPassEightBitRaw = TRUE;
+				}
+			} else  /* Fall through to old behavior */
+#endif /* EXP_CHARTRANS */
 			    if (!strncmp(cp2, "us-ascii", 8) ||
 			        !strncmp(cp2, "iso-8859-1", 10)) {
 				*cp1 = '\0';
@@ -1958,6 +2045,12 @@ PUBLIC HTStream* HTMIMEConvert ARGS3(
     me->encoding  =	0;		/* Not set yet */
     me->compression_encoding = NULL;	/* Not set yet */
     me->net_ascii =	NO;		/* Local character set */
+#ifdef EXP_CHARTRANS
+    HTAnchor_setUCInfoStage(me->anchor, current_char_set,
+			     UCT_STAGE_STRUCTURED, UCT_SETBY_DEFAULT);
+    HTAnchor_setUCInfoStage(me->anchor, current_char_set,
+			     UCT_STAGE_HTEXT, UCT_SETBY_DEFAULT);
+#endif /* EXP_CHARTRANS */
     return me;
 }
 
diff --git a/WWW/Library/Implementation/HTML.h b/WWW/Library/Implementation/HTML.h
index c4bd3caf..ed3aefee 100644
--- a/WWW/Library/Implementation/HTML.h
+++ b/WWW/Library/Implementation/HTML.h
@@ -7,6 +7,11 @@
 #ifndef HTML_H
 #define HTML_H
 
+#ifdef EXP_CHARTRANS
+#include "UCDefs.h"
+#include "UCAux.h"
+#endif
+
 #ifndef HTUTILS_H
 #include "HTUtils.h"
 #endif /* HTUTILS_H */
@@ -132,6 +137,12 @@ struct _HTStructured {
     BOOL		inUnderline;
 
     BOOL		needBoldH;
+
+#ifdef EXP_CHARTRANS
+    LYUCcharset	* UCI;	/* pointer to node_anchor's UCInfo */
+    int	UCLYhndl;		/* tells us what charset we are fed */
+    UCTransParams T;
+#endif
 };
 
 struct _HTStream {
@@ -145,7 +156,7 @@ struct _HTStream {
 extern void HTML_put_character PARAMS((HTStructured *me, char c));
 extern void HTML_put_string PARAMS((HTStructured *me, CONST char *s));
 extern void HTML_write PARAMS((HTStructured *me, CONST char *s, int l));
-extern void HTML_put_entity PARAMS((HTStructured *me, int entity_number));
+extern int HTML_put_entity PARAMS((HTStructured *me, int entity_number));
 #endif /* Lynx_HTML_Handler */
 
 /*				P U B L I C
diff --git a/WWW/Library/Implementation/HTMLDTD.c b/WWW/Library/Implementation/HTMLDTD.c
index bec129dd..2639a461 100644
--- a/WWW/Library/Implementation/HTMLDTD.c
+++ b/WWW/Library/Implementation/HTMLDTD.c
@@ -118,7 +118,7 @@ static CONST char* entities[] = {
   "thinsp",	/* thin space (not collapsed) */ 
   "thorn",	/* small thorn, Icelandic */ 
   "times",	/* multiplication sign */ 
-  "trade",	/* registerd trademark */ 
+  "trade",	/* trade mark sign (U+2122) */ 
   "uacute",	/* small u, acute accent */ 
   "ucirc",	/* small u, circumflex accent */ 
   "ugrave",	/* small u, grave accent */ 
@@ -131,6 +131,169 @@ static CONST char* entities[] = {
 
 #define HTML_ENTITIES 112
 
+#ifdef EXP_CHARTRANS
+/* 	Extra Entity Names
+**	------------------
+**
+**	This table contains Unicodes in addition to the Names.
+**
+**      Just an idea how it could be done. -kw
+*
+*	I think in the future the whole entities[] thing above could migrate
+*	to this kind of structure.  The structured streams to which
+*	the SGML modules sends its output could then easily have access
+*	to both entity names and unicode values for each (special)
+*	character.  Probably the whole translation to display characters
+*	should be done at that later stage (e.g. in HTML.c).
+*	What's missing is a way for the later stage to return info
+*	to SGML whether the entity could be displayed or not.
+*	(like between SGML_character() and handle_entity() via FoundEntity.)
+*	Well, trying to do that now.
+*       Why keep two structures for entities?  Backward compatibility..
+*/
+
+/* UC_entity_info structure is defined in SGML.h. */
+/* This has to be sorted alphabetically, 
+   bear this in mind when you add some more entities.. 
+   
+   Now we have here: - all ISO-8859-2 entites 
+                     - lrm, rlm, zwnj and zwj 
+*/
+static CONST UC_entity_info extra_entities[] = {
+  {"Aacute",  0x00c1},  /* A with acute */
+  {"Abreve",  0x0102},  /* A with breve */
+  {"Acirc",  0x00c2},  /* A with circumflex */
+  {"Aogon",  0x0104},  /* A with ogonek */
+  {"Auml",  0x00c4},  /* A with diaeresis */
+  {"Cacute",  0x0106},  /* C with acute */
+  {"Ccaron",  0x010c},  /* C with caron */
+  {"Ccedil",  0x00c7},  /* C with cedilla */
+  {"Dcaron",  0x010e},  /* D with caron */
+  {"Dstrok",  0x0110},  /* D with stroke */
+  {"Eacute",  0x00c9},  /* E with acute */
+  {"Ecaron",  0x011a},  /* E with caron */
+  {"Eogon",  0x0118},  /* E with ogonek */
+  {"Euml",  0x00cb},  /* E with diaeresis */
+  {"Iacute",  0x00cd},  /* I with acute */
+  {"Icirc",  0x00ce},  /* I with circumflex */
+  {"Lacute",  0x0139},  /* L with acute */
+  {"Lcaron",  0x013d},  /* L with caron */
+  {"Lstrok",  0x0141},  /* L with stroke */
+  {"Nacute",  0x0143},  /* N with acute */
+  {"Ncaron",  0x0147},  /* N with caron */
+  {"Oacute",  0x00d3},  /* O with acute */
+  {"Ocirc",  0x00d4},  /* O with circumflex */
+  {"Odblac",  0x0150},  /* O with double acute */
+  {"Ouml",  0x00d6},  /* O with diaeresis */
+  {"Racute",  0x0154},  /* R with acute */
+  {"Rcaron",  0x0158},  /* R with caron */
+  {"Sacute",  0x015a},  /* S with acute */
+  {"Scaron",  0x0160},  /* S with caron */
+  {"Scedil",  0x015e},  /* S with cedilla */
+  {"Tcaron",  0x0164},  /* T with caron */
+  {"Tcedil",  0x0162},  /* T with cedilla */
+  {"Uacute",  0x00da},  /* U with acute */
+  {"Udblac",  0x0170},  /* U with double acute */
+  {"Uring",  0x016e},  /* U with ring above */
+  {"Uuml",  0x00dc},  /* U with diaeresis */
+  {"Yacute",  0x00dd},  /* Y with acute */
+  {"Zacute",  0x0179},  /* Z with acute */
+  {"Zcaron",  0x017d},  /* Z with caron */
+  {"Zdot",  0x017b},  /* Z with dot above */
+  {"aacute",  0x00e1},  /* a with acute */
+  {"abreve",  0x0103},  /* a with breve */
+  {"acirc",  0x00e2},  /* a with circumflex */
+  {"acute",  0x00b4},  /* acuteaccent */
+  {"amp",  0x0026},  /* ampersand */
+  {"aogon",  0x0105},  /* a with ogonek */
+  {"apos",  0x0027},  /* apostrophe */
+  {"ast",  0x002a},  /* asterisk */
+  {"auml",  0x00e4},  /* a with diaeresis */
+  {"breve",  0x02d8},  /* breve */
+  {"bsol",  0x005c},  /* reversesolidus */
+  {"cacute",  0x0107},  /* c with acute */
+  {"caron",  0x02c7},  /* caron */
+  {"ccaron",  0x010d},  /* c with caron */
+  {"ccedil",  0x00e7},  /* c with cedilla */
+  {"cedil",  0x00b8},  /* cedilla */
+  {"circ",  0x005e},  /* circumflexaccent */
+  {"colon",  0x003a},  /* colon */
+  {"comma",  0x002c},  /* comma */
+  {"commat",  0x0040},  /* commercialat */
+  {"curren",  0x00a4},  /* currencysign */
+  {"dblac",  0x02dd},  /* doubleacuteaccent */
+  {"dcaron",  0x010f},  /* d with caron */
+  {"deg",  0x00b0},  /* degreesign */
+  {"divide",  0x00f7},  /* divisionsign */
+  {"dollar",  0x0024},  /* dollarsign */
+  {"dot",  0x02d9},  /* dotabove */
+  {"dstrok",  0x0111},  /* d with stroke */
+  {"eacute",  0x00e9},  /* e with acute */
+  {"ecaron",  0x011b},  /* e with caron */
+  {"eogon",  0x0119},  /* e with ogonek */
+  {"equals",  0x003d},  /* equalssign */
+  {"euml",  0x00eb},  /* e with diaeresis */
+  {"excl",  0x0021},  /* exclamationmark */
+  {"grave",  0x0060},  /* graveaccent */
+  {"gt",  0x003e},  /* greater-thansign */
+  {"hyphen",  0x002d},  /* hyphen-minus */
+  {"iacute",  0x00ed},  /* i with acute */
+  {"icirc",  0x00ee},  /* i with circumflex */
+  {"lacute",  0x013a},  /* l with acute */
+  {"lcaron",  0x013e},  /* l with caron */
+  {"lcub",  0x007b},  /* leftcurlybracket */
+  {"lowbar",  0x005f},  /* lowline */
+  {"lpar",  0x0028},  /* leftparenthesis */
+  {"lrm",	8206},	/* left-to-right mark */ 
+  {"lsqb",  0x005b},  /* leftsquarebracket */
+  {"lstrok",  0x0142},  /* l with stroke */
+  {"lt",  0x003c},  /* less-thansign */
+  {"nacute",  0x0144},  /* n with acute */
+  {"nbsp",  0x00a0},  /* no-breakspace */
+  {"ncaron",  0x0148},  /* n with caron */
+  {"num",  0x0023},  /* numbersign */
+  {"oacute",  0x00f3},  /* o with acute */
+  {"ocirc",  0x00f4},  /* o with circumflex */
+  {"odblac",  0x0151},  /* o with double acute */
+  {"ogon",  0x02db},  /* ogonek */
+  {"ouml",  0x00f6},  /* o with diaeresis */
+  {"percnt",  0x0025},  /* percentsign */
+  {"period",  0x002e},  /* fullstop */
+  {"plus",  0x002b},  /* plussign */
+  {"quest",  0x003f},  /* questionmark */
+  {"quot",  0x0022},  /* quotationmark */
+  {"racute",  0x0155},  /* r with acute */
+  {"rcaron",  0x0159},  /* r with caron */
+  {"rcub",  0x007d},  /* rightcurlybracket */
+  {"rlm",	8207},	/* right-to-left mark */ 
+  {"rpar",  0x0029},  /* rightparenthesis */
+  {"rsqb",  0x005d},  /* rightsquarebracket */
+  {"sacute",  0x015b},  /* s with acute */
+  {"scaron",  0x0161},  /* s with caron */
+  {"scedil",  0x015f},  /* s with cedilla */
+  {"sect",  0x00a7},  /* sectionsign */
+  {"semi",  0x003b},  /* semicolon */
+  {"shy",  0x00ad},  /* softhyphen */
+  {"sol",  0x002f},  /* solidus */
+  {"tcaron",  0x0165},  /* t with caron */
+  {"tcedil",  0x0163},  /* t with cedilla */
+  {"tilde",  0x007e},  /* tilde */
+  {"times",  0x00d7},  /* multiplicationsign */
+  {"uacute",  0x00fa},  /* u with acute */
+  {"udblac",  0x0171},  /* u with double acute */
+  {"uml",  0x00a8},  /* diaeresis */
+  {"uring",  0x016f},  /* u with ring above */
+  {"uuml",  0x00fc},  /* u with diaeresis */
+  {"verbar",  0x007c},  /* verticalline */
+  {"yacute",  0x00fd},  /* y with acute */
+  {"zacute",  0x017a},  /* z with acute */
+  {"zcaron",  0x017e},  /* z with caron */
+  {"zdot",  0x017c},  /* z with dot above */
+  {"zwj",	8205},	/* zero width joiner */ 
+  {"zwnj",	8204},	/* zero width non-joiner */ 
+
+};
+#endif /* EXP_CHARTRANS */
 
 /*		Attribute Lists
 **		---------------
@@ -140,6 +303,7 @@ static CONST char* entities[] = {
 */
 static attr a_attr[] = {			/* Anchor attributes */
 	{ "ACCESSKEY" },
+	{ "CHARSET" },
 	{ "CLASS" },
 	{ "CLEAR" },
 	{ "COORDS" },
@@ -989,7 +1153,7 @@ static HTTag tags[HTML_ELEMENTS] = {
     { "FIG"	, fig_attr,	HTML_FIG_ATTRIBUTES,	SGML_MIXED },
     { "FN"	, fn_attr,	HTML_FN_ATTRIBUTES,	SGML_MIXED },
     { "FONT"	, font_attr,	HTML_FONT_ATTRIBUTES,	SGML_EMPTY },
-    { "FORM"	, form_attr,	HTML_FORM_ATTRIBUTES,	SGML_MIXED },
+    { "FORM"	, form_attr,	HTML_FORM_ATTRIBUTES,	SGML_EMPTY },
     { "FRAME"	, frame_attr,	HTML_FRAME_ATTRIBUTES,	SGML_EMPTY },
     { "FRAMESET", frameset_attr,HTML_FRAMESET_ATTRIBUTES, SGML_MIXED },
     { "H1"	, h_attr,	HTML_H_ATTRIBUTES,	SGML_MIXED },
@@ -1064,7 +1228,11 @@ PUBLIC CONST SGML_dtd HTML_dtd = {
 	tags,
 	HTML_ELEMENTS,
 	entities,
-	sizeof(entities)/sizeof(char**)
+	sizeof(entities)/sizeof(char*),
+#ifdef EXP_CHARTRANS
+	extra_entities,
+	sizeof(extra_entities)/sizeof(UC_entity_info),
+#endif
 };
 
 
diff --git a/WWW/Library/Implementation/HTMLDTD.h b/WWW/Library/Implementation/HTMLDTD.h
index 4f0fd6e3..ef6c5fbb 100644
--- a/WWW/Library/Implementation/HTMLDTD.h
+++ b/WWW/Library/Implementation/HTMLDTD.h
@@ -158,30 +158,31 @@ Attribute numbers
    
  */
 #define HTML_A_ACCESSKEY        0
-#define HTML_A_CLASS            1
-#define HTML_A_CLEAR            2
-#define HTML_A_COORDS           3
-#define HTML_A_DIR              4
-#define HTML_A_HREF             5
-#define HTML_A_ID               6
-#define HTML_A_ISMAP            7
-#define HTML_A_LANG             8
-#define HTML_A_MD               9
-#define HTML_A_NAME            10
-#define HTML_A_NOTAB           11
-#define HTML_A_ONCLICK         12
-#define HTML_A_ONMOUSEOUT      13
-#define HTML_A_ONMOUSEOVER     14
-#define HTML_A_REL             15
-#define HTML_A_REV             16
-#define HTML_A_SHAPE           17
-#define HTML_A_STYLE           18
-#define HTML_A_TABINDEX        19
-#define HTML_A_TARGET          20
-#define HTML_A_TITLE           21
-#define HTML_A_TYPE            22
-#define HTML_A_URN             23
-#define HTML_A_ATTRIBUTES      24
+#define HTML_A_CHARSET          1 /* i18n draft, added tentatively - kw */
+#define HTML_A_CLASS            2
+#define HTML_A_CLEAR            3
+#define HTML_A_COORDS           4
+#define HTML_A_DIR              5
+#define HTML_A_HREF             6
+#define HTML_A_ID               7
+#define HTML_A_ISMAP            8
+#define HTML_A_LANG             9
+#define HTML_A_MD              10
+#define HTML_A_NAME            11
+#define HTML_A_NOTAB           12
+#define HTML_A_ONCLICK         13
+#define HTML_A_ONMOUSEOUT      14
+#define HTML_A_ONMOUSEOVER     15
+#define HTML_A_REL             16
+#define HTML_A_REV             17
+#define HTML_A_SHAPE           18
+#define HTML_A_STYLE           19
+#define HTML_A_TABINDEX        20
+#define HTML_A_TARGET          21
+#define HTML_A_TITLE           22
+#define HTML_A_TYPE            23
+#define HTML_A_URN             24
+#define HTML_A_ATTRIBUTES      25
 
 #define HTML_ADDRESS_CLASS      0
 #define HTML_ADDRESS_CLEAR      1
diff --git a/WWW/Library/Implementation/HTMLGen.c b/WWW/Library/Implementation/HTMLGen.c
index bea63bac..af6794fc 100644
--- a/WWW/Library/Implementation/HTMLGen.c
+++ b/WWW/Library/Implementation/HTMLGen.c
@@ -243,11 +243,20 @@ PRIVATE void HTMLGen_end_element ARGS3(HTStructured *, me,
 **
 */
 
-PRIVATE void HTMLGen_put_entity ARGS2(HTStructured *, me, int, entity_number)
+PRIVATE int HTMLGen_put_entity ARGS2(HTStructured *, me, int, entity_number)
 {
+    int nent = HTML_dtd.number_of_entities;
+  
     HTMLGen_put_character(me, '&');
-    HTMLGen_put_string(me, HTML_dtd.entity_names[entity_number]);
+    if (entity_number < nent)  
+      HTMLGen_put_string(me, HTML_dtd.entity_names[entity_number]);
+#ifdef EXP_CHARTRANS
+    else
+      HTMLGen_put_string(me,
+			 HTML_dtd.extra_entity_info[entity_number-nent].name);
+#endif
     HTMLGen_put_character(me, ';');
+    return HT_OK;
 }
 
 
diff --git a/WWW/Library/Implementation/HTNews.c b/WWW/Library/Implementation/HTNews.c
index 1281d2e4..0de7fb71 100644
--- a/WWW/Library/Implementation/HTNews.c
+++ b/WWW/Library/Implementation/HTNews.c
@@ -122,7 +122,9 @@ PUBLIC void HTSetNewsHost ARGS1(CONST char *, value)
 PRIVATE BOOL initialized = NO;
 PRIVATE BOOL initialize NOARGS
 {
+#ifdef NeXTStep
     char *cp = NULL;
+#endif
 
     /*
     **  Get name of Host.
@@ -994,7 +996,7 @@ PRIVATE int read_article NOARGS
 		    char *l = line;
 		    char *p;
 
-		    while (p=strstr(l, "rticle <")) {
+		    while ((p = strstr(l, "rticle <")) != 0) {
 		        char *q  = strchr(p,'>');
 		        char *at = strchr(p, '@');
 		        if (q && at && at<q) {
@@ -1642,7 +1644,7 @@ PUBLIC int HTLoadNews ARGS4(
     BOOL spost_wanted;		/* Flag: new SSL post to group was asked for */
     BOOL sreply_wanted;		/* Flag: followup SSL post was asked for */
     int first, last;		/* First and last articles asked for */
-    char *cp;
+    char *cp = 0;
     char *ListArg = NULL;
     char *ProxyHost = NULL;
     char *ProxyHREF = NULL;
diff --git a/WWW/Library/Implementation/HTParse.c b/WWW/Library/Implementation/HTParse.c
index 16f39fc7..350107c2 100644
--- a/WWW/Library/Implementation/HTParse.c
+++ b/WWW/Library/Implementation/HTParse.c
@@ -63,7 +63,9 @@ PRIVATE void scan ARGS2(
 {
     char * after_access;
     char * p;
+#ifdef NOTDEFINED
     int length = strlen(name);
+#endif
     
     parts->access = NULL;
     parts->host = NULL;
diff --git a/WWW/Library/Implementation/HTPlain.c b/WWW/Library/Implementation/HTPlain.c
index 009f24e7..b23ec0f7 100644
--- a/WWW/Library/Implementation/HTPlain.c
+++ b/WWW/Library/Implementation/HTPlain.c
@@ -17,6 +17,11 @@
 #include "HTStyle.h"
 #include "HTMLDTD.h"
 #include "HTCJK.h"
+#ifdef EXP_CHARTRANS
+#include "UCMap.h"
+#include "UCDefs.h"
+#include "UCAux.h"
+#endif /* EXP_CHARTRANS */
 
 #include "LYLeaks.h"
 
@@ -27,6 +32,9 @@ extern HTStyleSheet * styleSheet;
 extern int current_char_set;
 extern char * LYchar_set_names[];
 extern CONST char **LYCharSets[];
+#ifdef EXP_CHARTRANS
+extern int LYlowest_eightbit[];
+#endif /* EXP_CHARTRANS */
 extern CONST char * HTMLGetEntityName PARAMS((int i));
 extern BOOL HTPassEightBitRaw;
 extern BOOL HTPassHighCtrlRaw;
@@ -41,8 +49,46 @@ struct _HTStream {
 	CONST HTStreamClass *	isa;
 
 	HText * 		text;
+#ifdef EXP_CHARTRANS
+    LYUCcharset	* UCI;	/* pointer to node_anchor's UCInfo */
+    int	in_char_set;		/* tells us what charset we are fed */
+    int	htext_char_set;		/* what charset feed to HText */
+    char                utf_count;
+    long                utf_char;
+    char	utf_buf[7];
+    char *	utf_buf_p;
+    UCTransParams T;
+#endif /* EXP_CHARTRANS */
 };
 
+#ifdef EXP_CHARTRANS
+
+PRIVATE char replace_buf [61];        /* buffer for replacement strings */
+
+PRIVATE void htplain_get_chartrans_info ARGS2(HTStream *, me,
+					      HTParentAnchor *, anchor)
+{
+    if (me->in_char_set < 0) {
+	HTAnchor_copyUCInfoStage(anchor, UCT_STAGE_PARSER, UCT_STAGE_MIME,
+				 	UCT_SETBY_PARSER);
+	me->in_char_set = HTAnchor_getUCLYhndl(anchor,UCT_STAGE_PARSER);
+    }
+    if (me->htext_char_set < 0) {
+	int chndl = HTAnchor_getUCLYhndl(anchor, UCT_STAGE_HTEXT);
+	if (chndl < 0) {
+	    chndl = current_char_set;
+	    HTAnchor_setUCInfoStage(anchor, chndl, UCT_STAGE_HTEXT,
+			    UCT_SETBY_DEFAULT);
+	}
+	HTAnchor_setUCInfoStage(anchor, chndl, UCT_STAGE_HTEXT,
+			    UCT_SETBY_DEFAULT);
+	me->htext_char_set = HTAnchor_getUCLYhndl(anchor,
+					    UCT_STAGE_HTEXT);
+    }
+    me->UCI = HTAnchor_getUCInfoStage(anchor,UCT_STAGE_PARSER);
+}
+#endif /* EXP_CHARTRANS */
+
 /*	Write the buffer out to the socket
 **	----------------------------------
 */
@@ -53,6 +99,15 @@ struct _HTStream {
 **			A C T I O N 	R O U T I N E S
 */
 
+#ifdef EXP_CHARTRANS
+        /* for forward reference to HTPlain_write - kw */
+#ifdef _WINDOWS
+PRIVATE void HTPlain_write (HTStream * me, CONST char* s, int l);
+#else
+PRIVATE void HTPlain_write PARAMS((HTStream * me, CONST char* s, int l));
+#endif /* _WINDOWS */
+#endif /* EXP_CHARTRANS */
+
 /*	Character handling
 **	------------------
 */
@@ -78,6 +133,11 @@ PRIVATE void HTPlain_put_character ARGS2(HTStream *, me, char, c)
     HTPlain_lastraw = c;
     if (c == '\r') {
 	HText_appendCharacter(me->text, '\n');
+#ifdef EXP_CHARTRANS
+      /* for now don't repeat everything here that has been done below - kw*/
+    } else if ((unsigned char)c >= 127) {
+	HTPlain_write(me, &c, 1);
+#endif
     } else if (HTCJK != NOCJK) {
 	HText_appendCharacter(me->text, c);
     } else if ((unsigned char)c >= 127 && (unsigned char)c < 161 &&
@@ -93,7 +153,7 @@ PRIVATE void HTPlain_put_character ARGS2(HTStream *, me, char, c)
     } else if ((unsigned char)c > 160) {
 	if (!HTPassEightBitRaw &&
 	    strncmp(LYchar_set_names[current_char_set], "ISO Latin 1", 11)) {
-	    int len, high, low, i, diff;
+	    int len, high, low, i, diff=1;
 	    CONST char * name;
 	    int value = (int)((unsigned char)c - 160);
 	    name = HTMLGetEntityName(value);
@@ -149,6 +209,11 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 {
     CONST char * p;
     CONST char * e = s+l;
+#ifdef EXP_CHARTRANS
+    BOOL chk;
+    long unsign_c, uck;
+    char c_p;
+#endif /* EXP_CHARTRANS */
 
     for (p = s; p < e; p++) {
 #ifdef REMOVE_CR_ONLY
@@ -172,55 +237,187 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 	HTPlain_lastraw = *p;
 	if (*p == '\r') {
 	    HText_appendCharacter(me->text, '\n');
+	    continue;
+	}
+#ifdef EXP_CHARTRANS
+	unsign_c = (unsigned char)(*p);
+	c_p = *p;
+
+	if (me->T.decode_utf8) {
+      		    /* Combine UTF-8 into Unicode */
+		    /* Incomplete characters silently ignored */
+                    /* from Linux kernel's console.c */
+	    if((unsigned char)(*p) > 0x7f) {
+		if (me->utf_count > 0 && (*p & 0xc0) == 0x80) {
+		    me->utf_char = (me->utf_char << 6) | (*p & 0x3f);
+		    me->utf_count--;
+		    *(me->utf_buf_p++) = *p;
+		    if (me->utf_count == 0) {
+			*(me->utf_buf_p) = '\0';
+			unsign_c = me->utf_char;
+			if (unsign_c<256) c_p = (char)unsign_c;
+		    }
+		    else continue;  /* iterate for more */
+		} else {
+		    me->utf_buf_p = me->utf_buf;
+		    *(me->utf_buf_p++) = *p;
+		    if ((*p & 0xe0) == 0xc0) {
+			me->utf_count = 1;
+			me->utf_char = (*p & 0x1f);
+		    } else if ((*p & 0xf0) == 0xe0) {
+			me->utf_count = 2;
+			me->utf_char = (*p & 0x0f);
+		    } else if ((*p & 0xf8) == 0xf0) {
+			me->utf_count = 3;
+			me->utf_char = (*p & 0x07);
+		    } else if ((*p & 0xfc) == 0xf8) {
+			me->utf_count = 4;
+			me->utf_char = (*p & 0x03);
+		    } else if ((*p & 0xfe) == 0xfc) {
+			me->utf_count = 5;
+			me->utf_char = (*p & 0x01);
+		    } else { /* garbage */
+			me->utf_count = 0;
+			me->utf_buf_p = me->utf_buf;
+			*(me->utf_buf_p) = '\0';
+		    }
+		    continue; /* iterate for more */
+		}
+	    } else {	/* got an ASCII char */
+		me->utf_count = 0;
+		me->utf_buf_p = me->utf_buf;
+		*(me->utf_buf_p) = '\0';
+	    }
+	}
+	
+	
+	if (me->T.trans_to_uni && unsign_c >= 127) {
+	    unsign_c = UCTransToUni(c_p, me->in_char_set);
+	    if (unsign_c > 0) {
+		if (unsign_c < 256) {
+		    c_p = (char)unsign_c;
+		}
+	    }
+	}
+
+    /* At this point we have either unsign_c in Unicode
+       (and c in latin1 if unsign_c is in the latin1 range),
+       or unsign_c and c will have to be passed raw. */
+
+#else
+#define unsign_c (unsigned char)*p	
+#define c_p *p
+#endif /* EXP_CHARTRANS */
 	/*
 	**  If CJK mode is on, we'll assume the document matches
 	**  the user's selected character set, and if not, the
 	**  user should toggle off raw/CJK mode to reload. - FM
 	*/
-	} else if (HTCJK != NOCJK) {
-	    HText_appendCharacter(me->text, *p);
+	if (HTCJK != NOCJK) {
+	    HText_appendCharacter(me->text, c_p);
+
+#ifndef EXP_CHARTRANS
+#define PASSHICTRL HTPassHighCtrlRaw
+#define PASS8859SPECL HTPassHighCtrlRaw
+#define PASSHI8BIT HTPassEightBitRaw
+#else
+#define PASSHICTRL (me->T.transp || unsign_c >= LYlowest_eightbit[me->in_char_set])
+#define PASS8859SPECL me->T.pass_160_173_raw
+#define PASSHI8BIT (HTPassEightBitRaw || (me->T.do_8bitraw && !me->T.trans_from_uni))
+#endif /* EXP_CHARTRANS */
+
 	/*
 	**  If HTPassHighCtrlRaw is set (e.g., for KOI8-R) assume the
 	**  document matches and pass 127-160 8-bit characters.  If it
 	**  doesn't match, the user should toggle raw/CJK mode off. - FM
 	*/
-	} else if ((unsigned char)*p >= 127 && (unsigned char)*p < 161 &&
-		    HTPassHighCtrlRaw) {
+	} else if (unsign_c >= 127 && unsign_c < 161 &&
+		    PASSHICTRL && PASS8859SPECL) {
+	    HText_appendCharacter(me->text, *p);
+	} else if (unsign_c == 173 && PASS8859SPECL) {
 	    HText_appendCharacter(me->text, *p);
 	/*
 	**  If neither HTPassHighCtrlRaw nor CJK is set, play it safe
 	**  and treat 160 (nbsp) as an ASCII space (32). - FM
 	*/
-	} else if ((unsigned char)*p == 160) {
+	} else if (unsign_c == 160) {
 	    HText_appendCharacter(me->text, ' ');
 	/*
 	**  If neither HTPassHighCtrlRaw nor CJK is set, play it safe
 	**  and ignore 173 (shy). - FM
 	*/
-	} else if ((unsigned char)*p == 173) {
+	} else if (unsign_c == 173) {
 	    continue;
+#ifdef EXP_CHARTRANS
+	} else if (me->T.strip_raw_char_in &&
+		   (unsigned char)*p >= 0xc0 &&
+		   (unsigned char)*p < 255) {
+	    /* KOI special: strip high bit, gives (somewhat) readable ASCII */
+	    HText_appendCharacter(me->text, (char)(*p & 0x7f));
+#endif /* EXP_CHARTRANS */
 	/*
 	**  If we get to here, pass the displayable ASCII characters. - FM
 	*/
-	} else if (((unsigned char)*p >= 32 && (unsigned char)*p < 127) ||
+	} else if ((unsign_c >= 32 && unsign_c < 127) ||
+#ifdef EXP_CHARTRANS
+		   (PASSHI8BIT && c_p>=LYlowest_eightbit[me->htext_char_set])||
+#endif
 		   *p == '\n' || *p == '\t') {
+	    HText_appendCharacter(me->text, c_p);
+
+#ifdef EXP_CHARTRANS
+	} else if (me->T.use_raw_char_in) {
 	    HText_appendCharacter(me->text, *p);
+/******************************************************************
+ *   I. LATIN-1 OR UCS2  TO  DISPLAY CHARSET
+ ******************************************************************/  
+	} else if ((chk = (me->T.trans_from_uni && unsign_c >= 160)) &&
+		   (uck = UCTransUniChar(unsign_c, me->htext_char_set)) >= 32 &&
+		   uck < 256) {
+	    if (TRACE)
+	      fprintf(stderr,"UCTransUniChar returned 0x%lx:'%c'.\n",uck,(char)uck);
+	    HText_appendCharacter(me->text, (char)(uck & 0xff));
+	} else if (chk && (uck == -4) &&
+		                 /* Not found; look for replacement string */
+		(uck = UCTransUniCharStr(replace_buf,60, unsign_c,
+					 me->htext_char_set, 0) >= 0 ) ) { 
+	      /* No further tests for valididy - assume that whoever
+		 defined replacement strings knew what she was doing. */
+
+	      HText_appendText(me->text, replace_buf);
+
+	/*
+	**  If we get to here, and should have translated, translation has
+	**  failed so far.  
+	*/
+	} else if (chk && unsign_c > 127 && me->T.output_utf8 &&
+	    *me->utf_buf) {
+	    HText_appendText(me->text, me->utf_buf);
+	    me->utf_buf_p = me->utf_buf;
+	    *(me->utf_buf_p) = '\0';
+
+	    
+	} else if (me->T.trans_from_uni && unsign_c > 255) {
+	    sprintf(replace_buf,"U%.2lx",unsign_c);
+	    HText_appendText(me->text, replace_buf);
+#endif /* EXP_CHARTRANS */
+
 	/*
 	**  If we get to here and HTPassEightBitRaw or the
 	**  selected character set is not "ISO Latin 1",
 	**  use the translation tables for 161-255 8-bit
 	**  characters (173 was handled above). - FM
 	*/
-	} else if ((unsigned char)*p > 160) {
-	    if (!HTPassEightBitRaw &&
+	} else if (unsign_c > 160) {
+	    if (!HTPassEightBitRaw && unsign_c <= 255 &&
 		strncmp(LYchar_set_names[current_char_set],
 		   	"ISO Latin 1", 11)) {
 		/*
 		**  Attempt to translate. - FM
 		*/
-		int len, high, low, i, diff;
+		int len, high, low, i, diff=1;
 		CONST char * name;
-		int value = (int)((unsigned char)*p - 160);
+		int value = (int)(unsign_c - 160);
 		name = HTMLGetEntityName(value);
 		len =  strlen(name);
 		for(low=0, high = HTML_dtd.number_of_entities;
@@ -238,15 +435,48 @@ PRIVATE void HTPlain_write ARGS3(HTStream *, me, CONST char*, s, int, l)
 		if (diff) {
 		    /*
 		    **  Something went wrong in the translation, so
-		    **  pass the raw character and hope it's OK. - FM
+		    **  either output as UTF8 or a hex representation or
+		    **  pass the raw character and hope it's OK.
 		    */
-		    HText_appendCharacter(me->text, *p);
+#ifdef EXP_CHARTRANS
+		    if (!PASSHI8BIT)
+			c_p = (char)unsign_c;
+		    if (me->T.output_utf8 &&
+			*me->utf_buf) {
+			HText_appendText(me->text, me->utf_buf);
+			me->utf_buf_p = me->utf_buf;
+			*(me->utf_buf_p) = '\0';
+
+		    } else if (me->T.trans_from_uni) {
+			sprintf(replace_buf,"U%.2lx",unsign_c);
+			HText_appendText(me->text, replace_buf);
+		    } else
+#endif /* EXP_CHARTRANS */
+		    HText_appendCharacter(me->text, c_p);
 		}
 	    } else {
 	        /*
 		**  Didn't attempt a translation. - FM
 		*/
-	        HText_appendCharacter(me->text, *p);
+#ifdef EXP_CHARTRANS
+		    /*  either output as UTF8 or a hex representation or
+		    **  pass the raw character and hope it's OK.
+		    */
+		if (unsign_c <= 255 && !PASSHI8BIT)
+		    c_p = (char)unsign_c;
+		if (unsign_c > 127 &&
+		    me->T.output_utf8 &&
+		    *me->utf_buf) {
+		    HText_appendText(me->text, me->utf_buf);
+		    me->utf_buf_p = me->utf_buf;
+		    *(me->utf_buf_p) = '\0';
+
+		} else if (me->T.trans_from_uni && unsign_c >= 127) {
+		    sprintf(replace_buf,"U%.2lx",unsign_c);
+		    HText_appendText(me->text, replace_buf);
+		} else
+#endif /* EXP_CHARTRANS */
+	        HText_appendCharacter(me->text, c_p);
 	    }
 	}
 #endif /* REMOVE_CR_ONLY */
@@ -302,6 +532,20 @@ PUBLIC HTStream* HTPlainPresent ARGS3(
 
     HTPlain_lastraw = -1;
 
+#ifdef EXP_CHARTRANS
+    me->utf_count = 0;
+    me->utf_char = 0;
+    me->utf_buf[0] = me->utf_buf[6] = '\0';
+    me->utf_buf_p = me->utf_buf;
+    me->htext_char_set =
+		      HTAnchor_getUCLYhndl(anchor,UCT_STAGE_HTEXT);
+    me->in_char_set = HTAnchor_getUCLYhndl(anchor,UCT_STAGE_PARSER);
+    htplain_get_chartrans_info(me, anchor);
+    UCSetTransParams(&me->T,
+		     me->in_char_set, me->UCI,
+		     me->htext_char_set,
+		     HTAnchor_getUCInfoStage(anchor,UCT_STAGE_HTEXT));
+#endif /* EXP_CHARTRANS */
     me->text = HText_new(anchor);
     HText_setStyle(me->text, HTStyleNamed(styleSheet, "Example"));
     HText_beginAppend(me->text);
diff --git a/WWW/Library/Implementation/HTStyle.c b/WWW/Library/Implementation/HTStyle.c
index 5b31e252..480719ea 100644
--- a/WWW/Library/Implementation/HTStyle.c
+++ b/WWW/Library/Implementation/HTStyle.c
@@ -265,13 +265,13 @@ HTStyleSheet * HTStyleSheetAddStyle ARGS2
 HTStyleSheet * HTStyleSheetRemoveStyle ARGS2
   (HTStyleSheet *,self, HTStyle *,style)
 {
-    if (self->styles = style) {
+    if (self->styles == style) {
     	self->styles = style->next;
 	return self;
     } else {
     	HTStyle * scan;
 	for(scan = self->styles; scan; scan = scan->next) {
-	    if (scan->next = style) {
+	    if (scan->next == style) {
 	        scan->next = style->next;
 		return self;
 	    }
diff --git a/WWW/Library/Implementation/HTTCP.c b/WWW/Library/Implementation/HTTCP.c
index c8809dc4..710005ab 100644
--- a/WWW/Library/Implementation/HTTCP.c
+++ b/WWW/Library/Implementation/HTTCP.c
@@ -21,6 +21,7 @@
 #include "HTAccess.h"
 #include "HTParse.h"
 #include "HTAlert.h"
+#include "HTTCP.h"
 
 #ifdef NSL_FORK
 #include <signal.h>
@@ -103,18 +104,14 @@ extern int errno;
 
 #ifndef VM
 #ifndef VMS
-#ifndef NeXT
 #ifndef THINK_C
-#ifndef __NetBSD__
-#ifndef __FreeBSD__
-#ifndef BSDI
+
+#ifdef DECL_SYS_ERRLIST
 extern char *sys_errlist[];		/* see man perror on cernvax */
 extern int sys_nerr;
-#endif /* BSDI */
-#endif /* !__FreeBSD__ */
-#endif /* !__NetBSD__ */
+#endif /* DECL_SYS_ERRLIST */
+
 #endif /* !THINK_C */
-#endif /* !NeXT */
 #endif /* !VMS */
 #endif /* !VM */
 
@@ -390,6 +387,10 @@ PUBLIC int HTParseInet ARGS2(
     **  Parse host number if present.
     */  
     if (dotcount_ip == 3) {   /* Numeric node address: */
+
+#ifdef DJGPP
+	sin->sin_addr.s_addr = htonl(aton(host));
+#else
 #ifdef DGUX_OLD
 	sin->sin_addr.s_addr = inet_addr(host).s_addr;	/* See arpa/inet.h */
 #else
@@ -399,6 +400,7 @@ PUBLIC int HTParseInet ARGS2(
 	sin->sin_addr.s_addr = inet_addr(host);		/* See arpa/inet.h */
 #endif /* GUSI */
 #endif /* DGUX_OLD */
+#endif /* DJGPP */
 	FREE(host);
     } else {		    /* Alphanumeric node name: */
 #ifdef MVS	/* Oustanding problem with crash in MVS gethostbyname */
@@ -498,7 +500,16 @@ PUBLIC int HTParseInet ARGS2(
 #endif /* MVS */
 
 #else /* Not NSL_FORK: */
-
+#ifdef DJGPP
+        sin->sin_addr.s_addr = htonl(resolve(host));  
+	FREE(host);
+	if (sin->sin_addr.s_addr == 0) {
+		 if (TRACE)
+			  fprintf(stderr,
+			 "HTTPAccess: Can't find internet node name `%s'.\n",host);
+		 return -1;  /* Fail? */
+	}
+#else
 	phost = gethostbyname(host);	/* See netdb.h */
 #ifdef MVS
 	if (TRACE)
@@ -525,6 +536,7 @@ PUBLIC int HTParseInet ARGS2(
 #else
 	memcpy((void *)&sin->sin_addr, phost->h_addr, phost->h_length);
 #endif /* VMS && CMU_TCP */
+#endif /* DJGPP */
 #endif /* NSL_FORK */
     }
 
@@ -687,6 +699,7 @@ PUBLIC int HTDoConnect ARGS4(
 	return HT_NO_DATA;
     }
    
+#ifndef DOSPATH
 #if !defined(NO_IOCTL) || defined(USE_FCNTL)
     /*
     **  Make the socket non-blocking, so the connect can be canceled.
@@ -702,8 +715,9 @@ PUBLIC int HTDoConnect ARGS4(
 #endif /* USE_FCNTL */
         if (ret == -1)
             _HTProgress("Could not make connection non-blocking.");
-#endif /* !NO_IOCTL || USE_FCNTL */
     }
+#endif /* !NO_IOCTL || USE_FCNTL */
+#endif /* DOSPATH */
 
     /*
     **  Issue the connect.  Since the server can't do an instantaneous
@@ -721,6 +735,7 @@ PUBLIC int HTDoConnect ARGS4(
     } else
 #endif /* SOCKS */
     status = connect(*s, (struct sockaddr*)&soc_address, sizeof(soc_address));
+#ifndef DJGPP
     /*
     **  According to the Sun man page for connect:
     **     EINPROGRESS         The socket is non-blocking and the  con-
@@ -856,7 +871,7 @@ PUBLIC int HTDoConnect ARGS4(
             }
         }
     }
-
+#endif /* DJGPP */
     if (status < 0) {
         /*
         **  The connect attempt failed or was interrupted,
@@ -864,6 +879,7 @@ PUBLIC int HTDoConnect ARGS4(
         */
         NETCLOSE(*s);
     }
+#ifndef DOSPATH
 #if !defined(NO_IOCTL) || defined(USE_FCNTL)
     else {
         /*
@@ -879,6 +895,7 @@ PUBLIC int HTDoConnect ARGS4(
             _HTProgress("Could not restore socket to blocking.");
     }
 #endif /* !NO_IOCTL || USE_FCNTL */
+#endif /* DOSPATH */
 
     FREE(line);
     return status;
diff --git a/WWW/Library/Implementation/HTTCP.h b/WWW/Library/Implementation/HTTCP.h
index 1187c459..b4dab1d6 100644
--- a/WWW/Library/Implementation/HTTCP.h
+++ b/WWW/Library/Implementation/HTTCP.h
@@ -26,11 +26,13 @@
 **           returns a pointer to a static string which must be copied if
 **                it is to be kept.
 */
+#ifndef _WINDOWS
 #ifdef __STDC__
-        extern const char * HTInetString(struct sockaddr_in* sin);
+        extern const char * HTInetString(struct sockaddr_in* mysin);
 #else
         extern char * HTInetString();
 #endif
+#endif
 
 
 /*      Encode INET status (as in sys/errno.h)                    inet_status()
@@ -88,7 +90,7 @@ extern unsigned int HTCardinal PARAMS((int *pstatus,
 **               field is left unchanged in *sin.
 */
 #ifdef __STDC__
-        extern int HTParseInet(struct sockaddr_in * sin, CONST char * str);
+        extern int HTParseInet(struct sockaddr_in * mysin, CONST char * str);
         /*!! had to change this to get it to compile. CTB */
 #else
         extern int HTParseInet();
diff --git a/WWW/Library/Implementation/HTTP.c b/WWW/Library/Implementation/HTTP.c
index e4ad1517..e78870d6 100644
--- a/WWW/Library/Implementation/HTTP.c
+++ b/WWW/Library/Implementation/HTTP.c
@@ -260,13 +260,13 @@ try_again:
 		  strcasecomp(HTAtom_name(pres->rep), "www/compressed")) {
 		  if (pres->quality < 1.0) {
 		      if (pres->maxbytes > 0) {
-		          sprintf(temp, ";q=%4.3f;mxb=%d",
+		          sprintf(temp, ";q=%4.3f;mxb=%ld",
 			  		pres->quality, pres->maxbytes);
 		      } else {
 		          sprintf(temp, ";q=%4.3f", pres->quality);
 		      }
 		  } else if (pres->maxbytes > 0) {
-		      sprintf(temp, ";mxb=%d", pres->maxbytes);
+		      sprintf(temp, ";mxb=%ld", pres->maxbytes);
 		  } else {
 		      temp[0] = '\0';
 		  }
diff --git a/WWW/Library/Implementation/HTTelnet.c b/WWW/Library/Implementation/HTTelnet.c
index a9bf8527..99b91295 100644
--- a/WWW/Library/Implementation/HTTelnet.c
+++ b/WWW/Library/Implementation/HTTelnet.c
@@ -31,9 +31,13 @@
 
 #include "HTAccess.h"
 #include "HTAlert.h"
-#ifndef VMS
+#if !defined (VMS) && !defined (_WINDOWS)
 #include "../../../userdefs.h"  /* for TELNET_COMMAND and RLOGIN_COMMAND */
-#endif /* not VMS */
+#endif /* not VMS or _WINDOWS */
+
+#ifdef _WINDOWS /* ../../.. doesn't work for me WB */
+#include "userdefs.h"  /* for TELNET_COMMAND and RLOGIN_COMMAND */
+#endif
 
 #include "LYLeaks.h"
 
@@ -158,7 +162,7 @@ PRIVATE int remote_session ARGS2(char *, access, char *, host)
 #endif
 
 /* Most unix machines suppport username only with rlogin */
-#if defined(unix)
+#if defined(unix) || defined(DOSPATH)
 #ifndef TELNET_DONE
 	if (login_protocol == rlogin) {
 	    sprintf(command, "%s %s%s%s", RLOGIN_COMMAND,
diff --git a/WWW/Library/Implementation/HTUU.c b/WWW/Library/Implementation/HTUU.c
index 68cad23b..4e6bcf4f 100644
--- a/WWW/Library/Implementation/HTUU.c
+++ b/WWW/Library/Implementation/HTUU.c
@@ -130,7 +130,7 @@ PUBLIC int HTUU_decode ARGS3(char *,		bufcoded,
 			     int,		outbufsize)
 {
 /* single character decode */
-#define DEC(c) pr2six[c]
+#define DEC(c) pr2six[(int)c]
 #define MAXVAL 63
 
    static int first = 1;
diff --git a/WWW/Library/Implementation/HTUtils.h b/WWW/Library/Implementation/HTUtils.h
index 5267a7c2..2c5576b5 100644
--- a/WWW/Library/Implementation/HTUtils.h
+++ b/WWW/Library/Implementation/HTUtils.h
@@ -9,15 +9,146 @@
 
 #ifndef DEBUG
 #define DEBUG   /* Noone ever turns this off as trace is too important */
-#endif          /* Keeep option for really small memory applications tho */
+#endif          /* Keep option for really small memory applications tho */
                 
 #ifndef HTUTILS_H
 #define HTUTILS_H
 
+#ifdef HAVE_CONFIG_H
+#include <lynx_cfg.h>	/* generated by autoconf 'configure' script */
+#else
+
+/* Explicit system-configure */
+#ifdef VMS
+#define NO_SIZECHANGE
+#endif
+
+/* FIXME: these will be removed after completing auto-configure script */
+
+#ifdef _IBMR2
+#define USE_DIRENT              /* sys V style directory open */
+#endif /* _IBMR2 */
+
+#ifdef _SYSV3
+#include <fcntl.h>
+#define USE_DIRENT              /* sys V style directory open */
+#endif /* _SYSV3 */
+
+/* Solaris. */
+#if defined(sun) && defined(__svr4__) && !defined(USE_DIRENT)
+#define USE_DIRENT              /* sys V style directory open */
+#endif /* sun && __svr4__ && !USE_DIRENT */
+
+#ifdef __alpha
+#define USE_DIRENT
+#endif /* __alpha */
+
+#ifndef USE_DIRENT
+#ifdef SVR4
+#define USE_DIRENT
+#endif /* SVR4 */
+#endif /* !USE_DIRENT */
+
+#ifndef SOLARIS2
+#include <string.h>             /* For bzero etc */
+#endif /* !SOLARIS2 */
+
+#ifdef SCO
+#define sco
+#endif /* SCO */
+#ifdef sco
+#include <sys/fcntl.h>
+#define USE_DIRENT
+#endif /* sco */
+
+/*
+Intergraph CLIX
+ */
+#ifdef CLIX
+#include <sys/fcntl.h>
+#define USE_DIRENT
+#endif /* CLIX */
+
+#ifdef ISC
+#ifndef NO_UNISTD_H
+#include <sys/unistd.h>
+#endif /* !NO_UNISTD_H */
+#else
+#if !defined(NO_UNISTD_H) && !defined(VMS)
+#include <unistd.h>
+#endif /* !NO_UNISTD_H && !VMS */
+#endif /* ISC */
+
+#if defined(SVR4) || defined(UNIXWARE)
+#include <sys/fcntl.h>
+#ifndef NO_FILIO_H     /* BSD Interactive doesn't have filio.h. */
+#include <sys/filio.h>
+#endif /* !NO_FILIO_H */
+#endif /* SVR4 || UNIXWARE */
+
+/*
+SOLARIS 2
+ */
+#ifdef SOLARIS2
+#include <sys/filio.h>
+#endif /* SOLARIS2 */
+
+#ifndef NO_FILIO_H
+#define NO_FILIO_H	/* prevent conflict between autoconf & BSDI make */
+#endif
+
+/* Accommodate pre-autoconf Makefile */
+
+#ifndef NO_CBREAK
+#define HAVE_CBREAK 1
+#endif
+
+#ifndef NO_CUSERID
+#define HAVE_CUSERID 1
+#endif
+
+#ifndef NO_FILIO_H
+#define HAVE_SYS_FILIO_H 1
+#endif
+
+#ifndef NO_GETCWD
+#define HAVE_GETCWD 1
+#endif
+
+#ifndef NO_KEYPAD
+#define HAVE_KEYPAD 1
+#endif
+
+#ifndef NO_PUTENV
+#define HAVE_PUTENV 1
+#endif
+
+#ifndef NO_SIZECHANGE
+#define HAVE_SIZECHANGE 1
+#endif
+
+#ifndef NO_TTYTYPE
+#define HAVE_TTYTYPE 1
+#endif
+
+#ifndef NO_UNISTD_H
+#define HAVE_UNISTD_H 1
+#endif
+
+#ifndef NO_UTMP
+#define HAVE_UTMP 1
+#endif
+
+#endif
+
 #ifdef _WINDOWS                         /* SCW */
 #include "windef.h"
 #define BOOLEAN_DEFINED
-#endif
+#define va_arg
+#include <dos.h>
+#define popen _popen
+#define pclose _pclose
+#endif /* _WINDOWS */
 
 #ifdef SHORT_NAMES
 #define WWW_TraceFlag HTTrFlag
@@ -265,18 +396,6 @@ Out Of Memory checking for malloc() return:
   LYOutOfMemory = TRUE; exit(-1);}
 /* extern void outofmem PARAMS((const char *fname, const char *func)); */
 
-
-/*
-
-  WHO PUT THESE IN AND WHAT ARE THEY ANYWAY?
-  
- */
-#ifdef THEY_WILL_BE_REMOVED
-extern void msg_init PARAMS((int height));
-extern void msg_printf PARAMS((int y, const char *fmt, ...));
-extern void msg_exit PARAMS((int wait_for_key));
-#endif
-
 /*
 
 Upper- and Lowercase macros
diff --git a/WWW/Library/Implementation/LYexit.h b/WWW/Library/Implementation/LYexit.h
index 4d7ca529..7007d615 100644
--- a/WWW/Library/Implementation/LYexit.h
+++ b/WWW/Library/Implementation/LYexit.h
@@ -25,6 +25,10 @@
 /*
  *	Constant defines
  */
+#ifdef _WINDOWS
+#undef exit
+#endif /* _WINDOWS */
+
 #define exit LYexit
 #define atexit LYatexit
 #define ATEXITSIZE 32
@@ -46,7 +50,7 @@
  */
 extern void LYexit PARAMS((int status));
 #ifdef __STDC__
-extern int LYatexit(void (*function)());
+extern int LYatexit(void (*function)(void));
 #else
 extern int LYatexit();
 #endif /* __STDC__ */
diff --git a/WWW/Library/Implementation/SGML.c b/WWW/Library/Implementation/SGML.c
index c20801f6..7cfbd68d 100644
--- a/WWW/Library/Implementation/SGML.c
+++ b/WWW/Library/Implementation/SGML.c
@@ -21,6 +21,12 @@
 
 #include "LYLeaks.h"
 
+#ifdef EXP_CHARTRANS
+#include "UCMap.h"
+#include "UCDefs.h"
+#include "UCAux.h"
+#endif
+
 #define INVALID (-1)
 
 #define FREE(x) if (x) {free(x); x = NULL;}
@@ -103,10 +109,80 @@ struct _HTStream {
     char *			url;
     char *			csi;
     int				csi_index;
+#ifdef EXP_CHARTRANS
+    HTParentAnchor * node_anchor;
+    LYUCcharset	* UCI;	/* pointer into anchor's UCInfo */
+    int	in_char_set;		/* tells us what charset we are fed */
+    LYUCcharset	* htmlUCI; /* pointer into anchor's UCInfo for target*/
+    int	html_char_set;		/* tells us what we feed to target stream */
+    char                utf_count;
+    long                utf_char;
+    char	utf_buf[7];
+    char *	utf_buf_p;
+    UCTransParams T;
+#endif /* EXP_CHARTRANS */
 } ;
 
+#ifdef EXP_CHARTRANS
+
+PRIVATE void set_chartrans_handling ARGS3(
+	HTStream *,	context,
+	HTParentAnchor *, anchor,
+	int,	chndl)
+{
+    extern int current_char_set;
+
+    if (chndl < 0) {
+	chndl = HTAnchor_getUCLYhndl(anchor, UCT_STAGE_STRUCTURED);
+	if (chndl < 0)
+	    chndl = HTAnchor_getUCLYhndl(anchor, UCT_STAGE_HTEXT);
+	if (chndl < 0)
+	    chndl = current_char_set;
+	HTAnchor_setUCInfoStage(anchor, chndl, UCT_STAGE_HTEXT,
+			    UCT_SETBY_DEFAULT);
+	HTAnchor_setUCInfoStage(anchor, chndl, UCT_STAGE_STRUCTURED,
+			    UCT_SETBY_DEFAULT);
+	context->htmlUCI = HTAnchor_getUCInfoStage(
+		                              anchor,UCT_STAGE_STRUCTURED);
+	context->html_char_set = HTAnchor_getUCLYhndl(
+		                context->node_anchor,UCT_STAGE_STRUCTURED);
+    }
+    UCSetTransParams(&context->T,
+		     context->in_char_set, context->UCI,
+		     context->html_char_set, context->htmlUCI);
+}
+
+PRIVATE void change_chartrans_handling ARGS1(
+	HTStream *,	context)
+{
+    int new_LYhndl = HTAnchor_getUCLYhndl(context->node_anchor,
+					  UCT_STAGE_PARSER);
+    if (new_LYhndl != context->in_char_set &&
+	new_LYhndl >= 0) {	/* something changed. but ignore if a META
+				 wants an unknown charset. */
+	LYUCcharset * new_UCI = HTAnchor_getUCInfoStage(context->node_anchor,
+							UCT_STAGE_PARSER);
+	if (new_UCI) {
+            LYUCcharset * next_UCI = HTAnchor_getUCInfoStage(
+		                context->node_anchor,UCT_STAGE_STRUCTURED);
+	    int next_LYhndl = HTAnchor_getUCLYhndl(
+                                context->node_anchor,UCT_STAGE_STRUCTURED);
+	    context->UCI = new_UCI;
+	    context->in_char_set = new_LYhndl;
+	    context->htmlUCI = next_UCI;
+	    context->html_char_set = next_LYhndl;
+	    set_chartrans_handling(context, context->node_anchor, next_LYhndl);
+	}
+    }
+}
+#endif /* EXP_CHARTRANS */
+
 
 #define PUTC(ch) ((*context->actions->put_character)(context->target, ch))
+#ifdef EXP_CHARTRANS
+#define PUTUTF8(code) (UCPutUtf8_charstring((HTStream *)context->target, \
+		      (putc_func_t*)(context->actions->put_character), code))
+#endif
 
 extern BOOL historical_comments;
 extern BOOL minimal_comments;
@@ -163,6 +239,32 @@ PRIVATE void handle_attribute_value ARGS2(
     context->current_attribute_number = INVALID; /* can't have two assignments! */
 }
 
+#ifdef EXP_CHARTRANS
+/* translate some Unicodes to Lynx special codes and output them. */
+PRIVATE BOOL put_special_unicodes ARGS2(
+	HTStream *,	context,
+	long, code)
+{
+    if (code == 160) {
+	PUTC(1);
+    } else  if (code==173) {
+	PUTC(7);
+    } else if (code == 8194 || code == 8195 || code == 8201) {
+		        /*
+			**  ensp, emsp or thinsp.
+			*/
+	PUTC(2);
+    } else if (code == 8211 || code == 8212) {
+		        /*
+			**  ndash or mdash.
+			*/
+			PUTC('-');
+    } else {
+	return NO;		/* return NO if nothing done */
+    }
+    return YES;			/* we have handled it */
+}
+#endif
 
 /*	Handle entity
 **	-------------
@@ -175,8 +277,14 @@ PRIVATE void handle_attribute_value ARGS2(
 ** Bug-fix:
 **	Modified SGML_character() so we only come here with terminator
 **	as '\0' and check a FoundEntity flag. -- Foteos Macrides
+**
+** Modified more (for use with CHARTRANS):
 */
 
+#ifdef EXP_CHARTRANS
+PRIVATE char replace_buf [61];        /* buffer for replacement strings */
+#endif
+
 PRIVATE BOOL FoundEntity = FALSE;
 
 PRIVATE void handle_entity ARGS2(
@@ -184,6 +292,11 @@ PRIVATE void handle_entity ARGS2(
 	char,		term)
 {
     CONST char ** entities = context->dtd->entity_names;
+#ifdef EXP_CHARTRANS
+    CONST UC_entity_info * extra_entities = context->dtd->extra_entity_info;
+    extern int current_char_set;
+    int rc;
+#endif
     CONST char *s = context->string->data;
     int high, low, i, diff;
 
@@ -223,6 +336,48 @@ PRIVATE void handle_entity ARGS2(
 	    return;
 	}
     }
+#ifdef EXP_CHARTRANS
+    /* repeat for extra entities if not found... hack... -kw */
+    if (TRACE)
+       fprintf(stderr, "SGML: Unknown entity %s so far, checking extra...\n", s); 
+    for (low = 0, high = context->dtd->number_of_extra_entities;
+    	 high > low;
+	 diff < 0 ? (low = i+1) : (high = i)) {  /* Binary serach */
+	i = (low + (high-low)/2);
+	diff = strcmp(extra_entities[i].name, s);	/* Case sensitive! */
+	if (diff==0) {			/* success: found it */
+	  if (put_special_unicodes(context, extra_entities[i].code)) {  
+	    FoundEntity = TRUE;
+	    return;
+	  } else if (context->T.output_utf8 &&
+		     PUTUTF8(extra_entities[i].code)) {
+	    FoundEntity = TRUE;
+	    return;
+	  }
+	  if ((rc = UCTransUniChar(extra_entities[i].code,current_char_set))
+	      > 0) {   /* Could do further checks here... -kw */
+	    PUTC(rc);
+	    FoundEntity = TRUE;
+	    return;
+	  } else if ((rc == -4) && /* Not found; look for replacement string */
+		     (rc = UCTransUniCharStr(replace_buf,60,
+					     extra_entities[i].code,
+					     current_char_set, 0)   >= 0 ) ) { 
+	    CONST char *p;
+	    for (p=replace_buf; *p; p++)
+	      PUTC(*p);
+	    FoundEntity = TRUE;
+	    return;
+	  } 
+	  rc = (*context->actions->put_entity)(context->target,
+					  i+context->dtd->number_of_entities);
+	  if (rc != HT_CANNOT_TRANSLATE) {
+	      FoundEntity = TRUE;
+	      return;
+	  }
+	}
+    }
+#endif
     /*
     **  If entity string not found, display as text.
     */
@@ -430,6 +585,11 @@ PRIVATE void start_element ARGS1(
 	N->tag = new_tag;
 	context->element_stack = N;
     }
+#ifdef EXP_CHARTRANS
+    else {			/* check for result of META tag. */
+	change_chartrans_handling(context);
+    }
+#endif /* EXP_CHARTRANS */
 }
 
 
@@ -475,7 +635,6 @@ PUBLIC void SGML_free  ARGS1(
 {
     int i;
     HTElement * cur;
-    HTElement * next;
     HTTag * t;
 
     /*
@@ -567,7 +726,7 @@ PUBLIC void SGML_setCallerData ARGS2(
 
 PUBLIC void SGML_character ARGS2(
 	HTStream *,	context,
-	char,		c)
+	char,		c_in)
 {
     CONST SGML_dtd *dtd	=	context->dtd;
     HTChunk	*string = 	context->string;
@@ -576,12 +735,114 @@ PUBLIC void SGML_character ARGS2(
     extern char *LYchar_set_names[];
     extern CONST char * HTMLGetEntityName PARAMS((int i));
 
+#ifdef EXP_CHARTRANS
+    extern int LYlowest_eightbit[];
+    char * p;
+    BOOLEAN chk;  /* helps (?) walk through all the else ifs... */
+    long clong,uck;			/* enough bits for UCS4 ... */
+    char c;
+    char saved_char_in = '\0';
+
+    /* Now some fun with the preprocessor...
+       for EXP_CHARTRANS, use copies for c an unsign_c==clong, so that we
+       can revert back to the unchanged c_in.
+       if EXP_CHARTRANS is undefined, these all are the same variable. */
+#define unsign_c clong
+
+#else
+#define c c_in
+#define unsign_c (unsigned char)c
+#endif    
+
+#ifdef EXP_CHARTRANS
+    c = c_in;
+    clong = (unsigned char)c;	/* a.k.a. unsign_c */
+
+    if (context->T.decode_utf8) {
+      		    /* Combine UTF-8 into Unicode */
+		    /* Incomplete characters silently ignored */
+                    /* from Linux kernel's console.c */
+		    if((unsigned char)c > 0x7f) {
+			if (context->utf_count > 0 && (c & 0xc0) == 0x80) {
+				context->utf_char = (context->utf_char << 6) | (c & 0x3f);
+				context->utf_count--;
+				*(context->utf_buf_p++) = c;
+				if (context->utf_count == 0) {
+				  *(context->utf_buf_p) = '\0';
+				  clong = context->utf_char;
+				  if (clong<256) c = (char)clong;
+				  goto top1;
+				}
+				else return;  /* wait for more */
+			} else {
+				context->utf_buf_p = context->utf_buf;
+				*(context->utf_buf_p++) = c;
+				if ((c & 0xe0) == 0xc0) {
+				    context->utf_count = 1;
+				    context->utf_char = (c & 0x1f);
+				} else if ((c & 0xf0) == 0xe0) {
+				    context->utf_count = 2;
+				    context->utf_char = (c & 0x0f);
+				} else if ((c & 0xf8) == 0xf0) {
+				    context->utf_count = 3;
+				    context->utf_char = (c & 0x07);
+				} else if ((c & 0xfc) == 0xf8) {
+				    context->utf_count = 4;
+				    context->utf_char = (c & 0x03);
+				} else if ((c & 0xfe) == 0xfc) {
+				    context->utf_count = 5;
+				    context->utf_char = (c & 0x01);
+				} else { /* garbage */
+				    context->utf_count = 0;
+				    context->utf_buf_p = context->utf_buf;
+				    *(context->utf_buf_p) = '\0';
+				}
+				return; /* wait for more */
+			      }
+		    } else {	/* got an ASCII char */
+		      context->utf_count = 0;
+		      context->utf_buf_p = context->utf_buf;
+		      *(context->utf_buf_p) = '\0';
+		    /*  goto top;  */
+		    }
+		  }
+
+    if (context->T.strip_raw_char_in)
+	saved_char_in = c;
+
+    if (context->T.trans_to_uni && unsign_c >= 127) {
+	clong = UCTransToUni(c, context->in_char_set);
+	if (clong > 0) {
+	    saved_char_in = c;
+	    if (clong < 256) {
+		c = (char)clong;
+	    }
+	}
+	goto top1;
+    } else {
+	goto top0a;
+    }
+
+    /* At this point we have either unsign_c a.k.a. clong in Unicode
+       (and c in latin1 if clong is in the latin1 range),
+       or unsign_c and c will have to be passed raw. */
+
+#endif /* EXP_CHARTRANS */
+
+
 top:
+#ifdef EXP_CHARTRANS
+    saved_char_in = '\0';
+top0a:
+    *(context->utf_buf) = '\0';
+    clong = (unsigned char)c;
+#endif
+top1:
     /*
     **  Ignore low ISO 646 7-bit control characters
     **  if HTCJK is not set. - FM
     */
-    if ((unsigned char)c < 32 &&
+    if (unsign_c < 32 &&
 	c != 9 && c != 10 && c != 13 &&
 	HTCJK == NOCJK)
         return;
@@ -590,16 +851,21 @@ top:
     **  Ignore 127 if we don't have HTPassHighCtrlRaw
     **  or HTCJK set. - FM
     */
+#ifndef EXP_CHARTRANS
+#define PASSHICTRL HTPassHighCtrlRaw
+#else
+#define PASSHICTRL (context->T.transp || unsign_c >= LYlowest_eightbit[context->in_char_set])
+#endif /* EXP_CHARTRANS */
     if (c == 127 &&
-        !(HTPassHighCtrlRaw || HTCJK != NOCJK))
+        !(PASSHICTRL || HTCJK != NOCJK))
         return;
 
     /*
     **  Ignore 8-bit control characters 128 - 159 if
     **  neither HTPassHighCtrlRaw nor HTCJK is set. - FM
     */
-    if ((unsigned char)c > 127 && (unsigned char)c < 160 &&
-	!(HTPassHighCtrlRaw || HTCJK != NOCJK))
+    if (unsign_c > 127 && unsign_c < 160 &&
+	!(PASSHICTRL || HTCJK != NOCJK))
         return;
 
     /*
@@ -630,7 +896,7 @@ top:
 	    PUTC(c);
 	    break;
 	}
-	if (c == '&' && (!context->element_stack ||
+	if (c == '&' && unsign_c < 127 && (!context->element_stack ||
 			 (context->element_stack->tag  &&
 	    		  (context->element_stack->tag->contents ==
 			  		SGML_MIXED ||
@@ -641,7 +907,7 @@ top:
 	    */
 	    string->size = 0;
 	    context->state = S_ero;
-	} else if (c == '<') {
+	} else if (c == '<' && unsign_c < 127) {
 	    /*
 	    **  Setting up for possible tag. - FM
 	    */
@@ -651,35 +917,74 @@ top:
 			context->element_stack->tag->contents == SGML_LITTERAL)
 	      				 ?
 	    		      S_litteral : S_tag;
+#ifndef EXP_CHARTRANS
+#define PASS8859SPECL HTPassHighCtrlRaw
+#else
+#define PASS8859SPECL context->T.pass_160_173_raw
+#endif /* EXP_CHARTRANS */
 	/*
 	**  Convert 160 (nbsp) to Lynx special character if
 	**  neither HTPassHighCtrlRaw nor HTCJK is set. - FM
 	*/
-	} else if ((unsigned char)c == 160 &&
-		   !(HTPassHighCtrlRaw || HTCJK != NOCJK)) {
+	} else if (unsign_c == 160 &&
+		   !(PASS8859SPECL || HTCJK != NOCJK)) {
             PUTC(1);
 	/*
 	**  Convert 173 (shy) to Lynx special character if
 	**  neither HTPassHighCtrlRaw nor HTCJK is set. - FM
 	*/
-	} else if ((unsigned char)c == 173 &&
-		   !(HTPassHighCtrlRaw || HTCJK != NOCJK)) {
+	} else if (unsign_c == 173 &&
+		   !(PASS8859SPECL || HTCJK != NOCJK)) {
             PUTC(7);
+
+#ifdef EXP_CHARTRANS
+	} else if (context->T.use_raw_char_in && saved_char_in) {
+	    /* only if the original character is still in saved_char_in,
+	       otherwise we may be iterating from a goto top */
+	    PUTC(saved_char_in);
+	    saved_char_in = '\0';
+/******************************************************************
+ *   I. LATIN-1 OR UCS2  TO  DISPLAY CHARSET
+ ******************************************************************/  
+	} else if ((chk = (context->T.trans_from_uni && unsign_c >= 160)) &&
+		   (uck = UCTransUniChar(unsign_c, context->html_char_set)) >= 32 &&
+		   uck < 256) {
+	    if (TRACE)
+	      fprintf(stderr,"UCTransUniChar returned 0x%lx:'%c'.\n",uck,(char)uck);
+	    c = (char)(uck & 0xff);
+	    PUTC(c);
+	} else if (chk && (uck == -4) &&
+		                 /* Not found; look for replacement string */
+		(uck = UCTransUniCharStr(replace_buf,60, clong,
+					 context->html_char_set, 0) >= 0 ) ) { 
+	      CONST char *p;
+	      /* No further tests for valididy - assume that whoever
+		 defined replacement strings knew what she was doing. */
+		 
+	      for (p=replace_buf; *p; p++)
+		PUTC(*p);
+#endif /* EXP_CHARTRANS */
+
 	/*
 	**  If it's any other (> 160) 8-bit chararcter, and
 	**  we have not set HTPassEightBitRaw nor HTCJK, nor
 	**  have the "ISO Latin 1" character set selected,
 	**  back translate for our character set. - FM
 	*/
-	} else if ((unsigned char)c > 160 &&
-		   !(HTPassEightBitRaw || HTCJK != NOCJK) &&
+#ifndef EXP_CHARTRANS
+#define PASSHI8BIT HTPassEightBitRaw
+#else
+#define PASSHI8BIT (HTPassEightBitRaw || (context->T.do_8bitraw && !context->T.trans_from_uni))
+#endif /* EXP_CHARTRANS */
+	} else if (unsign_c > 160 && unsign_c < 256 &&
+		   !(PASSHI8BIT || HTCJK != NOCJK) &&
 		   strncmp(LYchar_set_names[current_char_set],
 		   	   "ISO Latin 1", 11)) {
 	    int i;
 	    int value;
 
 	    string->size = 0;
-	    value = (int)((unsigned char)c - 160);
+	    value = (int)(unsign_c - 160);
 	    EntityName = HTMLGetEntityName(value);
 	    for (i = 0; EntityName[i]; i++)
 	        HTChunkPutc(string, EntityName[i]);
@@ -688,6 +993,37 @@ top:
 	    string->size = 0;
 	    if (!FoundEntity)
 	        PUTC(';');
+#ifdef EXP_CHARTRANS
+	/*
+	**  If we get to here and have an ASCII char, pass the character.
+	*/
+	} else if (unsign_c < 127 && unsign_c > 0) {
+	    PUTC(c);
+	/*
+	**  If we get to here, and should have translated, translation has
+	**  failed so far.  
+	*/
+	} else if (context->T.output_utf8 &&
+	    *context->utf_buf) {
+	    for (p=context->utf_buf; *p; p++)
+		PUTC(*p);
+	    context->utf_buf_p = context->utf_buf;
+	    *(context->utf_buf_p) = '\0';
+
+	} else if (context->T.strip_raw_char_in && saved_char_in &&
+		   ((unsigned char)saved_char_in >= 0xc0) &&
+		   ((unsigned char)saved_char_in < 255)) {
+	    /* KOI8 special: strip high bit, gives (somewhat) readable ASCII
+	     or KOI7 - it was constructed that way! */
+	    PUTC((char)(saved_char_in & 0x7f));
+	    saved_char_in = '\0';
+	    
+	} else if ((unsigned char)c<LYlowest_eightbit[context->html_char_set]
+		   || (context->T.trans_from_uni && !HTPassEightBitRaw)) {
+	    sprintf(replace_buf,"U%.2lx",unsign_c);
+	    for (p=replace_buf; *p; p++)
+		PUTC(*p);
+#endif /* EXP_CHARTRANS */
 	/*
 	**  If we get to here, pass the character. - FM
 	*/
@@ -746,7 +1082,7 @@ top:
     **  Handle possible named entity.
     */
     case S_entity:
-	if ((unsigned char)c < 127 && isalnum((unsigned char)c)) {
+	if (unsign_c < 127 && isalnum((unsigned char)c)) {
 	    /*
 	    **  Accept valid ASCII character. - FM
 	    */
@@ -758,7 +1094,7 @@ top:
 	    */
 	    PUTC('&');
 	    context->state = S_text;
-	    goto top;
+	    goto top1;
 	} else {
 	    /*
 	    **  Terminate entity name and try to handle it. - FM
@@ -774,7 +1110,7 @@ top:
 	    **  not the "standard" semi-colon for HTML. - FM
 	    */
 	    if (!FoundEntity || c != ';')
-	        goto top;
+	        goto top1;
 	}
 	break;
 
@@ -782,7 +1118,7 @@ top:
     **  Handle possible numeric entity.
     */
     case S_cro:
-	if ((unsigned char)c < 127 && isdigit((unsigned char)c)) {
+	if (unsign_c < 127 && isdigit((unsigned char)c)) {
 	    /*
 	    **  Accept only valid ASCII digits. - FM
 	    */
@@ -795,8 +1131,8 @@ top:
 	    PUTC('&');
 	    PUTC('#');
 	    context->state = S_text;
-	    goto top;
-	} else if ((unsigned char)c > 127 || isalnum((unsigned char)c)) {
+	    goto top1;
+	} else if (unsign_c > 127 || isalnum((unsigned char)c)) {
 	    /*
 	    **  We have digit(s), but not a valid terminator,
 	    **  so recover the "&#" and digit(s) and recycle
@@ -809,7 +1145,7 @@ top:
 	       PUTC(string->data[i]);
 	    string->size = 0;
 	    context->state = S_text;
-	    goto top;
+	    goto top1;
 	} else {
 	    /*
 	    **  Terminate the numeric entity and try to handle it. - FM
@@ -817,6 +1153,40 @@ top:
 	    int value, i;
 	    HTChunkTerminate(string);
 	    if (sscanf(string->data, "%d", &value) == 1) {
+#ifdef EXP_CHARTRANS
+	      if (value==160) {
+		    /* we *always* should interpret this as Latin1 here! */
+		PUTC(1);
+		string->size = 0;
+		context->state = S_text;
+		if (c != ';')
+		    goto top1;
+		break;
+	      }
+	      if ((uck = UCTransUniChar(value,current_char_set)) >= 32 &&
+		    uck < 256 &&
+		      (uck < 127 ||
+		        uck >= LYlowest_eightbit[context->html_char_set])
+		       ) {
+		  if (uck==160 && current_char_set==0) 
+		      PUTC(1); /* would only happen if some other unicode
+				  is mapped to Latin-1 160 */
+		  else if (uck==173 && current_char_set==0) 
+		      PUTC(7); /* would only happen if some other unicode
+				  is mapped to Latin-1 173 */
+		  else
+		      PUTC(FROMASCII((char)uck));
+	      } else
+	      if ((uck == -4) && /* Not found; look for replacement string */
+		(uck = UCTransUniCharStr(replace_buf,60,value,
+				      current_char_set, 0)   >= 0 ) ) { 
+		for (p=replace_buf; *p; p++)
+		  PUTC(*p);
+	      } else if (context->T.output_utf8 &&
+			 PUTUTF8(value)) {
+		  /* do nothing more */ ;
+	      } else 
+#endif /* EXP_CHARTRANS */
 	        if (value == 8482) {
 		    /*
 		    **  trade  Handle as named entity. - FM
@@ -828,8 +1198,8 @@ top:
 		    HTChunkPutc(string, 'd');
 		    HTChunkPutc(string, 'e');
 		    context->state = S_entity;
-		    goto top;
-		}
+		    goto top1;
+		} else
 	        /*
 		** Show the numeric entity if the value:
 		**  (1) Is greater than 255 (until we support Unicode).
@@ -871,7 +1241,7 @@ top:
 			    PUTC(string->data[i]);
 			string->size = 0;
 			context->state = S_text;
-			goto top;
+			goto top1;
 		    }
 		} else if (value == 160) {
 		    /*
@@ -921,7 +1291,7 @@ top:
 			    PUTC(string->data[i]);
 			string->size = 0;
 			context->state = S_text;
-			goto top;
+			goto top1;
 		    }
 		}
 		/*
@@ -934,7 +1304,7 @@ top:
 		**  the "standard" semi-colon for HTML. - FM
 		*/
 		if (c != ';')
-		    goto top;
+		    goto top1;
 	    } else {
 	        /*
 		**  Not an entity, and don't know why not, so add the
@@ -963,7 +1333,7 @@ top:
     **  Tag
     */	    
     case S_tag:					/* new tag */
-	if ((unsigned char)c < 127 && isalnum((unsigned char)c)) {
+	if (unsign_c < 127 && isalnum((unsigned char)c)) {
 	    /*
 	    **  Add valid ASCII character. - FM
 	    */
@@ -985,7 +1355,7 @@ top:
 	    */
 	    context->state = S_text;
 	    PUTC('<');
-	    goto top;
+	    goto top1;
 	} else {				/* End of tag name */
 	    /*
 	    **  Try to handle tag. - FM
@@ -1436,7 +1806,7 @@ top:
 	    string->size = 0;
 	    context->state = S_tag_gap;
 	    if (c == '>')	/* We emulated the Netscape bug, so we go  */
-	        goto top;	/* back and treat it as the tag terminator */
+	        goto top1;	/* back and treat it as the tag terminator */
 	} else if (c == '\033') {
 	    /*
 	    **  Setting up for possible double quotes in CJK escape
@@ -1450,7 +1820,7 @@ top:
 	break;
 	
     case S_end:					/* </ */
-	if ((unsigned char)c < 127 && isalnum((unsigned char)c))
+	if (unsign_c < 127 && isalnum((unsigned char)c))
 	    HTChunkPutc(string, c);
 	else {				/* End of end tag name */
 	    HTTag * t=0;
@@ -1554,6 +1924,29 @@ top:
 			context->state = S_text;
 		    }
 		    break;
+		} else if (tag_OK &&
+			   !strcasecomp(string->data, "FORM")) {
+		    /*
+		    **  Handle a FORM end tag.  We declared FORM
+		    **  as SGML_EMPTY to prevent "expected tag
+		    **  substitution" and avoid throwing the
+		    **  HTML.c stack out of whack (Wow, what
+		    **  a hack! 8-). - FM
+		    */
+		    if (TRACE)
+		        fprintf(stderr, "SGML: End </%s>\n", string->data);
+		    (*context->actions->end_element)
+			(context->target,
+			 (context->current_tag - context->dtd->tags),
+			 (char **)&context->include);
+		    string->size = 0;
+		    context->current_attribute_number = INVALID;
+		    if (c != '>') {
+			context->state = S_junk_tag;
+		    } else {
+			context->state = S_text;
+		    }
+		    break;
 		} else {
 		    /*
 		    **  Handle all other end tags normally. - FM
@@ -1814,8 +2207,9 @@ PUBLIC CONST HTStreamClass SGMLParser =
 **
 */
 
-PUBLIC HTStream* SGML_new  ARGS2(
+PUBLIC HTStream* SGML_new  ARGS3(
 	CONST SGML_dtd *,	dtd,
+	HTParentAnchor *,	anchor,
 	HTStructured *,		target)
 {
     int i;
@@ -1851,6 +2245,26 @@ PUBLIC HTStream* SGML_new  ARGS2(
     context->url = NULL;
     context->csi = NULL;
     context->csi_index = 0;
+#ifdef EXP_CHARTRANS
+    context->node_anchor = anchor; /*only for chartrans info. could be NULL? */
+
+    context->utf_count = 0;
+    context->utf_char = 0;
+    context->utf_buf[0] = context->utf_buf[6] = '\0';
+    context->utf_buf_p = context->utf_buf;
+
+    UCTransParams_clear(&context->T);
+    context->in_char_set =
+	HTAnchor_getUCLYhndl(anchor, UCT_STAGE_PARSER);
+    if (context->in_char_set < 0) {
+	HTAnchor_copyUCInfoStage(anchor, UCT_STAGE_PARSER, UCT_STAGE_MIME,
+				         -1);
+	context->in_char_set =
+	    HTAnchor_getUCLYhndl(anchor, UCT_STAGE_PARSER);
+    }
+    context->UCI=HTAnchor_getUCInfoStage(anchor, UCT_STAGE_PARSER);
+    set_chartrans_handling(context, anchor, -1);
+#endif /* EXP_CHARTRANS */
 
     return context;
 }
diff --git a/WWW/Library/Implementation/SGML.h b/WWW/Library/Implementation/SGML.h
index 5fa799d5..7ab47c82 100644
--- a/WWW/Library/Implementation/SGML.h
+++ b/WWW/Library/Implementation/SGML.h
@@ -24,6 +24,7 @@
 #include "HTUtils.h"
 #endif /* HTUTILS_H */
 #include "HTStream.h"
+#include "HTAnchor.h"
 
 /*
 
@@ -77,11 +78,22 @@ struct _tag{
 **
 ** Not the whole DTD, but all this parser usues of it.
 */
+#ifdef EXP_CHARTRANS
+typedef struct {
+  char* name;
+  long code;
+} UC_entity_info;
+#endif
+
 typedef struct {
     HTTag *             tags;           /* Must be in strcmp order by name */
     int                 number_of_tags;
     CONST char **       entity_names;   /* Must be in strcmp order by name */
     int                 number_of_entities;
+#ifdef EXP_CHARTRANS
+    CONST UC_entity_info * extra_entity_info; /* strcmp order by name */
+    int                 number_of_extra_entities;
+#endif
 } SGML_dtd;
 
 
@@ -149,7 +161,7 @@ typedef struct _HTStructuredClass{
                 int             element_number,
 		char **		include));
 
-        void (*put_entity) PARAMS((
+        int (*put_entity) PARAMS((
                 HTStructured*   me,
                 int             entity_number));
                 
@@ -182,6 +194,7 @@ Create an SGML parser
 
 extern HTStream* SGML_new PARAMS((
         CONST SGML_dtd *                dtd,
+	HTParentAnchor *	anchor,
         HTStructured *          target));
 
 extern CONST HTStreamClass SGMLParser;
diff --git a/WWW/Library/Implementation/UCAux.h b/WWW/Library/Implementation/UCAux.h
new file mode 100644
index 00000000..0094595d
--- /dev/null
+++ b/WWW/Library/Implementation/UCAux.h
@@ -0,0 +1,41 @@
+#ifndef UCAUX_H
+#define UCAUX_H
+
+extern BOOL UCCanUniTranslateFrom PARAMS((int from));
+extern BOOL UCCanTranslateUniTo PARAMS((int to));
+extern BOOL UCCanTranslateFromTo PARAMS((int from, int to));
+
+struct _UCTransParams
+{
+    BOOL transp, do_cjk, decode_utf8, output_utf8,
+	use_raw_char_in, strip_raw_char_in,
+	pass_160_173_raw, do_8bitraw,
+	trans_to_uni, trans_from_uni;
+};
+typedef struct _UCTransParams UCTransParams;
+
+extern void UCSetTransParams PARAMS((
+    UCTransParams * 	pT,
+    int			cs_in,
+    CONST LYUCcharset *	p_in,
+    int			cs_out,
+    CONST LYUCcharset *	p_out));
+
+extern void UCTransParams_clear PARAMS((
+    UCTransParams * 	pT));
+
+#ifndef HTSTREAM_H
+#include "HTStream.h"
+#endif
+
+typedef void 
+    putc_func_t PARAMS((
+                HTStream*   me,
+                char            ch));
+
+extern BOOL UCPutUtf8_charstring PARAMS((
+    HTStream *	target,
+    putc_func_t *	actions,
+    long	code));
+    
+#endif /* UCAUX_H */
diff --git a/WWW/Library/Implementation/UCDefs.h b/WWW/Library/Implementation/UCDefs.h
new file mode 100644
index 00000000..0c8966ea
--- /dev/null
+++ b/WWW/Library/Implementation/UCDefs.h
@@ -0,0 +1,79 @@
+/* Definitions for EXP_CHARTRANS */
+
+#ifndef UCDEFS_H
+#define UCDEFS_H
+
+typedef struct _LYUCcharset {
+  int UChndl;
+  char *MIMEname;
+    int enc;
+    int repertoire;
+    int codepoints;
+    int cpranges;		/* which ranges have valid displayable chars
+				 (including nbsp and shy) */
+    int like8859;		/* for which ranges is it like 8859-1 */
+} LYUCcharset;
+
+#define UCT_ENC_7BIT 0
+#define UCT_ENC_8BIT 1
+#define UCT_ENC_8859 2		/* ??? */
+#define UCT_ENC_2022 3
+#define UCT_ENC_MAYBE2022 4
+#define UCT_ENC_CJK 5
+#define UCT_ENC_16BIT 6
+#define UCT_ENC_UTF8 7
+
+
+#define UCT_REP_SUBSETOF_LAT1 0x01
+#define UCT_REP_SUPERSETOF_LAT1 0x02
+#define UCT_REP_IS_LAT1 UCT_REP_SUBSETOF_LAT1 | UCT_REP_SUPERSETOF_LAT1
+/* assume everything we deal with is included in the UCS2 reperoire,
+   so a flag for _REP_SUBSETOF_UCS2 would be redundant */
+
+/* more general description how the code points relate to 8859-1 and UCS: */
+#define UCT_CP_SUBSETOF_LAT1 0x01 /* implies UCT_CP_SUBSETOF_UCS2 */
+#define UCT_CP_SUPERSETOF_LAT1 0x02
+#define UCT_CP_SUBSETOF_UCS2 0x04
+
+#define UCT_CP_IS_LAT1 UCT_CP_SUBSETOF_LAT1 | UCT_CP_SUPERSETOF_LAT1
+
+/* more specific bitflags for practically important code point ranges: */
+#define UCT_R_LOWCTRL 0x08	/* 0x00-0x1F, for completeness */
+#define UCT_R_7BITINV 0x10	/* invariant, displayable 7bit chars */
+#define UCT_R_7BITNAT 0x20	/* displayable 7bit, national */
+#define UCT_R_HIGHCTRL 0x40
+#define UCT_R_8859SPECL 0x80	/* special chars in 8859-x sets: nbsp and shy*/
+#define UCT_R_HIGH8BIT 0x100	/* rest of 0xA0-0xFF range */
+
+#define UCT_R_ASCII UCT_R_7BITINV | UCT_R_7BITNAT /*displayable US-ASCII*/
+#define UCT_R_LAT1 UCT_R_ASCII | UCT_R_8859SPECL | UCT_R_HIGH8BIT
+#define UCT_R_8859S UCT_R_ASCII | UCT_R_8859SPECL
+#define UCT_R_8BIT UCT_R_LAT1 | UCT_R_HIGHCTRL /* full 8bit range */
+
+/* For the following some coments are in HTAnchor.c. */
+
+#define UCT_STAGE_MIME 0
+#define UCT_STAGE_PARSER 1	/* What the parser (SGML.c) gets to see */
+#define UCT_STAGE_STRUCTURED 2	/* What the structured stream (HTML) gets fed*/
+#define UCT_STAGE_HTEXT 3	/* What gets fed to the HText_* functions */
+#define UCT_STAGEMAX 4
+
+#define UCT_SETBY_NONE 0
+#define UCT_SETBY_DEFAULT 1
+#define UCT_SETBY_STRUCTURED 2	/* structured stream stage */
+#define UCT_SETBY_PARSER 3	/* set by SGML parser or similar */
+#define UCT_SETBY_MIME 4	/* set explicitly by MIME charset parameter */
+
+typedef struct _UCStageInfo
+{
+    int	lock;			/* by what it has been set */
+    int LYhndl;
+    LYUCcharset	C;
+} UCStageInfo;
+
+typedef struct _UCAnchorInfo
+{
+    struct _UCStageInfo	s[UCT_STAGEMAX];
+} UCAnchorInfo;
+
+#endif /* UCDEFS_H */
diff --git a/WWW/Library/Implementation/UCMap.h b/WWW/Library/Implementation/UCMap.h
new file mode 100644
index 00000000..93351ed4
--- /dev/null
+++ b/WWW/Library/Implementation/UCMap.h
@@ -0,0 +1,20 @@
+typedef long UCode_t;
+
+PUBLIC int UCTransUniChar PARAMS((UCode_t unicode, int charset_out));
+PUBLIC int UCTransUniCharStr PARAMS((char *outbuf, int buflen, UCode_t unicode,
+			     int charset_out, int chk_single_flag));
+PUBLIC int UCTransChar PARAMS((char ch_in, int charset_in, int charset_out));
+PUBLIC int UCTransCharStr PARAMS((char *outbuf, int buflen, char ch_in,
+			int charset_in, int charset_out, int chk_single_flag));
+PUBLIC UCode_t UCTransToUni PARAMS((char ch_in, int charset_in));
+PUBLIC int UCGetLYhndl_byMIME PARAMS((CONST char *p));
+PUBLIC int UCGetRawUniMode_byLYhndl PARAMS((int i));
+
+PUBLIC int UCLYhndl_for_unspec;
+PUBLIC int UCLYhndl_for_unrec;
+PUBLIC int UCLYhndl_HTFile_for_unspec;
+PUBLIC int UCLYhndl_HTFile_for_unrec;
+
+#define UCTRANS_NOTFOUND (-4)
+
+#define HT_CANNOT_TRANSLATE -4	/* could go into HTUtils.h */
diff --git a/WWW/Library/Implementation/tcp.h b/WWW/Library/Implementation/tcp.h
index 99b63224..7f38e545 100644
--- a/WWW/Library/Implementation/tcp.h
+++ b/WWW/Library/Implementation/tcp.h
@@ -65,6 +65,37 @@ typedef struct sockaddr_in SockA;  /* See netinet/in.h */
 #define STDIO_H
 #endif /* !STDIO_H */
 
+#if HAVE_DIRENT_H
+# include <dirent.h>
+# define D_NAMLEN(dirent) strlen((dirent)->d_name)
+# define STRUCT_DIRENT struct dirent
+# define GOT_READ_DIR 1    /* if directory reading functions are available */
+#else
+# define D_NAMLEN(dirent) (dirent)->d_namlen
+# define STRUCT_DIRENT struct direct
+# define direct dirent	/* FIXME */
+# if HAVE_SYS_NDIR_H
+#  include <sys/ndir.h>
+# endif
+# if HAVE_SYS_DIR_H
+#  include <sys/dir.h>
+# endif
+# if HAVE_NDIR_H
+#  include <ndir.h>
+# endif
+#endif
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+#  include <sys/time.h>
+# else
+#  include <time.h>
+# endif
+#endif
+
 #ifdef _AIX
 #define AIX
 #endif /* _AIX */
@@ -72,38 +103,17 @@ typedef struct sockaddr_in SockA;  /* See netinet/in.h */
 #define unix
 #endif /* AIX */
 
-#ifdef _IBMR2
-#define USE_DIRENT              /* sys V style directory open */
-#endif /* _IBMR2 */
-
-#ifdef _SYSV3
+#if HAVE_FCNTL_H
 #include <fcntl.h>
-#include <dirent.h>
-#endif /* _SYSV3 */
-
-/* Solaris. */
-#if defined(sun) && defined(__svr4__) && !defined(USE_DIRENT)
-#define USE_DIRENT              /* sys V style directory open */
-#endif /* sun && __svr4__ && !USE_DIRENT */
-
-#ifdef __alpha
-#define USE_DIRENT
-#endif /* __alpha */
-
-#ifndef USE_DIRENT
-#ifdef SVR4
-#define USE_DIRENT
-#endif /* SVR4 */
-#endif /* !USE_DIRENT */
+#else
+#if HAVE_SYS_FCNTL_H
+#include <sys/fcntl.h>
+#endif
+#endif
 
-#ifndef SOLARIS2
+#if HAVE_STRING_H
 #include <string.h>             /* For bzero etc */
-#endif /* !SOLARIS2 */
-
-/* Use builtin strdup when appropriate. */
-#if defined(ultrix) || defined(VMS) || defined(NeXT)
-extern char *strdup ();
-#endif /* ultrix || VMS || NeXT */
+#endif /* HAVE_STRING_H */
 
 /*
 
@@ -117,6 +127,47 @@ extern char *strdup ();
 
 
 /*
+IBM-PC running Windows NT
+
+	These parameters providede by  Susan C. Weber <sweber@kyle.eitech.com>.
+*/
+
+#ifdef _WINDOWS
+#include "fcntl.h"                      /* For HTFile.c */
+#include "sys\types.h"                  /* For HTFile.c */
+#include "sys\stat.h"                   /* For HTFile.c */
+#undef NETREAD
+#undef NETWRITE
+#undef NETCLOSE
+#undef IOCTL
+#define NETREAD(s,b,l)  recv((s),(b),(l),0)
+#define NETWRITE(s,b,l) send((s),(b),(l),0)
+#define NETCLOSE(s)     closesocket(s)
+#define IOCTL				ioctlsocket
+#include <io.h>
+#include <string.h>
+#include <process.h>
+#include <time.h>
+#include <errno.h>
+#include <direct.h>
+#include <stdio.h>
+#include <winsock.h>
+typedef struct sockaddr_in SockA;  /* See netinet/in.h */
+#define EINPROGRESS          (WSABASEERR+36)
+#define EALREADY             (WSABASEERR+37)
+#define EISCONN              (WSABASEERR+56)
+#define EINTR                (WSABASEERR+4)
+#define EAGAIN               (WSABASEERR+1002)
+#define ENOTCONN             (WSABASEERR+57)
+#define ECONNRESET           (WSABASEERR+54)
+#define EINVAL                22
+#define INCLUDES_DONE
+#define TCP_INCLUDES_DONE
+#endif  /* WINDOWS */
+
+
+
+/*
 
 VAX/VMS
 
@@ -149,10 +200,10 @@ VAX/VMS
 #undef SOCKET_READ
 #undef NETWRITE
 #undef NETCLOSE
-#undef IOCTL
 #define SOCKET_READ(s,b,l)  ((s)>10 ? netread((s),(b),(l)) : read((s),(b),(l)))
 #define NETWRITE(s,b,l) ((s)>10 ? netwrite((s),(b),(l)) : write((s),(b),(l)))
 #define NETCLOSE(s)     ((s)>10 ? netclose(s) : close(s))
+#undef IOCTL
 #define IOCTL(a,b,c) -1 /* disables ioctl function	      */
 #define NO_IOCTL	/* flag to check if ioctl is disabled */
 #endif /* WIN_TCP */
@@ -387,49 +438,32 @@ struct timeval {
 #define GLOBALREF extern
 #endif /* !GLOBALREF */
 
+#ifdef DJGPP
+#undef SELECT
+#define TCP_INCLUDES_DONE
+#define NO_IOCTL
+#include <errno.h>
+#include <sys/types.h>
+#include <socket.h>
 
-/*
-SCO ODT unix version
- */
-#ifdef SCO
-#define sco
-#endif /* SCO */
-#ifdef sco
-#include <sys/fcntl.h>
-#define USE_DIRENT
-#endif /* sco */
+#undef NETWRITE
+#define NETWRITE write_s
+#undef NETREAD
+#define NETREAD read_s
+#undef NETCLOSE
+#define NETCLOSE close_s
+#endif
 
 /*
-Intergraph CLIX
+SCO ODT unix version
  */
-#ifdef CLIX
-#include <sys/fcntl.h>
-#define USE_DIRENT
-#endif /* CLIX */
-
-#ifdef ISC
-#ifndef NO_UNISTD_H
-#include <sys/unistd.h>
-#endif /* !NO_UNISTD_H */
-#else
-#if !defined(NO_UNISTD_H) && !defined(VMS)
+#if HAVE_UNISTD_H
 #include <unistd.h>
-#endif /* !NO_UNISTD_H && !VMS */
-#endif /* ISC */
-
-#if defined(SVR4) || defined(UNIXWARE)
-#include <sys/fcntl.h>
-#ifndef NO_FILIO_H	/* BSD Interactive doesn't have filio.h. */
-#include <sys/filio.h>
-#endif /* !NO_FILIO_H */
-#endif /* SVR4 || UNIXWARE */
+#endif /* HAVE_UNISTD_H */
 
-/*
-SOLARIS 2
- */
-#ifdef SOLARIS2
+#if HAVE_SYS_FILIO_H
 #include <sys/filio.h>
-#endif /* SOLARIS2 */
+#endif /* HAVE_SYS_FILIO_H */
 
 /*
 MIPS unix
@@ -447,9 +481,9 @@ Regular BSD unix versions
 #ifndef INCLUDES_DONE
 #include <sys/types.h>
 /* #include <streams/streams.h>                 not ultrix */
-#ifndef SOLARIS2
+#if HAVE_STRING_H
 #include <string.h>
-#endif /* !SOLARIS2 */
+#endif /* HAVE_STRING_H */
 #include <errno.h>          /* independent */
 #ifdef SCO
 #include <sys/timeb.h>
@@ -490,6 +524,7 @@ typedef int pid_t;
 #define INCLUDES_DONE
 #endif  /* Normal includes */
 
+/* FIXME: this should be autoconf'd */
 /* Interactive UNIX for i386 and i486 -- Thanks to jeffrey@itm.itm.org */
 #ifdef ISC
 #include <net/errno.h>
@@ -497,7 +532,6 @@ typedef int pid_t;
 #include <sys/tty.h>
 #include <sys/sioctl.h>
 #include <sys/bsdtypes.h>
-#include <sys/fcntl.h>
 #ifndef MERGE
 #define MERGE
 #include <sys/pty.h>
@@ -506,7 +540,7 @@ typedef int pid_t;
 #include <sys/pty.h>
 #endif /* !MERGE */
 #ifndef USE_DIRENT
-#define USE_DIRENT	/* sys V style directory open */
+#define USE_DIRENT     /* sys V style directory open */
 #endif /* USE_DIRENT */
 #include <sys/dirent.h>
 #endif /* ISC */
@@ -517,6 +551,18 @@ typedef int pid_t;
 #define unix
 #endif /* UNIX && !unix */
 
+#ifdef HAVE_CONFIG_H
+
+# ifdef HAVE_LIMITS_H
+#  include <limits.h>
+# endif /* HAVE_LIMITS_H */
+# if !defined(MAXINT) && defined(INT_MAX)
+#  define MAXINT INT_MAX
+# endif /* !MAXINT && INT_MAX */
+
+#else
+
+/* FIXME: remove after completing configure-script */
 #ifdef unix                    /* if this is to compile on a UNIX machine */
 #define GOT_READ_DIR 1    /* if directory reading functions are available */
 #ifdef USE_DIRENT             /* sys v version */
@@ -538,6 +584,16 @@ typedef int pid_t;
 #endif /* !MAXINT && INT_MAX */
 #endif /* unix */
 
+#ifndef VM
+#ifndef VMS
+#ifndef THINK_C
+#define DECL_SYS_ERRLIST 1
+#endif /* !THINK_C */
+#endif /* !VMS */
+#endif /* !VM */
+
+#endif /* !HAVE_CONFIG_H */
+
 /*
 Defaults
 ========
diff --git a/WWW/Library/djgpp/CommonMakefile b/WWW/Library/djgpp/CommonMakefile
new file mode 100644
index 00000000..e0b6a171
--- /dev/null
+++ b/WWW/Library/djgpp/CommonMakefile
@@ -0,0 +1,379 @@
+#	Common Makefile for W3 Library Code

+#	-----------------------------------

+#

+#	(c) CERN 1990, 1991 -- see Copyright.html for conditions

+#

+# This file should be invariant between systems.

+#	DEPENDENCIES NOT COMPLETE @@

+#

+#	make		Compile and link the software (private version)

+#	make install	Copy it into the system (implies make)

+#	make update	Copy installed version into installed version

+#	make uninstall	Unlink installed version from the system

+#	make clean	Remove intermediate files

+#	make cleanall	Remove intremediate files and products

+#	

+# Macros required to be defined already for make:

+#

+# CC		The C compiler

+# CFLAGS	Flags for $(CC) -- except the -I which are below

+# LFLAGS	Flags for ld

+# LYFLAGS	Flags for Lynx

+#

+# WWW           The WWW source tree directory

+#

+# Macros needed for make install:

+#

+# LIBDIR	Directory for installed library

+#______________________________________________________________________

+

+#  If this env var is set to something else Some makes will use that instead

+SHELL = /bin/sh

+

+#	.h files are distributed but originally are made from the

+#	self-documenting hypertext files.

+

+.SUFFIXES: .h .html

+.html.h:

+#	- chmod +w $*.h

+	www -w90 -na -to text/x-c $*.html > $*.h

+#	chmod -w $*.h

+

+# If this is actually run in a subdirectory,

+#

+# WWW = ../../..

+# WWW = ../..	For [cernlib] build in this directory

+

+WC = $(WWW)/Library

+CMN = $(WWW)/Library/Implementation/

+VMS = $(CMN)vms

+# Where shall we put the objects and built library?

+

+LOB = $(WTMP)/Library/$(WWW_MACH)

+

+# Only needed if HTWAIS.c is to be compiled. Put into your Makefile.include

+#  uncomment these and fill in WAISINC for adding direct wais access

+#  to Lynx.

+#HTWAIS = $(LOB)/HTWAIS.o

+#WAIS = YES

+#WAISINC = -I../../../../freeWAIS-0.202/ir

+#WAISCFLAGS = -DDIRECT_WAIS 

+#

+

+# This path, if relative, is taken relative to the directory

+# in which this makefile is, not the pwd.  This screws up the 

+# recursive invocation

+# include $(CMN)Version.make

+include $(ABS)$(WWW)/Library/Implementation/Version.make

+

+# XMOsAIC hack is only for server to cope with xmosaic kludge for mmedia

+#

+# add -DNEW_GATEWAY here for the new gateway config stuff

+CFLAGS2 = $(CFLAGS) $(LYFLAGS) $(WAISCFLAGS) -I$(CMN) -DXMOSAIC_HACK -DACCESS_AUTH 

+

+CERNLIBBIN = $(WWW)/bin

+

+COMMON = $(LOB)/HTParse.o $(LOB)/HTAccess.o $(LOB)/HTTP.o \

+	$(LOB)/HTFile.o	$(LOB)/HTBTree.o $(LOB)/HTFTP.o $(LOB)/HTTCP.o \

+	$(LOB)/SGML.o $(LOB)/HTMLDTD.o $(LOB)/HTChunk.o \

+	$(LOB)/HTPlain.o $(LOB)/HTWriter.o \

+	$(LOB)/HTMLGen.o \

+	$(LOB)/HTAtom.o $(LOB)/HTAnchor.o $(LOB)/HTStyle.o \

+        $(LOB)/HTList.o $(LOB)/HTString.o $(LOB)/HTDOS.o \

+	$(LOB)/HTRules.o $(LOB)/HTFormat.o  $(LOB)/HTMIME.o \

+	$(LOB)/HTHistory.o $(LOB)/HTNews.o $(LOB)/HTGopher.o \

+	$(LOB)/HTTelnet.o $(LOB)/HTFinger.o $(LOB)/HTWSRC.o $(HTWAIS) \

+	$(LOB)/HTAAUtil.o $(LOB)/HTAAServ.o $(LOB)/HTAABrow.o \

+	$(LOB)/HTAAFile.o $(LOB)/HTPasswd.o $(LOB)/HTGroup.o  \

+	$(LOB)/HTACL.o    $(LOB)/HTAuth.o   $(LOB)/HTAAProt.o \

+	$(LOB)/HTAssoc.o  $(LOB)/HTLex.o    $(LOB)/HTUU.o

+

+CFILES = $(CMN)HTParse.c $(CMN)HTAccess.c $(CMN)HTTP.c $(CMN)HTFile.c \

+        $(CMN)HTBTree.c \

+	$(CMN)HTFTP.c   $(CMN)HTTCP.c     $(CMN)SGML.c \

+	$(CMN)HTMLDTD.c \

+	$(CMN)HTPlain.c	$(CMN)HTWriter.c  \

+        $(CMN)HTDOS.c  $(CMN)HTMLGen.c \

+	$(CMN)HTChunk.c $(CMN)HTAtom.c   $(CMN)HTAnchor.c $(CMN)HTStyle.c \

+	$(CMN)HTList.c  $(CMN)HTString.c $(CMN)HTRules.c \

+	$(CMN)HTFormat.c $(CMN)HTMIME.c $(CMN)HTHistory.c \

+	$(CMN)HTNews.c  $(CMN)HTGopher.c $(CMN)HTTelnet.c \

+	$(CMN)HTFinger.c $(CMN)HTWAIS.c  $(CMN)HTWSRC.c \

+	$(CMN)HTAAUtil.c $(CMN)HTAAServ.c $(CMN)HTAABrow.c \

+	$(CMN)HTAAFile.c $(CMN)HTPasswd.c $(CMN)HTGroup.c  \

+	$(CMN)HTACL.c    $(CMN)HTAuth.c   $(CMN)HTAAProt.c \

+	$(CMN)HTAssoc.c  $(CMN)HTLex.c    $(CMN)HTUU.c

+

+HFILES = $(CMN)HTParse.h $(CMN)HTAccess.h $(CMN)HTTP.h $(CMN)HTFile.h \

+	$(CMN)HTBTree.h $(CMN)HTFTP.h $(CMN)HTTCP.h \

+	$(CMN)SGML.h $(CMN)HTML.h $(CMN)HTMLDTD.h $(CMN)HTChunk.h \

+	$(CMN)HTPlain.h		$(CMN)HTWriter.h \

+        $(CMN)HTFWriter.h       $(CMN)HTMLGen.h $(CMN)HTDOS.h \

+	$(CMN)HTStream.h \

+	$(CMN)HTAtom.h $(CMN)HTAnchor.h $(CMN)HTStyle.h \

+	$(CMN)HTList.h \

+	$(CMN)HTString.h $(CMN)HTAlert.h $(CMN)HTRules.h \

+	$(CMN)HTFormat.h $(CMN)HTInit.h \

+	$(CMN)HTMIME.h $(CMN)HTHistory.h $(CMN)HTNews.h \

+	$(CMN)HTGopher.h \

+	$(CMN)HTUtils.h $(CMN)tcp.h $(CMN)HText.h \

+	$(CMN)HTTelnet.h $(CMN)HTFinger.h \

+	$(CMN)HTWAIS.h  $(CMN)HTWSRC.h \

+	$(CMN)HTAAUtil.h $(CMN)HTAAServ.h $(CMN)HTAABrow.h \

+	$(CMN)HTAAFile.h $(CMN)HTPasswd.h $(CMN)HTGroup.h  \

+	$(CMN)HTACL.h    $(CMN)HTAuth.h   $(CMN)HTAAProt.h \

+	$(CMN)HTAssoc.h  $(CMN)HTLex.h    $(CMN)HTUU.h

+

+SOURCES = $(CFILES) $(HFILES) $(CMN)Version.make \

+	$(CMN)CommonMakefile $(CMN)Makefile \

+	$(WWW)/README.txt $(WWW)/Copyright.txt $(WWW)/BUILD $(WWW)/Makefile

+SPECIFIC = $(WWW)/All/*/Makefile.include $(WWW)/All/Implementation/Makefile* \

+	$(VMS)/descrip.mms $(VMS)/build_multinet.com \

+	$(VMS)/COPYING.LIB $(VMS)/setup.com $(VMS)/multinet.opt \

+	$(VMS)/patchlevel.h $(VMS)/ufc-crypt.h \

+	$(VMS)/crypt.c $(VMS)/crypt_util.c \

+	$(VMS)/getline.c $(VMS)/getpass.c \

+	$(VMS)/HTVMSUtils.h $(VMS)/HTVMSUtils.c

+

+

+#	Library

+#

+#  On SGI, ranlib is unnecessary and does not exist so we ignore errors

+# for that step

+$(LOB)/libwww.a : $(COMMON)

+	ar r $(LOB)/libwww.a $(COMMON)

+	-ranlib $(LOB)/libwww.a

+

+#	Clean up everything generatable except final products

+clean :

+	rm $(LOB)/*.o $(LOB)/.created

+	-rmdir $(LOB)

+

+#	Clean up everything generatable including final products

+

+cleanall : clean

+	rm $(LOB)/libwww.a

+

+#	Install W3 library into system space (not normally necessary)

+

+install : libwww.a

+	if [ ! -r $(LIBDIR) ] mkdir $(LIBDIR)

+	cp libwww.a $(LIBDIR)/libwww.a

+	

+uninstall :

+	rm $(LIBDIR)/libwww.a

+

+#		Distribution use only:

+#		----------------------

+

+#	Needs www version 2.4 or later to do this

+inc : $(HFILES)

+	echo Include files generated from hypertext.

+

+binary : /pub/www/bin/$(WWW_MACH)/libwww_$(VC).a

+	echo FTP archive binary Libray $(VC) for $(WWW_MACH) up to date.

+

+

+/pub/www/bin/$(WWW_MACH)/libwww_$(VC).a : libwww.a

+	-mkdir /pub/www/bin/$(WWW_MACH)

+	cp libwww.a /pub/www/bin/$(WWW_MACH)/libwww_$(VC).a

+

+#	Source Distribution:

+

+distribute :  /pub/www/README.txt /pub/www/Copyright.txt

+	(cd $(WWW)/..; WWW=WWW ABS=`pwd`/ make $(MFLAGS) \

+		-f WWW/Library/Implementation/CommonMakefile \

+		/pub/www/src/WWWLibrary_$(VC).tar.Z)

+	(cd ../Implementation; cvs tag \

+	    `sed -e 's/VC = /v/' Version.make | sed -e 's?\.?/?'` )

+	echo Distribution of Library version $(VC) up to date.

+

+/pub/www/src/WWWLibrary_$(VC).tar.Z : $(SOURCES)

+	tar cf /pub/www/src/WWWLibrary_$(VC).tar \

+	    $(SOURCES)  $(SPECIFIC) $(WC)/*/Makefile

+	compress /pub/www/src/WWWLibrary_$(VC).tar

+

+

+#	Hypertext supplied in text format

+#	---------------------------------

+

+$(WWW)/README.txt : $(WWW)/../README.html

+	www -n -p66 http://www.w3.org/hypertext/README.html \

+		> $(WWW)/README.txt

+/pub/www/README.txt : $(WWW)/README.txt

+	cp $(WWW)/README.txt /pub/www/README.txt

+

+$(WWW)/Copyright.txt : $(WWW)/../Copyright.html

+	www -n -p66 http://www.w3.org/hypertext/Copyright.html \

+		> $(WWW)/Copyright.txt

+/pub/www/Copyright.txt : $(WWW)/Copyright.txt

+	cp $(WWW)/Copyright.txt /pub/www/Copyright.txt

+

+# 			Common code

+#			-----------

+

+#	Directory for object files - .created checks it exists

+

+OE = $(LOB)/.created

+$(OE) :

+	if [ ! -r $(WTMP) ] ; then mkdir $(WTMP); else echo OK ; fi

+	if [ ! -r $(WTMP)/Library ] ; then mkdir $(WTMP)/Library; else echo OK ; fi

+	if [ ! -r $(WTMP)/Library/$(WWW_MACH) ] ; \

+		then mkdir $(WTMP)/Library/$(WWW_MACH); else echo OK ; fi

+	touch $@

+

+$(LOB)/HTList.o : $(OE) $(CMN)HTList.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTList.c

+

+$(LOB)/HTAnchor.o : $(OE) $(CMN)HTAnchor.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAnchor.c

+

+$(LOB)/HTFormat.o : $(OE) $(CMN)HTFormat.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTFormat.c

+

+$(LOB)/HTMIME.o : $(OE) $(CMN)HTMIME.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTMIME.c

+

+$(LOB)/HTHistory.o : $(OE) $(CMN)HTHistory.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTHistory.c

+

+$(LOB)/HTDOS.o : $(OE) $(CMN)HTDOS.c $(CMN)HTUtils.h $(CMN)../../../userdefs.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTDOS.c

+

+$(LOB)/HTNews.o : $(OE) $(CMN)HTNews.c $(CMN)HTUtils.h $(CMN)HTList.h\

+	 $(CMN)HTMLDTD.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTNews.c

+

+$(LOB)/HTGopher.o : $(OE) $(CMN)HTGopher.c $(CMN)HTUtils.h $(CMN)HTList.h \

+	 $(CMN)HTMLDTD.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTGopher.c

+

+$(LOB)/HTTelnet.o : $(OE) $(CMN)HTTelnet.c $(CMN)HTUtils.h $(CMN)HTTelnet.h $(CMN)../../../userdefs.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTTelnet.c

+

+$(LOB)/HTFinger.o : $(OE) $(CMN)HTFinger.c $(CMN)HTUtils.h $(CMN)HTList.h \

+	$(CMN)HTMLDTD.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTFinger.c

+

+$(LOB)/HTStyle.o : $(OE) $(CMN)HTStyle.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTStyle.c

+

+$(LOB)/HTAtom.o : $(OE) $(CMN)HTAtom.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAtom.c

+

+$(LOB)/HTChunk.o : $(OE) $(CMN)HTChunk.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTChunk.c

+

+$(LOB)/HTString.o : $(OE) $(CMN)HTString.c $(CMN)HTUtils.h $(CMN)Version.make

+	$(CC) -c -o $@ $(CFLAGS2) -DVC=\"$(VC)\" $(CMN)HTString.c

+

+$(LOB)/HTRules.o : $(OE) $(CMN)HTRules.c $(CMN)HTUtils.h $(CMN)Version.make \

+	 $(CMN)HTAAServ.h $(CMN)HTAAProt.h

+	$(CC) -c -o $@ $(CFLAGS2) -DVC=\"$(VC)\" $(CMN)HTRules.c

+

+$(LOB)/SGML.o : $(OE) $(CMN)SGML.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)SGML.c

+

+$(LOB)/HTMLGen.o : $(OE) $(CMN)HTMLGen.c $(CMN)HTUtils.h $(CMN)HTMLDTD.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTMLGen.c

+

+$(LOB)/HTMLDTD.o : $(OE) $(CMN)HTMLDTD.c $(CMN)SGML.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTMLDTD.c

+

+$(LOB)/HTPlain.o : $(OE) $(CMN)HTPlain.c $(CMN)HTPlain.h $(CMN)HTStream.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTPlain.c

+

+$(LOB)/HTWAIS.o : $(OE) $(CMN)HTWAIS.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(WAISINC) $(CMN)HTWAIS.c

+

+$(LOB)/HTWSRC.o : $(OE) $(CMN)HTWSRC.c $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTWSRC.c

+

+$(LOB)/HTWriter.o : $(OE) $(CMN)HTWriter.c $(CMN)HTWriter.h $(CMN)HTStream.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTWriter.c

+

+

+#	Access Authorization

+

+$(LOB)/HTAAUtil.o : $(OE) $(CMN)HTAAUtil.c $(CMN)HTAAUtil.h \

+	 $(CMN)HTUtils.h $(CMN)HTString.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAAUtil.c

+

+$(LOB)/HTAAFile.o : $(OE) $(CMN)HTAAFile.c $(CMN)HTAAFile.h \

+	 $(CMN)HTAAUtil.h $(CMN)HTUtils.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAAFile.c

+

+$(LOB)/HTPasswd.o : $(OE) $(CMN)HTPasswd.c $(CMN)HTPasswd.h \

+	 $(CMN)HTAAUtil.h $(CMN)HTAAFile.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTPasswd.c

+

+$(LOB)/HTGroup.o : $(OE) $(CMN)HTGroup.c $(CMN)HTGroup.h \

+	 $(CMN)HTAAUtil.h $(CMN)HTAAFile.h \

+	 $(CMN)HTAssoc.h $(CMN)HTLex.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTGroup.c

+

+$(LOB)/HTACL.o : $(OE) $(CMN)HTACL.c $(CMN)HTACL.h \

+	 $(CMN)HTAAUtil.h $(CMN)HTAAFile.h $(CMN)HTGroup.h \

+	 $(CMN)HTAssoc.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTACL.c

+

+$(LOB)/HTAuth.o : $(OE) $(CMN)HTAuth.c $(CMN)HTAuth.h \

+	 $(CMN)HTAAUtil.h $(CMN)HTPasswd.h $(CMN)HTAAFile.h \

+	 $(CMN)HTAssoc.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAuth.c

+

+$(LOB)/HTAAServ.o : $(OE) $(CMN)HTAAServ.c $(CMN)HTAAServ.h \

+	$(CMN)HTAAUtil.h $(CMN)HTAAFile.h $(CMN)HTPasswd.h \

+	 $(CMN)HTGroup.h $(CMN)HTACL.h $(CMN)HTAuth.h \

+	 $(CMN)HTUU.h $(CMN)HTParse.h $(CMN)HTList.h \

+	 $(CMN)HTUtils.h $(CMN)HTString.h $(CMN)HTRules.h \

+	 $(CMN)HTAAProt.h $(CMN)HTAssoc.h $(CMN)HTLex.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAAServ.c

+

+$(LOB)/HTAABrow.o : $(OE) $(CMN)HTAABrow.c $(CMN)HTAABrow.h \

+	 $(CMN)HTAAUtil.h $(CMN)HTUU.h \

+	 $(CMN)HTUtils.h $(CMN)HTString.h \

+	 $(CMN)HTParse.h $(CMN)HTList.h $(CMN)HTAlert.h \

+	 $(CMN)HTAssoc.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAABrow.c

+

+$(LOB)/HTAAProt.o : $(OE) $(CMN)HTAAProt.c $(CMN)HTAAProt.h \

+	 $(CMN)HTUtils.h $(CMN)HTAAUtil.h $(CMN)HTAAFile.h \

+	 $(CMN)HTAssoc.h $(CMN)HTLex.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAAProt.c

+

+$(LOB)/HTAssoc.o : $(OE) $(CMN)HTAssoc.c $(CMN)HTAssoc.h \

+	$(CMN)HTUtils.h $(CMN)HTString.h $(CMN)HTList.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAssoc.c

+

+$(LOB)/HTLex.o : $(OE) $(CMN)HTLex.c $(CMN)HTLex.h $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTLex.c

+

+$(LOB)/HTUU.o : $(OE) $(CMN)HTUU.c $(CMN)HTUU.h $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTUU.c

+

+

+#	Communications & Files

+

+$(LOB)/HTTP.o : $(OE) $(CMN)HTTP.c $(CMN)HTUtils.h $(CMN)HTAABrow.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTTP.c

+

+$(LOB)/HTTCP.o : $(OE) $(CMN)HTTCP.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTTCP.c

+

+$(LOB)/HTFile.o : $(OE) $(CMN)HTFile.c $(CMN)HTUtils.h \

+	 $(CMN)HTMLDTD.h $(CMN)HTAAServ.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTFile.c

+

+$(LOB)/HTBTree.o : $(OE) $(CMN)HTBTree.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTBTree.c

+

+$(LOB)/HTFTP.o : $(OE) $(CMN)HTFTP.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTFTP.c

+

+$(LOB)/HTAccess.o : $(OE)  $(CMN)HTAccess.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTAccess.c

+

+$(LOB)/HTParse.o : $(OE) $(CMN)HTParse.c $(CMN)HTUtils.h

+	$(CC) -c -o $@ $(CFLAGS2) $(CMN)HTParse.c

+

diff --git a/WWW/Library/djgpp/makefile b/WWW/Library/djgpp/makefile
new file mode 100644
index 00000000..2d096a16
--- /dev/null
+++ b/WWW/Library/djgpp/makefile
@@ -0,0 +1,29 @@
+#  Make WWW under unix for a.n.other unix system (bsd)
+#   Use this as a template
+
+# For W3 distribution, machine type for subdirectories
+WWW_MACH = djgpp
+
+# The ASIS repository's name for the machine we are on
+ASIS_MACH = hardware/os
+
+CFLAGS = -O -DEXP_CHARTRANS -DCOLOR_CURSES -DDOSPATH -DNOUSERS -DDEBUG -I../../../djgpp/tcplib/include -I../../../djgpp/tcplib/include/tcp
+LFLAGS =
+CC = gcc
+
+# Directory for installed binary:
+BINDIR = /usr/local/bin
+
+# Where is the W3 object library to be installed (not normally done)?
+LIBDIR = $(WWW)/Library/Implementation/$(WWW_MACH)
+
+#_________________ OK if normal W3 distribution
+# Where is the WWW source root?
+WWW = ../..
+
+#  Where should temporary (object) files go?
+WTMP = ../..
+
+include $(WWW)/Library/Implementation/Version.make
+#include $(WWW)/Library/Implementation/CommonMakefile
+include ./CommonMakefile
diff --git a/WWW/Library/unix/Makefile b/WWW/Library/unix/Makefile
index c8d32fd9..e894af92 100644
--- a/WWW/Library/unix/Makefile
+++ b/WWW/Library/unix/Makefile
@@ -26,5 +26,5 @@ WWW = ../..
 WTMP = ../..
 
 
+include $(WWW)/Library/Implementation/Version.make
 include $(WWW)/Library/Implementation/CommonMakefile
-
diff --git a/WWW/Library/unix/makefile.in b/WWW/Library/unix/makefile.in
new file mode 100644
index 00000000..ea576adc
--- /dev/null
+++ b/WWW/Library/unix/makefile.in
@@ -0,0 +1,54 @@
+#  Make WWW under unix for a.n.other unix system (bsd)
+#   Use this as a template
+
+# For W3 distribution, machine type for subdirectories
+WWW_MACH = unix
+
+# The ASIS repository's name for the machine we are on
+ASIS_MACH = hardware/os
+
+LFLAGS =
+
+prefix		= @prefix@
+exec_prefix	= @exec_prefix@
+srcdir		= @srcdir@
+VPATH		= $(srcdir)
+
+LYFLAGS		= # FIXME: set in parent makefile
+
+CC		= @CC@
+CPPOPTS		= @DEFS@ @CPPFLAGS@ $(LYFLAGS)
+CFLAGS		= $(CPPOPTS) @CFLAGS@
+
+# Directory for installed binary:
+BINDIR		= @bindir@
+
+# Where is the W3 object library to be installed (not normally done)?
+LIBDIR = $(WWW)/Library/Implementation/$(WWW_MACH)
+
+#_________________ OK if normal W3 distribution
+# Where is the WWW source root?
+WWW = ../..
+
+#  Where should temporary (object) files go?
+WTMP = ../..
+
+@make_include_left@$(WWW)/Library/Implementation/Version.make@make_include_right@
+@make_include_left@$(WWW)/Library/Implementation/CommonMakefile@make_include_right@
+
+# Override values set in CommonMakefile
+
+RANLIB	= @RANLIB@
+
+all : $(LOB)/libwww.a
+
+.SUFFIXES: .i .h .html
+
+.c.o:
+@SHOW_CC@
+	@ECHO_CC@$(CC) $(CPPOPTS) $(CFLAGS) -c $(srcdir)/$*.c
+
+.c.i:
+@SHOW_CC@
+	@ECHO_CC@$(CPP) -C $(CPPOPTS) $*.c >$@
+
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 00000000..a53e46b5
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,737 @@
+dnl Macros for auto-configure script.
+dnl written feb/1997
+dnl by T.E.Dickey <dickey@clark.net>
+dnl and Jim Spath <jspath@mail.bcpl.lib.md.us>
+
+dnl ---------------------------------------------------------------------------
+dnl Add an include-directory to $CPPFLAGS.  Don't add /usr/include, since it's
+dnl redundant.  Also, don't add /usr/local/include if we're using gcc.
+AC_DEFUN([CF_ADD_INCDIR],
+[
+for cf_add_incdir in $1
+do
+	while true
+	do
+		case $cf_add_incdir in
+		/usr/include) # (vi
+			;;
+		/usr/local/include) # (vi
+			test -z "$GCC" && CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+			;;
+		*) # (vi
+			CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+			;;
+		esac
+		cf_top_incdir=`echo $cf_add_incdir | sed -e 's:/include/.*$:/include:'`
+		test "$cf_top_incdir" = "$cf_add_incdir" && break
+		cf_add_incdir="$cf_top_incdir"
+	done
+done
+])
+dnl ---------------------------------------------------------------------------
+dnl Check for existence of alternate-character-set support in curses, so we
+dnl can decide to use it for box characters.
+dnl 
+AC_DEFUN([CF_ALT_CHAR_SET],
+[
+AC_MSG_CHECKING([if curses supports alternate-character set])
+AC_CACHE_VAL(cf_cv_alt_char_set,[
+	AC_TRY_LINK([
+#include <curses.h>
+	],[
+	chtype x = acs_map['l']
+	],
+	[cf_cv_alt_char_set=yes],  
+	[cf_cv_alt_char_set=no])])
+AC_MSG_RESULT($cf_cv_alt_char_set)
+test $cf_cv_alt_char_set = yes && AC_DEFINE(ALT_CHAR_SET)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Allow user to disable a normally-on option.
+AC_DEFUN([CF_ARG_DISABLE],
+[CF_ARG_OPTION($1,[$2 (default: on)],[$3],[$4],yes)])dnl
+dnl ---------------------------------------------------------------------------
+dnl Allow user to enable a normally-off option.
+AC_DEFUN([CF_ARG_ENABLE],
+[CF_ARG_OPTION($1,[$2 (default: off)],[$3],[$4],no)])dnl
+dnl ---------------------------------------------------------------------------
+dnl Restricted form of AC_ARG_ENABLE that ensures user doesn't give bogus
+dnl values.
+dnl
+dnl Parameters:
+dnl $1 = option name
+dnl $2 = help-string 
+dnl $3 = action to perform if option is not default
+dnl $4 = action if perform if option is default
+dnl $5 = default option value (either 'yes' or 'no')
+AC_DEFUN([CF_ARG_OPTION],
+[AC_ARG_ENABLE($1,[$2],[test "$enableval" != ifelse($5,no,yes,no) && enableval=ifelse($5,no,no,yes)
+  if test "$enableval" != "$5" ; then
+ifelse($3,,[    :]dnl
+,[    $3]) ifelse($4,,,[
+  else
+    $4])
+  fi],[enableval=$5 ifelse($4,,,[
+  $4
+])dnl
+  ])])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check if curses supports color.  (Note that while SVr3 curses supports
+dnl color, it does this differently from SVr4 curses; more work would be needed
+dnl to accommodate SVr3).
+dnl 
+AC_DEFUN([CF_COLOR_CURSES],
+[
+AC_MSG_CHECKING(if curses supports color attributes)
+AC_CACHE_VAL(cf_cv_color_curses,[
+	AC_TRY_LINK([
+#include <curses.h>
+],
+	[has_colors();
+	 start_color();
+	 wbkgd(curscr, getbkgd(stdscr)); /* X/Open XPG4 aka SVr4 Curses */
+	],
+	[cf_cv_color_curses=yes],
+	[cf_cv_color_curses=no])
+	])
+AC_MSG_RESULT($cf_cv_color_curses)
+test $cf_cv_color_curses = yes && AC_DEFINE(COLOR_CURSES)
+])
+dnl ---------------------------------------------------------------------------
+dnl Look for the curses libraries.  Older curses implementations may require
+dnl termcap/termlib to be linked as well.
+AC_DEFUN([CF_CURSES_LIBS],[
+AC_CHECK_FUNC(initscr,,[
+if test -d /usr/5lib ; then
+	# SunOS 3.x or 4.x
+	CPPFLAGS="$CPPFLAGS -I/usr/5include"
+	LIBS="$LIBS -L/usr/5lib"
+# elif test -d /usr/ccs/lib ; then
+# 	# Solaris 5.x
+# 	LIBS="$LIBS -L/usr/ccs/lib -R/usr/ccs/lib"
+fi
+cf_save_LIBS="$LIBS"
+AC_CHECK_LIB(termcap, tgoto,[
+	LIBS="-ltermcap $cf_save_LIBS"
+	AC_CHECK_LIB(curses,initscr,,[
+		AC_CHECK_LIB(cursesX,initscr,,[
+			AC_CHECK_LIB(jcurses,initscr,,[
+				AC_ERROR(cannot link curses)])])])
+	],[
+	AC_CHECK_LIB(curses,initscr,,[
+		AC_ERROR(cannot link curses)])])
+])])
+dnl ---------------------------------------------------------------------------
+dnl Solaris 2.x curses provides a "performance" tradeoff according to whether
+dnl CURS_PERFORMANCE is defined.  If defined, the implementation defines macros
+dnl that access the WINDOW structure.  Otherwise, function calls are used.
+AC_DEFUN([CF_CURS_PERFORMANCE],
+[
+AC_MSG_CHECKING([for curses performance tradeoff])
+AC_CACHE_VAL(cf_cv_curs_performance,[
+    cf_cv_curs_performance=no
+    AC_TRY_COMPILE([
+#include <curses.h>],[
+#if defined(wbkgdset) && defined(clearok) && defined(getbkgd)
+	int x = ERR;
+#else
+	int x = ;	/* force an error */
+#endif
+	],[
+	AC_TRY_COMPILE([
+#define CURS_PERFORMANCE
+#include <curses.h>],[
+#if defined(wbkgdset) && defined(clearok) && defined(getbkgd)
+	int x = ;	/* force an error */
+#else
+	int x = ERR;
+#endif
+	],[cf_cv_curs_performance=yes])])])
+AC_MSG_RESULT($cf_cv_curs_performance)
+test $cf_cv_curs_performance = yes && AC_DEFINE(CURS_PERFORMANCE)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for a program in the given list $3, defining the corresponding
+dnl program variable $2.
+dnl
+AC_DEFUN([CF_DEFINE_PROG],[
+AC_MSG_CHECKING(for $1)
+AC_CACHE_VAL(cf_cv_$2,[
+	cf_cv_$2=unknown
+	for cv_path in $3
+	do
+		if test -f $cv_path ; then
+			cf_cv_$2=$cv_path
+			break
+		fi
+	done
+	])
+AC_MSG_RESULT($cf_cv_$2)
+AC_DEFINE_UNQUOTED($2,"$cf_cv_$2")
+])
+dnl ---------------------------------------------------------------------------
+dnl
+AC_DEFUN([CF_ERRNO],
+[
+AC_MSG_CHECKING([for errno external decl])
+AC_CACHE_VAL(cf_cv_extern_errno,[
+    AC_TRY_COMPILE([
+#include <errno.h>],
+        [int x = errno],
+        [cf_cv_extern_errno=yes],
+        [cf_cv_extern_errno=no])])
+AC_MSG_RESULT($cf_cv_extern_errno)
+test $cf_cv_extern_errno = no && AC_DEFINE(DECL_ERRNO)
+])dnl
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([CF_FANCY_CURSES],
+[
+AC_MSG_CHECKING(if curses supports fancy attributes)
+AC_CACHE_VAL(cf_cv_fancy_curses,[
+	AC_TRY_LINK([
+#include <curses.h>
+],
+	[attrset(A_UNDERLINE|A_BOLD|A_REVERSE);
+	 wattrset(stdscr, A_BLINK|A_DIM);
+	 attroff(A_BOLD);
+	 keypad(stdscr,TRUE);
+	],
+	[cf_cv_fancy_curses=yes],
+	[cf_cv_fancy_curses=no])
+	])
+AC_MSG_RESULT($cf_cv_fancy_curses)
+test $cf_cv_fancy_curses = yes && AC_DEFINE(FANCY_CURSES)
+])
+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:
+dnl
+dnl	-Wconversion (useful in older versions of gcc, but not in gcc 2.7.x)
+dnl	-Wredundant-decls (system headers make this too noisy)
+dnl	-Wtraditional (combines too many unrelated messages, only a few useful)
+dnl	-pedantic
+dnl
+dnl FIXME: the following are useful, but Lynx's not there yet
+dnl	-Wcast-qual
+dnl	-Wwrite-strings
+dnl
+AC_DEFUN([CF_GCC_WARNINGS],
+[EXTRA_CFLAGS=""
+if test -n "$GCC"
+then
+	changequote(,)dnl
+	cat > conftest.$ac_ext <<EOF
+#line __oline__ "configure"
+int main(int argc, char *argv[]) { return argv[argc-1] == 0; }
+EOF
+	changequote([,])dnl
+	AC_CHECKING([for gcc warning options])
+	cf_save_CFLAGS="$CFLAGS"
+	EXTRA_CFLAGS="-W -Wall"
+	for cf_opt in \
+		Wbad-function-cast \
+		Wcast-align \
+		Winline \
+		Wmissing-declarations \
+		Wmissing-prototypes \
+		Wnested-externs \
+		Wpointer-arith \
+		Wshadow \
+		Wstrict-prototypes
+	do
+		CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+		if AC_TRY_EVAL(ac_compile); then
+			test -n "$verbose" && AC_MSG_RESULT(... -$cf_opt)
+			EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+		fi
+	done
+	rm -f conftest*
+	CFLAGS="$cf_save_CFLAGS"
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Construct a search-list for a nonstandard header-file
+AC_DEFUN([CF_HEADER_PATH],
+[$1=""
+test "$prefix" != NONE       && $1="$prefix/include $prefix/include/$2"
+test "$prefix" != /usr/local && $1="[$]$1 /usr/local/include /usr/local/include/$2"
+test "$prefix" != /usr       && $1="[$]$1 /usr/include /usr/include/$2"
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check if we've got setlocale() and its header, <locale.h>
+AC_DEFUN([CF_LOCALE],
+[
+AC_MSG_CHECKING(for setlocale())
+AC_CACHE_VAL(cf_cv_locale,[
+AC_TRY_LINK([#include <locale.h>],
+	[setlocale(LC_ALL, "")],
+	[cf_cv_locale=yes],
+	[cf_cv_locale=no])
+	])
+AC_MSG_RESULT($cf_cv_locale)
+test $cf_cv_locale = yes && AC_DEFINE(LOCALE)
+])
+dnl ---------------------------------------------------------------------------
+dnl Check for the use of 'include' in 'make' (BSDI is a special case)
+dnl The symbol $ac_make is set in AC_MAKE_SET, as a side-effect.
+AC_DEFUN([CF_MAKE_INCLUDE],
+[
+AC_MSG_CHECKING(for style of include in makefiles)
+make_include_left=""
+make_include_right=""
+make_include_quote=""
+for cf_include in "include" ".include" "!include"
+do
+	for cf_quote in ' ' '"'
+	do
+		cat >WWW/Library/unix/makefile <<CF_EOF
+${cf_include} ${cf_quote}../../Library/Implementation/Version.make${cf_quote}
+all :
+	@echo 'cf_make_include=OK'
+CF_EOF
+	cf_make_include=""
+	eval `cd WWW/Library/unix && ${MAKE-make} 2>/dev/null | grep cf_make_include=OK`
+	if test -n "$cf_make_include"; then
+		make_include_left="$cf_include"
+		make_include_quote="$cf_quote"
+		break
+	fi
+	done
+	test -n "$cf_make_include" && break
+done
+
+if test -z "$make_include_left" ; then
+	AC_ERROR(Your $ac_make program does not support includes)
+fi
+if test -n "$make_include_quote" ; then
+	make_include_left="$make_include_left $make_include_quote"
+	make_include_right="$make_include_quote"
+fi
+AC_MSG_RESULT(${make_include_left}file${make_include_right})
+AC_SUBST(make_include_left)
+AC_SUBST(make_include_right)
+])
+dnl ---------------------------------------------------------------------------
+dnl Look for the SVr4 curses clone 'ncurses' in the standard places, adjusting
+dnl the CPPFLAGS variable.
+dnl
+dnl The header files may be installed as either curses.h, or ncurses.h
+dnl (obsolete).  If not installed for overwrite, the curses.h file would be
+dnl in an ncurses subdirectory (e.g., /usr/include/ncurses), but someone may
+dnl have installed overwriting the vendor's curses.  Only very old versions
+dnl (pre-1.9.2d, the first autoconf'd version) of ncurses don't define
+dnl either __NCURSES_H or NCURSES_VERSION in the header.
+dnl
+dnl If the installer has set $CFLAGS or $CPPFLAGS so that the ncurses header
+dnl is already in the include-path, don't even bother with this, since we cannot
+dnl easily determine which file it is.  In this case, it has to be <curses.h>.
+dnl
+AC_DEFUN([CF_NCURSES_CPPFLAGS],
+[
+AC_MSG_CHECKING(for ncurses header file)
+AC_CACHE_VAL(cf_cv_ncurses_header,[
+	AC_TRY_COMPILE([#include <curses.h>],
+	[printf("%s\n", NCURSES_VERSION)],
+	[cf_cv_ncurses_header=predefined],[
+	CF_HEADER_PATH(cf_search,ncurses)
+	test -n "$verbose" && echo
+	for cf_incdir in $cf_search
+	do
+		for cf_header in \
+			curses.h \
+			ncurses.h
+		do
+			if egrep "NCURSES" $cf_incdir/$cf_header >/dev/null 2>&1; then
+				cf_cv_ncurses_header=$cf_incdir/$cf_header 
+				test -n "$verbose" && echo $ac_n "	... found $ac_c" 1>&6
+				break
+			fi
+			test -n "$verbose" && echo "	... tested $cf_incdir/$cf_header" 1>&6
+		done
+		test -n "$cf_cv_ncurses_header" && break
+	done
+	test -z "$cf_cv_ncurses_header" && AC_ERROR(not found)
+	])])
+AC_MSG_RESULT($cf_cv_ncurses_header)
+AC_DEFINE(NCURSES)
+
+changequote(,)dnl
+cf_incdir=`echo $cf_cv_ncurses_header | sed -e 's:/[^/]*$::'`
+changequote([,])dnl
+
+case $cf_cv_ncurses_header in # (vi
+*/ncurses.h)
+	AC_DEFINE(NCURSESHEADER)
+	;;
+esac
+
+case $cf_cv_ncurses_header in # (vi
+predefined) # (vi
+	;;
+*)
+	CF_ADD_INCDIR($cf_incdir)
+	;;
+esac
+])dnl
+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.
+dnl Some distributions have gpm linked with (bsd) curses, which makes it
+dnl unusable with ncurses.
+AC_DEFUN([CF_NCURSES_LIBS],
+[AC_CHECK_FUNC(initscr,,[
+AC_REQUIRE([CF_NCURSES_CPPFLAGS])
+cf_save_LIBS="$LIBS"
+case $cf_cv_ncurses_header in
+*/ncurses.h) # (vi
+	cf_header=ncurses.h
+	;;
+*) # (vi
+	cf_header=curses.h
+	;;
+esac
+AC_CHECK_LIB(gpm,Gpm_Open,[
+	AC_CHECK_LIB(gpm,initscr,[
+		# don't try to link with gpm, since it contains curses
+		AC_CHECK_LIB(ncurses,initscr)
+		],[
+		AC_MSG_CHECKING(if ncurses needs -lgpm to link)
+		LIBS="-lncurses $cf_save_LIBS"
+		AC_TRY_LINK([#include <$cf_header>],
+			[initscr()],
+			[cf_need_gpm=no],
+			[LIBS="-lncurses -lgpm $cf_save_LIBS"
+			AC_TRY_LINK([#include <$cf_header>],
+				[initscr()],
+				[cf_need_gpm=yes],
+				[AC_ERROR(cannot link -lncurses)])])
+		AC_MSG_RESULT($cf_need_gpm)
+		])],
+	[AC_CHECK_LIB(ncurses,initscr)])
+])])
+dnl ---------------------------------------------------------------------------
+dnl After checking for functions in the default $LIBS, make a further check
+dnl for the functions that are netlib-related (these aren't always in the
+dnl libc, etc., and have to be handled specially because there are conflicting
+dnl and broken implementations.
+dnl Common library requirements (in order):
+dnl	-lresolv -lsocket -lnsl
+dnl	-lnsl -lsocket
+dnl	-lsocket
+dnl	-lbsd
+AC_DEFUN([CF_NETLIBS],[
+NETLIBS=""
+AC_CHECK_FUNC(gethostname,[AC_DEFINE(HAVE_GETHOSTNAME)],[
+	AC_CHECK_LIB(nsl,gethostname,
+		[AC_DEFINE(HAVE_GETHOSTNAME)
+		NETLIBS="-lnsl $NETLIBS"],
+		AC_CHECK_LIB(socket,gethostname,
+		[AC_DEFINE(HAVE_GETHOSTNAME)
+		NETLIBS="-lsocket $NETLIBS"]),
+		[$NETLIBS])])
+AC_CHECK_FUNC(socket,[AC_DEFINE(HAVE_SOCKET)],[
+	AC_CHECK_LIB(socket,socket,
+		[AC_DEFINE(HAVE_SOCKET)
+		NETLIBS="-lsocket $NETLIBS"],
+		AC_CHECK_LIB(bsd,socket,
+			[AC_DEFINE(HAVE_SOCKET)
+			NETLIBS="-lbsd $NETLIBS"]),
+		[$NETLIBS])])
+AC_CHECK_FUNC(gethostbyname,[AC_DEFINE(HAVE_GETHOSTBYNAME)],[
+	AC_CHECK_LIB(nsl,gethostbyname,
+		[AC_DEFINE(HAVE_GETHOSTBYNAME)
+		NETLIBS="-lnsl $NETLIBS"],,
+		[$NETLIBS])])
+AC_CHECK_FUNC(strcasecmp,[AC_DEFINE(HAVE_STRCASECMP)],[
+	AC_CHECK_LIB(resolv,strcasecmp,
+		[AC_DEFINE(HAVE_STRCASECMP)
+		NETLIBS="-lresolv $NETLIBS"],,
+		[$NETLIBS])])
+LIBS="$LIBS $NETLIBS"
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for a given program, defining corresponding symbol.
+dnl	$1 = environment variable, which is suffixed by "_PATH" in the #define.
+dnl	$2 = program name to find.
+dnl
+dnl If there is more than one token in the result, #define the remaining tokens
+dnl to $1_ARGS.  We need this for 'install' in particular.
+dnl
+dnl FIXME: we should allow this to be overridden by environment variables
+dnl
+AC_DEFUN([CF_PATH_PROG],[
+test -z "[$]$1" && $1=$2
+if test "$with_full_paths" = yes ; then
+	AC_PATH_PROG($1,$2,[$]$1)
+else
+	AC_MSG_CHECKING(for $2)
+	AC_MSG_RESULT([$]$1)
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_$1
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+AC_DEFINE_UNQUOTED($1_PATH,"$cf_path_prog")
+test -n "$cf_path_args" && AC_DEFINE_UNQUOTED($1_ARGS,"$cf_path_args")
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for broken definition of 'remove()'.  This is (in particular) broken
+dnl on the older version of SCO (I'd cite version if I knew where to look) by
+dnl having <stdio.h> #define remove to __unlink, which appears in no library.
+dnl
+dnl Fortuitously, we can combine this with a more general test: do we have
+dnl 'unlink()' but no 'remove()'.  Note, however, that we cannot simply #define
+dnl remove to unlink, but have to make a fallback function.
+dnl
+AC_DEFUN([CF_REMOVE_BROKEN],
+[
+AC_MSG_CHECKING(for broken/missing definition of remove)
+AC_CACHE_VAL(cf_cv_baddef_remove,[
+AC_TRY_LINK(
+	[#include <stdio.h>],
+	[remove("dummy")],
+	[cf_cv_baddef_remove=no],
+	[AC_TRY_LINK(
+		[#include <stdio.h>
+		int __unlink(name) { return unlink(name); } ],
+		[remove("dummy")],
+		[cf_cv_baddef_remove=yes],
+		[cf_cv_baddef_remove=unknown])
+	])
+])
+AC_MSG_RESULT($cf_cv_baddef_remove)
+test "$cf_cv_baddef_remove" = yes && AC_DEFINE(NEED_REMOVE)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for definitions & structures needed for window size-changing
+dnl FIXME: check that this works with "snake" (HP-UX 10.x)
+AC_DEFUN([CF_SIZECHANGE],
+[
+AC_MSG_CHECKING([declaration of size-change])
+AC_CACHE_VAL(cf_cv_sizechange,[
+    cf_cv_sizechange=unknown
+    cf_save_CFLAGS="$CFLAGS"
+
+for cf_opts in "" "NEED_PTEM_H"
+do
+
+    CFLAGS="$cf_save_CFLAGS"
+    test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts"
+    AC_TRY_COMPILE([#include <sys/types.h>
+#if HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+#if NEED_PTEM_H
+/* This is a workaround for SCO:  they neglected to define struct winsize in
+ * termios.h -- it's only in termio.h and ptem.h
+ */
+#include        <sys/stream.h>
+#include        <sys/ptem.h>
+#endif
+#if !defined(sun) || !defined(HAVE_TERMIOS_H)
+#include <sys/ioctl.h>
+#endif
+],[
+#ifdef TIOCGSIZE
+	struct ttysize win;	/* FIXME: what system is this? */
+	int y = win.ts_lines;
+	int x = win.ts_cols;
+#else
+#ifdef TIOCGWINSZ
+	struct winsize win;
+	int y = win.ws_row;
+	int x = win.ws_col;
+#else
+	no TIOCGSIZE or TIOCGWINSZ
+#endif /* TIOCGWINSZ */
+#endif /* TIOCGSIZE */
+	],
+	[cf_cv_sizechange=yes],
+	[cf_cv_sizechange=no])
+
+	CFLAGS="$cf_save_CFLAGS"
+	if test "$cf_cv_sizechange" = yes ; then
+		test -n "$cf_opts" && AC_DEFINE($cf_opts)
+		break
+	fi
+done
+	])
+AC_MSG_RESULT($cf_cv_sizechange)
+test $cf_cv_sizechange = no && AC_DEFINE(HAVE_SIZECHANGE)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Look for the slang header files in the standard places, adjusting the
+dnl CPPFLAGS variable.
+dnl
+AC_DEFUN([CF_SLANG_CPPFLAGS],
+[
+AC_MSG_CHECKING(for slang header file)
+AC_CACHE_VAL(cf_cv_slang_header,[
+	CF_HEADER_PATH(cf_search,slang)
+	for cf_incdir in $cf_search
+	do
+		for cf_header in \
+			slang.h
+		do
+			if egrep "SLANG_VERSION" $cf_incdir/$cf_header >/dev/null 2>&1; then
+				cf_cv_slang_header=$cf_incdir/$cf_header 
+				break
+			fi
+		done
+		test -n "$cf_cv_slang_header" && break
+	done
+	test -z "$cf_cv_slang_header" && AC_ERROR(not found)
+	])
+AC_MSG_RESULT($cf_cv_slang_header)
+AC_DEFINE(USE_SLANG)
+changequote(,)dnl
+cf_incdir=`echo $cf_cv_slang_header | sed -e 's:/[^/]*$::'`
+changequote([,])dnl
+CF_ADD_INCDIR($cf_incdir)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Look for the slang library (it needs the math-library because it uses
+dnl trig functions).
+AC_DEFUN([CF_SLANG_LIBS],
+[
+	AC_CHECK_FUNC(SLtt_get_screen_size,,[
+	AC_CHECK_LIB(slang,SLtt_get_screen_size,
+		[LIBS="-lslang $LIBS"],
+		[AC_CHECK_LIB(slang,SLtt_get_screen_size,
+			[LIBS="-lslang -lm $LIBS"],
+			AC_ERROR(cannot link -lslang),"-lm")])])
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for declaration of sys_errlist in one of stdio.h and errno.h.
+dnl Declaration of sys_errlist on BSD4.4 interferes with our declaration.
+dnl Reported by Keith Bostic.
+AC_DEFUN([CF_SYS_ERRLIST],
+[
+AC_MSG_CHECKING([declaration of sys_errlist])
+AC_CACHE_VAL(cf_cv_dcl_sys_errlist,[
+    AC_TRY_COMPILE([
+#include <stdio.h>
+#include <sys/types.h>
+#include <errno.h> ],
+    [char *c = (char *) *sys_errlist],
+    [cf_cv_dcl_sys_errlist=yes],
+    [cf_cv_dcl_sys_errlist=no])])
+AC_MSG_RESULT($cf_cv_dcl_sys_errlist)
+test $cf_cv_dcl_sys_errlist = no && AC_DEFINE(DECL_SYS_ERRLIST)
+])dnl
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([CF_SYSTEM_MAIL_FLAGS], 
+[
+AC_MSG_CHECKING([system mail flags])
+AC_CACHE_VAL(cf_cv_system_mail_flags,[
+	case $cf_cv_SYSTEM_MAIL in
+	*/mmdf/*)
+		[cf_cv_system_mail_flags="-mlruxto,cc\\\\*"]
+        	;; 
+	*)
+        	[cf_cv_system_mail_flags="-t -oi"]
+	esac
+	])
+AC_MSG_RESULT($cf_cv_system_mail_flags)
+AC_DEFINE_UNQUOTED(SYSTEM_MAIL_FLAGS, "$cf_cv_system_mail_flags")
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Look for termcap libraries, needed by some versions of slang.
+AC_DEFUN([CF_TERMCAP_LIBS],
+[
+AC_CACHE_VAL(cf_cv_lib_termcap,[
+cf_cv_lib_termcap=none
+# HP-UX 9.x terminfo has setupterm, but no tigetstr.
+if test "$termlib" = none; then
+	AC_CHECK_LIB(termlib, tigetstr, [LIBS="$LIBS -ltermlib" cf_cv_lib_termcap=terminfo])
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	AC_CHECK_LIB(termlib, tgoto, [LIBS="$LIBS -ltermlib" cf_cv_lib_termcap=termcap])
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	# allow curses library for broken AIX system.
+	AC_CHECK_LIB(curses, initscr, [LIBS="$LIBS -lcurses" cf_cv_lib_termcap=termcap])
+	AC_CHECK_LIB(termcap, tgoto, [LIBS="$LIBS -ltermcap" cf_cv_lib_termcap=termcap])
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	AC_CHECK_LIB(termcap, tgoto, [LIBS="$LIBS -ltermcap" cf_cv_lib_termcap=termcap])
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	AC_CHECK_LIB(ncurses, tgoto, [LIBS="$LIBS -lncurses" cf_cv_lib_termcap=ncurses])
+fi
+])
+if test "$cf_cv_lib_termcap" = none; then
+	AC_ERROR([Can't find -ltermlib, -lcurses, or -ltermcap])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check if including both termio.h and termios.h die like on DG.UX
+AC_DEFUN([CF_TERMIO_AND_TERMIOS],
+[
+AC_MSG_CHECKING([termio.h and termios.h])
+AC_CACHE_VAL(cf_cv_termio_and_termios,[
+    AC_TRY_COMPILE([
+#if HAVE_TERMIO_H
+#include <termio.h>
+#endif
+#if HAVE_TERMIOS_H
+#include <termios.h>
+#endif ],
+    [putchar (0x0a)],
+    [cf_cv_termio_and_termios=yes],
+    [cf_cv_termio_and_termios=no])])
+AC_MSG_RESULT($cf_cv_termio_and_termios)
+test $cf_cv_termio_and_termios = no && AC_DEFINE(TERMIO_AND_TERMIOS)
+])dnl
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([CF_TTYTYPE],
+[
+AC_MSG_CHECKING(if ttytype is declared in curses library)
+AC_CACHE_VAL(cf_cv_have_ttytype,[
+	AC_TRY_LINK([#include <curses.h>],
+	[char *x = &ttytype[1]],
+	[cf_cv_have_ttytype=yes],
+	[cf_cv_have_ttytype=no])
+	])
+AC_MSG_RESULT($cf_cv_have_ttytype)
+test $cf_cv_have_ttytype = yes && AC_DEFINE(HAVE_TTYTYPE)
+])
+dnl ---------------------------------------------------------------------------
+dnl Make an uppercase version of a variable
+dnl $1=uppercase($2)
+AC_DEFUN([CF_UPPER],
+[
+changequote(,)dnl
+$1=`echo $2 | tr '[a-z]' '[A-Z]'`
+changequote([,])dnl
+])dnl
+dnl ---------------------------------------------------------------------------
+AC_DEFUN([CF_UTMP],
+[
+AC_MSG_CHECKING(if struct utmp is declared)
+AC_CACHE_VAL(cf_cv_have_utmp,[
+	AC_TRY_COMPILE([#include <utmp.h>],
+	[struct utmp x; char *y = &x.ut_host[0]],
+	[cf_cv_have_utmp=yes],
+	[AC_TRY_COMPILE([#include <utmpx.h>],
+		[struct utmpx x; char *y = &x.ut_host[0]],
+		[cf_cv_have_utmp=utmpx],
+		[cf_cv_have_utmp=no])
+		])
+	])
+AC_MSG_RESULT($cf_cv_have_utmp)
+test $cf_cv_have_utmp != no && AC_DEFINE(HAVE_UTMP)
+test $cf_cv_have_utmp = utmpx && AC_DEFINE(UTMPX_FOR_UTMP)
+])
diff --git a/config.guess b/config.guess
new file mode 100755
index 00000000..e9e44559
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,693 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# 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.
+#
+# 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.
+
+# Written by Per Bothner <bothner@cygnus.com>.
+# The master version of this file is at the FSF in /home/gd/gnu/lib.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit system type (host/target name).
+#
+# Only a few systems have been added to this list; please add others
+# (but try to keep the structure clean).
+#
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 8/24/94.)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+trap 'rm -f dummy.c dummy.o dummy; exit 1' 1 2 15
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    alpha:OSF1:*:*)
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-cbm-sysv4
+	exit 0;;
+    amiga:NetBSD:*:*)
+      echo m68k-cbm-netbsd${UNAME_RELEASE}
+      exit 0 ;;
+    amiga:OpenBSD:*:*)
+      echo m68k-cbm-openbsd${UNAME_RELEASE}
+      exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
+	# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    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 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	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 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:NetBSD:*:*)
+	echo m68k-atari-netbsd${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:OpenBSD:*:*)
+	echo m68k-atari-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3*:NetBSD:*:*)
+	echo m68k-sun-netbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3*:OpenBSD:*:*)
+	echo m68k-sun-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:NetBSD:*:*)
+	echo m68k-apple-netbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-apple-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	sed 's/^	//' << EOF >dummy.c
+	int main (argc, argv) int argc; char **argv; {
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	${CC-cc} dummy.c -o dummy \
+	  && ./dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && rm dummy.c dummy && exit 0
+	rm -f dummy.c dummy
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+        if [ $UNAME_PROCESSOR = mc88100 -o $UNAME_PROCESSOR = mc88110 ] ; then
+	if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx \
+	     -o ${TARGET_BINARY_INTERFACE}x = x ] ; then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	fi
+        else echo i586-dg-dgux${UNAME_RELEASE}
+        fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????: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 '
+    i?86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		sed 's/^		//' << EOF >dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+		rm -f dummy.c dummy
+		echo rs6000-ibm-aix3.2.5
+	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 ;;
+    *:AIX:*:4)
+	if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=4.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC NetBSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[3478]??:HP-UX:*:*)
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
+	    9000/8?? )            HP_ARCH=hppa1.0 ;;
+	esac
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	sed 's/^	//' << EOF >dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	${CC-cc} dummy.c -o dummy && ./dummy && rm dummy.c dummy && exit 0
+	rm -f dummy.c dummy
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i?86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*X-MP:*:*:*)
+	echo xmp-cray-unicos
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE}
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE}
+	exit 0 ;;
+    CRAY-2:*:*:*)
+	echo cray2-cray-unicos
+        exit 0 ;;
+    F300:UNIX_System_V:*:*)
+        FUJITSU_SYS=`uname -p | tr [A-Z] [a-z] | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "f300-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    F301:UNIX_System_V:*:*)
+       echo f301-fujitsu-uxpv`echo $UNAME_RELEASE | sed 's/ .*//'`
+       exit 0 ;;
+    hp3[0-9][05]:NetBSD:*:*)
+	echo m68k-hp-netbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp3[0-9][05]:OpenBSD:*:*)
+	echo m68k-hp-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    i?86:BSD/386:*:* | *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+    *:NetBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo i386-pc-cygwin32
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin32
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    *:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us.
+	ld_help_string=`ld --help 2>&1`
+	if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
+	  echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
+	elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
+	  echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
+	elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
+	  echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
+	elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
+	  echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
+	elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
+	  echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
+	elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
+	  echo "powerpc-unknown-linux-gnu" ; exit 0
+	elif test "${UNAME_MACHINE}" = "alpha" ; then
+	  echo alpha-unknown-linux-gnu ; exit 0
+	elif test "${UNAME_MACHINE}" = "sparc" ; then
+	  echo sparc-unknown-linux-gnu ; exit 0
+	else
+	  # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
+	  # useful --help.  Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
+	  test ! -d /usr/lib/ldscripts/. \
+	    && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+	  # Determine whether the default compiler is a.out or elf
+	  cat >dummy.c <<EOF
+main(argc, argv)
+int argc;
+char *argv[];
+{
+#ifdef __ELF__
+  printf ("%s-pc-linux-gnu\n", argv[1]);
+#else
+  printf ("%s-pc-linux-gnuaout\n", argv[1]);
+#endif
+  return 0;
+}
+EOF
+	  ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+	  rm -f dummy.c dummy
+	fi ;;
+# 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.
+    i?86:DYNIX/ptx:4*:*)
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
+	fi
+	exit 0 ;;
+    i?86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    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 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    M68*:*:R3V[567]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[34]??:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*: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
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    i?86:LynxOS:2.*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:* | PowerPC:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    *: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 ;;
+    *:*:*:FTX*)
+	# From seanf@swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                           # says <Richard.M.Bartel@ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+cat >dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+  printf ("vax-dec-bsd\n"); exit (0);
+#else
+  printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy && rm dummy.c dummy && exit 0
+rm -f dummy.c dummy
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+#echo '(Unable to guess system type)' 1>&2
+
+exit 1
diff --git a/config.hin b/config.hin
new file mode 100644
index 00000000..48116ae8
--- /dev/null
+++ b/config.hin
@@ -0,0 +1,113 @@
+#undef ALT_CHAR_SET
+#undef CHMOD_PATH		/* CF_PATH_PROG(chmod) */
+#undef COLOR_CURSES		/* defined by CF_COLOR_CURSES */
+#undef COMPRESS_PATH		/* CF_PATH_PROG(compress) */
+#undef COPY_PATH		/* CF_PATH_PROG(cp) */
+#undef CURS_PERFORMANCE
+#undef DEBUG			/* configure --enable-debug */
+#undef DECL_SYS_ERRLIST
+#undef FANCY_CURSES		/* defined by CF_FANCY_CURSES */
+#undef GZIP_PATH		/* CF_PATH_PROG(gzip) */
+#undef HAVE_CBREAK
+#undef HAVE_CUSERID
+#undef HAVE_DIRENT_H		/* defined by AC_HEADER_DIRENT */
+#undef HAVE_FCNTL_H		/* have <fcntl.h> */
+#undef HAVE_GETCWD
+#undef HAVE_KEYPAD
+#undef HAVE_LIMITS_H
+#undef HAVE_PUTENV
+#undef HAVE_SIZECHANGE		/* defined by CF_SIZECHANGE */
+#undef HAVE_STRING_H
+#undef HAVE_SYS_DIR_H		/* defined by AC_HEADER_DIRENT */
+#undef HAVE_SYS_FCNTL_H		/* have <sys/fcntl.h> */
+#undef HAVE_SYS_FILIO_H		/* have <sys/filio.h> */
+#undef HAVE_SYS_NDIR_H		/* defined by AC_HEADER_DIRENT */
+#undef HAVE_TERMIOS
+#undef HAVE_TERMIOS_H		/* have <termios.h> */
+#undef HAVE_TTYTYPE
+#undef HAVE_UNISTD_H		/* have <unistd.h> */
+#undef HAVE_UTMP
+#undef IGNORE_CTRL_C		/* FIXME: make tests? */
+#undef INSTALL_ARGS		/* CF_PATH_PROG(install) */
+#undef INSTALL_PATH		/* CF_PATH_PROG(install) */
+#undef LINUX			/* FIXME: make tests? */
+#undef LOCALE			/* for locale support */
+#undef LY_FIND_LEAKS		/* configure --disable-leaks */
+#undef MKDIR_PATH		/* CF_PATH_PROG(mkdir) */
+#undef MV_PATH			/* CF_PATH_PROG(mv) */
+#undef NCURSES			/* defined for ncurses support */
+#undef NCURSESHEADER		/* defined if we include <ncurses.h> */
+#undef NEED_PTEM_H		/* defined by CF_SIZECHANGE */
+#undef NEED_REMOVE		/* defined by CF_REMOVE_BROKEN */
+#undef NO_PARENT_DIR_REFERENCE	/* configure --disable-parent-dir */
+#undef RM_PATH			/* CF_PATH_PROG(rm) */
+#undef STDC_HEADERS
+#undef SYSTEM_MAIL		/* CF_DEFINE_PROG */
+#undef SYSTEM_MAIL_FLAGS	/* defined by CF_SYSTEM_MAIL_FLAGS */
+#undef SYS_IOCTL_H		/* have <sys/ioctl.h> */
+#undef TAR_PATH			/* CF_PATH_PROG(tar) */
+#undef TERMIO_AND_TERMIOS	/* termio.h and termios.h combo bug */
+#undef TOUCH_PATH		/* CF_PATH_PROG(touch) */
+#undef ULTRIX			/* config.sub */
+#undef UNCOMPRESS_PATH		/* CF_PATH_PROG(gunzip) */
+#undef UNIX
+#undef UNZIP_PATH		/* CF_PATH_PROG(unzip) */
+#undef USE_SLANG
+#undef UTMPX_FOR_UTMP		/* use <utmpx.h> since <utmp.h> not found */
+#undef UUDECODE_PATH		/* CF_PATH_PROG(uudecode) */
+#undef ZCAT_PATH		/* CF_PATH_PROG(zcat) */
+#undef ZIP_PATH			/* CF_PATH_PROG(zip) */
+#undef const			/* defined by AC_C_CONST */
+#undef vfork			/* defined by AC_FUNC_FORK */
+/* FIXME:AIX4 */
+/* FIXME:ALLOW_USERS_TO_CHANGE_EXEC_WITHIN_OPTIONS */
+/* FIXME:ARCHIVE_ONLY */
+/* FIXME:BSDI */
+/* FIXME:CLIX */
+/* FIXME:DECLARE_WAIS_LOGFILES */
+/* FIXME:DGUX */
+/* FIXME:DGUX_OLD */
+/* FIXME:DIRED_SUPPORT */
+/* FIXME:EXEC_LINKS */
+/* FIXME:FALSE=0 */
+/* FIXME:HP_TERMINAL */
+/* FIXME:ISC */
+/* FIXME:LONG_LIST */
+/* FIXME:LY_FIND_LEAKS */
+/* FIXME:NEXT */
+/* FIXME:NOPORT */
+/* FIXME:NO_CHANGE_EXECUTE_PERMS */
+/* FIXME:NO_CPU_LIMIT */
+/* FIXME:NSL_FORK */
+/* FIXME:OK_GZIP */
+/* FIXME:OK_OVERRIDE */
+/* FIXME:OK_PERMIT */
+/* FIXME:OK_TAR */
+/* FIXME:OK_UUDECODE */
+/* FIXME:OK_ZIP */
+/* FIXME:PERFORMANCE */
+/* FIXME:POSIX_JC */
+/* FIXME:PTX2 */
+/* FIXME:REVERSE_CLEAR_SCREEN_PROBLEM */
+/* FIXME:SCO */
+/* FIXME:SGI */
+/* FIXME:SHORTENED_RBIND */
+/* FIXME:SNAKE */
+/* FIXME:SOCKS */
+/* FIXME:SVR4_BSDSELECT */
+/* FIXME:SYSLOG_REQUESTED_URLS */
+/* FIXME:TRUE=1 */
+/* FIXME:UNDERLINE_LINKS */
+/* FIXME:UNIXWARE */
+/* FIXME:USG */
+/* FIXME:_BSD=44 */
+/* FIXME:_BUILTINS */
+/* FIXME:_INCLUDE_AES_SOURCE */
+/* FIXME:_INCLUDE_HPUX_SOURCE */
+/* FIXME:_INCLUDE_POSIX_SOURCE */
+/* FIXME:_INCLUDE_XOPEN_SOURCE */
+/* FIXME:_SYSV3 */
+/* FIXME:__STDC__ */
+/* FIXME:_locp=__lc_locale */
+/* FIXME:loc_t=_LC_locale_t */
+/* This is a template for the configure script, which produces config.h */
diff --git a/config.sub b/config.sub
new file mode 100755
index 00000000..04325249
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,927 @@
+#! /bin/sh
+# Configuration validation subroutine script, version 1.1.
+#   Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# 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
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# 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.
+
+# 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.
+
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+if [ x$1 = x ]
+then
+	echo Configuration name missing. 1>&2
+	echo "Usage: $0 CPU-MFR-OPSYS" 1>&2
+	echo "or     $0 ALIAS" 1>&2
+	echo where ALIAS is a recognized configuration type. 1>&2
+	exit 1
+fi
+
+# First pass through any local machine types.
+case $1 in
+	*local*)
+		echo $1
+		exit 0
+		;;
+	*)
+	;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  linux-gnu*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple)
+		os=
+		basic_machine=$1
+		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
+		| arme[lb] | pyramid \
+		| tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
+		| alpha | we32k | ns16k | clipper | i370 | sh \
+		| powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
+		| pdp11 | mips64el | mips64orion | mips64orionel \
+		| sparc | sparclet | sparclite | sparc64)
+		basic_machine=$basic_machine-unknown
+		;;
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i[3456]86)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
+	      | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
+	      | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
+	      | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
+	      | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
+	      | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
+	      | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
+	      | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-cbm
+		;;
+	amigados)
+		basic_machine=m68k-cbm
+		os=-amigados
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-cbm
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	cray2)
+		basic_machine=cray2-cray
+		os=-unicos
+		;;
+	[ctj]90-cray)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k7[0-9][0-9] | hp7[0-9][0-9] | hp9k8[0-9]7 | hp8[0-9]7)
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i[3456]86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i[3456]86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i[3456]86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i[3456]86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+        pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5)
+		basic_machine=i586-intel
+		;;
+	pentiumpro | p6)
+		basic_machine=i686-intel
+		;;
+	pentium-* | p5-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	k5)
+		# We don't have specific support for AMD's K5 yet, so just call it a Pentium
+		basic_machine=i586-amd
+		;;
+	nexen)
+		# We don't have specific support for Nexgen yet, so just call it a Pentium
+		basic_machine=i586-nexgen
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=rs6000-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+	        ;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+	        ;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+       vpp*|vx|vx-*)
+               basic_machine=f301-fujitsu
+               ;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	xmp)
+		basic_machine=xmp-cray
+		os=-unicos
+		;;
+        xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	mips)
+		basic_machine=mips-mips
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sparc)
+		basic_machine=sparc-sun
+		;;
+        cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-unixware* | svr4*)
+		os=-sysv4
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
+	      | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -linux-gnu* | -uxpv*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-ns2 )
+	        os=-nextstep2
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+        pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-ibm)
+		os=-aix
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigados
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+        *-gould)
+		os=-sysv
+		;;
+        *-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+        *-sgi)
+		os=-irix
+		;;
+        *-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f301-fujitsu)
+		os=-uxpv
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-vxsim* | -vxworks*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
diff --git a/configure b/configure
new file mode 100755
index 00000000..1a728b32
--- /dev/null
+++ b/configure
@@ -0,0 +1,5517 @@
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.12.970309 
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+ac_default_prefix=/usr/local
+ac_help="$ac_help
+  --disable-full-paths    control whether full utility pathnames are used (default: on)"
+ac_help="$ac_help
+  --with-screen=XXX       select screen type
+                          (XXX is curses (default), ncurses or slang)"
+ac_help="$ac_help
+  --disable-parent-dir-refs
+                          disable \"Up-to\" parent-links in directory listings"
+ac_help="$ac_help
+  --disable-echo          develop: display \"compiling\" commands (default: on)"
+ac_help="$ac_help
+  --enable-find-leaks     develop: logic for testing memory leaks (default: off)"
+ac_help="$ac_help
+  --enable-debug          develop: logic for testing memory leaks (default: off)"
+ac_help="$ac_help
+  --enable-warnings       develop: GCC compiler warnings (default: off)"
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  case "$ac_option" in
+  -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) ac_optarg= ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case "$ac_option" in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir="$ac_optarg" ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build="$ac_optarg" ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file="$ac_optarg" ;;
+
+  -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir="$ac_optarg" ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    eval "enable_${ac_feature}=no" ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+    fi
+    ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix="$ac_optarg" ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he)
+    # Omit some internal or obsolete options to make the list less imposing.
+    # This message is too long to be a string in the A/UX 3.1 sh.
+    cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+  --cache-file=FILE       cache test results in FILE
+  --help                  print this message
+  --no-create             do not create output files
+  --quiet, --silent       do not print \`checking...' messages
+  --version               print the version of autoconf that created configure
+Directory and file names:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+                          [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+                          [same as prefix]
+  --bindir=DIR            user executables in DIR [EPREFIX/bin]
+  --sbindir=DIR           system admin executables in DIR [EPREFIX/sbin]
+  --libexecdir=DIR        program executables in DIR [EPREFIX/libexec]
+  --datadir=DIR           read-only architecture-independent data in DIR
+                          [PREFIX/share]
+  --sysconfdir=DIR        read-only single-machine data in DIR [PREFIX/etc]
+  --sharedstatedir=DIR    modifiable architecture-independent data in DIR
+                          [PREFIX/com]
+  --localstatedir=DIR     modifiable single-machine data in DIR [PREFIX/var]
+  --libdir=DIR            object code libraries in DIR [EPREFIX/lib]
+  --includedir=DIR        C header files in DIR [PREFIX/include]
+  --oldincludedir=DIR     C header files for non-gcc in DIR [/usr/include]
+  --infodir=DIR           info documentation in DIR [PREFIX/info]
+  --mandir=DIR            man documentation in DIR [PREFIX/man]
+  --srcdir=DIR            find the sources in DIR [configure dir or ..]
+  --program-prefix=PREFIX prepend PREFIX to installed program names
+  --program-suffix=SUFFIX append SUFFIX to installed program names
+  --program-transform-name=PROGRAM
+                          run sed PROGRAM on installed program names
+EOF
+    cat << EOF
+Host type:
+  --build=BUILD           configure for building on BUILD [BUILD=HOST]
+  --host=HOST             configure for HOST [guessed]
+  --target=TARGET         configure for TARGET [TARGET=HOST]
+Features and packages:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --x-includes=DIR        X include files are in DIR
+  --x-libraries=DIR       X library files are in DIR
+EOF
+    if test -n "$ac_help"; then
+      echo "--enable and --with options recognized:$ac_help"
+    fi
+    exit 0 ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host="$ac_optarg" ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir="$ac_optarg" ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir="$ac_optarg" ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir="$ac_optarg" ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir="$ac_optarg" ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir="$ac_optarg" ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir="$ac_optarg" ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir="$ac_optarg" ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix="$ac_optarg" ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix="$ac_optarg" ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix="$ac_optarg" ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name="$ac_optarg" ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir="$ac_optarg" ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir="$ac_optarg" ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site="$ac_optarg" ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir="$ac_optarg" ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir="$ac_optarg" ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target="$ac_optarg" ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers)
+    echo "configure generated by autoconf version 2.12.970309"
+    exit 0 ;;
+
+  -with-* | --with-*)
+    ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    case "$ac_option" in
+      *=*) ;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "with_${ac_package}='$ac_optarg'" ;;
+
+  -without-* | --without-*)
+    ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+    # Reject names that are not valid shell variable names.
+    if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+      { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+    fi
+    ac_package=`echo $ac_package| sed 's/-/_/g'`
+    eval "with_${ac_package}=no" ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes="$ac_optarg" ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries="$ac_optarg" ;;
+
+  -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+    ;;
+
+  *)
+    if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+      echo "configure: warning: $ac_option: invalid host type" 1>&2
+    fi
+    if test "x$nonopt" != xNONE; then
+      { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+    fi
+    nonopt="$ac_option"
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+  exec 6>/dev/null
+else
+  exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+  case "$ac_arg" in
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c) ;;
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+  *" "*|*"	"*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+  ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+  *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+  esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set.  These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}"   = set; then LANG=C;   export LANG;   fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}"    = set; then LC_CTYPE=C;    export LC_CTYPE;    fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=userdefs.h
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_prog=$0
+  ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+  test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+  srcdir=$ac_confdir
+  if test ! -r $srcdir/$ac_unique_file; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+  else
+    { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+  fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    echo "loading site script $ac_site_file"
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  echo "loading cache $cache_file"
+  . $cache_file
+else
+  echo "creating cache $cache_file"
+  > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+  # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+  if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+    ac_n= ac_c='
+' ac_t='	'
+  else
+    ac_n=-n ac_c= ac_t=
+  fi
+else
+  ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+
+ac_aux_dir=
+for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do
+  if test -f $ac_dir/install-sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f $ac_dir/install.sh; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; }
+fi
+ac_config_guess=$ac_aux_dir/config.guess
+ac_config_sub=$ac_aux_dir/config.sub
+ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
+
+
+# Make sure we can run config.sub.
+if $ac_config_sub sun4 >/dev/null 2>&1; then :
+else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking host system type""... $ac_c" 1>&6
+echo "configure:568: checking host system type" >&5
+
+host_alias=$host
+case "$host_alias" in
+NONE)
+  case $nonopt in
+  NONE)
+    if host_alias=`$ac_config_guess`; then :
+    else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
+    fi ;;
+  *) host_alias=$nonopt ;;
+  esac ;;
+esac
+
+host=`$ac_config_sub $host_alias`
+host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+echo "$ac_t""$host" 1>&6
+
+
+
+# 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:593: 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
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_CC="gcc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+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:622: 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
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  ac_prog_rejected=no
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+        ac_prog_rejected=yes
+	continue
+      fi
+      ac_cv_prog_CC="cc"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# -gt 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    set dummy "$ac_dir/$ac_word" "$@"
+    shift
+    ac_cv_prog_CC="$@"
+  fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+  echo "$ac_t""$CC" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+  test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:670: 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.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext <<EOF
+#line 680 "configure"
+#include "confdefs.h"
+main(){return(0);}
+EOF
+if { (eval echo configure:684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+    ac_cv_prog_cc_cross=no
+  else
+    ac_cv_prog_cc_cross=yes
+  fi
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+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:704: 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:709: 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
+  cat > conftest.c <<EOF
+#ifdef __GNUC__
+  yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:718: \"$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
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+  GCC=yes
+  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:733: 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
+  echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+  ac_cv_prog_cc_g=yes
+else
+  ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+  if test "$ac_test_CFLAGS" = set; then
+    CFLAGS="$ac_save_CFLAGS"
+  elif test $ac_cv_prog_cc_g = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-O2"
+  fi
+else
+  GCC=
+  test "${CFLAGS+set}" = set || CFLAGS="-g"
+fi
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:761: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+    # This must be in double quotes, not single quotes, because CPP may get
+  # substituted into the Makefile and "${CC-cc}" will confuse make.
+  CPP="${CC-cc} -E"
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp.
+  cat > conftest.$ac_ext <<EOF
+#line 776 "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:782: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP="${CC-cc} -E -traditional-cpp"
+  cat > conftest.$ac_ext <<EOF
+#line 793 "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:799: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  :
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+  ac_cv_prog_CPP="$CPP"
+fi
+  CPP="$ac_cv_prog_CPP"
+else
+  ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+# 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:824: 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
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_prog_RANLIB="ranlib"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
+fi
+fi
+RANLIB="$ac_cv_prog_RANLIB"
+if test -n "$RANLIB"; then
+  echo "$ac_t""$RANLIB" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
+echo "configure:851: 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
+else
+  cat > conftestmake <<\EOF
+all:
+	@echo 'ac_maketemp="${MAKE}"'
+EOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftestmake
+fi
+if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  SET_MAKE=
+else
+  echo "$ac_t""no" 1>&6
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+
+echo $ac_n "checking for style of include in makefiles""... $ac_c" 1>&6
+echo "configure:879: checking for style of include in makefiles" >&5
+make_include_left=""
+make_include_right=""
+make_include_quote=""
+for cf_include in "include" ".include" "!include"
+do
+	for cf_quote in ' ' '"'
+	do
+		cat >WWW/Library/unix/makefile <<CF_EOF
+${cf_include} ${cf_quote}../../Library/Implementation/Version.make${cf_quote}
+all :
+	@echo 'cf_make_include=OK'
+CF_EOF
+	cf_make_include=""
+	eval `cd WWW/Library/unix && ${MAKE-make} 2>/dev/null | grep cf_make_include=OK`
+	if test -n "$cf_make_include"; then
+		make_include_left="$cf_include"
+		make_include_quote="$cf_quote"
+		break
+	fi
+	done
+	test -n "$cf_make_include" && break
+done
+
+if test -z "$make_include_left" ; then
+	{ echo "configure: error: Your $ac_make program does not support includes" 1>&2; exit 1; }
+fi
+if test -n "$make_include_quote" ; then
+	make_include_left="$make_include_left $make_include_quote"
+	make_include_right="$make_include_quote"
+fi
+echo "$ac_t""${make_include_left}file${make_include_right}" 1>&6
+
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# 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:925: 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
+else
+    IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    # Account for people who put trailing slashes in PATH elements.
+    case "$ac_dir/" in
+    /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
+    *)
+      # OSF1 and SCO ODT 3.0 have their own names for install.
+      for ac_prog in ginstall installbsd scoinst install; do
+        if test -f $ac_dir/$ac_prog; then
+	  if test $ac_prog = install &&
+            grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    # OSF/1 installbsd also uses dspmsg, but is usable.
+	    :
+	  else
+	    ac_cv_path_install="$ac_dir/$ac_prog -c"
+	    break 2
+	  fi
+	fi
+      done
+      ;;
+    esac
+  done
+  IFS="$ac_save_IFS"
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL="$ac_cv_path_install"
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL="$ac_install_sh"
+  fi
+fi
+echo "$ac_t""$INSTALL" 1>&6
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+
+echo $ac_n "checking if you want full utility pathnames""... $ac_c" 1>&6
+echo "configure:976: checking if you want full utility pathnames" >&5
+# Check whether --enable-full-paths or --disable-full-paths was given.
+if test "${enable_full_paths+set}" = set; then
+  enableval="$enable_full_paths"
+  test "$enableval" != no && enableval=yes
+  if test "$enableval" != "yes" ; then
+    with_full_paths=no 
+  else
+    with_full_paths=yes
+  fi
+else
+  enableval=yes 
+  with_full_paths=yes
+  
+fi
+
+echo "$ac_t""$with_full_paths" 1>&6
+
+
+echo $ac_n "checking for system mailer""... $ac_c" 1>&6
+echo "configure:996: checking for system mailer" >&5
+if eval "test \"`echo '$''{'cf_cv_SYSTEM_MAIL'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cf_cv_SYSTEM_MAIL=unknown
+	for cv_path in /usr/mmdf/bin/submit \
+	/usr/sbin/sendmail \
+	/usr/lib/sendmail  \
+	
+	do
+		if test -f $cv_path ; then
+			cf_cv_SYSTEM_MAIL=$cv_path
+			break
+		fi
+	done
+	
+fi
+
+echo "$ac_t""$cf_cv_SYSTEM_MAIL" 1>&6
+cat >> confdefs.h <<EOF
+#define SYSTEM_MAIL "$cf_cv_SYSTEM_MAIL"
+EOF
+
+
+
+echo $ac_n "checking system mail flags""... $ac_c" 1>&6
+echo "configure:1023: checking system mail flags" >&5
+if eval "test \"`echo '$''{'cf_cv_system_mail_flags'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	case $cf_cv_SYSTEM_MAIL in
+	*/mmdf/*)
+		cf_cv_system_mail_flags="-mlruxto,cc\\\\*"
+        	;; 
+	*)
+        	cf_cv_system_mail_flags="-t -oi"
+	esac
+	
+fi
+
+echo "$ac_t""$cf_cv_system_mail_flags" 1>&6
+cat >> confdefs.h <<EOF
+#define SYSTEM_MAIL_FLAGS "$cf_cv_system_mail_flags"
+EOF
+
+
+
+
+test -z "$CHMOD" && CHMOD=chmod
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "chmod", so it can be a program name with args.
+set dummy chmod; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1051: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_CHMOD'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$CHMOD" in
+  /*)
+  ac_cv_path_CHMOD="$CHMOD" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_CHMOD="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_CHMOD" && ac_cv_path_CHMOD="$CHMOD"
+  ;;
+esac
+fi
+CHMOD="$ac_cv_path_CHMOD"
+if test -n "$CHMOD"; then
+  echo "$ac_t""$CHMOD" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for chmod""... $ac_c" 1>&6
+echo "configure:1082: checking for chmod" >&5
+	echo "$ac_t""$CHMOD" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_CHMOD
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define CHMOD_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define CHMOD_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$COMPRESS" && COMPRESS=compress
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "compress", so it can be a program name with args.
+set dummy compress; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1116: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_COMPRESS'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$COMPRESS" in
+  /*)
+  ac_cv_path_COMPRESS="$COMPRESS" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_COMPRESS="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_COMPRESS" && ac_cv_path_COMPRESS="$COMPRESS"
+  ;;
+esac
+fi
+COMPRESS="$ac_cv_path_COMPRESS"
+if test -n "$COMPRESS"; then
+  echo "$ac_t""$COMPRESS" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for compress""... $ac_c" 1>&6
+echo "configure:1147: checking for compress" >&5
+	echo "$ac_t""$COMPRESS" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_COMPRESS
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define COMPRESS_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define COMPRESS_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$COPY" && COPY=cp
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "cp", so it can be a program name with args.
+set dummy cp; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1181: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_COPY'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$COPY" in
+  /*)
+  ac_cv_path_COPY="$COPY" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_COPY="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_COPY" && ac_cv_path_COPY="$COPY"
+  ;;
+esac
+fi
+COPY="$ac_cv_path_COPY"
+if test -n "$COPY"; then
+  echo "$ac_t""$COPY" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for cp""... $ac_c" 1>&6
+echo "configure:1212: checking for cp" >&5
+	echo "$ac_t""$COPY" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_COPY
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define COPY_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define COPY_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$GZIP" && GZIP=gzip
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "gzip", so it can be a program name with args.
+set dummy gzip; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1246: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_GZIP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$GZIP" in
+  /*)
+  ac_cv_path_GZIP="$GZIP" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_GZIP="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_GZIP" && ac_cv_path_GZIP="$GZIP"
+  ;;
+esac
+fi
+GZIP="$ac_cv_path_GZIP"
+if test -n "$GZIP"; then
+  echo "$ac_t""$GZIP" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for gzip""... $ac_c" 1>&6
+echo "configure:1277: checking for gzip" >&5
+	echo "$ac_t""$GZIP" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_GZIP
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define GZIP_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define GZIP_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$INSTALL" && INSTALL=install
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "install", so it can be a program name with args.
+set dummy install; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1311: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_INSTALL'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$INSTALL" in
+  /*)
+  ac_cv_path_INSTALL="$INSTALL" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_INSTALL="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_INSTALL" && ac_cv_path_INSTALL="$INSTALL"
+  ;;
+esac
+fi
+INSTALL="$ac_cv_path_INSTALL"
+if test -n "$INSTALL"; then
+  echo "$ac_t""$INSTALL" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for install""... $ac_c" 1>&6
+echo "configure:1342: checking for install" >&5
+	echo "$ac_t""$INSTALL" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_INSTALL
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define INSTALL_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define INSTALL_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$MKDIR" && MKDIR=mkdir
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "mkdir", so it can be a program name with args.
+set dummy mkdir; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1376: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MKDIR'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$MKDIR" in
+  /*)
+  ac_cv_path_MKDIR="$MKDIR" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_MKDIR="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MKDIR" && ac_cv_path_MKDIR="$MKDIR"
+  ;;
+esac
+fi
+MKDIR="$ac_cv_path_MKDIR"
+if test -n "$MKDIR"; then
+  echo "$ac_t""$MKDIR" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for mkdir""... $ac_c" 1>&6
+echo "configure:1407: checking for mkdir" >&5
+	echo "$ac_t""$MKDIR" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_MKDIR
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define MKDIR_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define MKDIR_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$MV" && MV=mv
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "mv", so it can be a program name with args.
+set dummy mv; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1441: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_MV'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$MV" in
+  /*)
+  ac_cv_path_MV="$MV" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_MV="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_MV" && ac_cv_path_MV="$MV"
+  ;;
+esac
+fi
+MV="$ac_cv_path_MV"
+if test -n "$MV"; then
+  echo "$ac_t""$MV" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for mv""... $ac_c" 1>&6
+echo "configure:1472: checking for mv" >&5
+	echo "$ac_t""$MV" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_MV
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define MV_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define MV_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$RM" && RM=rm
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "rm", so it can be a program name with args.
+set dummy rm; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1506: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_RM'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$RM" in
+  /*)
+  ac_cv_path_RM="$RM" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_RM="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_RM" && ac_cv_path_RM="$RM"
+  ;;
+esac
+fi
+RM="$ac_cv_path_RM"
+if test -n "$RM"; then
+  echo "$ac_t""$RM" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for rm""... $ac_c" 1>&6
+echo "configure:1537: checking for rm" >&5
+	echo "$ac_t""$RM" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_RM
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define RM_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define RM_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$TAR" && TAR=tar
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "tar", so it can be a program name with args.
+set dummy tar; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1571: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_TAR'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$TAR" in
+  /*)
+  ac_cv_path_TAR="$TAR" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_TAR="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_TAR" && ac_cv_path_TAR="$TAR"
+  ;;
+esac
+fi
+TAR="$ac_cv_path_TAR"
+if test -n "$TAR"; then
+  echo "$ac_t""$TAR" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for tar""... $ac_c" 1>&6
+echo "configure:1602: checking for tar" >&5
+	echo "$ac_t""$TAR" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_TAR
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define TAR_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define TAR_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$TOUCH" && TOUCH=touch
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "touch", so it can be a program name with args.
+set dummy touch; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1636: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_TOUCH'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$TOUCH" in
+  /*)
+  ac_cv_path_TOUCH="$TOUCH" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_TOUCH="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_TOUCH" && ac_cv_path_TOUCH="$TOUCH"
+  ;;
+esac
+fi
+TOUCH="$ac_cv_path_TOUCH"
+if test -n "$TOUCH"; then
+  echo "$ac_t""$TOUCH" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for touch""... $ac_c" 1>&6
+echo "configure:1667: checking for touch" >&5
+	echo "$ac_t""$TOUCH" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_TOUCH
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define TOUCH_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define TOUCH_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$UNCOMPRESS" && UNCOMPRESS=gunzip
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "gunzip", so it can be a program name with args.
+set dummy gunzip; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1701: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_UNCOMPRESS'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$UNCOMPRESS" in
+  /*)
+  ac_cv_path_UNCOMPRESS="$UNCOMPRESS" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_UNCOMPRESS="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_UNCOMPRESS" && ac_cv_path_UNCOMPRESS="$UNCOMPRESS"
+  ;;
+esac
+fi
+UNCOMPRESS="$ac_cv_path_UNCOMPRESS"
+if test -n "$UNCOMPRESS"; then
+  echo "$ac_t""$UNCOMPRESS" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for gunzip""... $ac_c" 1>&6
+echo "configure:1732: checking for gunzip" >&5
+	echo "$ac_t""$UNCOMPRESS" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_UNCOMPRESS
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define UNCOMPRESS_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define UNCOMPRESS_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$UNZIP" && UNZIP=unzip
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "unzip", so it can be a program name with args.
+set dummy unzip; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1766: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_UNZIP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$UNZIP" in
+  /*)
+  ac_cv_path_UNZIP="$UNZIP" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_UNZIP="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_UNZIP" && ac_cv_path_UNZIP="$UNZIP"
+  ;;
+esac
+fi
+UNZIP="$ac_cv_path_UNZIP"
+if test -n "$UNZIP"; then
+  echo "$ac_t""$UNZIP" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for unzip""... $ac_c" 1>&6
+echo "configure:1797: checking for unzip" >&5
+	echo "$ac_t""$UNZIP" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_UNZIP
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define UNZIP_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define UNZIP_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$UUDECODE" && UUDECODE=uudecode
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "uudecode", so it can be a program name with args.
+set dummy uudecode; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1831: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_UUDECODE'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$UUDECODE" in
+  /*)
+  ac_cv_path_UUDECODE="$UUDECODE" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_UUDECODE="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_UUDECODE" && ac_cv_path_UUDECODE="$UUDECODE"
+  ;;
+esac
+fi
+UUDECODE="$ac_cv_path_UUDECODE"
+if test -n "$UUDECODE"; then
+  echo "$ac_t""$UUDECODE" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for uudecode""... $ac_c" 1>&6
+echo "configure:1862: checking for uudecode" >&5
+	echo "$ac_t""$UUDECODE" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_UUDECODE
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define UUDECODE_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define UUDECODE_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$ZCAT" && ZCAT=zcat
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "zcat", so it can be a program name with args.
+set dummy zcat; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1896: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_ZCAT'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$ZCAT" in
+  /*)
+  ac_cv_path_ZCAT="$ZCAT" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_ZCAT="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_ZCAT" && ac_cv_path_ZCAT="$ZCAT"
+  ;;
+esac
+fi
+ZCAT="$ac_cv_path_ZCAT"
+if test -n "$ZCAT"; then
+  echo "$ac_t""$ZCAT" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for zcat""... $ac_c" 1>&6
+echo "configure:1927: checking for zcat" >&5
+	echo "$ac_t""$ZCAT" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_ZCAT
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define ZCAT_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define ZCAT_ARGS "$cf_path_args"
+EOF
+
+
+
+test -z "$ZIP" && ZIP=zip
+if test "$with_full_paths" = yes ; then
+	# Extract the first word of "zip", so it can be a program name with args.
+set dummy zip; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1961: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_path_ZIP'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  case "$ZIP" in
+  /*)
+  ac_cv_path_ZIP="$ZIP" # Let the user override the test with a path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_ZIP="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_ZIP" && ac_cv_path_ZIP="$ZIP"
+  ;;
+esac
+fi
+ZIP="$ac_cv_path_ZIP"
+if test -n "$ZIP"; then
+  echo "$ac_t""$ZIP" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+	echo $ac_n "checking for zip""... $ac_c" 1>&6
+echo "configure:1992: checking for zip" >&5
+	echo "$ac_t""$ZIP" 1>&6
+fi
+
+cf_path_prog=""
+cf_path_args=""
+IFS="${IFS= 	}"; cf_save_ifs="$IFS"; IFS="${IFS}:"
+for cf_temp in $ac_cv_path_ZIP
+do
+	if test -z "$cf_path_prog" ; then
+		cf_path_prog="$cf_temp"
+	elif test -z "$cf_path_args" ; then
+		cf_path_args="$cf_temp"
+	else
+		cf_path_args="$cf_path_args $cf_temp"
+	fi
+done
+IFS="$cf_save_ifs"
+
+cat >> confdefs.h <<EOF
+#define ZIP_PATH "$cf_path_prog"
+EOF
+
+test -n "$cf_path_args" && cat >> confdefs.h <<EOF
+#define ZIP_ARGS "$cf_path_args"
+EOF
+
+
+
+
+cat >> confdefs.h <<\EOF
+#define UNIX 1
+EOF
+
+
+echo $ac_n "checking for working const""... $ac_c" 1>&6
+echo "configure:2028: 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 2033 "configure"
+#include "confdefs.h"
+
+int main() {
+
+/* Ultrix mips cc rejects this.  */
+typedef int charset[2]; const charset x;
+/* SunOS 4.1.1 cc rejects this.  */
+char const *const *ccp;
+char **p;
+/* NEC SVR4.0.2 mips cc rejects this.  */
+struct point {int x, y;};
+static struct point const zero = {0,0};
+/* AIX XL C 1.02.0.0 rejects this.
+   It does not let you subtract one const X* pointer from another in an arm
+   of an if-expression whose if-part is not a constant expression */
+const char *g = "string";
+ccp = &g + (g ? g-g : 0);
+/* HPUX 7.0 cc rejects these. */
+++ccp;
+p = (char**) ccp;
+ccp = (char const *const *) p;
+{ /* SCO 3.2v4 cc rejects this.  */
+  char *t;
+  char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+  *t++ = 0;
+}
+{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+  int x[] = {25, 17};
+  const int *foo = &x[0];
+  ++foo;
+}
+{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+  typedef const int *iptr;
+  iptr p = 0;
+  ++p;
+}
+{ /* AIX XL C 1.02.0.0 rejects this saying
+     "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+  struct s { int j; const int *ap[3]; };
+  struct s *b; b->j = 5;
+}
+{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+  const int foo = 10;
+}
+
+; return 0; }
+EOF
+if { (eval echo configure:2082: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_c_const=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_c_const=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_c_const" 1>&6
+if test $ac_cv_c_const = no; then
+  cat >> confdefs.h <<\EOF
+#define const 
+EOF
+
+fi
+
+
+case $host_os in
+linux*)
+	CFLAGS="$CFLAGS -DLINUX" 
+	;;
+ultrix*)
+	# Increase the maximum size of functions that will be optimized.
+	test -z "$GCC" && CFLAGS="$CFLAGS -O -Olimit 600"
+	CFLAGS="$CFLAGS -DULTRIX" 
+	;;
+esac
+
+
+
+NETLIBS=""
+echo $ac_n "checking for gethostname""... $ac_c" 1>&6
+echo "configure:2118: checking for gethostname" >&5
+if eval "test \"`echo '$''{'ac_cv_func_gethostname'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2123 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char gethostname(); 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 gethostname();
+
+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_gethostname) || defined (__stub___gethostname)
+choke me
+#else
+gethostname();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2146: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_gethostname=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_gethostname=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'gethostname`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_GETHOSTNAME 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+
+	echo $ac_n "checking for gethostname in -lnsl""... $ac_c" 1>&6
+echo "configure:2168: 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 $NETLIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2176 "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:2187: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  cat >> confdefs.h <<\EOF
+#define HAVE_GETHOSTNAME 1
+EOF
+
+		NETLIBS="-lnsl $NETLIBS"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for gethostname in -lsocket""... $ac_c" 1>&6
+echo "configure:2210: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lsocket  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2218 "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:2229: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  cat >> confdefs.h <<\EOF
+#define HAVE_GETHOSTNAME 1
+EOF
+
+		NETLIBS="-lsocket $NETLIBS"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+fi
+
+echo $ac_n "checking for socket""... $ac_c" 1>&6
+echo "configure:2258: checking for socket" >&5
+if eval "test \"`echo '$''{'ac_cv_func_socket'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2263 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char socket(); 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 socket();
+
+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_socket) || defined (__stub___socket)
+choke me
+#else
+socket();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2286: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_socket=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_socket=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'socket`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_SOCKET 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+
+	echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
+echo "configure:2308: 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 $NETLIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2316 "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:2327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  cat >> confdefs.h <<\EOF
+#define HAVE_SOCKET 1
+EOF
+
+		NETLIBS="-lsocket $NETLIBS"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for socket in -lbsd""... $ac_c" 1>&6
+echo "configure:2350: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lbsd  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2358 "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:2369: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  cat >> confdefs.h <<\EOF
+#define HAVE_SOCKET 1
+EOF
+
+			NETLIBS="-lbsd $NETLIBS"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+fi
+
+echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
+echo "configure:2398: 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 2403 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char gethostbyname(); 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 gethostbyname();
+
+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_gethostbyname) || defined (__stub___gethostbyname)
+choke me
+#else
+gethostbyname();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_gethostbyname=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_gethostbyname=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'gethostbyname`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_GETHOSTBYNAME 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+
+	echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
+echo "configure:2448: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lnsl $NETLIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2456 "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 gethostbyname();
+
+int main() {
+gethostbyname()
+; return 0; }
+EOF
+if { (eval echo configure:2467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  cat >> confdefs.h <<\EOF
+#define HAVE_GETHOSTBYNAME 1
+EOF
+
+		NETLIBS="-lnsl $NETLIBS"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+echo $ac_n "checking for strcasecmp""... $ac_c" 1>&6
+echo "configure:2494: checking for strcasecmp" >&5
+if eval "test \"`echo '$''{'ac_cv_func_strcasecmp'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 2499 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char strcasecmp(); 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 strcasecmp();
+
+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_strcasecmp) || defined (__stub___strcasecmp)
+choke me
+#else
+strcasecmp();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_strcasecmp=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_strcasecmp=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'strcasecmp`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_STRCASECMP 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+
+	echo $ac_n "checking for strcasecmp in -lresolv""... $ac_c" 1>&6
+echo "configure:2544: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lresolv $NETLIBS $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2552 "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 strcasecmp();
+
+int main() {
+strcasecmp()
+; return 0; }
+EOF
+if { (eval echo configure:2563: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  cat >> confdefs.h <<\EOF
+#define HAVE_STRCASECMP 1
+EOF
+
+		NETLIBS="-lresolv $NETLIBS"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+LIBS="$LIBS $NETLIBS"
+
+
+echo $ac_n "checking for screen type""... $ac_c" 1>&6
+echo "configure:2593: checking for screen type" >&5
+if eval "test \"`echo '$''{'cf_cv_screen'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+# Check whether --with-screen or --without-screen was given.
+if test "${with_screen+set}" = set; then
+  withval="$with_screen"
+  
+case $withval in
+curses|ncurses|slang)
+	cf_cv_screen=$withval
+	;;
+*)	{ echo "configure: error: Unexpected value" 1>&2; exit 1; }
+	;;
+esac
+else
+  cf_cv_screen=curses
+fi
+
+fi
+
+echo "$ac_t""$cf_cv_screen" 1>&6
+
+case $cf_cv_screen in
+curses)
+	
+echo $ac_n "checking for initscr""... $ac_c" 1>&6
+echo "configure:2621: 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 2626 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char initscr(); 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 initscr();
+
+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_initscr) || defined (__stub___initscr)
+choke me
+#else
+initscr();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:2649: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+
+if test -d /usr/5lib ; then
+	# SunOS 3.x or 4.x
+	CPPFLAGS="$CPPFLAGS -I/usr/5include"
+	LIBS="$LIBS -L/usr/5lib"
+# elif test -d /usr/ccs/lib ; then
+# 	# Solaris 5.x
+# 	LIBS="$LIBS -L/usr/ccs/lib -R/usr/ccs/lib"
+fi
+cf_save_LIBS="$LIBS"
+echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6
+echo "configure:2677: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ltermcap  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2685 "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 tgoto();
+
+int main() {
+tgoto()
+; return 0; }
+EOF
+if { (eval echo configure:2696: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="-ltermcap $cf_save_LIBS"
+	echo $ac_n "checking for initscr in -lcurses""... $ac_c" 1>&6
+echo "configure:2714: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2722 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2733: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 curses | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lcurses $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+
+		echo $ac_n "checking for initscr in -lcursesX""... $ac_c" 1>&6
+echo "configure:2760: checking for initscr in -lcursesX" >&5
+ac_lib_var=`echo cursesX'_'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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcursesX  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2768 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2779: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 cursesX | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lcursesX $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+
+			echo $ac_n "checking for initscr in -ljcurses""... $ac_c" 1>&6
+echo "configure:2806: checking for initscr in -ljcurses" >&5
+ac_lib_var=`echo jcurses'_'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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ljcurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2814 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 jcurses | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-ljcurses $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+
+				{ echo "configure: error: cannot link curses" 1>&2; exit 1; }
+fi
+
+fi
+
+fi
+
+	
+else
+  echo "$ac_t""no" 1>&6
+
+	echo $ac_n "checking for initscr in -lcurses""... $ac_c" 1>&6
+echo "configure:2863: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 2871 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:2882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 curses | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lcurses $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+
+		{ echo "configure: error: cannot link curses" 1>&2; exit 1; }
+fi
+
+fi
+
+
+fi
+
+	
+echo $ac_n "checking for curses performance tradeoff""... $ac_c" 1>&6
+echo "configure:2918: checking for curses performance tradeoff" >&5
+if eval "test \"`echo '$''{'cf_cv_curs_performance'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+    cf_cv_curs_performance=no
+    cat > conftest.$ac_ext <<EOF
+#line 2925 "configure"
+#include "confdefs.h"
+
+#include <curses.h>
+int main() {
+
+#if defined(wbkgdset) && defined(clearok) && defined(getbkgd)
+	int x = ERR;
+#else
+	int x = ;	/* force an error */
+#endif
+	
+; return 0; }
+EOF
+if { (eval echo configure:2939: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  
+	cat > conftest.$ac_ext <<EOF
+#line 2943 "configure"
+#include "confdefs.h"
+
+#define CURS_PERFORMANCE
+#include <curses.h>
+int main() {
+
+#if defined(wbkgdset) && defined(clearok) && defined(getbkgd)
+	int x = ;	/* force an error */
+#else
+	int x = ERR;
+#endif
+	
+; return 0; }
+EOF
+if { (eval echo configure:2958: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_curs_performance=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_curs_performance" 1>&6
+test $cf_cv_curs_performance = yes && cat >> confdefs.h <<\EOF
+#define CURS_PERFORMANCE 1
+EOF
+
+
+	;;
+ncurses)
+	
+echo $ac_n "checking for ncurses header file""... $ac_c" 1>&6
+echo "configure:2983: checking for ncurses header file" >&5
+if eval "test \"`echo '$''{'cf_cv_ncurses_header'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cat > conftest.$ac_ext <<EOF
+#line 2989 "configure"
+#include "confdefs.h"
+#include <curses.h>
+int main() {
+printf("%s\n", NCURSES_VERSION)
+; return 0; }
+EOF
+if { (eval echo configure:2996: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_ncurses_header=predefined
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  
+	cf_search=""
+test "$prefix" != NONE       && cf_search="$prefix/include $prefix/include/ncurses"
+test "$prefix" != /usr/local && cf_search="$cf_search /usr/local/include /usr/local/include/ncurses"
+test "$prefix" != /usr       && cf_search="$cf_search /usr/include /usr/include/ncurses"
+
+	test -n "$verbose" && echo
+	for cf_incdir in $cf_search
+	do
+		for cf_header in \
+			curses.h \
+			ncurses.h
+		do
+			if egrep "NCURSES" $cf_incdir/$cf_header >/dev/null 2>&1; then
+				cf_cv_ncurses_header=$cf_incdir/$cf_header 
+				test -n "$verbose" && echo $ac_n "	... found $ac_c" 1>&6
+				break
+			fi
+			test -n "$verbose" && echo "	... tested $cf_incdir/$cf_header" 1>&6
+		done
+		test -n "$cf_cv_ncurses_header" && break
+	done
+	test -z "$cf_cv_ncurses_header" && { echo "configure: error: not found" 1>&2; exit 1; }
+	
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_ncurses_header" 1>&6
+cat >> confdefs.h <<\EOF
+#define NCURSES 1
+EOF
+
+
+cf_incdir=`echo $cf_cv_ncurses_header | sed -e 's:/[^/]*$::'`
+
+case $cf_cv_ncurses_header in # (vi
+*/ncurses.h)
+	cat >> confdefs.h <<\EOF
+#define NCURSESHEADER 1
+EOF
+
+	;;
+esac
+
+case $cf_cv_ncurses_header in # (vi
+predefined) # (vi
+	;;
+*)
+	
+for cf_add_incdir in $cf_incdir
+do
+	while true
+	do
+		case $cf_add_incdir in
+		/usr/include) # (vi
+			;;
+		/usr/local/include) # (vi
+			test -z "$GCC" && CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+			;;
+		*) # (vi
+			CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+			;;
+		esac
+		cf_top_incdir=`echo $cf_add_incdir | sed -e 's:/include/.*$:/include:'`
+		test "$cf_top_incdir" = "$cf_add_incdir" && break
+		cf_add_incdir="$cf_top_incdir"
+	done
+done
+
+	;;
+esac
+
+	echo $ac_n "checking for initscr""... $ac_c" 1>&6
+echo "configure:3077: 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 3082 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char initscr(); 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 initscr();
+
+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_initscr) || defined (__stub___initscr)
+choke me
+#else
+initscr();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_initscr=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+
+
+cf_save_LIBS="$LIBS"
+case $cf_cv_ncurses_header in
+*/ncurses.h) # (vi
+	cf_header=ncurses.h
+	;;
+*) # (vi
+	cf_header=curses.h
+	;;
+esac
+echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
+echo "configure:3134: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lgpm  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3142 "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 Gpm_Open();
+
+int main() {
+Gpm_Open()
+; return 0; }
+EOF
+if { (eval echo configure:3153: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  
+	echo $ac_n "checking for initscr in -lgpm""... $ac_c" 1>&6
+echo "configure:3170: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lgpm  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3178 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:3189: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+  
+		# don't try to link with gpm, since it contains curses
+		echo $ac_n "checking for initscr in -lncurses""... $ac_c" 1>&6
+echo "configure:3207: checking for initscr in -lncurses" >&5
+ac_lib_var=`echo ncurses'_'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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lncurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3215 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:3226: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 ncurses | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lncurses $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+		
+else
+  echo "$ac_t""no" 1>&6
+
+		echo $ac_n "checking if ncurses needs -lgpm to link""... $ac_c" 1>&6
+echo "configure:3258: checking if ncurses needs -lgpm to link" >&5
+		LIBS="-lncurses $cf_save_LIBS"
+		cat > conftest.$ac_ext <<EOF
+#line 3261 "configure"
+#include "confdefs.h"
+#include <$cf_header>
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:3268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_need_gpm=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  LIBS="-lncurses -lgpm $cf_save_LIBS"
+			cat > conftest.$ac_ext <<EOF
+#line 3277 "configure"
+#include "confdefs.h"
+#include <$cf_header>
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:3284: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_need_gpm=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  { echo "configure: error: cannot link -lncurses" 1>&2; exit 1; }
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+		echo "$ac_t""$cf_need_gpm" 1>&6
+		
+fi
+
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for initscr in -lncurses""... $ac_c" 1>&6
+echo "configure:3303: checking for initscr in -lncurses" >&5
+ac_lib_var=`echo ncurses'_'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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lncurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3311 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:3322: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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 ncurses | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+    -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+  LIBS="-lncurses $LIBS"
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+
+fi
+
+	;;
+slang)
+	
+if eval "test \"`echo '$''{'cf_cv_lib_termcap'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cf_cv_lib_termcap=none
+# HP-UX 9.x terminfo has setupterm, but no tigetstr.
+if test "$termlib" = none; then
+	echo $ac_n "checking for tigetstr in -ltermlib""... $ac_c" 1>&6
+echo "configure:3365: checking for tigetstr in -ltermlib" >&5
+ac_lib_var=`echo termlib'_'tigetstr | 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="-ltermlib  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3373 "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 tigetstr();
+
+int main() {
+tigetstr()
+; return 0; }
+EOF
+if { (eval echo configure:3384: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -ltermlib" cf_cv_lib_termcap=terminfo
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	echo $ac_n "checking for tgoto in -ltermlib""... $ac_c" 1>&6
+echo "configure:3407: checking for tgoto in -ltermlib" >&5
+ac_lib_var=`echo termlib'_'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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ltermlib  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3415 "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 tgoto();
+
+int main() {
+tgoto()
+; return 0; }
+EOF
+if { (eval echo configure:3426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -ltermlib" cf_cv_lib_termcap=termcap
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	# allow curses library for broken AIX system.
+	echo $ac_n "checking for initscr in -lcurses""... $ac_c" 1>&6
+echo "configure:3450: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lcurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3458 "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 initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:3469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -lcurses" cf_cv_lib_termcap=termcap
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+	echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6
+echo "configure:3490: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ltermcap  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3498 "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 tgoto();
+
+int main() {
+tgoto()
+; return 0; }
+EOF
+if { (eval echo configure:3509: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -ltermcap" cf_cv_lib_termcap=termcap
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	echo $ac_n "checking for tgoto in -ltermcap""... $ac_c" 1>&6
+echo "configure:3532: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ltermcap  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3540 "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 tgoto();
+
+int main() {
+tgoto()
+; return 0; }
+EOF
+if { (eval echo configure:3551: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -ltermcap" cf_cv_lib_termcap=termcap
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+if test "$cf_cv_lib_termcap" = none; then
+	echo $ac_n "checking for tgoto in -lncurses""... $ac_c" 1>&6
+echo "configure:3574: checking for tgoto in -lncurses" >&5
+ac_lib_var=`echo ncurses'_'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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lncurses  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3582 "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 tgoto();
+
+int main() {
+tgoto()
+; return 0; }
+EOF
+if { (eval echo configure:3593: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -lncurses" cf_cv_lib_termcap=ncurses
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+fi
+
+if test "$cf_cv_lib_termcap" = none; then
+	{ echo "configure: error: Can't find -ltermlib, -lcurses, or -ltermcap" 1>&2; exit 1; }
+fi
+
+	
+echo $ac_n "checking for slang header file""... $ac_c" 1>&6
+echo "configure:3623: checking for slang header file" >&5
+if eval "test \"`echo '$''{'cf_cv_slang_header'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cf_search=""
+test "$prefix" != NONE       && cf_search="$prefix/include $prefix/include/slang"
+test "$prefix" != /usr/local && cf_search="$cf_search /usr/local/include /usr/local/include/slang"
+test "$prefix" != /usr       && cf_search="$cf_search /usr/include /usr/include/slang"
+
+	for cf_incdir in $cf_search
+	do
+		for cf_header in \
+			slang.h
+		do
+			if egrep "SLANG_VERSION" $cf_incdir/$cf_header >/dev/null 2>&1; then
+				cf_cv_slang_header=$cf_incdir/$cf_header 
+				break
+			fi
+		done
+		test -n "$cf_cv_slang_header" && break
+	done
+	test -z "$cf_cv_slang_header" && { echo "configure: error: not found" 1>&2; exit 1; }
+	
+fi
+
+echo "$ac_t""$cf_cv_slang_header" 1>&6
+cat >> confdefs.h <<\EOF
+#define USE_SLANG 1
+EOF
+
+cf_incdir=`echo $cf_cv_slang_header | sed -e 's:/[^/]*$::'`
+
+for cf_add_incdir in $cf_incdir
+do
+	while true
+	do
+		case $cf_add_incdir in
+		/usr/include) # (vi
+			;;
+		/usr/local/include) # (vi
+			test -z "$GCC" && CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+			;;
+		*) # (vi
+			CPPFLAGS="$CPPFLAGS -I$cf_add_incdir"
+			;;
+		esac
+		cf_top_incdir=`echo $cf_add_incdir | sed -e 's:/include/.*$:/include:'`
+		test "$cf_top_incdir" = "$cf_add_incdir" && break
+		cf_add_incdir="$cf_top_incdir"
+	done
+done
+
+
+	
+	echo $ac_n "checking for SLtt_get_screen_size""... $ac_c" 1>&6
+echo "configure:3679: checking for SLtt_get_screen_size" >&5
+if eval "test \"`echo '$''{'ac_cv_func_SLtt_get_screen_size'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3684 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char SLtt_get_screen_size(); 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 SLtt_get_screen_size();
+
+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_SLtt_get_screen_size) || defined (__stub___SLtt_get_screen_size)
+choke me
+#else
+SLtt_get_screen_size();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_SLtt_get_screen_size=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_SLtt_get_screen_size=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'SLtt_get_screen_size`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+
+	echo $ac_n "checking for SLtt_get_screen_size in -lslang""... $ac_c" 1>&6
+echo "configure:3726: checking for SLtt_get_screen_size in -lslang" >&5
+ac_lib_var=`echo slang'_'SLtt_get_screen_size | 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="-lslang  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3734 "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 SLtt_get_screen_size();
+
+int main() {
+SLtt_get_screen_size()
+; return 0; }
+EOF
+if { (eval echo configure:3745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="-lslang $LIBS"
+else
+  echo "$ac_t""no" 1>&6
+echo $ac_n "checking for SLtt_get_screen_size in -lslang""... $ac_c" 1>&6
+echo "configure:3764: checking for SLtt_get_screen_size in -lslang" >&5
+ac_lib_var=`echo slang'_'SLtt_get_screen_size | 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="-lslang "-lm" $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 3772 "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 SLtt_get_screen_size();
+
+int main() {
+SLtt_get_screen_size()
+; return 0; }
+EOF
+if { (eval echo configure:3783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="-lslang -lm $LIBS"
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: cannot link -lslang" 1>&2; exit 1; }
+fi
+
+fi
+
+fi
+
+
+	;;
+esac
+
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:3814: 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 3819 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:3827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  ac_cv_header_stdc=yes
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+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 3844 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "memchr" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+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 3862 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "free" >/dev/null 2>&1; then
+  :
+else
+  rm -rf conftest*
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+  :
+else
+  cat > conftest.$ac_ext <<EOF
+#line 3883 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:3894: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+  cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
+echo "configure:3918: 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 3923 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+int main() {
+struct tm *tp;
+; return 0; }
+EOF
+if { (eval echo configure:3932: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  ac_cv_header_time=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  ac_cv_header_time=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_time" 1>&6
+if test $ac_cv_header_time = yes; then
+  cat >> confdefs.h <<\EOF
+#define TIME_WITH_SYS_TIME 1
+EOF
+
+fi
+
+ac_header_dirent=no
+for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h
+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:3957: 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 3962 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <$ac_hdr>
+int main() {
+DIR *dirp = 0;
+; return 0; }
+EOF
+if { (eval echo configure:3970: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  eval "ac_cv_header_dirent_$ac_safe=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_dirent_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ ac_header_dirent=$ac_hdr; break
+else
+  echo "$ac_t""no" 1>&6
+fi
+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:3995: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-ldir  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4003 "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 opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:4014: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -ldir"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
+echo "configure:4036: 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
+else
+  ac_save_LIBS="$LIBS"
+LIBS="-lx  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 4044 "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 opendir();
+
+int main() {
+opendir()
+; return 0; }
+EOF
+if { (eval echo configure:4055: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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="$LIBS -lx"
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+for ac_hdr in \
+	fcntl.h \
+	limits.h \
+	string.h \
+	sys/fcntl.h \
+	sys/filio.h \
+	sys/ioctl.h \
+	sys/time.h \
+	termio.h \
+	termios.h \
+	unistd.h \
+
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:4092: 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 4097 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:4102: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking termio.h and termios.h""... $ac_c" 1>&6
+echo "configure:4130: checking termio.h and termios.h" >&5
+if eval "test \"`echo '$''{'cf_cv_termio_and_termios'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+    cat > conftest.$ac_ext <<EOF
+#line 4136 "configure"
+#include "confdefs.h"
+
+#if HAVE_TERMIO_H
+#include <termio.h>
+#endif
+#if HAVE_TERMIOS_H
+#include <termios.h>
+#endif 
+int main() {
+putchar (0x0a)
+; return 0; }
+EOF
+if { (eval echo configure:4149: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_termio_and_termios=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_termio_and_termios=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_termio_and_termios" 1>&6
+test $cf_cv_termio_and_termios = no && cat >> confdefs.h <<\EOF
+#define TERMIO_AND_TERMIOS 1
+EOF
+
+
+
+
+echo $ac_n "checking for pid_t""... $ac_c" 1>&6
+echo "configure:4170: 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 4175 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if STDC_HEADERS
+#include <stdlib.h>
+#include <stddef.h>
+#endif
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
+  rm -rf conftest*
+  ac_cv_type_pid_t=yes
+else
+  rm -rf conftest*
+  ac_cv_type_pid_t=no
+fi
+rm -f conftest*
+
+fi
+echo "$ac_t""$ac_cv_type_pid_t" 1>&6
+if test $ac_cv_type_pid_t = no; then
+  cat >> confdefs.h <<\EOF
+#define pid_t int
+EOF
+
+fi
+
+ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
+echo "configure:4204: checking for vfork.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 4209 "configure"
+#include "confdefs.h"
+#include <vfork.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:4214: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  cat >> confdefs.h <<\EOF
+#define HAVE_VFORK_H 1
+EOF
+
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking for working vfork""... $ac_c" 1>&6
+echo "configure:4239: checking for working vfork" >&5
+if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  if test "$cross_compiling" = yes; then
+  echo $ac_n "checking for vfork""... $ac_c" 1>&6
+echo "configure:4245: checking for vfork" >&5
+if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4250 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char vfork(); 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 vfork();
+
+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_vfork) || defined (__stub___vfork)
+choke me
+#else
+vfork();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:4273: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  eval "ac_cv_func_vfork=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_func_vfork=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'vfork`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  :
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+else
+  cat > conftest.$ac_ext <<EOF
+#line 4294 "configure"
+#include "confdefs.h"
+/* Thanks to Paul Eggert for this test.  */
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#ifdef HAVE_VFORK_H
+#include <vfork.h>
+#endif
+/* On some sparc systems, changes by the child to local and incoming
+   argument registers are propagated back to the parent.
+   The compiler is told about this with #include <vfork.h>,
+   but some compilers (e.g. gcc -O) don't grok <vfork.h>.
+   Test for this by using a static variable whose address
+   is put into a register that is clobbered by the vfork.  */
+static
+#ifdef __cplusplus
+sparc_address_test (int arg)
+#else
+sparc_address_test (arg) int arg;
+#endif
+{
+  static pid_t child;
+  if (!child) {
+    child = vfork ();
+    if (child < 0) {
+      perror ("vfork");
+      _exit(2);
+    }
+    if (!child) {
+      arg = getpid();
+      write(-1, "", 0);
+      _exit (arg);
+    }
+  }
+}
+main() {
+  pid_t parent = getpid ();
+  pid_t child;
+
+  sparc_address_test ();
+
+  child = vfork ();
+
+  if (child == 0) {
+    /* Here is another test for sparc vfork register problems.
+       This test uses lots of local variables, at least
+       as many local variables as main has allocated so far
+       including compiler temporaries.  4 locals are enough for
+       gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe.
+       A buggy compiler should reuse the register of parent
+       for one of the local variables, since it will think that
+       parent can't possibly be used any more in this routine.
+       Assigning to the local variable will thus munge parent
+       in the parent process.  */
+    pid_t
+      p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
+      p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
+    /* Convince the compiler that p..p7 are live; otherwise, it might
+       use the same hardware register for all 8 local variables.  */
+    if (p != p1 || p != p2 || p != p3 || p != p4
+	|| p != p5 || p != p6 || p != p7)
+      _exit(1);
+
+    /* On some systems (e.g. IRIX 3.3),
+       vfork doesn't separate parent from child file descriptors.
+       If the child closes a descriptor before it execs or exits,
+       this munges the parent's descriptor as well.
+       Test for this by closing stdout in the child.  */
+    _exit(close(fileno(stdout)) != 0);
+  } else {
+    int status;
+    struct stat st;
+
+    while (wait(&status) != child)
+      ;
+    exit(
+	 /* Was there some problem with vforking?  */
+	 child < 0
+
+	 /* Did the child fail?  (This shouldn't happen.)  */
+	 || status
+
+	 /* Did the vfork/compiler bug occur?  */
+	 || parent != getpid()
+
+	 /* Did the file descriptor bug occur?  */
+	 || fstat(fileno(stdout), &st) != 0
+	 );
+  }
+}
+EOF
+if { (eval echo configure:4389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+then
+  ac_cv_func_vfork_works=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -fr conftest*
+  ac_cv_func_vfork_works=no
+fi
+rm -fr conftest*
+fi
+
+fi
+
+echo "$ac_t""$ac_cv_func_vfork_works" 1>&6
+if test $ac_cv_func_vfork_works = no; then
+  cat >> confdefs.h <<\EOF
+#define vfork fork
+EOF
+
+fi
+
+
+echo $ac_n "checking for broken/missing definition of remove""... $ac_c" 1>&6
+echo "configure:4413: checking for broken/missing definition of remove" >&5
+if eval "test \"`echo '$''{'cf_cv_baddef_remove'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<EOF
+#line 4419 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+int main() {
+remove("dummy")
+; return 0; }
+EOF
+if { (eval echo configure:4426: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_cv_baddef_remove=no
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cat > conftest.$ac_ext <<EOF
+#line 4434 "configure"
+#include "confdefs.h"
+#include <stdio.h>
+		int __unlink(name) { return unlink(name); } 
+int main() {
+remove("dummy")
+; return 0; }
+EOF
+if { (eval echo configure:4442: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_cv_baddef_remove=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_baddef_remove=unknown
+fi
+rm -f conftest*
+	
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_baddef_remove" 1>&6
+test "$cf_cv_baddef_remove" = yes && cat >> confdefs.h <<\EOF
+#define NEED_REMOVE 1
+EOF
+
+
+for ac_func in \
+	cuserid \
+	getcwd \
+	putenv \
+
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4471: 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 4476 "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:4499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+
+
+
+echo $ac_n "checking for errno external decl""... $ac_c" 1>&6
+echo "configure:4527: checking for errno external decl" >&5
+if eval "test \"`echo '$''{'cf_cv_extern_errno'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+    cat > conftest.$ac_ext <<EOF
+#line 4533 "configure"
+#include "confdefs.h"
+
+#include <errno.h>
+int main() {
+int x = errno
+; return 0; }
+EOF
+if { (eval echo configure:4541: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_extern_errno=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_extern_errno=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_extern_errno" 1>&6
+test $cf_cv_extern_errno = no && cat >> confdefs.h <<\EOF
+#define DECL_ERRNO 1
+EOF
+
+
+
+echo $ac_n "checking declaration of sys_errlist""... $ac_c" 1>&6
+echo "configure:4561: checking declaration of sys_errlist" >&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 4567 "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <errno.h> 
+int main() {
+char *c = (char *) *sys_errlist
+; return 0; }
+EOF
+if { (eval echo configure:4577: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_dcl_sys_errlist=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_dcl_sys_errlist=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_dcl_sys_errlist" 1>&6
+test $cf_cv_dcl_sys_errlist = no && cat >> confdefs.h <<\EOF
+#define DECL_SYS_ERRLIST 1
+EOF
+
+
+
+echo $ac_n "checking for setlocale()""... $ac_c" 1>&6
+echo "configure:4597: checking for setlocale()" >&5
+if eval "test \"`echo '$''{'cf_cv_locale'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cat > conftest.$ac_ext <<EOF
+#line 4603 "configure"
+#include "confdefs.h"
+#include <locale.h>
+int main() {
+setlocale(LC_ALL, "")
+; return 0; }
+EOF
+if { (eval echo configure:4610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_cv_locale=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_locale=no
+fi
+rm -f conftest*
+	
+fi
+
+echo "$ac_t""$cf_cv_locale" 1>&6
+test $cf_cv_locale = yes && cat >> confdefs.h <<\EOF
+#define LOCALE 1
+EOF
+
+
+
+echo $ac_n "checking if struct utmp is declared""... $ac_c" 1>&6
+echo "configure:4631: checking if struct utmp is declared" >&5
+if eval "test \"`echo '$''{'cf_cv_have_utmp'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cat > conftest.$ac_ext <<EOF
+#line 4637 "configure"
+#include "confdefs.h"
+#include <utmp.h>
+int main() {
+struct utmp x; char *y = &x.ut_host[0]
+; return 0; }
+EOF
+if { (eval echo configure:4644: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_have_utmp=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cat > conftest.$ac_ext <<EOF
+#line 4652 "configure"
+#include "confdefs.h"
+#include <utmpx.h>
+int main() {
+struct utmpx x; char *y = &x.ut_host[0]
+; return 0; }
+EOF
+if { (eval echo configure:4659: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_have_utmp=utmpx
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_have_utmp=no
+fi
+rm -f conftest*
+		
+fi
+rm -f conftest*
+	
+fi
+
+echo "$ac_t""$cf_cv_have_utmp" 1>&6
+test $cf_cv_have_utmp != no && cat >> confdefs.h <<\EOF
+#define HAVE_UTMP 1
+EOF
+
+test $cf_cv_have_utmp = utmpx && cat >> confdefs.h <<\EOF
+#define UTMPX_FOR_UTMP 1
+EOF
+
+
+
+### These tests must be run after establishing the curses library.
+if test $cf_cv_screen != slang ; then
+	
+echo $ac_n "checking if curses supports alternate-character set""... $ac_c" 1>&6
+echo "configure:4690: checking if curses supports alternate-character set" >&5
+if eval "test \"`echo '$''{'cf_cv_alt_char_set'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cat > conftest.$ac_ext <<EOF
+#line 4696 "configure"
+#include "confdefs.h"
+
+#include <curses.h>
+	
+int main() {
+
+	chtype x = acs_map['l']
+	
+; return 0; }
+EOF
+if { (eval echo configure:4707: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_cv_alt_char_set=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_alt_char_set=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$cf_cv_alt_char_set" 1>&6
+test $cf_cv_alt_char_set = yes && cat >> confdefs.h <<\EOF
+#define ALT_CHAR_SET 1
+EOF
+
+
+	
+echo $ac_n "checking if curses supports fancy attributes""... $ac_c" 1>&6
+echo "configure:4727: checking if curses supports fancy attributes" >&5
+if eval "test \"`echo '$''{'cf_cv_fancy_curses'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cat > conftest.$ac_ext <<EOF
+#line 4733 "configure"
+#include "confdefs.h"
+
+#include <curses.h>
+
+int main() {
+attrset(A_UNDERLINE|A_BOLD|A_REVERSE);
+	 wattrset(stdscr, A_BLINK|A_DIM);
+	 attroff(A_BOLD);
+	 keypad(stdscr,TRUE);
+	
+; return 0; }
+EOF
+if { (eval echo configure:4746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_cv_fancy_curses=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_fancy_curses=no
+fi
+rm -f conftest*
+	
+fi
+
+echo "$ac_t""$cf_cv_fancy_curses" 1>&6
+test $cf_cv_fancy_curses = yes && cat >> confdefs.h <<\EOF
+#define FANCY_CURSES 1
+EOF
+
+
+	
+echo $ac_n "checking if curses supports color attributes""... $ac_c" 1>&6
+echo "configure:4767: 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 4773 "configure"
+#include "confdefs.h"
+
+#include <curses.h>
+
+int main() {
+has_colors();
+	 start_color();
+	 wbkgd(curscr, getbkgd(stdscr)); /* X/Open XPG4 aka SVr4 Curses */
+	
+; return 0; }
+EOF
+if { (eval echo configure:4785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_cv_color_curses=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_color_curses=no
+fi
+rm -f conftest*
+	
+fi
+
+echo "$ac_t""$cf_cv_color_curses" 1>&6
+test $cf_cv_color_curses = yes && cat >> confdefs.h <<\EOF
+#define COLOR_CURSES 1
+EOF
+
+
+	
+echo $ac_n "checking declaration of size-change""... $ac_c" 1>&6
+echo "configure:4806: 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
+  
+    cf_cv_sizechange=unknown
+    cf_save_CFLAGS="$CFLAGS"
+
+for cf_opts in "" "NEED_PTEM_H"
+do
+
+    CFLAGS="$cf_save_CFLAGS"
+    test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts"
+    cat > conftest.$ac_ext <<EOF
+#line 4820 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#if HAVE_TERMIOS_H
+#include <termios.h>
+#endif
+#if NEED_PTEM_H
+/* This is a workaround for SCO:  they neglected to define struct winsize in
+ * termios.h -- it's only in termio.h and ptem.h
+ */
+#include        <sys/stream.h>
+#include        <sys/ptem.h>
+#endif
+#if !defined(sun) || !defined(HAVE_TERMIOS_H)
+#include <sys/ioctl.h>
+#endif
+
+int main() {
+
+#ifdef TIOCGSIZE
+	struct ttysize win;	/* FIXME: what system is this? */
+	int y = win.ts_lines;
+	int x = win.ts_cols;
+#else
+#ifdef TIOCGWINSZ
+	struct winsize win;
+	int y = win.ws_row;
+	int x = win.ws_col;
+#else
+	no TIOCGSIZE or TIOCGWINSZ
+#endif /* TIOCGWINSZ */
+#endif /* TIOCGSIZE */
+	
+; return 0; }
+EOF
+if { (eval echo configure:4855: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+  rm -rf conftest*
+  cf_cv_sizechange=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_sizechange=no
+fi
+rm -f conftest*
+
+	CFLAGS="$cf_save_CFLAGS"
+	if test "$cf_cv_sizechange" = yes ; then
+		test -n "$cf_opts" && cat >> confdefs.h <<\EOF
+#define $cf_opts 1
+EOF
+
+		break
+	fi
+done
+	
+fi
+
+echo "$ac_t""$cf_cv_sizechange" 1>&6
+test $cf_cv_sizechange = no && cat >> confdefs.h <<\EOF
+#define HAVE_SIZECHANGE 1
+EOF
+
+
+	
+echo $ac_n "checking if ttytype is declared in curses library""... $ac_c" 1>&6
+echo "configure:4886: checking if ttytype is declared in curses library" >&5
+if eval "test \"`echo '$''{'cf_cv_have_ttytype'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+	cat > conftest.$ac_ext <<EOF
+#line 4892 "configure"
+#include "confdefs.h"
+#include <curses.h>
+int main() {
+char *x = &ttytype[1]
+; return 0; }
+EOF
+if { (eval echo configure:4899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+  rm -rf conftest*
+  cf_cv_have_ttytype=yes
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  cf_cv_have_ttytype=no
+fi
+rm -f conftest*
+	
+fi
+
+echo "$ac_t""$cf_cv_have_ttytype" 1>&6
+test $cf_cv_have_ttytype = yes && cat >> confdefs.h <<\EOF
+#define HAVE_TTYTYPE 1
+EOF
+
+
+	for ac_func in \
+		cbreak \
+		keypad \
+	
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:4924: 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 4929 "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:4952: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; 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
+    ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+fi
+done
+
+fi
+
+
+echo $ac_n "checking if parent-directory references are permitted""... $ac_c" 1>&6
+echo "configure:4980: checking if parent-directory references are permitted" >&5
+if eval "test \"`echo '$''{'cf_cv_parent_dir'+set}'`\" = set"; then
+  echo $ac_n "(cached) $ac_c" 1>&6
+else
+  
+cf_cv_parent_dir=yes
+# Check whether --enable-parent-dir-refs or --disable-parent-dir-refs was given.
+if test "${enable_parent_dir_refs+set}" = set; then
+  enableval="$enable_parent_dir_refs"
+  test "$enableval" = no && cf_cv_parent_dir=no
+fi
+
+
+fi
+
+echo "$ac_t""$cf_cv_parent_dir" 1>&6
+test $cf_cv_parent_dir = no && cat >> confdefs.h <<\EOF
+#define NO_PARENT_DIR_REFERENCE 1
+EOF
+
+
+
+echo $ac_n "checking if you want to see long compiling messages""... $ac_c" 1>&6
+echo "configure:5003: 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
+  enableval="$enable_echo"
+  test "$enableval" != no && enableval=yes
+  if test "$enableval" != "yes" ; then
+    SHOW_CC='	@echo compiling $@'
+    ECHO_CC='@' 
+  else
+    SHOW_CC='# compiling'
+    ECHO_CC=''
+  fi
+else
+  enableval=yes 
+  SHOW_CC='# compiling'
+    ECHO_CC=''
+  
+fi
+
+echo "$ac_t""$enableval" 1>&6
+
+
+
+echo $ac_n "checking if you want to check memory-leaks""... $ac_c" 1>&6
+echo "configure:5027: checking if you want to check memory-leaks" >&5
+# Check whether --enable-find-leaks or --disable-find-leaks was given.
+if test "${enable_find_leaks+set}" = set; then
+  enableval="$enable_find_leaks"
+  test "$enableval" != yes && enableval=no
+  if test "$enableval" != "no" ; then
+    with_leak_checks=yes 
+  else
+    with_leak_checks=no
+  fi
+else
+  enableval=no 
+  with_leak_checks=no
+  
+fi
+
+echo "$ac_t""$with_leak_checks" 1>&6
+test "$with_leak_checks" = "yes" && cat >> confdefs.h <<\EOF
+#define LY_FIND_LEAKS 1
+EOF
+
+
+echo $ac_n "checking if you want to enable debug-code""... $ac_c" 1>&6
+echo "configure:5050: checking if you want to enable debug-code" >&5
+# Check whether --enable-debug or --disable-debug was given.
+if test "${enable_debug+set}" = set; then
+  enableval="$enable_debug"
+  test "$enableval" != yes && enableval=no
+  if test "$enableval" != "no" ; then
+    with_debug=yes 
+  else
+    with_debug=no
+  fi
+else
+  enableval=no 
+  with_debug=no
+  
+fi
+
+echo "$ac_t""$with_debug" 1>&6
+test "$with_debug" = "yes" && cat >> confdefs.h <<\EOF
+#define DEBUG 1
+EOF
+
+
+if test -n "$GCC"
+then
+echo $ac_n "checking if you want to turn on gcc warnings""... $ac_c" 1>&6
+echo "configure:5075: 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
+  enableval="$enable_warnings"
+  test "$enableval" != yes && enableval=no
+  if test "$enableval" != "no" ; then
+    with_warnings=yes 
+  else
+    with_warnings=no
+  fi
+else
+  enableval=no 
+  with_warnings=no
+  
+fi
+
+echo "$ac_t""$with_warnings" 1>&6
+if test "$with_warnings" = "yes"
+then
+	EXTRA_CFLAGS=""
+if test -n "$GCC"
+then
+		cat > conftest.$ac_ext <<EOF
+#line 5098 "configure"
+int main(int argc, char *argv[]) { return argv[argc-1] == 0; }
+EOF
+		echo "checking for gcc warning options" 1>&6
+echo "configure:5102: checking for gcc warning options" >&5
+	cf_save_CFLAGS="$CFLAGS"
+	EXTRA_CFLAGS="-W -Wall"
+	for cf_opt in \
+		Wbad-function-cast \
+		Wcast-align \
+		Winline \
+		Wmissing-declarations \
+		Wmissing-prototypes \
+		Wnested-externs \
+		Wpointer-arith \
+		Wshadow \
+		Wstrict-prototypes
+	do
+		CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
+		if { (eval echo configure:5117: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+			test -n "$verbose" && echo "$ac_t""... -$cf_opt" 1>&6
+			EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
+		fi
+	done
+	rm -f conftest*
+	CFLAGS="$cf_save_CFLAGS"
+fi
+
+fi
+fi
+
+### Finally, build config.h and the makefiles
+CFLAGS="$CFLAGS $EXTRA_CFLAGS"
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs.  It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already.  You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+  case `(ac_space=' '; set) 2>&1 | grep '^ac_space='` in
+  *ac_space=\ *)
+    # `set' does not quote correctly, so add quotes (double-quote substitution
+    # turns \\\\ into \\, and sed turns \\ into \).
+    sed -n \
+      -e "s/'/'\\\\''/g" \
+      -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+    ;;
+  *)
+    # `set' quotes correctly as required by POSIX, so do not add quotes.
+    sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+    ;;
+  esac >> confcache
+if cmp -s $cache_file confcache; then
+  :
+else
+  if test -w $cache_file; then
+    echo "updating cache $cache_file"
+    cat confcache > $cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[ 	]*VPATH[ 	]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+  case "\$ac_option" in
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    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.12.970309"
+    exit 0 ;;
+  -help | --help | --hel | --he | --h)
+    echo "\$ac_cs_usage"; exit 0 ;;
+  *) echo "\$ac_cs_usage"; exit 1 ;;
+  esac
+done
+
+ac_given_srcdir=$srcdir
+ac_given_INSTALL="$INSTALL"
+
+trap 'rm -fr `echo "makefile \
+	WWW/Library/unix/makefile \
+	src/makefile \
+	src/chrtrans/makefile \
+	 lynx_cfg.h:config.hin" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@host@%$host%g
+s%@host_alias@%$host_alias%g
+s%@host_cpu@%$host_cpu%g
+s%@host_vendor@%$host_vendor%g
+s%@host_os@%$host_os%g
+s%@CC@%$CC%g
+s%@CPP@%$CPP%g
+s%@RANLIB@%$RANLIB%g
+s%@SET_MAKE@%$SET_MAKE%g
+s%@make_include_left@%$make_include_left%g
+s%@make_include_right@%$make_include_right%g
+s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_DATA@%$INSTALL_DATA%g
+s%@CHMOD@%$CHMOD%g
+s%@COMPRESS@%$COMPRESS%g
+s%@COPY@%$COPY%g
+s%@GZIP@%$GZIP%g
+s%@INSTALL@%$INSTALL%g
+s%@MKDIR@%$MKDIR%g
+s%@MV@%$MV%g
+s%@RM@%$RM%g
+s%@TAR@%$TAR%g
+s%@TOUCH@%$TOUCH%g
+s%@UNCOMPRESS@%$UNCOMPRESS%g
+s%@UNZIP@%$UNZIP%g
+s%@UUDECODE@%$UUDECODE%g
+s%@ZCAT@%$ZCAT%g
+s%@ZIP@%$ZIP%g
+s%@SHOW_CC@%$SHOW_CC%g
+s%@ECHO_CC@%$ECHO_CC%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+  if test $ac_beg -gt 1; then
+    sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+  else
+    sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+  fi
+  if test ! -s conftest.s$ac_file; then
+    ac_more_lines=false
+    rm -f conftest.s$ac_file
+  else
+    if test -z "$ac_sed_cmds"; then
+      ac_sed_cmds="sed -f conftest.s$ac_file"
+    else
+      ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+    fi
+    ac_file=`expr $ac_file + 1`
+    ac_beg=$ac_end
+    ac_end=`expr $ac_end + $ac_max_sed_cmds`
+  fi
+done
+if test -z "$ac_sed_cmds"; then
+  ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"makefile \
+	WWW/Library/unix/makefile \
+	src/makefile \
+	src/chrtrans/makefile \
+	"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+  # Remove last slash and all that follows it.  Not all systems have dirname.
+  ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+  if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+    # The file is in a subdirectory.
+    test ! -d "$ac_dir" && mkdir "$ac_dir"
+    ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+    # A "../" for each directory in $ac_dir_suffix.
+    ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+  else
+    ac_dir_suffix= ac_dots=
+  fi
+
+  case "$ac_given_srcdir" in
+  .)  srcdir=.
+      if test -z "$ac_dots"; then top_srcdir=.
+      else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+  /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+  *) # Relative path.
+    srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+    top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  case "$ac_given_INSTALL" in
+  [/$]*) INSTALL="$ac_given_INSTALL" ;;
+  *) INSTALL="$ac_dots$ac_given_INSTALL" ;;
+  esac
+
+  echo creating "$ac_file"
+  rm -f "$ac_file"
+  configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+  case "$ac_file" in
+  *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+  *) ac_comsub= ;;
+  esac
+
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+s%@INSTALL@%$INSTALL%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ 	]*\)#\([ 	]*define[ 	][ 	]*\)'
+ac_dB='\([ 	][ 	]*\)[^ 	]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_uB='\([ 	]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ 	]*\)#\([ 	]*\)undef\([ 	][ 	]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+  CONFIG_HEADERS="lynx_cfg.h:config.hin"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case "$ac_file" in
+  *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+       ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+  *) ac_file_in="${ac_file}.in" ;;
+  esac
+
+  echo creating $ac_file
+
+  rm -f conftest.frag conftest.in conftest.out
+  ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+  cat $ac_file_inputs > conftest.in
+
+EOF
+
+# Transform confdefs.h into a sed script conftest.vals that substitutes
+# the proper values into config.h.in to produce config.h.  And first:
+# Protect against being on the right side of a sed subst in config.status.
+# Protect against being in an unquoted here document in config.status.
+rm -f conftest.vals
+cat > conftest.hdr <<\EOF
+s/[\\&%]/\\&/g
+s%[\\$`]%\\&%g
+s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
+s%ac_d%ac_u%gp
+s%ac_u%ac_e%gp
+EOF
+sed -n -f conftest.hdr confdefs.h > conftest.vals
+rm -f conftest.hdr
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >> conftest.vals <<\EOF
+s%^[ 	]*#[ 	]*undef[ 	][ 	]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
+EOF
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+while :
+do
+  ac_lines=`grep -c . conftest.vals`
+  # grep -c gives empty output for an empty file on some AIX systems.
+  if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+  # Write a limited-size here document to conftest.frag.
+  echo '  cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+  echo 'CEOF
+  sed -f conftest.frag conftest.in > conftest.out
+  rm -f conftest.in
+  mv conftest.out conftest.in
+' >> $CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+  rm -f conftest.vals
+  mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+cat >> $CONFIG_STATUS <<\EOF
+  rm -f conftest.frag conftest.h
+  echo "/* $ac_file.  Generated automatically by configure.  */" > conftest.h
+  cat conftest.in >> conftest.h
+  rm -f conftest.in
+  if cmp -s $ac_file conftest.h 2>/dev/null; then
+    echo "$ac_file is unchanged"
+    rm -f conftest.h
+  else
+    # Remove last slash and all that follows it.  Not all systems have dirname.
+      ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+      if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+      # The file is in a subdirectory.
+      test ! -d "$ac_dir" && mkdir "$ac_dir"
+    fi
+    rm -f $ac_file
+    mv conftest.h $ac_file
+  fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
diff --git a/configure.in b/configure.in
new file mode 100644
index 00000000..790f82ed
--- /dev/null
+++ b/configure.in
@@ -0,0 +1,234 @@
+dnl Process this file with autoconf to produce a configure script.
+dnl written jan/1997
+dnl by T.E.Dickey <dickey@clark.net>
+dnl and Jim Spath <jspath@mail.bcpl.lib.md.us>
+
+AC_PREREQ(2.12)
+AC_INIT(userdefs.h)
+AC_CONFIG_HEADER(lynx_cfg.h:config.hin)
+
+AC_PREFIX_DEFAULT(/usr/local)
+AC_CANONICAL_HOST
+
+dnl --------------------------------------------------------------------------
+dnl Checks for location of programs
+dnl --------------------------------------------------------------------------
+
+AC_PROG_CC
+AC_PROG_CPP
+AC_PROG_RANLIB
+AC_PROG_MAKE_SET
+CF_MAKE_INCLUDE
+AC_PROG_INSTALL
+
+AC_MSG_CHECKING(if you want full utility pathnames)
+CF_ARG_DISABLE(full-paths,
+	[  --disable-full-paths    control whether full utility pathnames are used],
+	[with_full_paths=no],
+	[with_full_paths=yes])
+AC_MSG_RESULT($with_full_paths)
+
+CF_DEFINE_PROG(system mailer, SYSTEM_MAIL,
+	/usr/mmdf/bin/submit \
+	/usr/sbin/sendmail \
+	/usr/lib/sendmail  \
+	)
+CF_SYSTEM_MAIL_FLAGS
+
+CF_PATH_PROG(CHMOD,	chmod)
+CF_PATH_PROG(COMPRESS,	compress)
+CF_PATH_PROG(COPY,	cp)
+CF_PATH_PROG(GZIP,	gzip)
+CF_PATH_PROG(INSTALL,	install)
+CF_PATH_PROG(MKDIR,	mkdir)
+CF_PATH_PROG(MV,	mv)
+CF_PATH_PROG(RM,	rm)
+CF_PATH_PROG(TAR,	tar)
+CF_PATH_PROG(TOUCH,	touch)
+CF_PATH_PROG(UNCOMPRESS,gunzip)
+CF_PATH_PROG(UNZIP,	unzip)
+CF_PATH_PROG(UUDECODE,	uudecode)
+CF_PATH_PROG(ZCAT,	zcat)
+CF_PATH_PROG(ZIP,	zip)
+
+dnl --------------------------------------------------------------------------
+dnl Checks for compiler & standard-library characteristics
+dnl --------------------------------------------------------------------------
+
+dnl If we're able to run this script, this is true!
+AC_DEFINE(UNIX)
+
+AC_C_CONST
+
+case $host_os in
+linux*)
+	CFLAGS="$CFLAGS -DLINUX" 
+	;;
+ultrix*)
+	# Increase the maximum size of functions that will be optimized.
+	test -z "$GCC" && CFLAGS="$CFLAGS -O -Olimit 600"
+	CFLAGS="$CFLAGS -DULTRIX" 
+	;;
+esac
+
+dnl --------------------------------------------------------------------------
+dnl Checks for library configuration (added right-to-left)
+dnl --------------------------------------------------------------------------
+
+CF_NETLIBS
+
+AC_MSG_CHECKING(for screen type)
+AC_CACHE_VAL(cf_cv_screen,[
+AC_ARG_WITH(screen,
+[  --with-screen=XXX       select screen type
+                          (XXX is curses (default), ncurses or slang)],
+	[
+case $withval in
+curses|ncurses|slang)
+	cf_cv_screen=$withval
+	;;
+*)	AC_ERROR(Unexpected value)
+	;;
+esac],
+	[cf_cv_screen=curses])])
+AC_MSG_RESULT($cf_cv_screen)
+
+case $cf_cv_screen in
+curses)
+	CF_CURSES_LIBS
+	CF_CURS_PERFORMANCE
+	;;
+ncurses)
+	CF_NCURSES_CPPFLAGS
+	CF_NCURSES_LIBS
+	;;
+slang)
+	CF_TERMCAP_LIBS
+	CF_SLANG_CPPFLAGS
+	CF_SLANG_LIBS
+	;;
+esac
+
+dnl --------------------------------------------------------------------------
+dnl Checks for standard headers
+dnl --------------------------------------------------------------------------
+
+AC_HEADER_STDC
+AC_HEADER_TIME
+AC_HEADER_DIRENT
+AC_CHECK_HEADERS( \
+	fcntl.h \
+	limits.h \
+	string.h \
+	sys/fcntl.h \
+	sys/filio.h \
+	sys/ioctl.h \
+	sys/time.h \
+	termio.h \
+	termios.h \
+	unistd.h \
+)
+CF_TERMIO_AND_TERMIOS
+
+dnl --------------------------------------------------------------------------
+dnl Checks for library units
+dnl --------------------------------------------------------------------------
+
+AC_FUNC_VFORK
+CF_REMOVE_BROKEN
+AC_CHECK_FUNCS( \
+	cuserid \
+	getcwd \
+	putenv \
+)
+
+dnl --------------------------------------------------------------------------
+dnl Checks for external-data
+dnl --------------------------------------------------------------------------
+
+CF_ERRNO
+CF_SYS_ERRLIST
+CF_LOCALE
+CF_UTMP
+
+### These tests must be run after establishing the curses library.
+if test $cf_cv_screen != slang ; then
+	CF_ALT_CHAR_SET
+	CF_FANCY_CURSES
+	CF_COLOR_CURSES
+	CF_SIZECHANGE
+	CF_TTYTYPE
+	AC_CHECK_FUNCS( \
+		cbreak \
+		keypad \
+	)
+fi
+
+dnl --------------------------------------------------------------------------
+dnl Miscellaneous options that don't need to test system features
+dnl --------------------------------------------------------------------------
+
+AC_MSG_CHECKING(if parent-directory references are permitted)
+AC_CACHE_VAL(cf_cv_parent_dir,[
+cf_cv_parent_dir=yes
+AC_ARG_ENABLE(parent-dir-refs,
+[  --disable-parent-dir-refs
+                          disable \"Up-to\" parent-links in directory listings],
+	[test "$enableval" = no && cf_cv_parent_dir=no])
+])
+AC_MSG_RESULT($cf_cv_parent_dir)
+test $cf_cv_parent_dir = no && AC_DEFINE(NO_PARENT_DIR_REFERENCE)
+
+dnl --------------------------------------------------------------------------
+dnl Debug/development/test
+dnl --------------------------------------------------------------------------
+
+AC_MSG_CHECKING(if you want to see long compiling messages)
+CF_ARG_DISABLE(echo,
+	[  --disable-echo          develop: display \"compiling\" commands],
+	[SHOW_CC='	@echo compiling $@'
+    ECHO_CC='@'],
+	[SHOW_CC='# compiling'
+    ECHO_CC=''])
+AC_MSG_RESULT($enableval)
+AC_SUBST(SHOW_CC)
+AC_SUBST(ECHO_CC)
+
+AC_MSG_CHECKING(if you want to check memory-leaks)
+CF_ARG_ENABLE(find-leaks,
+	[  --enable-find-leaks     develop: logic for testing memory leaks],
+	[with_leak_checks=yes],
+	[with_leak_checks=no])
+AC_MSG_RESULT($with_leak_checks)
+test "$with_leak_checks" = "yes" && AC_DEFINE(LY_FIND_LEAKS)
+
+AC_MSG_CHECKING(if you want to enable debug-code)
+CF_ARG_ENABLE(debug,
+	[  --enable-debug          develop: logic for testing memory leaks],
+	[with_debug=yes],
+	[with_debug=no])
+AC_MSG_RESULT($with_debug)
+test "$with_debug" = "yes" && AC_DEFINE(DEBUG)
+
+if test -n "$GCC"
+then
+AC_MSG_CHECKING(if you want to turn on gcc warnings)
+CF_ARG_ENABLE(warnings,
+	[  --enable-warnings       develop: GCC compiler warnings],
+	[with_warnings=yes],
+	[with_warnings=no])
+AC_MSG_RESULT($with_warnings)
+if test "$with_warnings" = "yes"
+then
+	CF_GCC_WARNINGS
+fi
+fi
+
+### Finally, build config.h and the makefiles
+CFLAGS="$CFLAGS $EXTRA_CFLAGS"
+AC_OUTPUT(
+	makefile \
+	WWW/Library/unix/makefile \
+	src/makefile \
+	src/chrtrans/makefile \
+	)
diff --git a/install.sh b/install.sh
new file mode 100755
index 00000000..ab74c882
--- /dev/null
+++ b/install.sh
@@ -0,0 +1,238 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+# This comes from X11R5.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+#
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+tranformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+	-c) instcmd="$cpprog"
+	    shift
+	    continue;;
+
+	-d) dir_arg=true
+	    shift
+	    continue;;
+
+	-m) chmodcmd="$chmodprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-o) chowncmd="$chownprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-g) chgrpcmd="$chgrpprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-s) stripcmd="$stripprog"
+	    shift
+	    continue;;
+
+	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+	    shift
+	    continue;;
+
+	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+	    shift
+	    continue;;
+
+	*)  if [ x"$src" = x ]
+	    then
+		src=$1
+	    else
+		# this colon is to work around a 386BSD /bin/sh bug
+		:
+		dst=$1
+	    fi
+	    shift
+	    continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+	echo "install:	no input file specified"
+	exit 1
+else
+	true
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+	
+	if [ -d $dst ]; then
+		instcmd=:
+	else
+		instcmd=mkdir
+	fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad 
+# if $src (and thus $dsttmp) contains '*'.
+
+	if [ -f $src -o -d $src ]
+	then
+		true
+	else
+		echo "install:  $src does not exist"
+		exit 1
+	fi
+	
+	if [ x"$dst" = x ]
+	then
+		echo "install:	no destination specified"
+		exit 1
+	else
+		true
+	fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+	if [ -d $dst ]
+	then
+		dst="$dst"/`basename $src`
+	else
+		true
+	fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='	
+'
+IFS="${IFS-${defaultIFS}}"
+
+oIFS="${IFS}"
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS="${oIFS}"
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+	pathcomp="${pathcomp}${1}"
+	shift
+
+	if [ ! -d "${pathcomp}" ] ;
+        then
+		$mkdirprog "${pathcomp}"
+	else
+		true
+	fi
+
+	pathcomp="${pathcomp}/"
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd $dst &&
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+	if [ x"$transformarg" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		dstfile=`basename $dst $transformbasename | 
+			sed $transformarg`$transformbasename
+	fi
+
+# don't allow the sed command to completely eliminate the filename
+
+	if [ x"$dstfile" = x ] 
+	then
+		dstfile=`basename $dst`
+	else
+		true
+	fi
+
+# Make a temp file name in the proper directory.
+
+	dsttmp=$dstdir/#inst.$$#
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd $src $dsttmp &&
+
+	trap "rm -f ${dsttmp}" 0 &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi &&
+
+# Now rename the file to the real destination.
+
+	$doit $rmcmd -f $dstdir/$dstfile &&
+	$doit $mvcmd $dsttmp $dstdir/$dstfile 
+
+fi &&
+
+
+exit 0
diff --git a/lynx.cfg b/lynx.cfg
index a5db76c9..3ac662f5 100644
--- a/lynx.cfg
+++ b/lynx.cfg
@@ -526,6 +526,10 @@ CHARACTER_SET:ISO Latin 1
 #
 #LYNX_SIG_FILE:.lynxsig
 
+# If USE_MOUSE is set TRUE, Lynx (when configured with ncurses) will allow
+# the user to click with button-1 on links to select them.
+#USE_MOUSE: FALSE
+
 # If USE_SELECT_POPUPS is set FALSE, Lynx will present a vertical list of
 # radio buttons for the OPTIONs in SELECT blocks which lack the MULTIPLE
 # attribute, instead of using a popup menu.  Note that if the MULTIPLE
@@ -1341,8 +1345,9 @@ MINIMAL_COMMENTS:TRUE
 #	DIRED_MENU:type:suffix:link text:extra text:action
 #
 #	type: TAG: list only when one or more files are tagged
-#	      FILE: list only when the current selection is a file
+#	      FILE: list only when the current selection is a regular file
 #	      DIR: list only when the current selection is a directory
+#	      LINK: list only when the current selection is a symbolic link
 #
 #	suffix: list only if the current selection ends in this pattern
 #
@@ -1363,14 +1368,23 @@ MINIMAL_COMMENTS:TRUE
 #
 #DIRED_MENU:::New File:(in current directory):LYNXDIRED://NEW_FILE%d
 #DIRED_MENU:::New Directory:(in current directory):LYNXDIRED://NEW_FOLDER%d
-#DIRED_MENU:::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
-#DIRED_MENU:::Modify Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+
+#DIRED_MENU:FILE::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
+#DIRED_MENU:DIR::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
+#DIRED_MENU:FILE::Modify File Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+#DIRED_MENU:DIR::Modify Directory Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+#DIRED_MENU:LINK::Modify Name:(of selected symbolic link):LYNXDIRED://MODIFY_NAME%p
 
 # Following depends on OK_PERMIT
-#DIRED_MENU:::Permit Name:(of current selection):LYNXDIRED://PERMIT_SRC%p
+#DIRED_MENU:FILE::Modify File Permissions:(of current selection):LYNXDIRED://PERMIT_SRC%p
+#DIRED_MENU:DIR::Modify Directory Permissions:(of current selection):LYNXDIRED://PERMIT_SRC%p
 
-#DIRED_MENU:::Change Location:(of current selection):LYNXDIRED://MODIFY_LOCATION%p
-#DIRED_MENU:::Remove:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:FILE::Change Location:(of selected file):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:DIR::Change Location:(of selected directory):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:LINK::Change Location:(of selected symbolic link):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:FILE::Remove File:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:DIR::Remove Directory:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:LINK::Remove Symbolic Link:(current selection):LYNXDIRED://REMOVE_SINGLE%p
 
 # Following depends on OK_UUDECODE and !ARCHIVE_ONLY
 #DIRED_MENU:FILE::UUDecode:(current selection):LYNXDIRED://UUDECODE%p
@@ -1415,7 +1429,7 @@ MINIMAL_COMMENTS:TRUE
 #DIRED_MENU:TAG::Remove all tagged files and directories.::LYNXDIRED://REMOVE_TAGGED
 #DIRED_MENU:TAG::Untag all tagged items.::LYNXDIRED://CLEAR_TAGGED
 
-# COLORS (only available if compiled with slang)
+# COLORS (only available if compiled with SVr4 curses or slang)
 # The line must be of the form:
 # COLOR:INTEGER:FOREGROUND:BACKGROUND
 # Here FOREGROUND and BACKGROUND must be one of:
diff --git a/makefile.in b/makefile.in
new file mode 100644
index 00000000..b5156b99
--- /dev/null
+++ b/makefile.in
@@ -0,0 +1,711 @@
+##makefile for lynx
+
+SHELL = /bin/sh
+@SET_MAKE@
+prefix		= @prefix@
+exec_prefix	= @exec_prefix@
+srcdir		= @srcdir@
+VPATH		= $(srcdir)
+
+CC		= @CC@
+CPPOPTS		= @DEFS@ @CPPFLAGS@
+CFLAGS		= $(CPPOPTS) @CFLAGS@
+
+LIBS		= @LIBS@
+
+##this is the name of the directory the lynx source code is in.
+##(e.g. lynx2-7, not the full path)
+lynxname= lynx2-7
+
+## Where you want lynx installed
+bindir= @bindir@
+
+## Where you want the lynx man file installed
+mandir= @mandir@/man1
+
+## Where you want the lynx.cfg file installed
+libdir= @libdir@
+
+installbin= @INSTALL@ -c -s -m 755
+installdoc= @INSTALL@ -c -m 444
+
+##set the relative location of the WWW library Implementation directory,
+##from this directory
+##do not set this to be an absolute path!!!
+WWWINC= WWW/Library/Implementation
+
+# !!!!!!!!!!! SUN resolv LIBRARY !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# To include resolv in the LIBS="" list for SUN 3, 4 or Solaris OS,
+# point RESOLVLIB to that library.  You need this if you get the message
+# "Alert!:  Unable to connect to remote host" whenever you try to
+# access a host other than localhost and have made Lynx without it.
+# See the PROBLEMS file for more information.
+#RESOLVLIB= -lresolv
+
+# !!!!!!!!!!! Alternate socket functions for SOCKS !!!!!!!!!!!!!!!!!!
+# To make a SOCKSified lynx, include -DSOCKS in your SITE_LYDEFS and
+# SITE_DEFS, below, and point SOCKSLIB to your SOCKS library.  Note
+# that you may have problems accessing FTP servers.  Also, instead of
+# SOCKSifying lynx for use behind a firewall, you are better off if
+# you make it normally, and set it up to use a proxy server.  You can
+# SOCKSify the proxy server, and it will handle all clients, not just
+# Lynx (see the INSTALLATION file in this distribution).  If your SOCKS
+# server was compiled to use the short version of Rbind, also include
+# -DSHORTENED_RBIND in your SITE_LYDEFS and SITE_DEFS.  If you do
+# SOCKSify lynx, you can turn off SOCKS proxy usage via a -nosocks
+# command line switch.
+#SOCKSLIB= /usr/local/lib/libsocks.a
+
+# !!!!!!!!!!!!!  DIRECT WAIS ACCESS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# If you are adding direct wais access you must fill in the
+# location of wais.a, client.a and the standard math library, libm.a.
+# You can pick up the most current freeWAIS sources from
+#	ftp://ftp.cnidr.org/pub/NIDR.tools/freewais
+# If you are using freeWAIS-0.202 or older, include -DDECLARE_WAIS_LOGFILES
+# in your SITE_DEFS.
+# Plese put an ABSOLUTE address here if you want it to work!
+#WAISLIB= ../../freeWAIS-0.202/bin/client.a ../../freeWAIS-0.202/bin/wais.a /usr/lib/libm.a
+
+# !!!!!!!!!!!!! SLANG Support (For color version of Lynx). !!!!!!!!!!!!!!!!
+# The slang library is an alternative to curses, developed by John E. Davis
+# (davis@space.mit.edu).  Version 0.99-27 or higher is available from
+#	ftp://space.mit.edu/pub/davis
+# It provides color support for Lynx.
+
+# !!!!!!!!!!! Lynx Local Directory Listing Formats !!!!!!!!!!!!!!!!!!!!!!!!!!!
+# Lynx supports "ls -l" format for local directory listings on Unix if the
+# LONG_LIST compilation symbol is defined, and includes links to the parent
+# directory if the compilation symbol NO_PARENT_DIR_REFERENCE is not defined.
+# If "ls -l" format is enabled here, the listing format can be modifed via a
+# LIST_FORMAT symbol in userdefs.h and/or lynx.cfg.  Otherwise, only file and
+# directory names will be included in the listings.
+#
+# If you are not including DirEd Support (see below) and wish to disable
+# "ls -l" emulation in local directory listings, prepend "#" to this line:
+DIR_LONG_LIST =   -DLONG_LIST
+#
+# To disable "Up to" parent links in local directory listings,
+# remove "#" from this line:
+#DIR_PARENT =  -DNO_PARENT_DIR_REFERENCE
+
+# !!!!!!!!!!! Lynx DirEd Support !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# Lynx now supports directory editing (DirEd) for local directories.
+# This allows users to do things like view, copy, & remove files using
+# a tabular display of the directory & single-keystroke commands instead
+# of using the command line.  From inside Lynx, the keystroke sequence
+# "g.<enter>" switches Lynx to DirEd mode on the current directory.
+# If you're building a Lynx that is to be used as a kind of restricted
+# shell for users who do not have access to the command line & should
+# not have access to equivalent capabilities, you need to disable DirEd
+# here.  You can also disable some DirEd functions while allowing others.
+#
+# DirEd functions are disabled by inserting or removing "#" signs at
+# the beginnings of lines that contain variable assignments here.
+# All DirEd functions that were enabled on compilation can be disabled
+# or modified at run time via DIRED_MENU symbols in lynx.cfg.
+#
+# To disable DirEd completely, prepend "#" to this line:
+DIRED_SUPPORT     =   -DDIRED_SUPPORT
+#(If you have disabled DirEd completely, you can ignore all the
+#other DirEd stuff here.)
+#
+# To prevent DirEd from extracting files from an archive file,
+# remove "#" from this line:
+#DIRED_ARCHIVE   =  -DARCHIVE_ONLY
+#
+# To prevent DirEd from using the tar program, prepend "#" to this line:
+DIRED_TAR   =   -DOK_TAR
+#
+# To prevent DirEd from using zip & unzip, prepend "#" to this line:
+DIRED_ZIP   =   -DOK_ZIP
+#
+# To prevent DirEd from using gzip & gunzip, prepend "#" to this line:
+DIRED_GZIP   =   -DOK_GZIP
+#
+# To prevent DirEd from using uudecode, prepend "#" to this line:
+DIRED_UUDECODE   =   -DOK_UUDECODE
+#
+# Lynx users can customize their keymaps by creating private versions
+# of lynx.cfg & modifying them, overriding the default keymap.
+# To prevent DirEd keymap overriding, prepend "#" to this line:
+DIRED_OVERRIDE   =   -DOK_OVERRIDE
+#
+# To prevent DirEd from changing the permissions on directories or files
+# (i.e. from doing what the Unix chmod command or the DOS attrib command
+# does), prepend "#" to this line:
+DIRED_PERMIT   =   -DOK_PERMIT
+#
+# If you do not comment out the DIRED_PERMIT line, but want to restrict
+# changes of the eXecute permission to directories (i.e., not allow it to
+# be changed for files), remove "#" from this line (if you don't remove it,
+# you can still block changes of the eXecute permission for files but not
+# directories via the "change_exec_perms" command line restriction):
+#DIRED_NOXPERMS   =   -DNO_CHANGE_EXECUTE_PERMS
+
+# !!!!!!!!!!! NOTE:  NetBSD and FreeBSD !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# On NetBSD 1.1 and earlier, as well as FreeBSD 2.0.5 and earlier,
+# the system make program uses different syntax for including files
+# than the GNU make program.  If you get the following error --
+#   * "Makefile", line 27: Need an operator *
+# you have several choices to run GNU make:
+#
+# * Install GNU make as `/usr/bin/make', after moving /usr/bin/make
+#   to /usr/bin/old-make
+#
+# * Install GNU make in a different directory which is earlier in
+#   your search path.
+#
+# * Install GNU make as gmake, and change occurrences of `make' to
+#   `gmake' in any Makefile used by your install.  You won't need to
+#   change all of the Makefiles, just the top-level one, and the one
+#   in WWW/Library/???bsd
+
+# !!!!!!!!!!! Lynx Wishful Thinking !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+# If you are on one of the supported systems (see all: list below)
+# you should not have to modify anything from here down (but check
+# it out for your system, anyway)!
+# If you are not, then you should edit the generic: entry below.
+#
+# If you need ncurses, the latest version can always be found
+# in ftp://ftp.clark.net/pub/dickey/ncurses/
+# or ftp://ftp.netcom.com/pub/zm/zmbenhal/ncurses/
+#
+# Also be sure to check out the compilation symbols in userdefs.h
+# before building Lynx!
+
+all:
+	@echo
+	@echo "Please run make with one of the following arguments"
+	@echo "aix4       -- for RS/6000 running AIX 4.n and some 3.2"
+	@echo "aix32      -- for RS/6000 running AIX 3.2"
+	@echo "apollo     -- apollo systems (untested)"
+	@echo "bsdi       -- BSD Interactive"
+	@echo "clix       -- for Intergraph CLIX"
+	@echo "convex     -- for Convex C-series"
+	@echo "dgux       -- for DGUX "
+	@echo "freebsd    -- for FreeBSD"
+	@echo "generic    -- for generic UNIX"
+	@echo "isc        -- for Interactive Machines (untested)"
+	@echo "linux      -- for PC linux"
+	@echo "mips       -- for MIPS, svr3/bsd flavour (untested)"
+	@echo "netbsd     -- for NetBSD"
+	@echo "news       -- for SONY NEWS-OS 4.2.1R"
+	@echo "next       -- for NeXT OS"
+	@echo "osf        -- for Alpha OSF/1"
+	@echo "ptx        -- for Sequent's DYNIX/ptx, version 4, (current version)"
+	@echo "ptx        -- for Sequent's DYNIX/ptx, current version"
+	@echo "ptx2       -- for Sequent's DYNIX/ptx, version 2"
+	@echo "riscos     -- Control Data Unix machine running EP/IX"
+	@echo "sco        -- for SCO machines"
+	@echo "sco5       -- for SCO OpenServer Release 5 machines"
+	@echo "sgi        -- for SGI machines"
+	@echo "sun3       -- for SUN 3 OS with System V curses"
+	@echo "sun4       -- for SUN 4 OS"
+	@echo "svr4       -- for SVR4"
+	@echo "snake      -- for HP-UX lt 9.01 (gcc)"
+	@echo "snake2     -- for HP-UX gte 9.01 (gcc)"
+	@echo "snake3     -- for HP-UX (purchased compiler)"
+	@echo "solaris    -- for solaris 2.x"
+	@echo "ultrix     -- for DEC Ultrix"
+	@echo "decstation -- for DEC Ultrix (same as ultrix)"
+	@echo "umaxv   -- for Encore's UMAXV (SVR3.x) "
+	@echo "unixware   -- for Novell's Unixware"
+	@echo "univell    -- for Novell's Unixware"
+	@echo "clean      -- removes all '.o' and 'core' files"
+	@echo "tar        -- runs clean, removes executable, and tars the whole directory"
+	@echo "compress   -- runs tar, then compresses the result"
+	@echo "zip        -- runs clean, removes executable, and zips the whole directory"
+	@echo
+
+# Map some extra commands to existing ones
+unix: generic
+decstation: ultrix
+univell: unixware
+
+DIR_LYDEFS = $(DIRED_SUPPORT) $(DIR_LONG_LIST) $(DIR_PARENT)
+
+DIR_DEFS = $(DIRED_SUPPORT) $(DIRED_ARCHIVE) $(DIRED_TAR) $(DIRED_ZIP) $(DIRED_GZIP) $(DIRED_UUDECODE) $(DIRED_OVERRIDE) $(DIRED_PERMIT) $(DIRED_NOXPERMS)
+
+# If you apply patches which require linking to site-specific libraries,
+# uncomment the following and point SITE_LIBS to those libraries.
+#SITE_LIBS= # Your libraries here (remove the "#")
+
+# Set SITE_LYDEFS to one or more of the defines for the WWW Library:
+SITE_LYDEFS = $(DIR_LYDEFS) -DEXP_CHARTRANS # Your defines here
+
+# Set SITE_DEFS to one or more of the defines for lynx below:
+SITE_DEFS = $(DIR_DEFS) -DEXP_CHARTRANS # Your defines here
+
+# if you are compiling on a previously unsupported system, modify
+# this generic entry!!
+#
+# defines include:
+# -DHP_TERMINAL    For DIM workaround to REVERSE problems on HP terminals.
+# -DIGNORE_CTRL_C  Define if Control-C shouldn't exit lynx.
+# -DNOPORT         if you must use PASV instead of PORT for FTP
+# -DNO_CPU_LIMIT   Disables Max CPU timeout (includes CLOCKS_PER_SECOND)
+# -DNSL_FORK	   For fork-based name server lookups that can be 'z'apped.
+# -DSHORTENED_RBIND  For a SOCKSified lynx with the short version of Rbind.
+# -DSOCKS	   For making a SOCKSified lynx.
+# -DUNDERLINE_LINKS  Define if you want links underlined instead of bold.
+# -DEXP_CHARTRANS  enable chartrans support w/ new charsets, UTF8 mode etc.
+#                  (needed in SITE_DEFS *and* SITE_LYDEFS !)
+# -DEXP_CHARTRANS_AUTOSWITCH also let lynx switch term mode(Linux console only)
+# -DSLANG_MBCS_HACK prevent cutoff lines when using UTF8 console (slang only)
+#
+# if you are linking to freeWAIS-0.202 or older, you should define this
+# in MCFLAGS (SITE_DEFS)
+#
+# -DDECLARE_WAIS_LOGFILES
+#
+# if you have the reverse clear screen problem of some SUN4 systems you
+# should define this in MCFLAGS (SITE_DEFS)
+#
+# -DREVERSE_CLEAR_SCREEN_PROBLEM
+#
+# if you have an SVR4 system with the "type any key" problem, try defining
+# this in LYFLAGS (SITE_LYDEFS) and MCFLAGS (SITE_DEFS)
+#
+# -DSVR4_BSDSELECT
+#
+# Old Data General systems may need this in their SITE_LYDEFS
+# for their inet_addr(host) calls.
+#
+# -DDGUX_OLD
+#
+# if you would like logging of client requests via syslog(), you should
+# define this in MCFLAGS (SITE_DEFS)
+#
+# -DSYSLOG_REQUESTED_URLS
+#
+## if you would like to enable code to detect memory leaks define this in both
+## LYFLAGS (SITE_LYDEFS) and MCFLAGS (SITE_DEFS)
+##
+## -DLY_FIND_LEAKS
+#
+# for installation of local execution links, please see the file userdefs.h
+
+#generic machines with original Berkeley curses
+generic: # NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# Contributed by Alex Matulich (matuli_a@marlin.navsea.navy.mil).
+# Note that some of the online help files in this distribution need
+# to be edited and renamed to conform with the Intergraph CLIX 14
+# character file name limit.
+clix:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DUSG -DCLIX" \
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DUSG -DCLIX" \
+		LIBS="-lmalloc -lcurses -ltermcap -lbsd -lc_s \
+		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# Tested on C3 series under ConvexOS 10.1, CC V5.0;
+# Should work on other C-series
+convex:	# NOT-TESTED (replaces convex-curses, convex-ncurses)
+	cd WWW/Library/convex; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -D__STDC__ -Dunix" \
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-D__STDC__ -Dunix" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+dgux:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DDGUX"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DDGUX" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+mips:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -systype svr3 -I/svr3/usr/include/bsd"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-systype svr3 -I/svr3/usr/include/bsd" \
+		LIBS="-lcurses -lnsl -lbsd \
+		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+freebsd: # NOT-TESTED: replaces freebsd-curses, freebsd-ncurses, freebsd-slang
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+netbsd:  # NOT-TESTED: replaces netbsd-curses, netbsd-ncurses, netbsd-slang
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# Tested on DN 3500 & 4500's running Domain O/S 10.4 BSD
+# -Acpu,mathchip may have to be changed on other machines - see man cpuhep
+apollo:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -D_BUILTINS -W0,-opt,4"
+	cd src; $(MAKE) all CC="cc" \
+		MCFLAGS="-D_BUILTINS -W0,-opt,4" \
+		LIBS="-lcurses -ltermcap \
+		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a $(MYWWWLIB)"
+
+riscos:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-Dremove=unlink" \
+		LIBS="-lcurses -ltermcap \
+		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# aka HP-UX
+snake:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DSNAKE" \
+		LIBS="-lcurses -ltermcap \
+		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+snake2:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. \
+		-D_INCLUDE_HPUX_SOURCE \
+		-D_INCLUDE_POSIX_SOURCE \
+		-D_INCLUDE_AES_SOURCE \
+		-D_INCLUDE_XOPEN_SOURCE"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DSNAKE \
+		-D_INCLUDE_HPUX_SOURCE \
+		-D_INCLUDE_POSIX_SOURCE \
+		-D_INCLUDE_AES_SOURCE \
+		-D_INCLUDE_XOPEN_SOURCE" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# Lynx will compile with the purchased cc compiler added to HP-UX.
+# contributed by Andy Finkenstadt (genie@panix.com)
+# Note that initial releases of HP/UX 10.10 have a broken select() in
+# libcurses.a and will malfunction with Lynx.  See the PROBLEMS file.
+snake3:	# NOT-TESTED (replaces snake3-curses, snake3-slang)
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -Ae"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-Ae -DSNAKE" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+svr4:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DSVR4_BSDSELECT -DSVR4"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DSVR4_BSDSELECT -DTRUE=1 -DFALSE=0" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# aka SEQUENT
+ptx:	# NOT-TESTED (replaces ptx-curses, ptx-slang)
+	cd WWW/Library/unix; $(MAKE) $(MFLAGS) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DSVR4_BSDSELECT -DNO_IOCTL -DUSE_FCNTL"
+	cd src; $(MAKE) $(MFLAGS) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) -lsocket -linet -lnsl \
+		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+ptx2:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DPTX2 -DNOPORT -DSVR4_BSDSELECT $(SITE_LYDEFS)"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DPTX2" \
+		LIBS="$(LIBS) -lsocket -linet -lnsl \
+		$(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# Contributed by Thanh Ma (tma@encore.com).
+umaxv:	# NOT-TESTED (replaces umaxv-curses, umaxv-slang)
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -D_SYSV3"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-D_SYSV3" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+unixware: # NOT-TESTED (replaces unixware-curses, unixware-slang)
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DUNIXWARE"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DTRUE=1 -DFALSE=0 -DUNIXWARE" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+#     has a const/volatile bug in its native cc compiler. (don't use it ;)
+sco:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DSCO -DSVR4"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-s -DSCO" \
+		LIBS="$(LIBS) -lmalloc $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+sco5:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="cc -belf" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DSCO -DSVR4"
+	cd src; $(MAKE) all CC="cc -belf" \
+		MCFLAGS="-s -DSCO" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+bsdi:	# TESTED(97/4/15 dickey): replaces bsdi-curses, bsdi-ncurses
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DBSDI"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+solaris: # TESTED(97/2/17 dickey) replaces solaris2 solaris2cc solaris2-slang solaris2-slangcc
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DNGROUPS=16 -Dd_namlen=d_reclen -DSOLARIS2 -DSVR4"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(RESOLVLIB) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+osf:	# NOT-TESTED: replaces osf-curses, osf-slang
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -Olimit 2000 -DSYS5"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-Olimit 4000" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+sgi:	# TESTED(97/2/17 dickey) curses, ncurses, slang
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -cckr"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-cckr" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+linux:	# TESTED(97/2/16 dickey): curses, ncurses, slang
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+##Various AIX environments
+aix:
+	@echo "Run make again and use \"make aix4\" or \"make aix32\""
+
+# For AIX 4.n, and AIX 3.2.5 with POWER2 architectures, L2 caches,
+# and APAR#IX58890
+aix4:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -D_BSD=44"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DAIX4 -D_BSD=44" \
+		LIBS="$(LIBS) -lbsd $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+aix32:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) -lbsd $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+##ultrix - DEC Ultrix
+ultrix:	# NOT-TESTED (replaces ultrix-curses, ultrix-slang)
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+##Various SunOS environments
+sun:
+	@echo "Run make again and use \"make sun3\" or \"make sun4\""
+
+# define RESOLVLIB (above) for the "LIBS" entry if needed
+sun3:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DSUN" \
+		LIBS="$(LIBS) $(RESOLVLIB) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# define RESOLVLIB (above) for the "LIBS" entry if needed
+sun4:	# TESTED(97/2/17 dickey) replaces sun4-curses, sun4-ncurses, sun4-slang
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DSUN -DSUN4" \
+		LIBS="$(LIBS) $(RESOLVLIB) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# news - SONY NEWS-OS 4.2.1R
+news:	# NOT-TESTED (replaces news-curses, news-ncurses, news-slang)
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.."
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# next - Nextstep
+next:	# NOT-TESTED: replaces next-curses, next-ncurses, next-slang
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DXMOSAIC_HACK"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DNEXT" \
+		LIBS="$(LIBS) $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+# isc - Interactive Unix for i386 and i486 machines
+# According to Robert Salter (salter1@mster.nsbf.nasa.gov),
+#  cc should be used instead of gcc.
+# According to Walter Skorski (walt@clyde.jmp.tju.edu),
+#  -DPOSIX_JC is necessary, else LYBookmark.c never finds out
+#  what a mode_t is.
+isc:	# NOT-TESTED
+	cd WWW/Library/unix; $(MAKE) CC="$(CC)" \
+		LYFLAGS="$(SITE_LYDEFS) -I../../.. -DISC"
+	cd src; $(MAKE) all CC="$(CC)" \
+		MCFLAGS="-DISC -DPOSIX_JC" \
+		LIBS="$(LIBS) -linet -lnsl_s -lcposix $(WAISLIB) $(SOCKSLIB) $(SITE_LIBS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		WWWINC=$(WWWINC) \
+		WWWLIB="../WWW/Library/unix/libwww.a"
+
+##Miscellaneous actions
+clean:
+	rm -f WWW/Library/*/*.[aob]
+	rm -f WWW/Library/*/.created
+	cd src; $(MAKE) clean
+	rm -f *.b src/lynx core Lynx.leaks
+
+distclean: clean
+	-rm -f WWW/Library/unix/makefile src/makefile src/chrtrans/makefile
+	-rm -f WWW/Library/*/*~
+	-rm -f WWW/Library/*/*.bak
+	-rm -rf src/obsolete
+	-cd src; $(MAKE) clean
+	-cd src/chrtrans; $(MAKE) distclean
+	-rm -f *~ *.bak *.sav .*_aux
+	-rm -f makefile lynx_cfg.h config.status config.log config.cache
+	-rm -f lynx
+
+maintainer-clean: distclean
+	-rm -rf WWW/Library/*/obsolete
+	-rm -f Lynx.prj
+
+tar:  clean
+	rm -f lynx
+	$(MAKE) save
+
+turnover:	clean
+	$(MAKE) save
+
+zipcompress: compress zip
+	echo "done!"
+
+zip:  clean
+	rm -f src/lynx
+	rm -f lynx
+	rm -f src/a.out
+	rm -f ../$(lynxname).zip
+	cd ..; rm -f $(lynxname).zip; zip -r $(lynxname).zip $(lynxdir)
+
+save:
+	cd ..; rm -f $(lynxname).tar; tar -cf - $(lynxdir) > $(lynxname).tar
+
+compress: tar
+	cd ..; rm -f $(lynxname).tar.Z; compress -f -v $(lynxname).tar
+
+install:
+	-mv -f $(bindir)/lynx $(bindir)/lynx.old
+	-mv -f $(libdir)/lynx.cfg $(libdir)/lynx.oldcfg
+	$(installbin) lynx $(bindir)/lynx
+	$(installdoc) lynx.man $(mandir)/lynx.1
+	$(installdoc) lynx.cfg $(libdir)/lynx.cfg
diff --git a/newfiles.chartrans b/newfiles.chartrans
new file mode 100644
index 00000000..033d5514
--- /dev/null
+++ b/newfiles.chartrans
@@ -0,0 +1,37 @@
+lynx2-7-1/README.chartrans
+lynx2-7-1/CHANGES.chartrans
+lynx2-7-1/newfiles.chartrans
+lynx2-7-1/WWW/Library/Implementation/UCAux.h
+lynx2-7-1/WWW/Library/Implementation/UCDefs.h
+lynx2-7-1/WWW/Library/Implementation/UCMap.h
+lynx2-7-1/src/chrtrans/README.format
+lynx2-7-1/src/chrtrans/README.tables
+lynx2-7-1/src/chrtrans/Makefile
+lynx2-7-1/src/chrtrans/UCkd.h
+lynx2-7-1/src/chrtrans/makeuctb.c
+lynx2-7-1/src/chrtrans/def7_uni.tbl
+lynx2-7-1/src/chrtrans/cp850_uni.tbl
+lynx2-7-1/src/chrtrans/iso01_uni.tbl
+lynx2-7-1/src/chrtrans/iso02_uni.tbl
+lynx2-7-1/src/chrtrans/iso03_uni.tbl
+lynx2-7-1/src/chrtrans/iso04_uni.tbl
+lynx2-7-1/src/chrtrans/iso06_uni.tbl
+lynx2-7-1/src/chrtrans/iso07_uni.tbl
+lynx2-7-1/src/chrtrans/iso08_uni.tbl
+lynx2-7-1/src/chrtrans/iso09_uni.tbl
+lynx2-7-1/src/chrtrans/iso10_uni.tbl
+lynx2-7-1/src/chrtrans/koi8r_uni.tbl
+lynx2-7-1/src/chrtrans/rfc_suni.tbl
+lynx2-7-1/src/chrtrans/cp1252_uni.tbl
+lynx2-7-1/src/chrtrans/cp437_uni.tbl
+lynx2-7-1/src/chrtrans/iso05_uni.tbl
+lynx2-7-1/src/chrtrans/utf8_uni.tbl
+lynx2-7-1/src/chrtrans/mnem_suni.tbl
+lynx2-7-1/src/chrtrans/mnemonic_suni.tbl
+lynx2-7-1/src/chrtrans/cp852_uni.tbl
+lynx2-7-1/src/chrtrans/cp1250_uni.tbl
+lynx2-7-1/src/UCAuto.c
+lynx2-7-1/src/UCAuto.h
+lynx2-7-1/src/UCAux.c
+lynx2-7-1/src/UCdomap.c
+lynx2-7-1/src/UCdomap.h
diff --git a/newfiles.configure b/newfiles.configure
new file mode 100644
index 00000000..8c9c4de3
--- /dev/null
+++ b/newfiles.configure
@@ -0,0 +1,11 @@
+lynx2-7-1/WWW/Library/unix/makefile.in
+lynx2-7-1/aclocal.m4
+lynx2-7-1/config.guess
+lynx2-7-1/config.hin
+lynx2-7-1/config.sub
+lynx2-7-1/configure
+lynx2-7-1/configure.in
+lynx2-7-1/install.sh
+lynx2-7-1/makefile.in
+lynx2-7-1/src/chrtrans/makefile.in
+lynx2-7-1/src/makefile.in
diff --git a/samples/lynx.cfg b/samples/lynx.cfg
index a5db76c9..3ac662f5 100644
--- a/samples/lynx.cfg
+++ b/samples/lynx.cfg
@@ -526,6 +526,10 @@ CHARACTER_SET:ISO Latin 1
 #
 #LYNX_SIG_FILE:.lynxsig
 
+# If USE_MOUSE is set TRUE, Lynx (when configured with ncurses) will allow
+# the user to click with button-1 on links to select them.
+#USE_MOUSE: FALSE
+
 # If USE_SELECT_POPUPS is set FALSE, Lynx will present a vertical list of
 # radio buttons for the OPTIONs in SELECT blocks which lack the MULTIPLE
 # attribute, instead of using a popup menu.  Note that if the MULTIPLE
@@ -1341,8 +1345,9 @@ MINIMAL_COMMENTS:TRUE
 #	DIRED_MENU:type:suffix:link text:extra text:action
 #
 #	type: TAG: list only when one or more files are tagged
-#	      FILE: list only when the current selection is a file
+#	      FILE: list only when the current selection is a regular file
 #	      DIR: list only when the current selection is a directory
+#	      LINK: list only when the current selection is a symbolic link
 #
 #	suffix: list only if the current selection ends in this pattern
 #
@@ -1363,14 +1368,23 @@ MINIMAL_COMMENTS:TRUE
 #
 #DIRED_MENU:::New File:(in current directory):LYNXDIRED://NEW_FILE%d
 #DIRED_MENU:::New Directory:(in current directory):LYNXDIRED://NEW_FOLDER%d
-#DIRED_MENU:::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
-#DIRED_MENU:::Modify Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+
+#DIRED_MENU:FILE::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
+#DIRED_MENU:DIR::Install:(of current selection):LYNXDIRED://INSTALL_SRC%p
+#DIRED_MENU:FILE::Modify File Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+#DIRED_MENU:DIR::Modify Directory Name:(of current selection):LYNXDIRED://MODIFY_NAME%p
+#DIRED_MENU:LINK::Modify Name:(of selected symbolic link):LYNXDIRED://MODIFY_NAME%p
 
 # Following depends on OK_PERMIT
-#DIRED_MENU:::Permit Name:(of current selection):LYNXDIRED://PERMIT_SRC%p
+#DIRED_MENU:FILE::Modify File Permissions:(of current selection):LYNXDIRED://PERMIT_SRC%p
+#DIRED_MENU:DIR::Modify Directory Permissions:(of current selection):LYNXDIRED://PERMIT_SRC%p
 
-#DIRED_MENU:::Change Location:(of current selection):LYNXDIRED://MODIFY_LOCATION%p
-#DIRED_MENU:::Remove:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:FILE::Change Location:(of selected file):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:DIR::Change Location:(of selected directory):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:LINK::Change Location:(of selected symbolic link):LYNXDIRED://MODIFY_LOCATION%p
+#DIRED_MENU:FILE::Remove File:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:DIR::Remove Directory:(current selection):LYNXDIRED://REMOVE_SINGLE%p
+#DIRED_MENU:LINK::Remove Symbolic Link:(current selection):LYNXDIRED://REMOVE_SINGLE%p
 
 # Following depends on OK_UUDECODE and !ARCHIVE_ONLY
 #DIRED_MENU:FILE::UUDecode:(current selection):LYNXDIRED://UUDECODE%p
@@ -1415,7 +1429,7 @@ MINIMAL_COMMENTS:TRUE
 #DIRED_MENU:TAG::Remove all tagged files and directories.::LYNXDIRED://REMOVE_TAGGED
 #DIRED_MENU:TAG::Untag all tagged items.::LYNXDIRED://CLEAR_TAGGED
 
-# COLORS (only available if compiled with slang)
+# COLORS (only available if compiled with SVr4 curses or slang)
 # The line must be of the form:
 # COLOR:INTEGER:FOREGROUND:BACKGROUND
 # Here FOREGROUND and BACKGROUND must be one of:
diff --git a/src/GridText.c b/src/GridText.c
index 28f23420..ef0c7de5 100644
--- a/src/GridText.c
+++ b/src/GridText.c
@@ -28,6 +28,13 @@
 #include "LYMail.h"
 #include "LYList.h"
 #include "LYCharSets.h"
+#ifdef EXP_CHARTRANS
+#include "UCDefs.h"
+#include "UCAux.h"
+#ifdef EXP_CHARTRANS_AUTOSWITCH
+#include "UCAuto.h"
+#endif /* EXP_CHARTRANS_AUTOSWITCH */
+#endif /* EXP_CHARTRANS */
 
 #include "LYexit.h"
 #include "LYLeaks.h"
@@ -153,6 +160,11 @@ struct _HText {
 
         HTStream*               target;                 /* Output stream */
         HTStreamClass           targetClass;            /* Output routines */
+#ifdef EXP_CHARTRANS
+    LYUCcharset	* UCI;	/* pointer to node_anchor's UCInfo */
+    int	UCLYhndl;		/* tells us what charset we are fed */
+    UCTransParams T;
+#endif
 };
 
 /*
@@ -182,7 +194,22 @@ PRIVATE HTStyle default_style =
 PRIVATE HTList * loaded_texts = NULL;	 /* A list of all those in memory */
 PUBLIC  HTList * search_queries = NULL;  /* isindex and whereis queries   */
 PRIVATE void free_all_texts NOARGS;
-PRIVATE int HText_TrueLineSize PARAMS((HTLine *line));
+PRIVATE int HText_TrueLineSize PARAMS((HTLine *line, HText *text));
+
+#ifdef EXP_CHARTRANS
+PRIVATE void htext_get_chartrans_info ARGS1(HText *, me)
+{
+    me->UCLYhndl = HTAnchor_getUCLYhndl(me->node_anchor,UCT_STAGE_HTEXT);
+    if (me->UCLYhndl < 0) {
+	int chndl = current_char_set;
+	HTAnchor_setUCInfoStage(me->node_anchor, chndl, UCT_STAGE_HTEXT,
+				UCT_SETBY_STRUCTURED);
+	me->UCLYhndl = HTAnchor_getUCLYhndl(me->node_anchor,
+					    UCT_STAGE_HTEXT);
+    }
+    me->UCI = HTAnchor_getUCInfoStage(me->node_anchor,UCT_STAGE_HTEXT);
+}
+#endif /* EXP_CHARTRANS */
 
 /*			Creation Method
 **			---------------
@@ -276,6 +303,14 @@ PUBLIC HText *	HText_new ARGS1(
     self->kanji_buf = '\0';
     self->in_sjis = 0;
 
+#ifdef EXP_CHARTRANS
+	htext_get_chartrans_info(self);
+	UCSetTransParams(&self->T,
+		     self->UCLYhndl, self->UCI,
+		     current_char_set,
+		     &LYCharSet_UC[current_char_set]);
+#endif /* EXP_CHARTRANS */
+
     /*
      *  Check the kcode setting if the anchor has a charset element. - FM
      */
@@ -289,7 +324,6 @@ PUBLIC HText *	HText_new ARGS1(
      *		if the underline is not filled with dots.
      */ 
     if (underscore_string[0] != '.') {
-        char *p;
 	/*
 	 *  Create and array of dots for the UNDERSCORES macro. - FM
 	 */
@@ -427,6 +461,12 @@ PUBLIC void HText_free ARGS1(
      *  if it is not a destination of other links. - FM
      */
     if (self->node_anchor) {
+#ifdef EXP_CHARTRANS
+	HTAnchor_resetUCInfoStage(self->node_anchor, -1, UCT_STAGE_STRUCTURED,
+				  UCT_SETBY_NONE);
+	HTAnchor_resetUCInfoStage(self->node_anchor, -1, UCT_STAGE_HTEXT,
+				  UCT_SETBY_NONE);
+#endif /* EXP_CHARTRANS */
         HTAnchor_delete(self->node_anchor);
     }
 
@@ -441,12 +481,16 @@ PUBLIC void HText_free ARGS1(
 /*	Output a line
 **	-------------
 */
-PRIVATE int display_line ARGS1(
-	HTLine *,	line)
+PRIVATE int display_line ARGS2(
+	HTLine *,	line,
+	HText *,	text)
 {
     register int i,j;
-    char buffer[3];
+    char buffer[7];
     char *data;
+#ifdef EXP_CHARTRANS
+    int utf_extra = 0;
+#endif
 
     buffer[0] = buffer[1] = buffer[2] = '\0';
     clrtoeol();
@@ -517,6 +561,33 @@ PRIVATE int display_line ARGS1(
 		}
 
 	    default:
+#ifdef EXP_CHARTRANS
+		    if (text->T.output_utf8 && !isascii(buffer[0])) {
+			if ((*buffer & 0xe0) == 0xc0) {
+			    utf_extra = 1;
+			} else if ((*buffer & 0xf0) == 0xe0) {
+			    utf_extra = 2;
+			} else if ((*buffer & 0xf8) == 0xf0) {
+			    utf_extra = 3;
+			} else if ((*buffer & 0xfc) == 0xf8) {
+			    utf_extra = 4;
+			} else if ((*buffer & 0xfe) == 0xfc) {
+			    utf_extra = 5;
+			} else { /* garbage */
+			    utf_extra = 0;
+			}
+			if (strlen(data) < utf_extra)
+			    utf_extra = 0; /* shouldn't happen */
+		    }
+		    if (utf_extra) {
+			strncpy(&buffer[1], data, utf_extra);
+			buffer[utf_extra+1] = '\0';
+			addstr(buffer);
+			buffer[1] = '\0';
+			data += utf_extra;
+			utf_extra = 0;
+		    } else
+#endif /* EXP_CHARTRANS */
 		/* For CJK strings, by Masanobu Kimura */
 		if (HTCJK != NOCJK && !isascii(buffer[0])) { 
 		    buffer[1] = *data;
@@ -652,13 +723,17 @@ PRIVATE void display_page ARGS3(
 {
     HTLine * line = NULL;
     int i;
-    char *cp, tmp[3];
+    char *cp, tmp[7];
     int last_screen;
     TextAnchor *Anchor_ptr = NULL;
     FormInfo *FormInfo_ptr;
     BOOL display_flag = FALSE;
     HTAnchor *link_dest;
     static int last_nlinks = 0;
+#ifdef EXP_CHARTRANS
+    int utf_found = 0;
+    static int charset_last_displayed = -1;
+#endif /* EXP_CHARTRANS */
 
     lynx_mode = NORMAL_LYNX_MODE;
  
@@ -698,6 +773,25 @@ PRIVATE void display_page ARGS3(
          i++, line = line->next) 			/* Loop */
 	assert(line->next != NULL);
 
+#ifdef EXP_CHARTRANS
+#ifdef EXP_CHARTRANS_AUTOSWITCH
+#ifdef LINUX
+    if (LYlowest_eightbit[current_char_set] <= 255 &&
+	(current_char_set != charset_last_displayed) &&
+	/* current_char_set has changed since last invocation,
+	   and it's not just 7-bit.
+	   Also we don't want to do this for -dump and -source etc. */
+	LYCursesON) {
+	charset_last_displayed = current_char_set;
+	stop_curses();
+	UCChangeTerminalCodepage(current_char_set,
+				&LYCharSet_UC[current_char_set]);
+	start_curses();
+    }
+#endif /* LINUX */
+#endif /* EXP_CHARTRANS_AUTOSWITCH */
+#endif /* EXP_CHARTRANS */
+
     /*
      *  Check whether to force a screen clear to enable scrollback,
      *  or as a hack to fix a reverse clear screen problem for some
@@ -718,25 +812,45 @@ PRIVATE void display_page ARGS3(
      */
     if (line) {
       for (i = 0; i < (display_lines); i++)  {
+#ifdef EXP_CHARTRANS
+	  int len_needed;
+#endif /* EXP_CHARTRANS */
 
         assert(line != NULL);
-        display_line(line);
+        display_line(line, text);
 
         /*
 	 *  If the target is on this line, underline it.
 	 */
         if (strlen(target) > 0 &&
+#ifdef EXP_CHARTRANS
+	    (case_sensitive ?  
+	     (cp = LYno_attr_mbcs_strstr(line->data, target,
+					 text->T.output_utf8,
+					 &len_needed)) != NULL : 
+	     (cp = LYno_attr_mbcs_case_strstr(line->data, target,
+					      text->T.output_utf8,
+					      &len_needed)) != NULL) &&
+            ((int)line->offset + len_needed) < LYcols
+#else
 	    (case_sensitive ?  
 	    (cp = LYno_attr_char_strstr(line->data, target)) != NULL : 
 	    (cp = LYno_attr_char_case_strstr(line->data, target)) != NULL) &&
             ((int)(cp - (char *)line->data) +
-	     (int)line->offset + strlen(target)) < LYcols) {
+	     (int)line->offset + strlen(target)) < LYcols
+#endif /* EXP_CHARTRANS */
+	    ) {
 
 	    int itmp = 0;
 	    int written = 0;
 	    int x_pos=(int)line->offset + (int)(cp - line->data);
 	    int len = strlen(target);
+#ifdef EXP_CHARTRANS
+	    int utf_extra = 0;
+#endif /* EXP_CHARTRANS */
 
+	    start_bold();
+	    start_reverse();
 	    start_underline();
 		/* underline string */
 	    for (; written < len && (tmp[0] = line->data[itmp]) != '\0';
@@ -748,6 +862,35 @@ PRIVATE void display_page ARGS3(
 		} else if (cp == &line->data[itmp]) {
 		    /* first character of target */
             	    move(i+1, x_pos);
+#ifdef EXP_CHARTRANS
+		    if (text->T.output_utf8 && !isascii(tmp[0])) {
+			if ((*tmp & 0xe0) == 0xc0) {
+			    utf_extra = 1;
+			} else if ((*tmp & 0xf0) == 0xe0) {
+			    utf_extra = 2;
+			} else if ((*tmp & 0xf8) == 0xf0) {
+			    utf_extra = 3;
+			} else if ((*tmp & 0xfc) == 0xf8) {
+			    utf_extra = 4;
+			} else if ((*tmp & 0xfe) == 0xfc) {
+			    utf_extra = 5;
+			} else { /* garbage */
+			    utf_extra = 0;
+			}
+			if (strlen(&line->data[1]) < utf_extra)
+			    utf_extra = 0; /* shouldn't happen */
+		    }
+		    if (utf_extra) {
+			strncpy(&tmp[1], &line->data[itmp+1], utf_extra);
+			tmp[utf_extra+1] = '\0';
+			itmp += utf_extra;
+			addstr(tmp);
+			tmp[1] = '\0';
+			written = written + utf_extra + 1;
+			utf_extra = 0;
+			utf_found++;
+		    } else
+#endif /* EXP_CHARTRANS */
 		    if (HTCJK != NOCJK && !isascii(tmp[0])) {
 		        /* For CJK strings, by Masanobu Kimura */
 		        tmp[1] = line->data[++itmp];
@@ -761,6 +904,35 @@ PRIVATE void display_page ARGS3(
 
 		} else if (&line->data[itmp] > cp) { 
 		    /* print all the other target chars */
+#ifdef EXP_CHARTRANS
+		    if (text->T.output_utf8 && !isascii(tmp[0])) {
+			if ((*tmp & 0xe0) == 0xc0) {
+			    utf_extra = 1;
+			} else if ((*tmp & 0xf0) == 0xe0) {
+			    utf_extra = 2;
+			} else if ((*tmp & 0xf8) == 0xf0) {
+			    utf_extra = 3;
+			} else if ((*tmp & 0xfc) == 0xf8) {
+			    utf_extra = 4;
+			} else if ((*tmp & 0xfe) == 0xfc) {
+			    utf_extra = 5;
+			} else { /* garbage */
+			    utf_extra = 0;
+			}
+			if (strlen(&line->data[1]) < utf_extra)
+			    utf_extra = 0; /* shouldn't happen */
+		    }
+		    if (utf_extra) {
+			strncpy(&tmp[1], &line->data[itmp+1], utf_extra);
+			tmp[utf_extra+1] = '\0';
+			itmp += utf_extra;
+			addstr(tmp);
+			tmp[1] = '\0';
+			written = written + utf_extra + 1;
+			utf_extra = 0;
+			utf_found++;
+		    } else
+#endif /* EXP_CHARTRANS */
 		    if (HTCJK != NOCJK && !isascii(tmp[0])) {
 		        /* For CJK strings, by Masanobu Kimura */
 		        tmp[1] = line->data[++itmp];
@@ -775,6 +947,8 @@ PRIVATE void display_page ARGS3(
 	    }
 
 	    stop_underline();
+	    stop_reverse();
+	    stop_bold();
 	    move(i+2, 0);
 	}
 
@@ -945,7 +1119,12 @@ PRIVATE void display_page ARGS3(
     if (!display_flag) /* nothing on the page */
 	addstr("\n     Document is empty");
 
-    if (HTCJK != NOCJK || TRACE) {
+
+    if (HTCJK != NOCJK ||
+#ifdef EXP_CHARTRANS
+	text->T.output_utf8 ||
+#endif /* EXP_CHARTRANS */
+	TRACE) {
         /* for non-multibyte curses ;_; */
         clearok(curscr, TRUE);
     }
@@ -1144,6 +1323,10 @@ PRIVATE void split_line ARGS2(
 	for (i = (plen - 1); i >= 0; i--) {
 	    if (p[i] == LY_BOLD_START_CHAR ||
 	        p[i] == LY_BOLD_END_CHAR ||
+#ifdef EXP_CHARTRANS
+#define IS_UTFEXTRA(ch) (text->T.output_utf8 && ((unsigned char)(ch)&0xc0) == 0x80)
+		IS_UTFEXTRA(p[i]) ||
+#endif /* EXP_CHARTRANS */
 		p[i] == LY_SOFT_HYPHEN) {
 	        ctrl_chars_on_this_line++;
 	    }
@@ -1194,6 +1377,9 @@ PRIVATE void split_line ARGS2(
 	    *cp == LY_UNDERLINE_END_CHAR ||
 	    *cp == LY_BOLD_START_CHAR ||
 	    *cp == LY_BOLD_END_CHAR ||
+#ifdef EXP_CHARTRANS
+	    IS_UTFEXTRA(*cp) ||
+#endif /* EXP_CHARTRANS */
 	    *cp == LY_SOFT_HYPHEN)
 	    ctrl_chars_on_previous_line++;
     }
@@ -1236,9 +1422,8 @@ PRIVATE void blank_lines ARGS2(
     if (!HText_LastLineSize(text)) {	/* No text on current line */
 	HTLine * line = text->last_line->prev;
 	while ((line != text->last_line) &&
-	       (HText_TrueLineSize(line) == 0)) {
-	    if (newlines == 0)
-	        break;
+	       (HText_TrueLineSize(line, text) == 0)) {
+	    if (newlines == 0) break;
 	    newlines--;		/* Don't bother: already blank */
 	    line = line->prev;
 	}
@@ -1319,6 +1504,10 @@ PUBLIC void HText_appendCharacter ARGS2(
 	return;
     if ((unsigned char)ch == 155 && HTCJK == NOCJK) {	/* octal 233 */
         if (!HTPassHighCtrlRaw &&
+#ifdef EXP_CHARTRANS
+	    !text->T.transp && !text->T.output_utf8 &&
+	    (155 < LYlowest_eightbit[current_char_set]) &&
+#endif /* EXP_CHARTRANS */
 	    strncmp(LYchar_set_names[current_char_set],
 		    "IBM PC character set", 20) &&
 	    strncmp(LYchar_set_names[current_char_set],
@@ -1473,6 +1662,14 @@ PUBLIC void HText_appendCharacter ARGS2(
 	}
     }
 
+#ifdef EXP_CHARTRANS
+    if (IS_UTFEXTRA(ch)) {
+	line->data[line->size++] = ch;
+	line->data[line->size] = '\0';
+	ctrl_chars_on_this_line++;
+	return;
+    }
+#endif /* EXP_CHARTRANS */
 
     /*
      *  New Line.
@@ -1984,6 +2181,11 @@ re_parse:
         if (anchor_ptr->line_pos > 0) {
             register int offset = 0, i = 0;
             for (; i < anchor_ptr->line_pos; i++)
+#ifdef EXP_CHARTRANS
+		if (IS_UTFEXTRA(line_ptr->data[i]))
+		    offset++;
+		else
+#endif /* EXP_CHARTRANS */
                 if (IsSpecialAttrChar(line_ptr->data[i]))
                     offset++;
             anchor_ptr->line_pos -= offset;
@@ -3135,7 +3337,7 @@ PUBLIC int HText_LastLineSize ARGS1(
 {
     if (!text || !text->last_line || !text->last_line->size)
         return 0;
-    return HText_TrueLineSize(text->last_line);
+    return HText_TrueLineSize(text->last_line, text);
 }
 
 PUBLIC int HText_PreviousLineSize ARGS1(
@@ -3147,11 +3349,10 @@ PUBLIC int HText_PreviousLineSize ARGS1(
         return 0;
     if (!(line = text->last_line->prev))
         return 0;
-    return HText_TrueLineSize(line);
+    return HText_TrueLineSize(line, text);
 }
 
-PRIVATE int HText_TrueLineSize ARGS1(
-	HTLine *,	line)
+PRIVATE int HText_TrueLineSize ARGS2(HTLine *,line, HText *,text)
 {
     int i, true_size = 0;
 
@@ -3160,6 +3361,10 @@ PRIVATE int HText_TrueLineSize ARGS1(
 
     for (i = 0; i < line->size; i++) {
     	if (!IsSpecialAttrChar(line->data[i])) {
+#ifdef EXP_CHARTRANS
+	  if (!text->T.output_utf8 || (unsigned char)line->data[i] < 128 ||
+    		((unsigned char)(line->data[i] & 0xc0) == 0xc0))
+#endif /* EXP_CHARTRANS */
 	    true_size++;
 	}
     }
@@ -3683,7 +3888,7 @@ PUBLIC int HText_beginInput ARGS2(
 	    I->checked = TRUE;
 	} else {
 	    TextAnchor * b = text->first_anchor;
-	    int i = 0;
+	    int i2 = 0;
 	    while (b) {
 	        if (b->link_type == INPUT_ANCHOR &&
 		    b->input_field->type == F_RADIO_TYPE &&
@@ -3694,11 +3899,11 @@ PUBLIC int HText_beginInput ARGS2(
 			    StrAllocCopy(b->input_field->orig_value, "0");
 			    break;
 			}
-			i++;
+			i2++;
 		    }
 		}
 		if (b == text->last_anchor) {
-		    if (i == 0)
+		    if (i2 == 0)
 		       I->checked = TRUE;
 		    break;
 		}
diff --git a/src/HTAlert.c b/src/HTAlert.c
index 2d40ea51..246716e3 100644
--- a/src/HTAlert.c
+++ b/src/HTAlert.c
@@ -254,7 +254,6 @@ PUBLIC BOOL HTConfirmCookie ARGS6(
 	CONST char *,	value)
 {
     char message[256];
-    HTList *hl;
     domain_entry *de;
     int ch, namelen, valuelen, space_free;
 
diff --git a/src/HTFWriter.c b/src/HTFWriter.c
index 58baaa9f..55e5d932 100644
--- a/src/HTFWriter.c
+++ b/src/HTFWriter.c
@@ -12,8 +12,12 @@
 #include "tcp.h"
 #include "LYCurses.h"
 #include "HTFWriter.h"
+#include "HTSaveToFile.h"
 
 #include "HTFormat.h"
+#ifdef EXP_CHARTRANS
+#include "UCDefs.h"
+#endif /* EXP_CHARTRANS */
 #include "HTAlert.h"
 #include "HTFile.h"
 #include "HTPlain.h"
@@ -21,6 +25,9 @@
 #ifdef VMS
 #include "HTVMSUtils.h"
 #endif /* VMS */
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 
 #include "LYStrings.h"
 #include "LYUtils.h"
@@ -37,7 +44,8 @@ PUBLIC char * WWW_Download_File=NULL; /* contains the name of the temp file
 				      */
 PUBLIC char LYCancelDownload=FALSE;   /* exported to HTFormat.c in libWWW */
 
-extern char dump_output_immediately;  /* if true dump to stdout and quit */
+/* Type mismatch found here - char != BOOLEAN - WSB */
+extern BOOLEAN dump_output_immediately;  /* if true dump to stdout and quit */
 
 #ifdef VMS
 extern BOOLEAN HadVMSInterrupt;      /* flag from cleanup_sig()		*/
@@ -201,14 +209,28 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
 		     *  HTLoadFile() to handle it. - FM
 		     */
 		    StrAllocCopy(addr, "file://localhost");
+#ifdef DOSPATH
+			 StrAllocCat(addr, "/");
+			 StrAllocCat(addr, HTDOS_wwwName(path));
+#else
 #ifdef VMS
 		    StrAllocCat(addr, HTVMS_wwwName(path));
 #else
 		    StrAllocCat(addr, path);
 #endif /* VMS */
+#endif /* DOSPATH */
 		    StrAllocCopy(me->anchor->FileCache, path);
 		    FREE(path);
 		    FREE(me->anchor->content_encoding);
+#ifdef EXP_CHARTRANS
+		    /* lock the chartrans info we may possibly have,
+		       so HTCharSetFormat will not apply the default for
+		       local files */
+		    HTAnchor_copyUCInfoStage(me->anchor,
+					     UCT_STAGE_PARSER,
+					     UCT_STAGE_MIME,
+					     UCT_SETBY_PARSER);
+#endif
 		    status = HTLoadFile(addr,
 			    		me->anchor,
 			    		me->output_format,
@@ -271,7 +293,9 @@ PRIVATE void HTFWriter_free ARGS1(HTStream *, me)
         if (me->anchor->FileCache)
             remove(me->anchor->FileCache);
 	FREE(me);
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
         (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
         (void) signal(SIGINT, SIG_DFL);
@@ -761,7 +785,7 @@ PUBLIC HTStream* HTCompressed ARGS3(
     char fnam[256];
     CONST char *suffix;
     char *uncompress_mask = NULL;
-    char *compress_suffix;
+    char *compress_suffix = "";
     char *cp;
     FILE *fp = NULL;
 
diff --git a/src/HTInit.c b/src/HTInit.c
index e5dff4e1..adc9a64e 100644
--- a/src/HTInit.c
+++ b/src/HTInit.c
@@ -594,7 +594,9 @@ PRIVATE int ExitWithError ARGS1(char *,txt)
 {
     if (txt)
         fprintf(stderr, "metamail: %s\n", txt);
+#ifndef NOSIGHUP
     (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
     (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
     (void) signal(SIGINT, SIG_DFL);
diff --git a/src/HTML.c b/src/HTML.c
index b8aa4e0f..81cb1894 100644
--- a/src/HTML.c
+++ b/src/HTML.c
@@ -28,6 +28,11 @@
 #include "LYGlobalDefs.h"
 #include "LYCharUtils.h"
 #include "LYCharSets.h"
+#ifdef EXP_CHARTRANS
+#include "UCMap.h"
+#include "UCDefs.h"
+#include "UCAux.h"
+#endif
 
 #include "HTAlert.h"
 #include "HTFont.h"
@@ -107,6 +112,13 @@ a sequence of styles.
 PRIVATE void actually_set_style ARGS1(HTStructured *, me)
 {
     if (!me->text) {			/* First time through */
+#ifdef EXP_CHARTRANS
+	html_get_chartrans_info(me);
+	UCSetTransParams(&me->T,
+		     me->UCLYhndl, me->UCI,
+		     HTAnchor_getUCLYhndl(me->node_anchor,UCT_STAGE_HTEXT),
+		     HTAnchor_getUCInfoStage(me->node_anchor,UCT_STAGE_HTEXT));
+#endif /* EXP_CHARTRANS */
 	    me->text = HText_new2(me->node_anchor, me->target);
 	    HText_beginAppend(me->text);
 	    HText_setStyle(me->text, me->new_style);
@@ -459,6 +471,9 @@ PRIVATE void HTML_start_element ARGS5(
     char *map_href = NULL;
     char *title = NULL;
     char *temp = NULL;
+#ifdef EXP_CHARTRANS
+    int dest_char_set  = -1;
+#endif
     static BOOLEAN first_option = TRUE;	     /* is this the first option tag? */
     HTParentAnchor *dest = NULL;	     /* an anchor's destination */
     BOOL dest_ismap = FALSE;	     	     /* is dest an image map script? */
@@ -810,9 +825,9 @@ PRIVATE void HTML_start_element ARGS5(
 		    		NULL,			/* Tag */
 		    		href,			/* Addresss */
 		    		(void *)0);		/* Type */
-	    if (dest = HTAnchor_parent(
+	    if ((dest = HTAnchor_parent(
 			    HTAnchor_followMainLink((HTAnchor*)me->CurrentA)
-			    	      )) {
+			    	      )) != 0) {
 		if (!HTAnchor_title(dest))
 		    HTAnchor_setTitle(dest, title);
 		dest = NULL;
@@ -1399,8 +1414,7 @@ PRIVATE void HTML_start_element ARGS5(
 		 *  The INDENT value is in "en" (enval per column) units.
 		 *  Divide it by enval, rounding odd values up. - FM
 		 */
-	        target =
-		   (int)((((float)atoi(value[HTML_TAB_INDENT]))/enval)+(0.5));
+	        target = ((1.0 * atoi(value[HTML_TAB_INDENT])) / enval) + 0.5;
 	    }
 	    /*
 	     *  If we are being directed to a column too far to the left
@@ -2115,7 +2129,7 @@ PRIVATE void HTML_start_element ARGS5(
 			(present &&
 			 present[HTML_A_TYPE] &&
 			   value[HTML_A_TYPE]) ? 
-   (HTLinkType*)HTAtom_for(value[HTML_A_TYPE]) : (HTLinkType*)0);  /* Type */
+   (HTLinkType*)HTAtom_for(value[HTML_A_TYPE]) : (HTLinkType *)0);	/* Type */
 
 	/*
 	 *  Get rid of href since no longer needed.
@@ -2143,7 +2157,17 @@ PRIVATE void HTML_start_element ARGS5(
 	    }
 	    if (present[HTML_A_ISMAP])
 		dest_ismap = TRUE;
+#ifdef EXP_CHARTRANS
+	        if (present[HTML_A_CHARSET] &&
+		    value[HTML_A_CHARSET] && *value[HTML_A_CHARSET] != '\0') {
+		    dest_char_set = UCGetLYhndl_byMIME(value[HTML_A_CHARSET]);
+		    if (dest_char_set < 0)
+		        dest_char_set = UCLYhndl_for_unrec;
+		}
+		if (title != NULL || dest_ismap == TRUE || dest_char_set >= 0)
+#else
 	    if (title != NULL || dest_ismap == TRUE)
+#endif /* EXP_CHARTRANS */
 	        dest = HTAnchor_parent(
 			HTAnchor_followMainLink((HTAnchor*)me->CurrentA)
 		    		      );
@@ -2151,6 +2175,13 @@ PRIVATE void HTML_start_element ARGS5(
 		HTAnchor_setTitle(dest, title);
 	    if (dest && dest_ismap)
 		dest->isISMAPScript = TRUE;
+#ifdef EXP_CHARTRANS
+		if (dest && dest_char_set >= 0)
+		    HTAnchor_setUCInfoStage(dest, dest_char_set,
+					    UCT_STAGE_PARSER,
+					    UCT_SETBY_DEFAULT);
+		dest_char_set = -1;
+#endif /* EXP_CHARTRANS */
 	    dest = NULL;
 	    dest_ismap = FALSE;
 	    FREE(title);
@@ -2170,9 +2201,9 @@ PRIVATE void HTML_start_element ARGS5(
 	 *  which typically returns the image's default. - FM
 	 */
 	if (me->inA && me->CurrentA) {
-	    if (dest = HTAnchor_parent(
+	    if ((dest = HTAnchor_parent(
 			HTAnchor_followMainLink((HTAnchor*)me->CurrentA)
-				      )) {
+				      )) != 0) {
 		if (dest->isISMAPScript == TRUE) {
 		    dest_ismap = TRUE;
 		    if (TRACE)
@@ -2405,11 +2436,11 @@ PRIVATE void HTML_start_element ARGS5(
 		    HText_endAnchor(me->text);
 		    HText_appendCharacter(me->text, '-');
 		    if (id_string) {
-		        if (ID_A = HTAnchor_findChildAndLink(
+		        if ((ID_A = HTAnchor_findChildAndLink(
 				  me->node_anchor,	/* Parent */
 				  id_string,		/* Tag */
 				  NULL,			/* Addresss */
-				  (void *)0)) {		/* Type */
+				  (void *)0)) != 0) {	/* Type */
 		            HText_beginAnchor(me->text, ID_A);
 		            HText_endAnchor(me->text);
 		        }
@@ -2420,9 +2451,9 @@ PRIVATE void HTML_start_element ARGS5(
 				map_href,		/* Addresss */
 				(void *)0);		/* Type */
 		    if (me->CurrentA && title) {
-			if (dest = HTAnchor_parent(
+			if ((dest = HTAnchor_parent(
 				HTAnchor_followMainLink((HTAnchor*)me->CurrentA)
-					          )) {
+					          )) != 0) {
 			    if (!HTAnchor_title(dest))
 			        HTAnchor_setTitle(dest, title);
 			}
@@ -2446,11 +2477,11 @@ PRIVATE void HTML_start_element ARGS5(
 		   ((map_href || dest_ismap) ?
 			     	   "(IMAGE)" : "(OBJECT)") : "[IMAGE]"));
 		if (id_string && !map_href) {
-		    if (ID_A = HTAnchor_findChildAndLink(
+		    if ((ID_A = HTAnchor_findChildAndLink(
 				  me->node_anchor,	/* Parent */
 				  id_string,		/* Tag */
 				  NULL,			/* Addresss */
-				  (void *)0)) {		/* Type */
+				  (void *)0)) != 0) {	/* Type */
 		        HText_beginAnchor(me->text, ID_A);
 		        HText_endAnchor(me->text);
 		    }
@@ -2459,11 +2490,11 @@ PRIVATE void HTML_start_element ARGS5(
 	        HTML_put_character(me, ' ');  /* space char may be ignored */
 		me->in_word = NO;
 		if (id_string) {
-		    if (ID_A = HTAnchor_findChildAndLink(
+		    if ((ID_A = HTAnchor_findChildAndLink(
 				  me->node_anchor,	/* Parent */
 				  id_string,		/* Tag */
 				  NULL,			/* Addresss */
-				  (void *)0)) {		/* Type */
+				  (void *)0)) != 0) {	/* Type */
 		        HText_beginAnchor(me->text, ID_A);
 		        HText_endAnchor(me->text);
 		    }
@@ -2474,9 +2505,9 @@ PRIVATE void HTML_start_element ARGS5(
 				map_href,		/* Addresss */
 				(void *)0);		/* Type */
 		if (me->CurrentA && title) {
-		    if (dest = HTAnchor_parent(
+		    if ((dest = HTAnchor_parent(
 				HTAnchor_followMainLink((HTAnchor*)me->CurrentA)
-					      )) {
+					      )) != 0) {
 		        if (!HTAnchor_title(dest))
 			    HTAnchor_setTitle(dest, title);
 		    }
@@ -2500,11 +2531,11 @@ PRIVATE void HTML_start_element ARGS5(
 	        HTML_put_character(me, ' ');  /* space char may be ignored */
 		me->in_word = NO;
 		if (id_string) {
-		    if (ID_A = HTAnchor_findChildAndLink(
+		    if ((ID_A = HTAnchor_findChildAndLink(
 				  me->node_anchor,	/* Parent */
 				  id_string,		/* Tag */
 				  NULL,			/* Addresss */
-				  (void *)0)) {		/* Type */
+				  (void *)0)) != 0) {	/* Type */
 		        HText_beginAnchor(me->text, ID_A);
 		        HText_endAnchor(me->text);
 		    }
@@ -2539,9 +2570,7 @@ PRIVATE void HTML_start_element ARGS5(
 		 *  We're in an anchor and have a USEMAP, so end the anchor
 		 *  and start a new one for the client-side MAP. - FM
 		 */
-		if (dest_ismap || (present && present[HTML_IMG_ISMAP])) {
-		    HTML_put_string(me, "[ISMAP]");
-		} else {
+		if (!(dest_ismap || (present && present[HTML_IMG_ISMAP]))) {
 		    HTML_put_string(me, "[LINK]");
 		}
 		if (me->inBoldA == TRUE && me->inBoldH == FALSE) {
@@ -2549,7 +2578,8 @@ PRIVATE void HTML_start_element ARGS5(
 		}
 		me->inBoldA = FALSE;
 		HText_endAnchor(me->text);
-		HText_appendCharacter(me->text, '-');
+		if (!(dest_ismap || (present && present[HTML_IMG_ISMAP])))
+		    HText_appendCharacter(me->text, '-');
 	    } else {
 	        HTML_put_character(me, ' ');
 	        me->in_word = NO;
@@ -2560,9 +2590,9 @@ PRIVATE void HTML_start_element ARGS5(
 				map_href,		/* Addresss */
 				(void *)0);		/* Type */
 	    if (me->CurrentA && title) {
-		if (dest = HTAnchor_parent(
+		if ((dest = HTAnchor_parent(
 				HTAnchor_followMainLink((HTAnchor*)me->CurrentA)
-				          )) {
+				          )) != 0) {
 		    if (!HTAnchor_title(dest))
 		        HTAnchor_setTitle(dest, title);
 		}
@@ -2591,11 +2621,11 @@ PRIVATE void HTML_start_element ARGS5(
 		me->in_word = NO;
 	    }
 	    if (id_string) {
-		if (ID_A = HTAnchor_findChildAndLink(
+		if ((ID_A = HTAnchor_findChildAndLink(
 				  me->node_anchor,	/* Parent */
 				  id_string,		/* Tag */
 				  NULL,			/* Addresss */
-				  (void *)0)) {		/* Type */
+				  (void *)0)) != 0) {	/* Type */
 		    HText_beginAnchor(me->text, ID_A);
 		    HText_endAnchor(me->text);
 		}
@@ -3402,11 +3432,27 @@ PRIVATE void HTML_start_element ARGS5(
 	    HTChildAnchor * source;
 	    HTAnchor *link_dest;
 
+	    UPDATE_STYLE;
 	    /*
-	     *  Set to know we are in a form.
+	     *  FORM was declared SGML_EMPTY in HTMLDTD.c, and
+	     *  SGML_character() in SGML.c checks for a FORM end
+	     *  tag to call HTML_end_element() directly (with a
+	     *  check in that to bypass decrementing of the HTML
+	     *  parser's stack), so if we have an open FORM, close
+	     *  that one now. - FM
+	     */
+	    if (me->inFORM) {
+	        if (TRACE) {
+		    fprintf(stderr,
+			    "HTML: Missing FORM end tag. Faking it!\n");
+		}
+		HTML_end_element(me, HTML_FORM, (char **)&include);
+	    }
+
+	    /*
+	     *  Set to know we are in a new form.
 	     */
 	    me->inFORM = TRUE;
-	    UPDATE_STYLE;
 
 	    if (present && present[HTML_FORM_ACTION] &&
 	        value[HTML_FORM_ACTION])  {
@@ -3451,7 +3497,7 @@ PRIVATE void HTML_start_element ARGS5(
 						   NULL,
 						   action,
 						   (void *)0);
-		if (link_dest = HTAnchor_followMainLink((HTAnchor *)source)) {
+		if ((link_dest = HTAnchor_followMainLink((HTAnchor *)source)) != 0) {
 		    /*
 		     *  Memory leak fixed.
 		     *  05-28-94 Lynx 2-3-1 Garrett Arch Blythe
@@ -3562,7 +3608,7 @@ PRIVATE void HTML_start_element ARGS5(
 	    /* Check for unclosed TEXTAREA */
 	    if (me->inTEXTAREA) {
 	        if (TRACE) {
-		    fprintf(stderr, "HTML: Missing TEXTAREA end tag\n");
+		    fprintf(stderr, "HTML: Missing TEXTAREA end tag.\n");
 		} else if (!me->inBadHTML) {
 		    _statusline(BAD_HTML_USE_TRACE);
 		    me->inBadHTML = TRUE;
@@ -4109,11 +4155,11 @@ PRIVATE void HTML_start_element ARGS5(
 
 	        if (present && present[HTML_OPTION_ID]
 		    && value[HTML_OPTION_ID] && *value[HTML_OPTION_ID]) {
-		    if (ID_A = HTAnchor_findChildAndLink(
+		    if ((ID_A = HTAnchor_findChildAndLink(
 				    me->node_anchor,	   /* Parent */
 				    value[HTML_OPTION_ID], /* Tag */
 				    NULL,		   /* Addresss */
-				    (void *)0)) {	   /* Type */
+				    (void *)0)) != 0) {	   /* Type */
 			HText_beginAnchor(me->text, ID_A);
 			HText_endAnchor(me->text);
 		        I.id = (char *)value[HTML_OPTION_ID];
@@ -4270,7 +4316,8 @@ PRIVATE void HTML_end_element ARGS3(
     char *temp = NULL, *cp = NULL;
 
 #ifdef CAREFUL			/* parser assumed to produce good nesting */
-    if (element_number != me->sp[0].tag_number) {
+    if (element_number != me->sp[0].tag_number &&
+	HTML_dtd.tags[element_number].contents != SGML_EMPTY) {
         fprintf(stderr, 
 		"HTMLText: end of element %s when expecting end of %s\n",
 		HTML_dtd.tags[element_number].name,
@@ -4290,18 +4337,20 @@ PRIVATE void HTML_end_element ARGS3(
     }
 
     /*
-     *  Pop state off stack.
+     *  Pop state off stack if it's not a FORM end tag. - FM
      */
-    if (me->sp < me->stack + MAX_NESTING+1) {
-        (me->sp)++;
-        if (TRACE)
-	    fprintf(stderr,
-	    	    "HTML:end_element: Popped style off stack - %s\n",
-		    me->sp->style->name);
-    } else {
-	if (TRACE)
-	    fprintf(stderr,
+    if (HTML_dtd.tags[element_number].contents != SGML_EMPTY) {
+        if (me->sp < me->stack + MAX_NESTING+1) {
+	    (me->sp)++;
+	    if (TRACE)
+		fprintf(stderr,
+			"HTML:end_element: Popped style off stack - %s\n",
+			me->sp->style->name);
+	} else {
+	    if (TRACE)
+		fprintf(stderr,
   "Stack underflow error!  Tried to pop off more styles than exist in stack\n");
+	}
     }
     
     /*
@@ -4725,11 +4774,10 @@ PRIVATE void HTML_end_element ARGS3(
 	 *  Finish the data off.
 	 */
 	{
-	    int s = 0, e = 0, n = 0;
+	    int s = 0, e = 0;
 	    char *start = NULL, *first_end = NULL;
 	    BOOL have_param = FALSE;
 	    char *data = NULL;
-	    HTPresentation *Pres;
 
 	    HTChunkTerminate(&me->object);
 	    data = me->object.data;
@@ -4910,7 +4958,7 @@ PRIVATE void HTML_end_element ARGS3(
 		if (TRACE)
 		    fprintf(stderr,
 		    "HTML: OBJECT has USEMAP.  Converting to IMG.\n");
-Object_as_IMG:
+
 	        StrAllocCat(*include, "<IMG ISOBJECT");
 	        if (me->object_id != NULL) {
 		    /*
@@ -5058,7 +5106,12 @@ End_Object:
 	break;
 
     case HTML_FORM:
-	/* Make sure we had a form start tag. */
+	/*
+	 *  Check if we had a FORM start tag, and issue a
+	 *  message if not, but fall through to ensure that
+	 *  the FORM-related globals in GridText.c are
+	 *  initialized. - FM
+	 */
 	if (!me->inFORM) {
 	    if (TRACE) {
 		fprintf(stderr, "HTML: Unmatched FORM end tag\n");
@@ -5067,12 +5120,6 @@ End_Object:
 		me->inBadHTML = TRUE;
 		sleep(MessageSecs);
 	    }
-	    /*
-	     *  We probably did start a form, for which bad HTML
-	     *  caused a substitution, so we'll try to end.
-	     *
-	    break;
-	     */
 	}
 
 	/*
@@ -5348,9 +5395,34 @@ End_Object:
 */
 /*	(In fact, they all shrink!)
 */
-PUBLIC void HTML_put_entity ARGS2(HTStructured *, me, int, entity_number)
+PUBLIC int HTML_put_entity ARGS2(HTStructured *, me, int, entity_number)
 {
-    HTML_put_string(me, p_entity_values[entity_number]);
+    int nent = HTML_dtd.number_of_entities;
+  
+    if (entity_number < nent) {		
+	HTML_put_string(me, p_entity_values[entity_number]);
+	return HT_OK;
+#ifdef EXP_CHARTRANS	
+    } else if (me->UCLYhndl < 0) {
+	return HT_CANNOT_TRANSLATE;
+    } else {
+	UCode_t uni = HTML_dtd.extra_entity_info[entity_number-nent].code;
+	int c_out = UCTransUniChar(uni, me->UCLYhndl);
+	if (c_out > 0) {
+	    HTML_put_character(me, (char)c_out);
+	    return HT_OK;
+	} else if (c_out==UCTRANS_NOTFOUND) {
+	    char buf[21];
+	    int c_out2 = UCTransUniCharStr(buf,20, uni, me->UCLYhndl, NO);
+	    if (c_out2 >= 0) {
+		HTML_put_string(me, buf);
+		return HT_OK;
+	    }
+	}
+	return HT_CANNOT_TRANSLATE;
+#endif /* EXP_CHARTRANS */
+    }
+    return HT_OK;
 }
 
 /*	Free an HTML object
@@ -5364,16 +5436,40 @@ PUBLIC void HTML_put_entity ARGS2(HTStructured *, me, int, entity_number)
 **	If non-interactive, everything is freed off.   No: crashes -listrefs
 **	Otherwise, the interactive object is left.	
 */
-PUBLIC void HTML_free ARGS1(HTStructured *, me)
+PRIVATE void HTML_free ARGS1(HTStructured *, me)
 {
+    char *include = NULL;
+
     UPDATE_STYLE;		/* Creates empty document here! */
     if (me->comment_end)
 	HTML_put_string(me, me->comment_end);
     if (me->text) {
+        /*
+	 *  Emphasis containers should have been closed via
+	 *  the SGML_free() wind-down, but let's play it
+	 *  safe. - FM
+	 */
 	if (me->inUnderline) {
 	    HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
 	    me->inUnderline = FALSE;
 	}
+
+	/*
+	 *  FORM was declared SGML_EMPTY in HTMLDTD.c, and
+	 *  SGML_character() in SGML.c checks for a FORM end
+	 *  tag to call HTML_end_element() directly (with a
+	 *  check in that to bypass decrementing of the HTML
+	 *  parser's stack), so if we still have an open FORM,
+	 *  close it now. - FM
+	 */
+	if (me->inFORM) {
+	    HTML_end_element(me, HTML_FORM, (char **)&include);
+	    me->inFORM = FALSE;
+	}
+
+	/*
+	 *  Now call the cleanup function. - FM
+	 */
 	HText_endAppend(me->text);
     }
 
@@ -5401,9 +5497,28 @@ PUBLIC void HTML_free ARGS1(HTStructured *, me)
 
 PRIVATE void HTML_abort ARGS2(HTStructured *, me, HTError, e)
 {
+    char *include = NULL;
+
     if (me->text) {
-	if (me->inUnderline)
+        /*
+	 *  If we have an open emphasis container, close it now. - FM
+	 */
+	if (me->inUnderline) {
 	    HText_appendCharacter(me->text, LY_UNDERLINE_END_CHAR);
+	    me->inUnderline = FALSE;
+	}
+
+        /*
+	 *  If we have an open FORM container, close it now. - FM
+	 */
+	if (me->inFORM) {
+	    HTML_end_element(me, HTML_FORM, (char **)&include);
+	    me->inFORM = FALSE;
+	}
+
+	/*
+	 *  Now call the cleanup function. - FM
+	 */
 	HText_endAppend(me->text);
     }
 
@@ -5542,7 +5657,9 @@ PUBLIC HTStructured* HTML_new ARGS3(
 	    return HTMLGenerator(intermediate);
         fprintf(stderr, "\n** Internal error: can't parse HTML to %s\n",
        		HTAtom_name(format_out));
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
         (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
         (void) signal(SIGINT, SIG_DFL);
@@ -5676,6 +5793,11 @@ PUBLIC HTStructured* HTML_new ARGS3(
  
     me->comment_start = NULL;
     me->comment_end = NULL;
+#ifdef EXP_CHARTRANS
+    html_get_chartrans_info(me);
+
+    UCTransParams_clear(&me->T);
+#endif /* EXP_CHARTRANS */
 
     me->target = stream;
     if (stream)
@@ -5694,7 +5816,7 @@ PUBLIC HTStream* HTMLToPlain ARGS3(
 	HTParentAnchor *,	anchor,	
 	HTStream *,		sink)
 {
-    return SGML_new(&HTML_dtd, HTML_new(anchor, pres->rep_out, sink));
+    return SGML_new(&HTML_dtd, anchor, HTML_new(anchor, pres->rep_out, sink));
 }
 
 /*	HTConverter for HTML to C code
@@ -5716,7 +5838,7 @@ PUBLIC HTStream* HTMLToC ARGS3(
     html->comment_start = "/* ";
     html->comment_end = " */\n";	/* Must start in col 1 for cpp */
 /*    HTML_put_string(html,html->comment_start); */
-    return SGML_new(&HTML_dtd, html);
+    return SGML_new(&HTML_dtd, anchor, html);
 }
 
 /*	Presenter for HTML
@@ -5732,7 +5854,7 @@ PUBLIC HTStream* HTMLPresent ARGS3(
 	HTParentAnchor *,	anchor,	
 	HTStream *,		sink)
 {
-    return SGML_new(&HTML_dtd, HTML_new(anchor, WWW_PRESENT, NULL));
+    return SGML_new(&HTML_dtd, anchor, HTML_new(anchor, WWW_PRESENT, NULL));
 }
 #endif /* !GUI */
 
diff --git a/src/HTML.h b/src/HTML.h
index c4bd3caf..ed3aefee 100644
--- a/src/HTML.h
+++ b/src/HTML.h
@@ -7,6 +7,11 @@
 #ifndef HTML_H
 #define HTML_H
 
+#ifdef EXP_CHARTRANS
+#include "UCDefs.h"
+#include "UCAux.h"
+#endif
+
 #ifndef HTUTILS_H
 #include "HTUtils.h"
 #endif /* HTUTILS_H */
@@ -132,6 +137,12 @@ struct _HTStructured {
     BOOL		inUnderline;
 
     BOOL		needBoldH;
+
+#ifdef EXP_CHARTRANS
+    LYUCcharset	* UCI;	/* pointer to node_anchor's UCInfo */
+    int	UCLYhndl;		/* tells us what charset we are fed */
+    UCTransParams T;
+#endif
 };
 
 struct _HTStream {
@@ -145,7 +156,7 @@ struct _HTStream {
 extern void HTML_put_character PARAMS((HTStructured *me, char c));
 extern void HTML_put_string PARAMS((HTStructured *me, CONST char *s));
 extern void HTML_write PARAMS((HTStructured *me, CONST char *s, int l));
-extern void HTML_put_entity PARAMS((HTStructured *me, int entity_number));
+extern int HTML_put_entity PARAMS((HTStructured *me, int entity_number));
 #endif /* Lynx_HTML_Handler */
 
 /*				P U B L I C
diff --git a/src/LYBookmark.c b/src/LYBookmark.c
index de1b8d07..79e61df9 100644
--- a/src/LYBookmark.c
+++ b/src/LYBookmark.c
@@ -12,6 +12,9 @@
 #include "LYCurses.h"
 #include "GridText.h"
 
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 #ifdef VMS
 #include "HTVMSUtils.h"
 #include <nam.h>
@@ -46,9 +49,6 @@ PUBLIC char * get_bookmark_filename ARGS1(
     char string_buffer[256];
     FILE *fp;
     int MBM_tmp;
-#ifndef VMS
-    int len;
-#endif /* !VMS */
 
     /*
      *  Multi_Bookmarks support. - FMG & FM
@@ -115,21 +115,31 @@ success:
 	is_mosaic_hotlist = TRUE;
 	fclose(fp);
 	newname = convert_mosaic_bookmark_file(filename_buffer);
+#ifdef DOSPATH
+		  sprintf(URL_buffer,"file://localhost/%s",
+				HTDOS_wwwName((char *)newname));
+#else
 #ifdef VMS
 	sprintf(URL_buffer,"file://localhost%s",
 		HTVMS_wwwName((char *)newname));
 #else
 	sprintf(URL_buffer,"file://localhost%s", newname);
 #endif /* VMS */
+#endif /* DOSPATH */
     } else {
 	fclose(fp);
 	is_mosaic_hotlist = FALSE;
+#ifdef DOSPATH
+        sprintf(URL_buffer,"file://localhost/%s",
+				HTDOS_wwwName((char *)filename_buffer));
+#else
 #ifdef VMS
 	sprintf(URL_buffer,"file://localhost%s",
     		HTVMS_wwwName((char *)filename_buffer));
 #else
 	sprintf(URL_buffer,"file://localhost%s", filename_buffer);
 #endif /* VMS */
+#endif /* DOSPATH */ 
     }
 
     StrAllocCopy(*URL, URL_buffer);
@@ -524,7 +534,9 @@ PUBLIC void remove_bookmark_link ARGS2(
     fp = NULL;
     fclose(nfp);
     nfp = NULL;
- 	
+#ifdef DOSPATH
+	 remove(filename_buffer);
+#endif /* DOSPATH */
     if (rename(newfile, filename_buffer) != -1) {
 #ifdef VMS
 	char VMSfilename[256];
@@ -548,7 +560,11 @@ PUBLIC void remove_bookmark_link ARGS2(
 	 *  Check if this is the case and do something appropriate.
 	 *  Used to be ODD_RENAME
 	 */
+#ifdef _WINDOWS
+        if (errno == ENOTSAM) {
+#else
 	if (errno == EXDEV) {
+#endif /* WINDOWS */ 
 	    char buffer[2048];
 	    sprintf(buffer, "%s %s %s", MV_PATH, newfile, filename_buffer);
 	    system(buffer);
@@ -663,12 +679,10 @@ get_advanced_choice:
  */
 PUBLIC int select_menu_multi_bookmarks NOARGS
 {
-    FILE *fp;
-    int c, MBM_counter, MBM_tmp_count, MBM_allow;
+    int c, MBM_tmp_count, MBM_allow;
     int MBM_screens, MBM_from, MBM_to, MBM_current;
     char string_buffer[256];
     char shead_buffer[256];
-    char *cp, *cp1;
 
     /*
      *  If not enabled, pick the "default" (0).
diff --git a/src/LYBookmark.h b/src/LYBookmark.h
index a776a81a..ee642be2 100644
--- a/src/LYBookmark.h
+++ b/src/LYBookmark.h
@@ -14,15 +14,5 @@ extern int select_menu_multi_bookmarks NOPARAMS;
 extern BOOLEAN LYHaveSubBookmarks NOPARAMS;
 extern void LYMBM_statusline PARAMS((char *text));
 
-#define BOOKMARK_TITLE "Bookmark file"
-#define MOSAIC_BOOKMARK_TITLE "Converted Mosaic Hotlist"
-#define MBM_V_MAXFILES  25	/* Max number of sub-bookmark files */
-/*
- *  Arrays that holds the names of sub-bookmark files
- *  and their descriptions.
- */
-char  *MBM_A_subbookmark[MBM_V_MAXFILES+1];
-char  *MBM_A_subdescript[MBM_V_MAXFILES+1];
-
 #endif /* LYBOOKMARK_H */
 
diff --git a/src/LYCgi.c b/src/LYCgi.c
index de6293ec..fce4596a 100644
--- a/src/LYCgi.c
+++ b/src/LYCgi.c
@@ -117,7 +117,7 @@ PUBLIC void add_lynxcgi_environment ARGS1(
     }
 }
 
-PUBLIC int LYLoadCGI ARGS4(
+PRIVATE int LYLoadCGI ARGS4(
 	CONST char *, 		arg,
 	HTParentAnchor *,	anAnchor,
 	HTFormat,		format_out,
diff --git a/src/LYCharSets.c b/src/LYCharSets.c
index 5b243f35..6f3b7123 100644
--- a/src/LYCharSets.c
+++ b/src/LYCharSets.c
@@ -5,6 +5,9 @@
 #include "LYGlobalDefs.h"
 #include "LYCharSets.h"
 #include "LYCharUtils.h"
+#ifdef EXP_CHARTRANS
+#include "UCMap.h"
+#endif /* EXP_CHARTRANS */
 #include "HTFont.h"
 #include "GridText.h"
 #include "LYCurses.h"
@@ -20,6 +23,18 @@ extern HTCJKlang HTCJK;
 PUBLIC HTkcode kanji_code = NOKANJI;
 PUBLIC BOOLEAN LYHaveCJKCharacterSet = FALSE;
 
+#ifdef EXP_CHARTRANS
+extern void UCInit NOARGS;
+extern int UCInitialized;
+#else 
+#ifndef MAX_CHARSETS
+#define MAX_CHARSETS
+#endif
+#ifndef MAX_CHARSETSP
+#define MAX_CHARSETSP
+#endif
+#endif /* EXP_CHARTRANS */
+
 /* INSTRUCTIONS for adding new character sets !!!!
  *
  * Make up a character set and add it in the same
@@ -47,7 +62,7 @@ PRIVATE char * ISO_Latin1[] = {
   	"\303",	/* capital A, tilde - Atilde */ 
   	"\304",	/* capital A, dieresis or umlaut mark - Auml */ 
   	"\307",	/* capital C, cedilla - Ccedil */ 
-  	"\320",	/* capital Eth, Icelandic - Dstrok */ 
+  	"\320",	/* capital Eth or D with stroke - Dstrok */ 
   	"\320",	/* capital Eth, Icelandic - ETH */ 
   	"\311",	/* capital E, acute accent - Eacute */ 
   	"\312",	/* capital E, circumflex accent - Ecirc */ 
@@ -166,8 +181,8 @@ PRIVATE char * ISO_Latin2[] = {
   	"A",	/* capital A, tilde - Atilde */ 
   	"\304",	/* capital A, dieresis or umlaut mark - Auml */ 
   	"\307",	/* capital C, cedilla - Ccedil */ 
-  	"DH",	/* capital Eth, Icelandic - Dstrok */ 
-  	"DH",	/* capital Eth, Icelandic - ETH */ 
+  	"\320",	/* capital Eth or D with stroke - Dstrok */ 
+  	"\320",	/* capital Eth, Icelandic - ETH */ 
   	"\311",	/* capital E, acute accent - Eacute */ 
   	"E",	/* capital E, circumflex accent - Ecirc */ 
   	"E",	/* capital E, grave accent - Egrave */ 
@@ -289,7 +304,7 @@ PRIVATE char * ISO_LatinN[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -350,7 +365,7 @@ PRIVATE char * ISO_LatinN[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
         "e",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -428,7 +443,7 @@ PRIVATE char * DEC_Multinational[] = {
   	"\303",	/* capital A, tilde - Atilde */ 
   	"\304",	/* capital A, dieresis or umlaut mark - Auml */ 
   	"\307",	/* capital C, cedilla - Ccedil */ 
-  	"DH",	/* capital Eth, Icelandic - Dstrok */ 
+  	"Dj",	/* capital D with stroke - Dstrok */ 
   	"DH",	/* capital Eth, Icelandic - ETH */ 
   	"\311",	/* capital E, acute accent - Eacute */ 
   	"\312",	/* capital E, circumflex accent - Ecirc */ 
@@ -550,7 +565,7 @@ PRIVATE char * PC_charset[] = {
         "A",	/* capital A, tilde - Atilde */
         "\216",	/* capital A, dieresis or umlaut mark - Auml */
         "\200",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "\220",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -599,7 +614,7 @@ PRIVATE char * PC_charset[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic - eth */
+        "dh",	/* small eth, Icelandic - eth */
         "\211",	/* small e, dieresis or umlaut mark - euml */
 	"\253",	/* fraction 1/2 (&#189;) - frac12 */
 	"\254",	/* fraction 1/4 (&#188;) - frac14 */
@@ -672,7 +687,7 @@ PRIVATE char * PC_850_charset[] = {
         "\307",	/* capital A, tilde - Atilde */
 	"\216",	/* capital A, dieresis or umlaut mark - Auml */
         "\200",	/* capital C, cedilla - Ccedil */
-        "\321",	/* capital Eth, Icelandic - Dstrok */
+        "\321",	/* capital Eth or D with stroke - Dstrok */
         "\321",	/* capital Eth, Icelandic - ETH */
 	"\220",	/* capital E, acute accent - Eacute */
         "\322",	/* capital E, circumflex accent - Ecirc */
@@ -793,7 +808,7 @@ PRIVATE char * Macintosh[] = {
         "\314",	/* capital A, tilde - Atilde */
         "\200",	/* capital A, dieresis or umlaut mark - Auml */
         "\202",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "\203",	/* capital E, acute accent - Eacute */
         "\346",	/* capital E, circumflex accent - Ecirc */
@@ -912,7 +927,7 @@ PRIVATE char * NeXT_Step[] = {
 	"\204",	/* capital A, tilde - Atilde */
 	"\205",	/* capital A, dieresis or umlaut mark - Auml */
 	"\207",	/* capital C, cedilla - Ccedil */
-	"\220",	/* capital Eth, Icelandic - Dstrok */
+	"\220",	/* capital Eth or D with stroke - Dstrok */
 	"\220",	/* capital Eth, Icelandic - ETH */
 	"\211",	/* capital E, acute accent - Eacute */
 	"\212",	/* capital E, circumflex accent - Ecirc */
@@ -1036,7 +1051,7 @@ PRIVATE char * KOI8_R[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -1097,7 +1112,7 @@ PRIVATE char * KOI8_R[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
 	"\243",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -1179,7 +1194,7 @@ PRIVATE char * Chinese[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -1240,7 +1255,7 @@ PRIVATE char * Chinese[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
         "e",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -1322,7 +1337,7 @@ PRIVATE char * EUC_JP[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -1383,7 +1398,7 @@ PRIVATE char * EUC_JP[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
         "e",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -1465,7 +1480,7 @@ PRIVATE char * Shift_JIS[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -1526,7 +1541,7 @@ PRIVATE char * Shift_JIS[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
         "e",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -1608,7 +1623,7 @@ PRIVATE char * Korean[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -1669,7 +1684,7 @@ PRIVATE char * Korean[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
         "e",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -1751,7 +1766,7 @@ PRIVATE char * Taipei[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -1812,7 +1827,7 @@ PRIVATE char * Taipei[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
         "e",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -1881,7 +1896,7 @@ PRIVATE char * Taipei[] = {
 **
 **      This MUST match exactly the table referred to in the DTD!
 */
-PRIVATE char * SevenBitApproximations[] = {
+PUBLIC char * SevenBitApproximations[] = {
         "AE",	/* capital AE diphthong (ligature) - AElig */
         "A",	/* capital A, acute accent - Aacute */
         "A",	/* capital A, circumflex accent - Acirc */
@@ -1894,7 +1909,7 @@ PRIVATE char * SevenBitApproximations[] = {
         "A",	/* capital A, dieresis or umlaut mark - Auml*/
 #endif /* LY_UMLAUT */
         "C",	/* capital C, cedilla - Ccedil */
-        "DH",	/* capital Eth, Icelandic - Dstrok */
+        "Dj",	/* capital D with stroke - Dstrok */
         "DH",	/* capital Eth, Icelandic - ETH */
         "E",	/* capital E, acute accent - Eacute */
         "E",	/* capital E, circumflex accent - Ecirc */
@@ -1955,7 +1970,7 @@ PRIVATE char * SevenBitApproximations[] = {
         "\002",	/* emsp NEVER CHANGE THIS - emsp */
 	"-",	/* dash the width of ensp - endash */
         "\002",	/* ensp NEVER CHANGE THIS - ensp */
-        "e",	/* small eth, Icelandic eth */
+        "dh",	/* small eth, Icelandic eth */
         "e",	/* small e, dieresis or umlaut mark - euml */
 	" 1/2",	/* fraction 1/2 (&#189;) - frac12 */
 	" 1/4",	/* fraction 1/4 (&#188;) - frac14 */
@@ -2029,7 +2044,7 @@ PRIVATE char * SevenBitApproximations[] = {
 /* 
  *  Add the array name to LYCharSets
  */
-PUBLIC char ** LYCharSets[]={
+PUBLIC char ** LYCharSets[MAX_CHARSETS]={
 	ISO_Latin1,
 	ISO_Latin2,
 	ISO_LatinN,
@@ -2044,14 +2059,15 @@ PUBLIC char ** LYCharSets[]={
 	Shift_JIS,
 	Korean,
 	Taipei,
-	SevenBitApproximations
+	SevenBitApproximations,
+	ISO_Latin1		/* maybe... - kw */
 };
 
 /*
  *  Add the name that the user will see below.
  *  The order of LYCharSets and char_set_names MUST be the same
  */
-PUBLIC char * LYchar_set_names[]={
+PUBLIC char * LYchar_set_names[MAX_CHARSETSP]={
 	"ISO Latin 1         ",
 	"ISO Latin 2         ",
 	"Other ISO Latin     ",
@@ -2067,17 +2083,63 @@ PUBLIC char * LYchar_set_names[]={
 	"Korean              ",
 	"Taipei (Big5)       ",
 	"7 bit approximations",
+	"Transparent         ",
 	(char *) 0
 };
+#ifdef EXP_CHARTRANS
 
-#ifdef USE_SLANG
+PUBLIC int LYNumCharsets = 0; /* will be initialized later by UC_Register... */
+
+#include <UCDefs.h>
+/*
+ *  Associate additional pieces of info with each of the charsets listed
+ *  above.
+ *  Will be automatically modified (and extended) by charset translations
+ *  which are loaded using the EXP_CHARTRANS mechanism.
+ *  Most important piece of info to put here is a MIME charset name.
+ *  Used for EXP_CHARTRANS.
+ *  The order of LYCharSets and LYCharSet_UC MUST be the same.
+ *
+ *  Note that most of the charsets added by the new mechanism in src/chrtrans
+ *  don't show up here at all.  They don't have to.
+ */
+PUBLIC LYUCcharset LYCharSet_UC[MAX_CHARSETS]=
+{
+  {-1,"iso-8859-1",    UCT_ENC_8BIT,UCT_REP_IS_LAT1,UCT_CP_IS_LAT1,UCT_R_LAT1,
+                                                                   UCT_R_LAT1},
+  {-1,"iso-8859-2",	UCT_ENC_8BIT,0,0,	UCT_R_LAT1,UCT_R_8859S},
+  {-1,"x-iso-8859-other",UCT_ENC_8BIT,0,0,	UCT_R_LAT1,UCT_R_8859S},
+  {-1,"dec-mcs",	UCT_ENC_8BIT,0,0,	UCT_R_LAT1,UCT_R_8859S},
+  {-1,"cp437",		UCT_ENC_8BIT,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"cp850",		UCT_ENC_8BIT,UCT_REP_SUPERSETOF_LAT1,0,
+                                                UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"macintosh",	UCT_ENC_8BIT,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"x-next",		UCT_ENC_8BIT,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"koi8-r",		UCT_ENC_8BIT,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+/* There is no strict correlation for the next five, since the tranfer
+ * charset gets decoded into Display Char Set by the CJK code (separate
+ * from EXP_CHARTRANS mechanism).  For now, just put something there for
+ * MIME charset name. */
+  {-1,"iso-2022-cn",	UCT_ENC_CJK,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"euc-jp",		UCT_ENC_CJK,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"shift_jis",	UCT_ENC_CJK,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"iso-2022-kr",	UCT_ENC_CJK,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"big5",		UCT_ENC_CJK,0,0,	UCT_R_8BIT,UCT_R_ASCII},
+  {-1,"us-ascii",	UCT_ENC_7BIT,UCT_REP_SUBSETOF_LAT1,
+                                     UCT_CP_SUBSETOF_LAT1,
+                                                UCT_R_ASCII,UCT_R_ASCII},
+  {-1,"x-transparent",	UCT_ENC_8BIT,0,0,	UCT_R_8BIT,UCT_R_ASCII}
+};
+#endif
+
+#if defined(USE_SLANG) || defined(EXP_CHARTRANS)
 /*
  *  Add the code of the the lowest character with the high bit set
  *  that can be directly displayed.
- *  Currently only used by SLANG.
+ *  Used by SLANG and for EXP_CHARTRANS.
  *  The order of LYCharSets and LYlowest_eightbit MUST be the same.
  */
-PUBLIC int LYlowest_eightbit[]={
+PUBLIC int LYlowest_eightbit[MAX_CHARSETS]={
 	160,	/* ISO Latin 1 */
 	160,	/* ISO Latin 2 */
 	160,	/* Other ISO Latin */
@@ -2092,9 +2154,10 @@ PUBLIC int LYlowest_eightbit[]={
 	128,	/* Japanese (SJIS) */
 	128,	/* Korean */
 	128,	/* Taipei (Big5) */
-	999	/* 7 bit approximations */
+	999,	/* 7 bit approximations */
+	128	/* Transparent  (???) */
 };
-#endif /* USE_SLANG */
+#endif /* USE_SLANG || EXP_CHARTRANS */
 
 
 /* 
@@ -2186,8 +2249,29 @@ PUBLIC void HTMLSetCharacterHandling ARGS1(int,i)
 	HTPassHighCtrlNum = FALSE;
     }
 
+#ifdef EXP_CHARTRANS
+    if (LYCharSet_UC[i].enc != UCT_ENC_CJK) {
+
+	    if (LYRawMode) {
+		UCLYhndl_for_unspec = i;
+	    } else {
+		int chndl = 0;
+		if (UCAssume_MIMEcharset)
+		    chndl = UCGetLYhndl_byMIME(UCAssume_MIMEcharset);
+		if (chndl != i || chndl != UCLYhndl_for_unspec)
+		    UCLYhndl_for_unspec = chndl < 0 ? 0 : chndl;
+		else
+		    UCLYhndl_for_unspec = 0;
+	    }
+    }
+#endif /* EXP_CHARTRANS */
+
 #ifdef USE_SLANG
-    SLsmg_Display_Eight_Bit = LYlowest_eightbit[i];
+    if (LYlowest_eightbit[i] > 191)
+      /* higher than this may output cntrl chars to screen - kw */
+	SLsmg_Display_Eight_Bit = 191;
+    else
+	SLsmg_Display_Eight_Bit = LYlowest_eightbit[i];
 #endif /* USE_SLANG */
 
     return;
@@ -2314,7 +2398,7 @@ PUBLIC CONST char * LYEntityNames[] = {
 	"Iacute",	/* 205,	capital I, acute accent */
 	"Icirc",	/* 206,	capital I, circumflex accent */ 
 	"Iuml",		/* 207,	capital I, dieresis or umlaut mark */ 
-	"ETH",		/* 208,	capital Eth, Icelandic (Dstrok) */ 
+	"ETH",		/* 208,	capital Eth, Icelandic (or Latin2 Dstrok) */ 
 	"Ntilde",	/* 209,	capital N, tilde */ 
 	"Ograve",	/* 210,	capital O, grave accent */
 	"Oacute",	/* 211,	capital O, acute accent */
@@ -2381,6 +2465,10 @@ PUBLIC CONST char * HTMLGetEntityName ARGS1(int,i)
  *  173, but keeps our substitutions for
  *  characters that are not part of the
  *  ISO-8859-1 charset. - FM
+ *
+ *  Return '\0' to signal that there isn't a one-character
+ *  equivalent.  Caller must check! and do whatever additional
+ *  processing it wants to do instead.  - kw
  */
 PUBLIC char HTMLGetLatinOneValue ARGS1(int,i)
 {
@@ -2400,6 +2488,8 @@ PUBLIC char HTMLGetLatinOneValue ARGS1(int,i)
 	    break;
 
 	default:
+	    if (ch && ISO_Latin1[i][1])	/* Got a string longer than 1 char */
+	      return '\0';
 	    break;
      }
 
@@ -2417,4 +2507,33 @@ PUBLIC void HTMLUseCharacterSet ARGS1(int,i)
     HTMLSetHaveCJKCharacterSet(i);
     return;
 }
+/*
+ * Initializer, calls initialization function for the
+ * CHARTRANS handling if compiled in. - kw
+ * (Also to ensure this module is linked
+ * if the external model is common block, and the
+ * module is ever placed in a library. - FM) ??
+ */
+PUBLIC int LYCharSetsDeclared NOPARAMS
+{
+    int status = 1;
+
+#ifdef EXP_CHARTRANS
+    UCInit();
+    status = UCInitialized;
+    
+    if (UCAssume_MIMEcharset && *UCAssume_MIMEcharset)
+	UCLYhndl_for_unspec = UCGetLYhndl_byMIME(UCAssume_MIMEcharset);
+    else
+	UCLYhndl_for_unspec = 0;
+    if (UCAssume_localMIMEcharset && *UCAssume_localMIMEcharset)
+	UCLYhndl_HTFile_for_unspec =
+	    UCGetLYhndl_byMIME(UCAssume_localMIMEcharset);
+    if (UCAssume_unrecMIMEcharset && *UCAssume_unrecMIMEcharset)
+	UCLYhndl_for_unrec =
+	    UCGetLYhndl_byMIME(UCAssume_unrecMIMEcharset);
+#endif
+
+    return status;
+}
 
diff --git a/src/LYCharSets.h b/src/LYCharSets.h
index 97fe9b10..f6e0f8a5 100644
--- a/src/LYCharSets.h
+++ b/src/LYCharSets.h
@@ -8,10 +8,20 @@ extern char *LYchar_set_names[];
 
 
 extern char ** LYCharSets[];
+extern char * SevenBitApproximations[];    /* made public. -kw */
 extern char ** p_entity_values;
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(EXP_CHARTRANS)
 extern int LYlowest_eightbit[];
-#endif /* USE_SLANG */
+#endif /* USE_SLANG || EXP_CHARTRANS */
+
+#ifdef EXP_CHARTRANS
+extern int LYNumCharsets;
+extern LYUCcharset LYCharSet_UC[];
+#endif   /* EXP_CHARTRANS */
+
+/* Initializer for LYCharSets.c */
+extern int LYCharSetsDeclared NOPARAMS;
+
 extern void HTMLSetCharacterHandling PARAMS((int i));
 extern void HTMLSetRawModeDefault PARAMS((int i));
 extern void HTMLSetUseDefaultRawMode PARAMS((int i, BOOLEAN modeflag));
diff --git a/src/LYCharUtils.c b/src/LYCharUtils.c
index 26f33cc1..6a3a3858 100644
--- a/src/LYCharUtils.c
+++ b/src/LYCharUtils.c
@@ -20,6 +20,12 @@
 #include "LYCharUtils.h"
 #include "LYCharSets.h"
 
+#ifdef EXP_CHARTRANS
+#include "UCMap.h"
+#include "UCDefs.h"
+#include "UCAux.h"
+#endif
+
 #include "HTAlert.h"
 #include "HTFont.h"
 #include "HTForms.h"
@@ -34,6 +40,9 @@
 #include "LYCurses.h"
 #include "HTVMSUtils.h"
 #endif /* VMS */
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 
 #include "LYexit.h"
 #include "LYLeaks.h"
@@ -330,39 +339,25 @@ PUBLIC char * LYUnEscapeEntities ARGS3(
 		    continue;
 		/*
 		**  For 8482 (trade) use the character reference if it's
-		**  a hidden INPUT, otherwise handle as named entify. - FM
+		**  a hidden INPUT, otherwise use whatever the tables have
+		**  for &trade;. - FM, kw
 		*/
-	        } else if (value == 8482) {
-		    if (hidden) {
+	        } else if (value == 8482 && hidden) {
 		        *q++ = '&';
 		        *q++ = '#';
 			if (cpe != '\0')
 			    *(p-1) = cpe;
 			p = cp;
 			continue;
-		    } else {
-			if (cpe != '\0') {
-			    p--;
-			    *p = cpe;
-			}
-			cp = (p - 6);
-			*cp++ = '&';
-			*cp++ = 't';
-			*cp++ = 'r';
-			*cp++ = 'a';
-			*cp++ = 'd';
-			*cp++ = 'e';
-			p -= 6;
-			continue;
-		    }
 		/*
 		**  If it's ASCII, or is 8-bit but HTPassEightBitNum
 		**  is set or the character set is "ISO Latin 1",
 		**  use it's value. - FM
 		*/
-		} else if (value < 161 || HTPassEightBitNum ||
+		} else if (value < 161 || 
+			   (value < 256 && (HTPassEightBitNum ||
 			   !strncmp(LYchar_set_names[current_char_set],
-			   	    "ISO Latin 1", 11)) {
+			   	    "ISO Latin 1", 11)))) {
 		    /*
 		    **  No conversion needed.
 		    */
@@ -378,8 +373,12 @@ PUBLIC char * LYUnEscapeEntities ARGS3(
 		*/
 		} else {
 		    CONST char * name;
-		    value -= 160;
-		    name = HTMLGetEntityName(value);
+		    if (value == 8482) { /* trade mark sign falls through to here -kw */
+		      name = "trade";
+		    } else {
+		      value -= 160;
+		      name = HTMLGetEntityName(value);
+		    }
 		    for(low = 0, high = HTML_dtd.number_of_entities;
 		        high > low;
 			diff < 0 ? (low = i+1) : (high = i)) {
@@ -761,7 +760,30 @@ PUBLIC void LYUnEscapeToLatinOne ARGS2(
 			**  is set and it's 8-bit. - FM
 			*/
 			buf[0] = HTMLGetLatinOneValue(i);
-		        if ((unsigned char)buf[0] > 159 && isURL == TRUE) {
+                        if (buf[0] == '\0') {
+                            /*
+                            **  The entity does not have an 8859-1 representation
+                            **  of exactly one char length.  Try to deal with it
+                            **  anyway - either HTEscape the whole mess, or pass
+                            **  through raw.  So make sure the ISO_Latin1 table,
+                            **  which is the first table in LYCharSets, has resonable
+			    **  substitution strings! (if it really must have any
+			    **  longer than one char..) -kw
+                            */
+			    if (!LYCharSets[0][i][0]) /* totally empty, skip - kw */
+			        /* do nothing */ ;
+			    else if (isURL) {
+			      /* *All* will be HTEscape'd - kw */
+			      esc = HTEscape(LYCharSets[0][i], URL_XALPHAS);
+			      for (e = 0; esc[e]; e++)
+				*q++ = esc[e];
+			      FREE(esc);
+			    } else {
+			      /* *Nothing* will be HTEscape'd - kw */
+			      for (e = 0; LYCharSets[0][i][e]; e++)
+                                *q++ = (unsigned char)(LYCharSets[0][i][e]);
+			    }
+                        } else if ((unsigned char)buf[0] > 159 && isURL == TRUE) {
 			    esc = HTEscape(buf, URL_XALPHAS);
 			    for (e = 0; esc[e]; e++)
 			    *q++ = esc[e];
@@ -1186,12 +1208,16 @@ PUBLIC void LYFillLocalFileURL ARGS2(
 	StrAllocCat(*href, HTVMS_wwwName(getenv("PATH")));
 #else
 	char curdir[DIRNAMESIZE];
-#ifdef NO_GETCWD
-	getwd (curdir);
-#else
+#if HAVE_GETCWD
 	getcwd (curdir, DIRNAMESIZE);
+#else
+	getwd (curdir);
 #endif /* NO_GETCWD */
+#ifdef DOSPATH
+	StrAllocCat(*href, HTDOS_wwwName(curdir));
+#else
 	StrAllocCat(*href, curdir);
+#endif /* DOSPATH */
 #endif /* VMS */
     }
 
@@ -1562,6 +1588,29 @@ PUBLIC void LYZero_OL_Counter ARGS1(
     return;
 }
 
+#ifdef EXP_CHARTRANS
+/*
+**  This function is used by the HTML Structured object. - kw
+*/
+PUBLIC void html_get_chartrans_info ARGS1(HTStructured *, me)
+{
+    me->UCLYhndl = HTAnchor_getUCLYhndl(me->node_anchor,UCT_STAGE_STRUCTURED);
+    if (me->UCLYhndl < 0) {
+	int chndl = HTAnchor_getUCLYhndl(me->node_anchor, UCT_STAGE_HTEXT);
+	if (chndl < 0) {
+	    chndl = current_char_set;
+	    HTAnchor_setUCInfoStage(me->node_anchor, chndl, UCT_STAGE_HTEXT,
+			    UCT_SETBY_STRUCTURED);
+	}
+	HTAnchor_setUCInfoStage(me->node_anchor, chndl,
+				UCT_STAGE_STRUCTURED, UCT_SETBY_STRUCTURED);
+	me->UCLYhndl = HTAnchor_getUCLYhndl(me->node_anchor,
+					    UCT_STAGE_STRUCTURED);
+    }
+    me->UCI = HTAnchor_getUCInfoStage(me->node_anchor,UCT_STAGE_STRUCTURED);
+}
+#endif /* EXP_CHARTRANS */
+
 /*
 **  This function processes META tags in HTML streams. - FM
 */
@@ -1573,7 +1622,7 @@ PUBLIC void LYHandleMETA ARGS4(
 {
     char *http_equiv = NULL, *name = NULL, *content = NULL;
     char *href = NULL, *id_string = NULL, *temp = NULL;
-    char *cp, *cp0, *cp1;
+    char *cp, *cp0, *cp1 = 0;
     int url_type = 0, i;
 
     if (!me || !present)
@@ -1643,8 +1692,8 @@ PUBLIC void LYHandleMETA ARGS4(
      * Check for a no-cache Pragma
      * or Cache-Control directive. - FM
      */
-    if (!strcasecomp((name ? name : http_equiv), "Pragma") ||
-        !strcasecomp((name ? name : http_equiv), "Cache-Control")) {
+    if (!strcasecomp((http_equiv ? http_equiv : name), "Pragma") ||
+        !strcasecomp((http_equiv ? http_equiv : name), "Cache-Control")) {
 	LYUnEscapeToLatinOne(&content, FALSE);
 	LYTrimHead(content);
 	LYTrimTail(content);
@@ -1661,7 +1710,7 @@ PUBLIC void LYHandleMETA ARGS4(
 	 *  should. - FM
 	 */
 	if ((!me->node_anchor->cache_control) &&
-	    !strcasecomp((name ? name : http_equiv), "Cache-Control")) {
+	    !strcasecomp((http_equiv ? http_equiv : name), "Cache-Control")) {
 	    for (i = 0; content[i]; i++)
 		 content[i] = TOLOWER(content[i]);
 	    StrAllocCopy(me->node_anchor->cache_control, content);
@@ -1708,7 +1757,7 @@ PUBLIC void LYHandleMETA ARGS4(
     /*
      * Check for an Expires directive. - FM
      */
-    } else if (!strcasecomp((name ? name : http_equiv), "Expires")) {
+    } else if (!strcasecomp((http_equiv ? http_equiv : name), "Expires")) {
 	/*
 	 *  If we didn't get a Expires MIME header,
 	 *  store it in the anchor element, and if we
@@ -1733,7 +1782,7 @@ PUBLIC void LYHandleMETA ARGS4(
      *  the charset via a server's header. - AAC & FM
      */
     } else if (!(me->node_anchor->charset && *me->node_anchor->charset) && 
-	       !strcasecomp((name ? name : http_equiv), "Content-Type")) {
+	       !strcasecomp((http_equiv ? http_equiv : name), "Content-Type")) {
 	LYUnEscapeToLatinOne(&content, FALSE);
 	LYTrimHead(content);
 	LYTrimTail(content);
@@ -1746,10 +1795,90 @@ PUBLIC void LYHandleMETA ARGS4(
 	if ((cp = strstr(content, "text/html;")) != NULL &&
 	    (cp1 = strstr(content, "charset")) != NULL &&
 	    cp1 > cp) {
+			BOOL chartrans_ok = NO;
+			char *cp3 = NULL, *cp4;
+			int chndl;
+
 	    cp1 += 7;
-	    while (*cp1 == ' ' || *cp1 == '=')
+			while (*cp1 == ' ' || *cp1 == '=' || *cp1 == '"')
 	        cp1++;
-
+#ifdef EXP_CHARTRANS
+			    StrAllocCopy(cp3, cp1); /* copy to mutilate more */
+			    for (cp4=cp3; (*cp4 != '\0' && *cp4 != '"' &&
+					   *cp4 != ';'  && *cp4 != ':' &&
+					   !WHITE(*cp4));	cp4++)
+				/* nothing */ ;
+			    *cp4 = '\0';
+			    cp4 = cp3;
+			    chndl = UCGetLYhndl_byMIME(cp3);
+			    if (chndl < 0) {
+				if (0==strcmp(cp4, "cn-big5")) {
+				    cp4 += 3;
+				    chndl = UCGetLYhndl_byMIME(cp4);
+				}
+				else if (0==strncmp(cp4, "cn-gb", 5)) {
+				    StrAllocCopy(cp3, "gb2312");
+				    cp4 = cp3;
+				    chndl = UCGetLYhndl_byMIME(cp4);
+				}
+			    }
+			    if (UCCanTranslateFromTo(chndl, current_char_set))
+			    {
+				chartrans_ok = YES;
+				StrAllocCopy(me->node_anchor->charset, cp4);
+				HTAnchor_setUCInfoStage(me->node_anchor, chndl,
+				   UCT_STAGE_PARSER, UCT_SETBY_STRUCTURED);
+			    }
+			    else if (chndl < 0)	{/* got something but we don't
+						 recognize it */
+				chndl = UCLYhndl_for_unrec;
+				if (UCCanTranslateFromTo(chndl,
+							 current_char_set))
+				{
+				    chartrans_ok = YES;
+				    HTAnchor_setUCInfoStage(me->node_anchor,
+							    chndl,
+				       UCT_STAGE_PARSER, UCT_SETBY_STRUCTURED);
+				}
+			    }
+			    FREE(cp3);
+			    if (chartrans_ok) {
+				LYUCcharset * p_in =
+				    HTAnchor_getUCInfoStage(me->node_anchor,
+							     UCT_STAGE_PARSER);
+				LYUCcharset * p_out =
+				    HTAnchor_setUCInfoStage(me->node_anchor,
+							    current_char_set,
+					 UCT_STAGE_HTEXT, UCT_SETBY_DEFAULT);
+				if (!p_out) /* try again */
+				    p_out =
+				      HTAnchor_getUCInfoStage(me->node_anchor,
+							     UCT_STAGE_HTEXT);
+				if (0==strcmp(p_in->MIMEname,"x-transparent"))
+				{
+				    HTPassEightBitRaw = TRUE;
+				    HTAnchor_setUCInfoStage(me->node_anchor,
+				       HTAnchor_getUCLYhndl(me->node_anchor,
+							    UCT_STAGE_HTEXT),
+				       UCT_STAGE_PARSER, UCT_SETBY_DEFAULT);
+				}
+				if (0==strcmp(p_out->MIMEname,"x-transparent"))
+				{
+				    HTPassEightBitRaw = TRUE;
+				    HTAnchor_setUCInfoStage(me->node_anchor,
+				       HTAnchor_getUCLYhndl(me->node_anchor,
+							    UCT_STAGE_PARSER),
+				       UCT_STAGE_HTEXT, UCT_SETBY_DEFAULT);
+				}
+				if (!(p_in->enc & UCT_ENC_CJK) &&
+				    (p_in->codepoints & UCT_CP_SUBSETOF_LAT1)){
+				    HTCJK = NOCJK;
+				} else if (chndl == current_char_set) {
+				HTPassEightBitRaw = TRUE;
+				}
+				html_get_chartrans_info(me);
+			} else  /* Fall through to old behavior */
+#endif /* EXP_CHARTRANS */
 	    if (!strncmp(cp1, "us-ascii", 8) ||
 		!strncmp(cp1, "iso-8859-1", 10)) {
 		StrAllocCopy(me->node_anchor->charset, "iso-8859-1");
@@ -1829,7 +1958,7 @@ PUBLIC void LYHandleMETA ARGS4(
     /*
      *  Check for a Refresh directive. - FM
      */
-    } else if (!strcasecomp((name ? name : http_equiv), "Refresh")) {
+    } else if (!strcasecomp((http_equiv ? http_equiv : name), "Refresh")) {
 	char *Seconds = NULL;
 
 	/*
@@ -1957,8 +2086,8 @@ PUBLIC void LYHandleMETA ARGS4(
      *  via a server header. - FM
      */
     } else if (!(me->node_anchor->SugFname && *me->node_anchor->SugFname) &&
-    	       !strcasecomp((name ?
-    			     name : http_equiv), "Content-Disposition")) {
+    	       !strcasecomp((http_equiv ?
+    			     http_equiv : name), "Content-Disposition")) {
 	cp = content;
 	while (*cp != '\0' && strncasecomp(cp, "file;", 5))
 	    cp++;
@@ -1983,7 +2112,7 @@ PUBLIC void LYHandleMETA ARGS4(
     /*
      *  Check for a Set-Cookie directive. - AK
      */
-    } else if (!strcasecomp((name ? name : http_equiv), "Set-Cookie")) {
+    } else if (!strcasecomp((http_equiv ? http_equiv : name), "Set-Cookie")) {
 	/*
 	 *  We're using the Request-URI as the second argument,
 	 *  regardless of whether a Content-Base header or BASE
@@ -2183,11 +2312,11 @@ PUBLIC void LYHandleID ARGS2(
     /*
      *  Create the link if we still have a non-zero-length string. - FM
      */
-    if (ID_A = HTAnchor_findChildAndLink(
+    if ((ID_A = HTAnchor_findChildAndLink(
 				me->node_anchor,	/* Parent */
 				id,			/* Tag */
 				NULL,			/* Addresss */
-				(void *)0)) {		/* Type */
+				(void *)0)) != 0) {	/* Type */
 	HText_beginAnchor(me->text, ID_A);
 	HText_endAnchor(me->text);
     }
diff --git a/src/LYCharUtils.h b/src/LYCharUtils.h
index 94c5e1fd..8c71b5c0 100644
--- a/src/LYCharUtils.h
+++ b/src/LYCharUtils.h
@@ -41,6 +41,7 @@ extern char *LYUppercaseI_OL_String PARAMS((
 	int			seqnum));
 extern char *LYLowercaseI_OL_String PARAMS((
 	int			seqnum));
+extern void html_get_chartrans_info PARAMS((HTStructured * me));
 extern void LYHandleMETA PARAMS((
 	HTStructured *		me,
 	CONST BOOL*	 	present,
diff --git a/src/LYClean.c b/src/LYClean.c
index 2d97a386..bfdaa98f 100644
--- a/src/LYClean.c
+++ b/src/LYClean.c
@@ -70,7 +70,9 @@ PUBLIC void cleanup_sig ARGS1(
     /*
      *  Ignore further interrupts. - mhc: 11/2/91
      */
+#ifndef NOSIGHUP
     (void) signal(SIGHUP, SIG_IGN);
+#endif /* NOSIGHUP */
 
 #ifdef VMS 
     /*
@@ -86,7 +88,10 @@ PUBLIC void cleanup_sig ARGS1(
     if (traversal)
         dump_traversal_history();
 
+#ifndef NOSIGHUP
     if (sig != SIGHUP) {
+#endif /* NOSIGHUP */
+
 	if (!dump_output_immediately) {
 	    /*
 	     *  cleanup() also calls cleanup_files().
@@ -97,11 +102,15 @@ PUBLIC void cleanup_sig ARGS1(
 	    printf("\r\nExiting via interrupt: %d\r\n", sig);
 	    fflush(stdout);
 	}
+#ifndef NOSIGHUP
     } else {
 	cleanup_files();
     }
+#endif /* NOSIGHUP */
 
-    (void) signal(SIGHUP, SIG_DFL);
+#ifndef NOSIGHUP
+	 (void) signal(SIGHUP, SIG_IGN);
+#endif /* NOSIGHUP */
     (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
     (void) signal(SIGINT, SIG_DFL);
@@ -140,7 +149,9 @@ PUBLIC void cleanup NOARGS
      *  Cleanup signals - just in case.
      *  Ignore further interrupts. - mhc: 11/2/91
      */
-    (void) signal (SIGHUP, SIG_IGN);
+#ifndef NOSIGHUP
+	 (void) signal(SIGHUP, SIG_IGN);
+#endif /* NOSIGHUP */
     (void) signal (SIGTERM, SIG_IGN);
 
 #ifndef VMS  /* use ttclose() from cleanup() for VMS */
diff --git a/src/LYCookie.c b/src/LYCookie.c
index 14f2ecfc..17690dc0 100644
--- a/src/LYCookie.c
+++ b/src/LYCookie.c
@@ -211,7 +211,7 @@ PRIVATE void store_cookie ARGS3(
     HTList *hl, *next;
     cookie *c2;
     time_t now = time(NULL);
-    int pathlen, pos;
+    int pos;
     CONST char *ptr;
     domain_entry *de = NULL;
 
diff --git a/src/LYCurses.c b/src/LYCurses.c
index d4bda6f1..cc3f423d 100644
--- a/src/LYCurses.c
+++ b/src/LYCurses.c
@@ -39,11 +39,17 @@ extern int _NOSHARE(COLS);
 PRIVATE int dumbterm PARAMS((char *terminal));
 BOOLEAN LYCursesON = FALSE;
 
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
+PRIVATE int Current_Attr;
+#endif
+
 #ifdef USE_SLANG
 PUBLIC unsigned int Lynx_Color_Flags = 0;
-PRIVATE int Current_Attr;
 PUBLIC BOOLEAN FullRefresh = FALSE;
 PUBLIC int curscr = 0;
+#ifdef SLANG_MBCS_HACK
+PUBLIC int PHYSICAL_SLtt_Screen_Cols = 10;/* will be set by size_change - kw */
+#endif /* SLANG_MBCS_HACK */
 
 PUBLIC void LY_SLrefresh NOARGS
 {
@@ -65,14 +71,14 @@ PUBLIC void VTHome NOARGS
 }
 #endif /* VMS */
 
-PUBLIC void sl_add_attr ARGS1(
+PUBLIC void lynx_add_attr ARGS1(
 	int,		a)
 {
     Current_Attr |= a;
     SLsmg_set_color(Current_Attr);
 }
 
-PUBLIC void sl_sub_attr ARGS1(
+PUBLIC void lynx_sub_attr ARGS1(
 	int,		a)
 {
     Current_Attr &= ~a;
@@ -122,7 +128,9 @@ PRIVATE void sl_suspend ARGS1(
     SLang_init_tty(3, 0, 1);
 #endif /* SLANG_VERSION > 9929 */
     signal(SIGTSTP, sl_suspend);
+#ifndef _WINDOWS
     SLtty_set_suspend_state(1);
+#endif
     if (sig == SIGTSTP)
         SLsmg_resume_smg();
     /*
@@ -141,6 +149,232 @@ PRIVATE void sl_suspend ARGS1(
 #endif /* USE_SLANG */
 
 
+#ifdef COLOR_CURSES
+/*
+ * This block of code is designed to produce the same color effects using SVr4
+ * curses as the slang library's implementation in this module.  That maps the
+ * SGR codes into a 0-7 index into the color table, with special treatment for
+ * backgrounds.  There's a bit of convoluted (but necessary) code handling the
+ * special case of initialization before 'initscr()' is called.
+ * 1997/1/19 - T.E.Dickey <dickey@clark.net>
+ */
+PRIVATE int lynx_uses_color;
+PRIVATE int lynx_called_initscr;
+
+PRIVATE struct {
+    int fg, bg;
+    chtype attr;
+} lynx_color_cfg[] = {
+    /*0*/ { COLOR_BLACK,   COLOR_WHITE, A_NORMAL}, /* A_NORMAL */
+    /*1*/ { COLOR_BLUE,    COLOR_WHITE, A_NORMAL}, /* A_BOLD */
+    /*2*/ { COLOR_YELLOW,  COLOR_BLUE,  A_BOLD},   /* A_REVERSE */
+    /*3*/ { COLOR_GREEN,   COLOR_WHITE, A_NORMAL}, /* A_REVERSE | A_BOLD */
+    /*4*/ { COLOR_MAGENTA, COLOR_WHITE, A_NORMAL}, /* A_UNDERLINE */
+    /*5*/ { COLOR_BLUE,    COLOR_WHITE, A_NORMAL}, /* A_UNDERLINE | A_BOLD */
+    /*6*/ { COLOR_RED,     COLOR_WHITE, A_NORMAL}, /* A_UNDERLINE | A_REVERSE */
+    /*7*/ { COLOR_MAGENTA, COLOR_CYAN,  A_NORMAL}  /* A_UNDERLINE | A_BOLD | A_REVERSE */
+};
+
+/*
+ * Hold the codes for color-pairs here until 'initscr()' is called.
+ */
+PRIVATE struct {
+    int fg;
+    int bg;
+} lynx_color_pairs[25];
+
+/*
+ * Map the SGR attributes (0-7) into ANSI colors, modified with the actual BOLD
+ * attribute we'll get 16 colors.
+ */
+PRIVATE void lynx_set_wattr ARGS1(WINDOW *, win)
+{
+    if (lynx_uses_color) {
+	int code = 0;
+	int attr = A_NORMAL;
+	int offs = 1;
+	static int have_underline = -1;
+	static int no_color_video = -1;
+
+	if (have_underline < 0) {
+#ifndef DOSPATH
+		have_underline = tigetstr("smul") != 0;
+#else
+                have_underline = 1;
+#endif /* DOSPATH */
+	}
+
+	if (no_color_video < 0) {
+		no_color_video = tigetnum("ncv");
+	}
+
+	if (Current_Attr & A_BOLD)
+		code |= 1;
+	if (Current_Attr & A_REVERSE)
+		code |= 2;
+	if (Current_Attr & A_UNDERLINE)
+		code |= 4;
+	attr = lynx_color_cfg[code].attr;
+
+	/*
+	 * FIXME:  no_color_video isn't implemented (97/4/14) in ncurses 4.x,
+	 * but may be in SVr4 (which would make this redundant for the latter).
+	 */
+	if ((Current_Attr & A_BOLD) && !(no_color_video & 33)) {
+		attr |= A_BOLD;
+		offs = 17;
+	}
+
+	if ((Current_Attr & A_UNDERLINE) && !(no_color_video & 2)) {
+		attr |= A_UNDERLINE;
+		offs = 17;
+	}
+
+	attr |= COLOR_PAIR(code+offs);
+
+	wattrset(win, attr);
+    } else {
+	wattrset(win, Current_Attr);
+    }
+}
+
+PRIVATE void lynx_map_color ARGS1(int, n)
+{
+    int m;
+
+    lynx_color_pairs[n+1].fg = lynx_color_cfg[n].fg;
+    lynx_color_pairs[n+1].bg = lynx_color_cfg[n].bg;
+
+    lynx_color_pairs[n+9].fg = lynx_color_cfg[n].fg;
+    lynx_color_pairs[n+9].bg = lynx_color_cfg[0].bg;
+
+    lynx_color_pairs[n+17].fg = lynx_color_cfg[n].bg;
+    lynx_color_pairs[n+17].bg = lynx_color_cfg[n].bg;
+
+    if (lynx_called_initscr) {
+	for (m = 0; m <= 16; m += 8) {
+	    init_pair(n+m+1,
+		lynx_color_pairs[n+m+1].fg,
+		lynx_color_pairs[n+m+1].bg);
+	}
+	if (n == 0)
+	    bkgd(COLOR_PAIR(9));
+    }
+}
+
+PUBLIC int lynx_chg_color ARGS3(
+	int, color,
+	int, fg,
+	int, bg
+	)
+{
+    if (color >= 0 && color < 8
+     && fg >= 0 && fg < 16
+     && bg >= 0 && bg < 16) {
+	lynx_color_cfg[color].fg = fg & 7;
+	lynx_color_cfg[color].bg = bg & 7;
+	lynx_color_cfg[color].attr = (fg & 8) ? A_BOLD : A_NORMAL;
+	lynx_map_color(color);
+    } else {
+	return -1;
+    }
+    return 0;
+}
+
+PUBLIC void lynx_set_color ARGS1(int, a)
+{
+    if (lynx_uses_color) {
+	attrset(lynx_color_cfg[a].attr | COLOR_PAIR(a+1));
+    }
+}
+
+PUBLIC void lynx_standout ARGS1(int, flag)
+{
+    if (flag)
+	lynx_add_attr(A_REVERSE);
+    else
+	lynx_sub_attr(A_REVERSE);
+}
+
+PUBLIC void lynx_add_wattr ARGS2(WINDOW *, win, int, a)
+{
+    Current_Attr |= a;
+    lynx_set_wattr(win);
+}
+
+PUBLIC void lynx_add_attr ARGS1(int, a)
+{
+    lynx_add_wattr (stdscr, a);
+}
+
+PUBLIC void lynx_sub_wattr ARGS2(WINDOW *, win, int, a)
+{
+    Current_Attr &= ~a;
+    lynx_set_wattr(win);
+}
+
+PUBLIC void lynx_sub_attr ARGS1(int, a)
+{
+    lynx_sub_wattr (stdscr, a);
+}
+
+PRIVATE void lynx_init_colors NOARGS
+{
+    lynx_uses_color = FALSE;
+
+    if (has_colors()) {
+	int n, m;
+
+	lynx_uses_color = TRUE;
+	start_color();
+
+	for (n = 0; n < sizeof(lynx_color_cfg)/sizeof(lynx_color_cfg[0]); n++) {
+	    for (m = 0; m <= 16; m += 8) {
+		init_pair(n+m+1,
+			lynx_color_pairs[n+m+1].fg,
+			lynx_color_pairs[n+m+1].bg);
+	    }
+	    if (n == 0)
+		bkgd(COLOR_PAIR(9));
+	}
+    }
+}
+
+PUBLIC void lynx_setup_colors NOARGS
+{
+    int n;
+    for (n = 0; n < 8; n++)
+	lynx_map_color(n);
+}
+#endif /* COLOR_CURSES */
+
+#if defined (DJGPP) && !defined (SLANG)
+/*
+ * Sorry about making a completely new function,
+ * but the real one is messy! WB
+ */
+PUBLIC void start_curses NOARGS
+{
+	 static BOOLEAN first_time = TRUE;
+
+	 if(first_time)
+	 {
+		  initscr();      /* start curses */
+		  first_time = FALSE;
+		  cbreak();
+		  noecho();
+		  keypad(stdscr, TRUE);
+		  fflush(stdin);
+		  fflush(stdout);
+                  lynx_init_colors();
+                  lynx_called_initscr = TRUE;
+	 } else sock_init();
+
+	 LYCursesON = TRUE;
+	 clear();
+
+}
+#else
 PUBLIC void start_curses NOARGS
 {
 #ifdef USE_SLANG
@@ -177,10 +411,14 @@ PUBLIC void start_curses NOARGS
 #endif /* !VMS */
     SLsmg_init_smg();
     SLsmg_Display_Eight_Bit = LYlowest_eightbit[current_char_set];
+    if (SLsmg_Display_Eight_Bit > 191)
+       SLsmg_Display_Eight_Bit = 191; /* may print ctrl chars otherwise - kw */
     SLsmg_Newline_Moves = -1;
     SLsmg_Backspace_Moves = 1;
 #ifndef VMS
+#ifndef _WINDOWS
    SLtty_set_suspend_state(1);
+#endif /* _WINDOWS */
 #ifdef SIGTSTP
     signal(SIGTSTP, sl_suspend);
 #endif /* SIGTSTP */
@@ -191,7 +429,7 @@ PUBLIC void start_curses NOARGS
 
 #ifdef VMS
     /*
-     *  If we are VMS then do initsrc() everytime start_curses()
+     *  If we are VMS then do initscr() everytime start_curses()
      *  is called!
      */
     initscr();  /* start curses */
@@ -206,7 +444,9 @@ PUBLIC void start_curses NOARGS
 	if (initscr() == NULL) {  /* start curses */
 	    fprintf(stderr, 
 	        "Terminal initialisation failed - unknown terminal type?\n");
+#ifndef NOSIGHUP
             (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
             (void) signal(SIGTERM, SIG_DFL);
             (void) signal(SIGINT, SIG_DFL);
 #ifdef SIGTSTP
@@ -216,6 +456,10 @@ PUBLIC void start_curses NOARGS
 	    exit (-1);
 	}
         first_time = FALSE;
+#if defined(COLOR_CURSES)
+	lynx_init_colors();
+	lynx_called_initscr = TRUE;
+#endif /* USE_SLANG */
     }
 #endif /* VMS */
 
@@ -225,41 +469,67 @@ PUBLIC void start_curses NOARGS
     crmode();
     raw();
 #else
-#ifdef NO_CBREAK
-    crmode();
-#else
+#if HAVE_CBREAK
     cbreak();
-#endif /* NO_CBREAK */
+#else
+    crmode();
+#endif /* HAVE_CBREAK */
     signal(SIGINT, cleanup_sig);
 #endif /* VMS */
 
     noecho();
 
-#if !defined(VMS) && !defined(NO_KEYPAD)
+#if defined(HAVE_KEYPAD)
     keypad(stdscr,TRUE);
-#endif /* !VMS && !NO_KEYPAD */
+#endif /* HAVE_KEYPAD */
+
+#ifdef NCURSES_MOUSE_VERSION
+ /* Inform ncurses that we're interested in knowing when mouse
+    button 1 is clicked */
+    if (LYUseMouse)
+      mousemask(BUTTON1_CLICKED, NULL);
+#endif /* NCURSES_MOUSE_VERSION */
 
     fflush(stdin);
     fflush(stdout);
 #endif /* USE_SLANG */
 
+#ifdef _WINDOWS
+	 clear();
+#endif
+
     LYCursesON = TRUE;
 }
+#endif /* defined (DJGPP) && !defined (SLANG) */
 
 
 PUBLIC void stop_curses NOARGS
 {
     echo();
+#ifdef DJGPP
+		  sock_exit();
+#endif
+#if defined (DOSPATH) && !defined (SLANG)
+	 clrscr();
+/*
+		  clear();
+		  refresh();
+*/
+#else
 
     /*
      *	Fixed for better dumb terminal support.
      *	05-28-94 Lynx 2-3-1 Garrett Arch Blythe
      */
     if(LYCursesON == TRUE)	{
+#ifdef NCURSES_MOUSE_VERSION
+        mousemask(0, NULL);
+#endif
     	endwin();	/* stop curses */
     }
 
     fflush(stdout);
+#endif /* DJGPP */
 
     LYCursesON = FALSE;
 
@@ -300,8 +570,6 @@ PUBLIC BOOLEAN setup ARGS1(
 	 *  Some yoyo used these under conditions which require
 	 *  -dump, so force that mode here. - FM
 	 */
-        extern int mainloop();
-
 	dump_output_immediately = TRUE;
         LYcols = 80;
 	keypad_mode = LINKS_ARE_NUMBERED;
@@ -389,14 +657,14 @@ PUBLIC BOOLEAN setup ARGS1(
 
     start_curses();
 
-#ifndef NO_TTYTYPE
+#if HAVE_TTYTYPE
     /*
      *  Get terminal type (strip 'dec-' from vms style types).
      */
     if (strncmp((CONST char*)ttytype, "dec-vt", 6) == 0) {
 	(void) setterm(ttytype + 4);
     }
-#endif /* !NO_TTYTYPE */
+#endif /* HAVE_TTYTYPE */
 
     LYlines = LINES;
     LYcols = COLS;
diff --git a/src/LYCurses.h b/src/LYCurses.h
index d18cd6e3..ea4d3b82 100644
--- a/src/LYCurses.h
+++ b/src/LYCurses.h
@@ -31,7 +31,19 @@
 #define REDEFINE_CR
 #endif /* CR */
 
+#ifdef DOSPATH
+#   include "curses.h"
+#else
 #ifdef NCURSES
+# ifdef HAVE_CONFIG_H
+# ifdef NCURSESHEADER
+#  include <ncurses.h>
+# else
+#  include <curses.h>
+# endif
+extern void LYsubwindow PARAMS((WINDOW * param));
+
+# else /* FIXME: remove this after configure script is complete */
 # ifndef NCURSESHEADER
 #  include <ncurses/curses.h>
 # else
@@ -40,26 +52,25 @@
 #  else
 #    include <ncurses.h>
 #  endif /* __NetBSD__ */
-# endif /* NCURSESINCDIR */
+# endif /* HAVE_CONFIG_H */
+# endif /* NCURSESHEADER */
+
 #else
 # ifdef ULTRIX
 #  include <cursesX.h>  /* ultrix */
 # else
-#  if defined(SUN) || defined(sun) || defined(SGI) || defined(SCO) || defined(ISC) || defined(PTX2)
-#   include "curses.h"
+#  if defined(VMS) && defined(__GNUC__)
+#   include "LYGCurses.h"
 #  else
-#   if defined(VMS) && defined(__GNUC__)
-#    include "LYGCurses.h"
+#   if defined(sony_news)
+#    include "/usr/sony/include/jcurses.h"  /* sony_news */
 #   else
-#    if defined(sony_news)
-#     include "/usr/sony/include/jcurses.h"  /* sony_news */
-#    else
-#     include <curses.h>  /* everything else */
-#    endif /* sony_news */
-#   endif /* VMS && __GNUC__ */
-#  endif /* SUN || sun || SGI || SCO || ISC || PTX2 */
+#    include <curses.h>  /* everything else */
+#   endif /* sony_news */
+#  endif /* VMS && __GNUC__ */
 # endif /* ULTRIX */
 #endif /* NCURSES */
+#endif /* DOSPATH */
 #endif /* USE_SLANG */
 
 
@@ -97,36 +108,35 @@ extern void VMSbox PARAMS((WINDOW *win, int height, int width));
 #endif /* !USE_SLANG */
 #endif /* VMS */
 
-
-#ifdef USE_SLANG
-extern void sl_add_attr PARAMS((int a));
-extern void sl_sub_attr PARAMS((int a));
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
+extern void lynx_add_attr PARAMS((int a));
+extern void lynx_sub_attr PARAMS((int a));
 extern void lynx_setup_colors NOPARAMS;
-
-#define start_bold()      sl_add_attr(1)
-#define start_reverse()   sl_add_attr(2)
-#define start_underline() sl_add_attr(4)
-#define stop_bold()       sl_sub_attr(1)
-#define stop_reverse()    sl_sub_attr(2)
-#define stop_underline()  sl_sub_attr(4)
-
 extern unsigned int Lynx_Color_Flags;
+#endif
+
+#ifdef USE_SLANG
 #define SL_LYNX_USE_COLOR	1
 #define SL_LYNX_USE_BLINK	2
+#define start_bold()      lynx_add_attr(1)
+#define start_reverse()   lynx_add_attr(2)
+#define start_underline() lynx_add_attr(4)
+#define stop_bold()       lynx_sub_attr(1)
+#define stop_reverse()    lynx_sub_attr(2)
+#define stop_underline()  lynx_sub_attr(4)
 
 #ifdef FANCY_CURSES
 #undef FANCY_CURSES
 #endif /* FANCY_CURSES */
-#ifndef NO_KEYPAD
-#define NO_KEYPAD
-#endif /* !NO_KEYPAD */
-#ifndef NO_TTYTYPE
-#define NO_TTYTYPE
-#endif /* !NO_TTYTYPE */
 
 /* Map some curses functions to slang functions. */
 #define stdscr NULL
+#ifdef SLANG_MBCS_HACK
+extern int PHYSICAL_SLtt_Screen_Cols;
+#define COLS PHYSICAL_SLtt_Screen_Cols
+#else
 #define COLS SLtt_Screen_Cols
+#endif /* SLANG_MBCS_HACK */
 #define LINES SLtt_Screen_Rows
 #define move SLsmg_gotorc
 #define addstr SLsmg_write_string
@@ -182,38 +192,55 @@ extern void VTHome NOPARAMS;
 
 #else /* NOT VMS: */
 
+#ifdef COLOR_CURSES
+extern void lynx_add_wattr PARAMS((WINDOW *, int));
+extern void lynx_sub_wattr PARAMS((WINDOW *, int));
+extern void lynx_set_color PARAMS((int));
+extern void lynx_standout  PARAMS((int));
+extern int  lynx_chg_color PARAMS((int, int, int));
+#undef  standout
+#define standout() lynx_standout(TRUE)
+#undef  standend
+#define standend() lynx_standout(FALSE)
+#else
+#define lynx_add_attr	attrset
+#define lynx_add_wattr	wattrset
+#define lynx_sub_attr	attroff
+#define lynx_sub_wattr	wattroff
+#endif
+
 #ifdef UNDERLINE_LINKS
-#define start_bold()      attrset(A_UNDERLINE)
-#define stop_bold()       attroff(A_UNDERLINE)
-#define start_underline() attrset(A_BOLD)
-#define stop_underline()  attroff(A_BOLD)
+#define start_bold()      lynx_add_attr(A_UNDERLINE)
+#define stop_bold()       lynx_sub_attr(A_UNDERLINE)
+#define start_underline() lynx_add_attr(A_BOLD)
+#define stop_underline()  lynx_sub_attr(A_BOLD)
 #else /* not UNDERLINE_LINKS: */
-#define start_bold()      attrset(A_BOLD)
-#define stop_bold()       attroff(A_BOLD)
-#define start_underline() attrset(A_UNDERLINE)
-#define stop_underline()  attroff(A_UNDERLINE)
+#define start_bold()      lynx_add_attr(A_BOLD)
+#define stop_bold()       lynx_sub_attr(A_BOLD)
+#define start_underline() lynx_add_attr(A_UNDERLINE)
+#define stop_underline()  lynx_sub_attr(A_UNDERLINE)
 #endif /* UNDERLINE_LINKS */
 #if defined(SNAKE) && defined(HP_TERMINAL)
-#define start_reverse()   wattrset(stdscr,A_DIM)
-#define wstart_reverse(a) wattrset(a,A_DIM)
-#define stop_reverse()    wattroff(stdscr,A_DIM)
-#define wstop_reverse(a)  wattroff(a,A_DIM)
+#define start_reverse()   lynx_add_wattr(stdscr,A_DIM)
+#define wstart_reverse(a) lynx_add_wattr(a,A_DIM)
+#define stop_reverse()    lynx_sub_wattr(stdscr,A_DIM)
+#define wstop_reverse(a)  lynx_sub_wattr(a,A_DIM)
 #else
-#define start_reverse()   attrset(A_REVERSE)
-#define wstart_reverse(a) wattrset(a,A_REVERSE)
-#define stop_reverse()    attroff(A_REVERSE)
-#define wstop_reverse(a)  wattroff(a,A_REVERSE)
+#define start_reverse()   lynx_add_attr(A_REVERSE)
+#define wstart_reverse(a) lynx_add_wattr(a,A_REVERSE)
+#define stop_reverse()    lynx_sub_attr(A_REVERSE)
+#define wstop_reverse(a)  lynx_sub_wattr(a,A_REVERSE)
 #endif /* SNAKE && HP_TERMINAL */
 #endif /* VMS */
 
 #else /* Not FANCY_CURSES: */
 
 #define start_bold()      standout()  
-#define start_underline() 1  /* nothing */
+#define start_underline() /* nothing */
 #define start_reverse()   standout()
 #define wstart_reverse(a)   wstandout(a)
 #define stop_bold()       standend()  
-#define stop_underline()  1  /* nothing */
+#define stop_underline()  /* nothing */
 #define stop_reverse()    standend()
 #define wstop_reverse(a)    wstandend(a)
 
diff --git a/src/LYDownload.c b/src/LYDownload.c
index 89fcf61a..92dba795 100644
--- a/src/LYDownload.c
+++ b/src/LYDownload.c
@@ -15,6 +15,9 @@
 #ifdef VMS
 #include "HTVMSUtils.h"
 #endif /* VMS */
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 
 #include "LYexit.h"
 #include "LYLeaks.h"
@@ -197,11 +200,15 @@ check_recall:
 	    strcpy(command, buffer);
 	    if ((len=strlen(command)) > 0 && command[len-1] == '/')
 	        command[len-1] = '\0';
+#ifdef DOSPATH
+		 strcat(command, HTDOS_wwwName((char *)Home_Dir()));
+#else
 #ifdef VMS
 	    strcat(command, HTVMS_wwwName((char *)Home_Dir()));
 #else
 	    strcat(command, Home_Dir());
 #endif /* VMS */
+#endif /* DOSPATH */
 	    strcat(command, cp);
 	    strcpy(buffer, command);
 	}
@@ -224,7 +231,11 @@ check_recall:
 	    cp = NULL;
 	if (cp) {
             sprintf(command,"%s/%s", cp, buffer);
+#ifdef DOSPATH
+		 strcpy(buffer, HTDOS_name(command));
+#else
 	    strcpy(buffer, command);
+#endif
 	}
 #endif /* VMS */
 
@@ -532,7 +543,7 @@ PUBLIC int LYdownload_options ARGS2(char **,newfile, char *,data_file)
     }
 
     /* make the file a URL now */
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     sprintf(download_filename,"file://localhost/%s",tempfile);
 #else
     sprintf(download_filename,"file://localhost%s",tempfile);
diff --git a/src/LYEdit.c b/src/LYEdit.c
index 2f01982d..98940c4e 100644
--- a/src/LYEdit.c
+++ b/src/LYEdit.c
@@ -14,6 +14,9 @@
 #include <unixio.h>
 #include "HTVMSUtils.h"
 #endif /* VMS */
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 
 #include "LYLeaks.h"
 
@@ -54,7 +57,7 @@ PUBLIC int edit_current_file ARGS3(char *,newfile, int,cur, int,lineno)
 	  *
 	  * On VMS, only try the path.
 	  */
-#ifndef VMS
+#if !defined (VMS) && !defined (DOSPATH)
 	colon = strchr(newfile,':');
 	StrAllocCopy(filename, colon+1);
 	HTUnEscape(filename);
@@ -63,31 +66,40 @@ PUBLIC int edit_current_file ARGS3(char *,newfile, int,cur, int,lineno)
 #endif /* !VMS */
 	    filename = HTParse(newfile,"",PARSE_PATH+PARSE_PUNCTUATION);
 	    HTUnEscape(filename);
+#ifdef DOSPATH
+		 if (strlen(filename)>1) filename++;
+#endif
+#ifdef DOSPATH
+		 if ((fp = fopen(HTDOS_name(filename),"r")) == NULL) {
+#else
 #ifdef VMS
 	    if ((fp = fopen(HTVMS_name("",filename),"r")) == NULL) {
 #else
 	    if ((fp = fopen(filename,"r")) == NULL) {
-		    
 #endif /* VMS */
+#endif /* DOSPATH */
 	        HTAlert(COULD_NOT_ACCESS_FILE);
 		FREE(filename);
 		goto failure;
 	    }
-#ifndef VMS
+#if !defined (VMS) && !defined (DOSPATH)
 	}
 #endif /* !VMS */
 	fclose(fp);
 		
-
 #if defined(VMS) || defined(CANT_EDIT_UNWRITABLE_FILES)
         /*
 	 * Don't allow editing if user lacks append access.
 	 */
+#ifdef DOSPATH
+	if ((fp = fopen(HTDOS_name("",filename),"a")) == NULL) {
+#else
 #ifdef VMS
 	if ((fp = fopen(HTVMS_name("",filename),"a")) == NULL) {
 #else
 	if ((fp = fopen(filename,"a")) == NULL) {
 #endif /* VMS */
+#endif /* DOSPATH */
 		_statusline(NOAUTH_TO_EDIT_FILE);
 		sleep(MessageSecs);
 		goto failure;
@@ -102,9 +114,18 @@ PUBLIC int edit_current_file ARGS3(char *,newfile, int,cur, int,lineno)
 	    strstr(editor, "pico") || strstr(editor,"jove") ||
 	    strstr(editor, "jed"))
 	    sprintf(command,"%s +%d \"%s\"",editor, lineno+links[cur].ly, 
+#ifdef DOSPATH
+																	 HTDOS_name(filename));
+#else
                                                                 filename);
+#endif /* DOSPATH */
 	else
-	    sprintf(command,"%s \"%s\"",editor, filename);
+		 sprintf(command,"%s \"%s\"",editor,
+#ifdef DOSPATH
+				 HTDOS_name(filename));
+#else
+				 filename);
+#endif /* DOSPATH */
 #endif /* VMS */
 	if (TRACE) {
 	    fprintf(stderr, "LYEdit: %s\n",command);
diff --git a/src/LYForms.c b/src/LYForms.c
index 8474dc12..6385fc02 100644
--- a/src/LYForms.c
+++ b/src/LYForms.c
@@ -14,6 +14,11 @@
 
 #include "LYLeaks.h"
 
+#ifdef ALT_CHAR_SET
+#define BOXVERT 0   /* use alt char set for popup window vertical borders */
+#define BOXHORI 0   /* use alt char set for popup window vertical borders */
+#endif
+
 #ifndef BOXVERT
 #define BOXVERT '*'	/* character for popup window vertical borders */
 #endif
@@ -353,6 +358,27 @@ breakfor:
 }
 
 
+/* Use this rather than the 'wprintw()' function to write a blank-padded
+ * string to the given window, since someone's asserted that printw doesn't
+ * handle 8-bit characters unlike addstr (though more info would be useful).
+ *
+ * We're blank-filling so that with SVr4 curses, it'll show the background
+ * color to a uniform width in the popup-menu.
+ */
+#ifndef USE_SLANG
+PRIVATE void paddstr ARGS3(
+	WINDOW *,	the_window,
+	int,		width,
+	char *,		the_string)
+{
+	width -= strlen(the_string);
+	waddstr(the_window, the_string);
+	while (width-- > 0)
+		waddstr(the_window, " ");
+}
+#endif
+
+
 PRIVATE int popup_options ARGS7(
 	int,		cur_selection,
 	OptionType *,	list,
@@ -504,6 +530,13 @@ PRIVATE int popup_options ARGS7(
         return(orig_selection);
     }
     scrollok(form_window, TRUE);
+#ifdef NCURSES
+#ifdef wgetbkgd
+#define getbkgd(w) wgetbkgd(w)	/* workaround pre-1.9.9g bug */
+#endif
+    LYsubwindow(form_window);
+    wbkgd(form_window, getbkgd(stdscr));
+#endif
 #else
     SLsmg_fill_region (top, lx - 1, bottom - top, width + 4, ' ');
 #endif /* !USE_SLANG */
@@ -533,8 +566,7 @@ redraw:
         if (i >= window_offset && i - window_offset < length) {
 #ifndef USE_SLANG
 	    wmove(form_window,(i+1)-window_offset,2);
-	    wclrtoeol(form_window);
-	    waddstr(form_window,opt_ptr->name);
+	    paddstr(form_window, width, opt_ptr->name);
 #else
 	    SLsmg_gotorc (top + (i+1)-window_offset, lx - 1 + 2);
 	    SLsmg_write_nstring (opt_ptr->name, width);
@@ -564,7 +596,7 @@ redraw:
 	if (opt_ptr != NULL) {
 #ifndef USE_SLANG
 	    wmove(form_window,(i+1)-window_offset,2);
-            waddstr(form_window,opt_ptr->name);
+            paddstr(form_window, width, opt_ptr->name);
 #else
 	    SLsmg_gotorc (top + (i+1)-window_offset, lx - 1 + 2);
 	    SLsmg_write_nstring (opt_ptr->name, width);
@@ -579,7 +611,7 @@ redraw:
 #ifndef USE_SLANG
         wstart_reverse(form_window);
         wmove(form_window,(i+1)-window_offset,2);
-        waddstr(form_window,opt_ptr->name);
+        paddstr(form_window, width, opt_ptr->name);
         wstop_reverse(form_window);
         wrefresh(form_window);
 #else
@@ -1042,6 +1074,9 @@ restore_popup_statusline:
     }
 #ifndef USE_SLANG
     delwin(form_window);
+#ifdef NCURSES
+    LYsubwindow(0);
+#endif
 #endif /* !USE_SLANG */
     refresh();
 
diff --git a/src/LYGetFile.c b/src/LYGetFile.c
index 59c9f0ab..dd0b5376 100644
--- a/src/LYGetFile.c
+++ b/src/LYGetFile.c
@@ -26,6 +26,9 @@
 #ifdef VMS
 #include "HTVMSUtils.h"
 #endif /* VMS */
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 #ifdef DIRED_SUPPORT
 #include "LYLocal.h"
 #endif /* DIRED_SUPPORT */
@@ -358,11 +361,15 @@ Try_Redirected_URL:
 			if ((cp = strchr(doc->address, '~'))) {
 			    strncpy(addressbuf, doc->address, cp-doc->address);
 			    addressbuf[cp - doc->address] = '\0';
+#ifdef DOSPATH
+				 p = HTDOS_wwwName((char *)Home_Dir());
+#else
 #ifdef VMS
 			    p = HTVMS_wwwName((char *)Home_Dir());
 #else
 			    p = (char *)Home_Dir();
 #endif /* VMS */
+#endif /* DOSPATH */
 			    strcat(addressbuf, p);
 			    strcat(addressbuf, cp+1);
 			    p = addressbuf;
@@ -603,11 +610,15 @@ Try_Redirected_URL:
 			*cp = '\0';
 			cp += 2;
 			StrAllocCopy(temp, doc->address);
+#ifdef DOSPATH
+			StrAllocCat(temp, HTDOS_wwwName((char *)Home_Dir()));
+#else
 #ifdef VMS
 			StrAllocCat(temp, HTVMS_wwwName((char *)Home_Dir()));
 #else
 			StrAllocCat(temp, Home_Dir());
 #endif /* VMS */
+#endif /* DOSPATH */
 			if (*cp)
 			    StrAllocCat(temp, cp);
 			StrAllocCopy(doc->address, temp);
diff --git a/src/LYGetFile.h b/src/LYGetFile.h
index 0a318674..2e4faede 100644
--- a/src/LYGetFile.h
+++ b/src/LYGetFile.h
@@ -9,7 +9,7 @@
 extern BOOLEAN getfile PARAMS((document *doc));
 extern int follow_link_number PARAMS((int c, int cur));
 extern void add_trusted PARAMS((char *str, int type));
-extern BOOLEAN exec_ok PARAMS((CONST char *source, CONST char *link, int type));
+extern BOOLEAN exec_ok PARAMS((CONST char *source, CONST char *linkpath, int type));
 
 /* values for follow_link_number.c */
 #define DO_FORMS_STUFF 1
diff --git a/src/LYGlobalDefs.h b/src/LYGlobalDefs.h
index afd6f53a..5a46b095 100644
--- a/src/LYGlobalDefs.h
+++ b/src/LYGlobalDefs.h
@@ -123,6 +123,7 @@ extern char *pref_charset;	/* Lynx's preferred character set - MM */
 extern BOOLEAN LYNewsPosting;	/* News posting supported if TRUE */
 extern char *LynxSigFile;	/* Signature file, in or off home */
 extern char *system_mail;
+extern char *system_mail_flags;
 extern char *lynx_temp_space;
 extern char *lynx_save_space;
 extern BOOLEAN LYforce_HTML_mode;
@@ -253,10 +254,16 @@ extern BOOLEAN LYNoRefererHeader;	/* Never send Referer header? */
 extern BOOLEAN LYNoRefererForThis;	/* No Referer header for this URL? */
 extern BOOLEAN LYNoFromHeader;		/* Never send From header?    */
 extern BOOLEAN LYListNewsNumbers;
+extern BOOLEAN LYUseMouse;
 extern BOOLEAN LYListNewsDates;
 extern BOOLEAN LYRawMode;
 extern BOOLEAN LYDefaultRawMode;
 extern BOOLEAN LYUseDefaultRawMode;
+#ifdef EXP_CHARTRANS
+extern char *UCAssume_MIMEcharset;
+extern char *UCAssume_localMIMEcharset;
+extern char *UCAssume_unrecMIMEcharset;
+#endif /* EXP_CHARTRANS */
 extern BOOLEAN LYisConfiguredForX;
 extern char *URLDomainPrefixes;
 extern char *URLDomainSuffixes;
@@ -270,4 +277,14 @@ extern int LYStatusLine;		/* Line for statusline() or -1   */
 extern BOOLEAN LYCollapseBRs;		/* Collapse serial BRs?		 */
 extern BOOLEAN LYSetCookies;		/* Process Set-Cookie headers?	 */
 extern char *XLoadImageCommand;		/* Default image viewer for X	 */
+
+#define BOOKMARK_TITLE "Bookmark file"
+#define MOSAIC_BOOKMARK_TITLE "Converted Mosaic Hotlist"
+#define MBM_V_MAXFILES  25	/* Max number of sub-bookmark files */
+/*
+ *  Arrays that holds the names of sub-bookmark files
+ *  and their descriptions.
+ */
+extern char *MBM_A_subbookmark[MBM_V_MAXFILES+1];
+extern char *MBM_A_subdescript[MBM_V_MAXFILES+1];
 #endif /* LYGLOBALDEFS_H */
diff --git a/src/LYHistory.c b/src/LYHistory.c
index 54969ef7..9b6daabc 100644
--- a/src/LYHistory.c
+++ b/src/LYHistory.c
@@ -311,7 +311,7 @@ PUBLIC int showhistory ARGS1(
     /*
      *  Make the file a URL now.
      */
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     sprintf(hist_filename,"file://localhost/%s", tempfile);
 #else
     sprintf(hist_filename,"file://localhost%s", tempfile);
@@ -366,7 +366,7 @@ PUBLIC int showhistory ARGS1(
 PUBLIC BOOLEAN historytarget ARGS1(
 	document *,	newdoc)
 {
-    int number, c;
+    int number;
     DocAddress WWWDoc;
     HTParentAnchor *tmpanchor;
     HText *text;
@@ -453,7 +453,7 @@ PUBLIC int LYShowVisitedLinks ARGS1(
     /*
      *  Make the file a URL now.
      */
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     sprintf(vl_filename,"file://localhost/%s", tempfile);
 #else
     sprintf(vl_filename,"file://localhost%s", tempfile);
diff --git a/src/LYJump.c b/src/LYJump.c
index f7f8d440..e5e67871 100644
--- a/src/LYJump.c
+++ b/src/LYJump.c
@@ -55,13 +55,13 @@ PUBLIC void LYJumpTable_free NOARGS
  * Utility for listing shortcuts, making any repeated
  * shortcut the most current in the list. - FM
  */
-PUBLIC void LYAddJumpShortcut ARGS2(HTList *,history, char *,shortcut)
+PUBLIC void LYAddJumpShortcut ARGS2(HTList *, historyp, char *,shortcut)
 {
     char *new;
     char *old;
-    HTList *cur = history;
+    HTList *cur =  historyp;
 
-    if (!history || !(shortcut && *shortcut))
+    if (! historyp || !(shortcut && *shortcut))
         return;
 
     if ((new = (char *)calloc(1, (strlen(shortcut) + 1))) == NULL)
@@ -70,12 +70,12 @@ PUBLIC void LYAddJumpShortcut ARGS2(HTList *,history, char *,shortcut)
  
     while (NULL != (old = (char *)HTList_nextObject(cur))) {
 	if (!strcmp(old, new)) {
-	    HTList_removeObject(history, old);
+	    HTList_removeObject(historyp, old);
 	    FREE(old);
 	    break;
 	}
     }
-    HTList_addObject(history, new);
+    HTList_addObject(historyp, new);
 
     return;
 }
diff --git a/src/LYJump.h b/src/LYJump.h
index 2329471b..5da8f885 100644
--- a/src/LYJump.h
+++ b/src/LYJump.h
@@ -21,7 +21,7 @@ struct JumpTable {
 
 extern struct JumpTable *JThead;
 extern void LYJumpTable_free NOPARAMS;
-extern void LYAddJumpShortcut PARAMS((HTList *history, char *shortcut));
+extern void LYAddJumpShortcut PARAMS((HTList *the_history, char *shortcut));
 extern BOOL LYJumpInit PARAMS((char *config));
 extern char *LYJump PARAMS((int key));
 
diff --git a/src/LYKeymap.h b/src/LYKeymap.h
index a06b7942..c5b42c19 100644
--- a/src/LYKeymap.h
+++ b/src/LYKeymap.h
@@ -12,7 +12,7 @@ extern void set_numbers_as_arrows NOPARAMS;
 extern void reset_numbers_as_arrows NOPARAMS;
 extern void print_keymap PARAMS((char **newfile));
 extern char *key_for_func PARAMS((int func));
-extern BOOLEAN LYisNonAlnumKeyname PARAMS((int ch, int keyname));
+extern BOOLEAN LYisNonAlnumKeyname PARAMS((int ch, int Keyname));
 
 extern char keymap[]; /* main keymap matrix */
 
diff --git a/src/LYList.c b/src/LYList.c
index bff4f967..59f6d497 100644
--- a/src/LYList.c
+++ b/src/LYList.c
@@ -69,7 +69,7 @@ PUBLIC int showlist ARGS2(char **, newfile, BOOLEAN, titles)
     /*
      *  Make the file a URL now.
      */
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     sprintf(list_filename, "file://localhost/%s", tempfile);
 #else
     sprintf(list_filename, "file://localhost%s", tempfile);
diff --git a/src/LYLocal.c b/src/LYLocal.c
index 6ef0ad65..3dd45b97 100644
--- a/src/LYLocal.c
+++ b/src/LYLocal.c
@@ -58,6 +58,7 @@ struct dired_menu {
 #		define	DE_TAG	1
 #		define	DE_DIR	2
 #		define	DE_FILE	3
+#define			DE_SYMLINK	4
 	char *sfx;
 	char *link;
 	char *rest;
@@ -76,21 +77,37 @@ struct dired_menu {
 { 0,		      "", "New Directory",
 "(in current directory)", "LYNXDIRED://NEW_FOLDER%d",		NULL },
 
-{ 0,		      "", "Install",
+{ DE_FILE,	      "", "Install",
+"(of current selection)", "LYNXDIRED://INSTALL_SRC%p",		NULL },
+{ DE_DIR,	      "", "Install",
 "(of current selection)", "LYNXDIRED://INSTALL_SRC%p",		NULL },
 
-{ 0,		      "", "Modify Name",
+{ DE_FILE,	      "", "Modify File Name",
+"(of current selection)", "LYNXDIRED://MODIFY_NAME%p",		NULL },
+{ DE_DIR,	      "", "Modify Directory Name",
 "(of current selection)", "LYNXDIRED://MODIFY_NAME%p",		NULL },
+{ DE_SYMLINK,	      "", "Modify Name",
+"(of selected symbolic link)", "LYNXDIRED://MODIFY_NAME%p",		NULL },
 
 #ifdef OK_PERMIT
-{ 0,		      "", "Permit Name",
+{ DE_FILE,	      "", "Modify File Permissions",
+"(of current selection)", "LYNXDIRED://PERMIT_SRC%p",		NULL },
+{ DE_DIR,	      "", "Modify Directory Permissions",
 "(of current selection)", "LYNXDIRED://PERMIT_SRC%p",		NULL },
 #endif /* OK_PERMIT */
 
-{ 0,		      "", "Change Location",
-"(of current selection)", "LYNXDIRED://MODIFY_LOCATION%p",	NULL },
+{ DE_FILE,	      "", "Change Location",
+"(of selected file)"    , "LYNXDIRED://MODIFY_LOCATION%p",	NULL },
+{ DE_DIR,	      "", "Change Location",
+"(of selected directory)", "LYNXDIRED://MODIFY_LOCATION%p",	NULL },
+{ DE_SYMLINK,	      "", "Change Location",
+"(of selected symbolic link)", "LYNXDIRED://MODIFY_LOCATION%p",	NULL },
 
-{ 0,		      "", "Remove",
+{ DE_FILE,	      "", "Remove File",
+   "(current selection)", "LYNXDIRED://REMOVE_SINGLE%p",	NULL },
+{ DE_DIR,	      "", "Remove Directory",
+   "(current selection)", "LYNXDIRED://REMOVE_SINGLE%p",	NULL },
+{ DE_SYMLINK,	      "", "Remove Symbolic Link",
    "(current selection)", "LYNXDIRED://REMOVE_SINGLE%p",	NULL },
 
 #if defined(OK_UUDECODE) && !defined(ARCHIVE_ONLY)
@@ -1508,16 +1525,19 @@ PUBLIC int dired_options ARGS2(
 {
     static char tempfile[128];
     static BOOLEAN first = TRUE;
-    char dired_filename[256];
     char path[512], dir[512]; /* much too large */
     char tmpbuf[LINESIZE];
     lynx_html_item_type *nxt;
     struct stat dir_info;
     FILE *fp0;
-    char *cp,*tp = NULL;
-    /* char *escaped; */
-    char * dir_url = NULL;
-    char * path_url = NULL;
+    char *cp = NULL;
+    char * dir_url = NULL;	/* will hold URL-escaped path of
+				   directory from where DIRED_MENU was
+				   invoked (NOT its full URL) */
+    char * path_url = NULL;	/* will hold URL-escaped path of file
+				   (or directory) which was selected
+				   when DIRED_MENU was invoked (NOT
+				   its full URL) */
     BOOLEAN nothing_tagged;
     int count;
     struct dired_menu *mp;
@@ -1536,9 +1556,8 @@ PUBLIC int dired_options ARGS2(
     }
     
     /* make the tempfile a URL */
-    strcpy(dired_filename, "file://localhost");
-    strcat(dired_filename, tempfile);
-    StrAllocCopy(*newfile, dired_filename);
+    StrAllocCopy(*newfile, "file://localhost");
+    StrAllocCat(*newfile, tempfile);
     
     cp = doc->address;
     if(!strncmp(cp,"file://localhost",16))
@@ -1576,19 +1595,11 @@ PUBLIC int dired_options ARGS2(
 	  return 0;
        } 
 
-#ifdef NOTDEFINED
-       if ((cp = strrchr(path,'.')) != NULL && strlen(path) > strlen(cp)) {
-	  *cp = '\0';
-	  tp = strrchr(path,'.');
-	  *cp = '.';
-       }
-#endif /* NOTDEFINED */
     } else {
         path[0] = '\0';
 	StrAllocCopy(path_url, path);
     }
 
-  /*escaped = (char *) HTEscape(path,(unsigned char) 4); path_url instead- kw*/
     nothing_tagged = (HTList_isEmpty(tagged));
 
     fprintf(fp0,"<head>\n<title>%s</title></head>\n<body>\n",DIRED_MENU_TITLE);
@@ -1648,11 +1659,18 @@ PUBLIC int dired_options ARGS2(
 	    continue;
 	if (mp->cond == DE_TAG && nothing_tagged)
 	    continue;
-	if (mp->cond == DE_DIR && (dir_info.st_mode & S_IFMT) != S_IFDIR)
+	if (mp->cond == DE_DIR &&
+	    (!*path || (dir_info.st_mode & S_IFMT) != S_IFDIR))
 	    continue;
-	if (mp->cond == DE_FILE && (dir_info.st_mode & S_IFMT) != S_IFREG)
+	if (mp->cond == DE_FILE &&
+	    (!*path || (dir_info.st_mode & S_IFMT) != S_IFREG))
 	    continue;
-	if (strcmp(mp->sfx, &path[strlen(path)-strlen(mp->sfx)]) != 0)
+	if (mp->cond == DE_SYMLINK &&
+	    (!*path || (dir_info.st_mode & S_IFMT) != S_IFLNK))
+	    continue;
+	if (*mp->sfx &&
+	    (strlen(path) < strlen(mp->sfx) ||
+	     strcmp(mp->sfx, &path[strlen(path)-strlen(mp->sfx)]) != 0))
 	    continue;
 	fprintf(fp0, "<a href=\"%s",
 		render_item(mp->href, path_url, dir_url, buf,2048, YES));
@@ -1673,7 +1691,6 @@ PUBLIC int dired_options ARGS2(
     fprintf(fp0,"</body>\n");
     fclose(fp0);
 
-    /* FREE(escaped);  not used any more - kw*/
     FREE(dir_url);
     FREE(path_url);
 
@@ -1787,9 +1804,10 @@ PUBLIC BOOLEAN local_install ARGS3(
    char tmpbuf[512];
    static char savepath[512]; /* this will be the link that is to be installed */
    struct stat dir_info;
-   char *args[5];
+   char *args[6];
    HTList *tag;
    int count = 0;
+   int n = 0, src;	/* indices into 'args[]' */
 
 /* Determine the status of the selected item. */
 
@@ -1838,23 +1856,27 @@ PUBLIC BOOLEAN local_install ARGS3(
       }
 
    statusline("Just a moment, ...");
-   args[0] = "install";
-   args[2] = destpath;
-   args[3] = (char *) 0;
+   args[n++] = "install";
+#ifdef INSTALL_ARGS
+   args[n++] = INSTALL_ARGS;
+#endif
+   src = n++;
+   args[n++] = destpath;
+   args[n] = (char *) 0;
    sprintf(tmpbuf, "install %s", destpath);
    tag = tagged;
 
    if (HTList_isEmpty(tagged)) {
-         args[1] = savepath;
+         args[src] = savepath;
 	 if (my_spawn(INSTALL_PATH, args, tmpbuf) <= 0)
 	     return (-1);
 	 count++;
    } else {
        char * name;
        while ((name = (char *)HTList_nextObject(tag))) {
-	   args[1] = name;
-	   if (strncmp("file://localhost", args[1], 16) == 0)
-	       args[1] = name + 16;
+	   args[src] = name;
+	   if (strncmp("file://localhost", args[src], 16) == 0)
+	       args[src] = name + 16;
 
 	   if (my_spawn(INSTALL_PATH, args, tmpbuf) <= 0)
 	       return ((count == 0) ? -1 : count);
@@ -1898,10 +1920,12 @@ PUBLIC void add_menu_item ARGS1(
     *cp++ = '\0';
     if (strcasecomp(str, "tag") == 0)
 	new->cond = DE_TAG;
-    if (strcasecomp(str, "dir") == 0)
+    else if (strcasecomp(str, "dir") == 0)
 	new->cond = DE_DIR;
-    if (strcasecomp(str, "file") == 0)
+    else if (strcasecomp(str, "file") == 0)
 	new->cond = DE_FILE;
+    else if (strcasecomp(str, "link") == 0)
+	new->cond = DE_SYMLINK;
 
     /* conditional on matching suffix */
     str = cp;
diff --git a/src/LYMail.c b/src/LYMail.c
index 639f0f46..b943efb2 100644
--- a/src/LYMail.c
+++ b/src/LYMail.c
@@ -10,6 +10,7 @@
 #include "LYSystem.h"
 #include "LYGlobalDefs.h"
 #include "HTParse.h"
+#include "LYMail.h"
 
 #include "LYLeaks.h"
 
@@ -36,8 +37,8 @@ PUBLIC void mailform ARGS4(
     char self[80];
     char cmd[512];
     int len, i, ch;
-#ifdef VMS
-    char tmpfile[256];
+#if defined(VMS) || defined(DOSPATH)
+    char my_tempfile[256];
     char *address_ptr1, *address_ptr2;
     BOOLEAN first = TRUE;
 #endif /* VMS */
@@ -176,9 +177,9 @@ PUBLIC void mailform ARGS4(
 	return;
     }
 
-#ifdef VMS
-    sprintf(tmpfile, "%s%s", lynx_temp_space, "temp_mail.txt");
-    if ((fd = fopen(tmpfile,"w")) == NULL) {
+#if defined(VMS) || defined(DOSPATH)
+    sprintf(my_tempfile, "%s%s", lynx_temp_space, "temp_mail.txt");
+    if ((fd = fopen(my_tempfile,"w")) == NULL) {
 	HTAlert(FORM_MAILTO_FAILED);
 	FREE(address);
 	return;
@@ -192,6 +193,7 @@ PUBLIC void mailform ARGS4(
 	    StrAllocCat(address, cp);
 	}
     }
+#ifdef VMS
     if (mailto_type &&
         !strncasecomp(mailto_type, "multipart/form-data", 19)) {
 	/*
@@ -202,11 +204,19 @@ PUBLIC void mailform ARGS4(
 	fprintf(fd, "X-Content-Type: %s\n\n", mailto_type);
     }
 #else
-#ifdef MMDF
-    sprintf(cmd, "%s -mlruxto,cc\\*",system_mail);
+	 if (mailto_type && *mailto_type) {
+	fprintf(fd, "Mime-Version: 1.0\n");
+	fprintf(fd, "Content-Type: %s\n", mailto_type);
+	 }
+	 fprintf(fd,"To: %s\n", address);
+	 if (personal_mail_address && *personal_mail_address)
+		fprintf(fd,"From: %s\n", personal_mail_address);
+	 remove_tildes(self);
+	 fprintf(fd,"Subject: %.70s\n\n", subject);
+#endif
+
 #else
-    sprintf(cmd, "%s -t -oi", system_mail);
-#endif /* MMDF */
+    sprintf(cmd, "%s %s", system_mail, system_mail_flags);
 
     if ((fd = popen(cmd, "w")) == NULL) {
 	HTAlert(FORM_MAILTO_FAILED);
@@ -264,12 +274,13 @@ PUBLIC void mailform ARGS4(
     pclose(fd);
     sleep(MessageSecs);
 #endif /* UNIX */
-#ifdef VMS
+#if defined(VMS) || defined(DOSPATH)
     fclose(fd);
+#ifdef VMS
     sprintf(cmd, "%s %s/subject=\"%.70s\" %s ",
     		 system_mail,
 		 (strncasecomp(system_mail, "MAIL", 4) ? "" : "/noself"),
-		 subject, tmpfile);
+		 subject, my_tempfile);
 
     address_ptr1 = address;
     do {
@@ -288,13 +299,15 @@ PUBLIC void mailform ARGS4(
 
 	address_ptr1 = address_ptr2;
     } while (address_ptr1 != NULL);
-
+#else
+	 sprintf(cmd, "%s -t \"%s\" -F %s", system_mail, address, my_tempfile);
+#endif
     stop_curses();
     printf("Sending form content:\n\n$ %s\n\nPlease wait...", cmd);
     system(cmd);
     sleep(MessageSecs);
     start_curses();
-    remove(tmpfile);
+    remove(my_tempfile);
 #endif /* VMS */
 
     FREE(address);
@@ -311,9 +324,8 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address,
     FILE *fd, *fp;
     char *address = NULL;
     char cmd[512], *cp, *cp0, *cp1;
-    int i;
-#ifdef VMS
-    char tmpfile[256];
+#if defined(VMS) || defined(DOSPATH)
+    char my_tempfile[256];
     char *address_ptr1, *address_ptr2;
     BOOLEAN first = TRUE;
 #endif /* VMS */
@@ -348,11 +360,7 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address,
     }
 
 #ifdef UNIX
-#ifdef MMDF
-    sprintf(cmd, "%s -mlruxto,cc\\*", system_mail);
-#else
-    sprintf(cmd, "%s -t -oi", system_mail);
-#endif /* MMDF */
+    sprintf(cmd, "%s %s", system_mail, system_mail_flags);
 
     if ((fd = popen(cmd, "w")) == NULL) {
 	FREE(address);
@@ -364,9 +372,9 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address,
     fprintf(fd,"X-URL: %s\n", filename);
     fprintf(fd,"X-Mailer: Lynx, Version %s\n\n", LYNX_VERSION);
 #endif /* UNIX */
-#ifdef VMS
-    sprintf(tmpfile, "%s%s", lynx_temp_space, "temp_mail.txt");
-    if ((fd = fopen(tmpfile,"w")) == NULL) {
+#if defined(VMS) || defined(DOSPATH)
+    sprintf(my_tempfile, "%s%s", lynx_temp_space, "temp_mail.txt");
+    if ((fd = fopen(my_tempfile,"w")) == NULL) {
 	FREE(address);
 	return;
     }
@@ -392,10 +400,11 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address,
 #ifdef UNIX
     pclose(fd);
 #endif /* UNIX */
-#ifdef VMS
+#if defined(VMS) || defined(DOSPATH)
     fclose(fd);
+#ifdef VMS
     sprintf(cmd, "%s /subject=\"Lynx Error in %s\" %s ",
-    		 system_mail, filename, tmpfile);
+    		 system_mail, filename, my_tempfile);
 
     address_ptr1 = address;
     do {
@@ -415,8 +424,11 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address,
 	address_ptr1 = address_ptr2;
     } while (address_ptr1 != NULL);
 
+#else
+	 sprintf(cmd, "%s -t \"%s\" -F %s", system_mail, address, my_tempfile);
+#endif
     system(cmd);
-    remove(tmpfile);
+    remove(my_tempfile);
 #endif /* VMS */
 
     if (traversal) {
@@ -425,7 +437,9 @@ PUBLIC void mailmsg ARGS4(int,cur, char *,owner_address,
 	if ((ofp = fopen(TRAVERSE_ERRORS,"a+")) == NULL) {
 	    if ((ofp = fopen(TRAVERSE_ERRORS,"w")) == NULL) {
 		perror(NOOPEN_TRAV_ERR_FILE);
+#ifndef NOSIGHUP
 		(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 		(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 		(void) signal(SIGINT, SIG_DFL);
@@ -465,7 +479,10 @@ PUBLIC void reply_by_mail ARGS3(
     char *temp = NULL;
     int i, len;
     int c = 0;  /* user input */
-    char tmpfile[256], cmd[512];
+    char my_tempfile[256], cmd[512];
+#ifdef DOSPATH
+	 char tmpfile2[256];
+#endif
     static char *personal_name = NULL;
     char subject[80];
 #ifdef VMS
@@ -486,16 +503,16 @@ PUBLIC void reply_by_mail ARGS3(
 	return;
     }
 
-    tempname(tmpfile,NEW_FILE);
-    if (((cp = strrchr(tmpfile, '.')) != NULL) &&
+    tempname(my_tempfile,NEW_FILE);
+    if (((cp = strrchr(my_tempfile, '.')) != NULL) &&
 #ifdef VMS
 	NULL == strchr(cp, ']') &&
 #endif /* VMS */
 	NULL == strchr(cp, '/')) {
 	*cp = '\0';
-	strcat(tmpfile, ".txt");
+	strcat(my_tempfile, ".txt");
     }
-    if ((fd = fopen(tmpfile,"w")) == NULL) {
+    if ((fd = fopen(my_tempfile,"w")) == NULL) {
 	HTAlert(MAILTO_URL_TEMPOPEN_FAILED);
 	return;
     }
@@ -663,7 +680,7 @@ PUBLIC void reply_by_mail ARGS3(
         FREE(address);
 	FREE(body);
 	fclose(fd);		/* Close the tmpfile.  */
-	remove(tmpfile);	/* Delete the tmpfile. */
+	remove(my_tempfile);	/* Delete the tmpfile. */
 	HTAlert(NO_ADDRESS_IN_MAILTO_URL);
 	return;
     }
@@ -692,8 +709,10 @@ PUBLIC void reply_by_mail ARGS3(
     /*
      *  Put the To: line in the header.
      */
+#ifndef DOSPATH
     sprintf(buf,"To: %s\n", address);
     StrAllocCopy(header, buf);
+#endif
     /*
      *  Put the X-URL and X-Mailer lines in the header.
      */
@@ -868,7 +887,7 @@ PUBLIC void reply_by_mail ARGS3(
     }
     addstr("\n");
     remove_tildes(user_input);
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     if (*user_input) {
         cp = user_input;
 	while (*cp == ' ' || *cp == ',')
@@ -878,6 +897,13 @@ PUBLIC void reply_by_mail ARGS3(
 	    StrAllocCat(address, cp);
 	}
     }
+#ifdef DOSPATH
+	 if (*address) {
+		sprintf(buf,"To: %s\n",address);
+		StrAllocCat(header, buf);
+	 }
+#endif
+
 #else
     if (*user_input) {
 	sprintf(buf,"Cc: %s\n",user_input);
@@ -930,7 +956,7 @@ PUBLIC void reply_by_mail ARGS3(
 	if (strstr(editor, "pico")) {
 	    editor_arg = " -t"; /* No prompt for filename to use */
 	}
-	sprintf(user_input,"%s%s %s",editor,editor_arg,tmpfile);
+	sprintf(user_input,"%s%s %s",editor,editor_arg,my_tempfile);
 	_statusline(SPAWNING_EDITOR_FOR_MAIL);
 	stop_curses();
 	if (system(user_input)) {
@@ -1050,7 +1076,7 @@ PUBLIC void reply_by_mail ARGS3(
 	       !term_letter && c != 7   && c != 3)
 	    c = LYgetch();
 	if (TOUPPER(c) == 'Y') {
-	    if ((fd = fopen(tmpfile, "a")) != NULL) {
+	    if ((fd = fopen(my_tempfile, "a")) != NULL) {
 	        fputs("-- \n", fd);
 	        while (fgets(user_input, sizeof(user_input), fp) != NULL) {
 		    fputs(user_input, fd);
@@ -1072,7 +1098,7 @@ PUBLIC void reply_by_mail ARGS3(
     sprintf(cmd, "%s %s/subject=\"%s\" %s ",
     		 system_mail,
 		 (strncasecomp(system_mail, "MAIL", 4) ? "" : "/noself"),
-		 subject, tmpfile);
+		 subject, my_tempfile);
 
     /*
      *  Now add all the people in the address field.
@@ -1111,11 +1137,19 @@ PUBLIC void reply_by_mail ARGS3(
      *  Send the tmpfile into sendmail.  
      */
     _statusline(SENDING_YOUR_MSG);
-#ifdef MMDF
-    sprintf(cmd, "%s -mlruxto,cc\\*",system_mail);
+    sprintf(cmd, "%s %s", system_mail, system_mail_flags);
+#ifdef DOSPATH
+	 tempname(tmpfile2,NEW_FILE);
+	 if (((cp = strrchr(tmpfile2, '.')) != NULL) &&
+		NULL == strchr(cp, '/')) {
+			*cp = '\0';
+			strcat(tmpfile2, ".txt");
+	 }
+	 if ((fp = fopen(tmpfile2,"w")) == NULL) {
+		HTAlert(MAILTO_URL_TEMPOPEN_FAILED);
+		return;
+	 }
 #else
-    sprintf(cmd,"%s -t -oi", system_mail);
-#endif /* MMDF */
     signal(SIGINT, SIG_IGN);
     fp = popen(cmd, "w");
     if (fp == NULL) {
@@ -1123,7 +1157,8 @@ PUBLIC void reply_by_mail ARGS3(
 	sleep(InfoSecs);
 	goto cleanup;
     }
-    fd = fopen(tmpfile, "r");
+#endif /* DOSPATH */
+    fd = fopen(my_tempfile, "r");
     if (fd == NULL) {
 	_statusline(COMMENT_REQUEST_CANCELLED);
 	sleep(InfoSecs);
@@ -1133,7 +1168,18 @@ PUBLIC void reply_by_mail ARGS3(
     fputs(header, fp);
     while ((n = fread(buf, 1, sizeof(buf), fd)) != 0)
 	fwrite(buf, 1, n, fp);
+#ifdef DOSPATH
+	 sprintf(cmd, "%s -t \"%s\" -F %s", system_mail, address, tmpfile2);
+	 fclose(fp);	/* Close the tmpfile. */
+	 stop_curses();
+	 printf("Sending your comment:\n\n$ %s\n\nPlease wait...", cmd);
+	 system(cmd);
+	 sleep(MessageSecs);
+	 start_curses();
+	 remove(tmpfile2);	/* Delete the tmpfile. */
+#else
     pclose(fp);
+#endif
     fclose(fd);	/* Close the tmpfile. */
 
     if (TRACE)
@@ -1145,15 +1191,15 @@ PUBLIC void reply_by_mail ARGS3(
      */
 cleanup:
     signal(SIGINT, cleanup_sig);
-#ifndef VMS
+#if !defined(VMS) && !defined(DOSPATH)
     FREE(header);
 #endif /* !VMS */
 
-#ifdef VMS
+#if defined(VMS) || defined(DOSPATH)
 cleandown:
 #endif /* VMS */
     term_letter = FALSE;
-    remove(tmpfile);	/* Delete the tmpfile. */
+    remove(my_tempfile);	/* Delete the tmpfile. */
     FREE(address);
     FREE(body);
     return;
@@ -1164,7 +1210,7 @@ PRIVATE void terminate_letter ARGS1(int,sig)
     term_letter = TRUE;
     /* Reassert the AST */
     signal(SIGINT, terminate_letter);
-#ifdef VMS
+#if defined(VMS) || defined(DOSPATH)
     /* Refresh the screen to get rid of the "interrupt" message */
     if (!dump_output_immediately) {
 	clearok(curscr, TRUE);
diff --git a/src/LYMail.h b/src/LYMail.h
index b14ab5f4..ce2d9aed 100644
--- a/src/LYMail.h
+++ b/src/LYMail.h
@@ -6,6 +6,8 @@
 #include "LYStructs.h"
 #endif /* LYSTRUCTS_H */
 
+extern BOOLEAN term_letter;
+
 extern void mailform PARAMS((
 	char *	mailto_address,
 	char *	mailto_subject,
diff --git a/src/LYMain.c b/src/LYMain.c
index ae103c36..b6a36167 100644
--- a/src/LYMain.c
+++ b/src/LYMain.c
@@ -18,12 +18,18 @@
 #include "LYClean.h"
 #include "LYCharSets.h"
 #include "LYCharUtils.h"
+#ifdef EXP_CHARTRANS
+#include "UCMap.h"
+#endif /* EXP_CHARTRANS */
 #include "LYReadCFG.h"
 #include "LYrcFile.h"
 #include "LYKeymap.h"
 #include "LYList.h"
 #include "LYJump.h"
 #include "LYBookmark.h"
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 
 #ifndef VMS
 #ifdef SYSLOG_REQUESTED_URLS
@@ -254,6 +260,7 @@ PUBLIC char *pref_charset = NULL;   /* preferred character set */
 PUBLIC BOOLEAN LYNewsPosting = NEWS_POSTING; /* News posting supported? */
 PUBLIC char *LynxSigFile = NULL;    /* Signature file, in or off home */
 PUBLIC char *system_mail = NULL;    /* The path for sending mail */
+PUBLIC char *system_mail_flags = NULL;    /* The flags for sending mail */
 PUBLIC char *lynx_temp_space = NULL; /* The prefix for temporary file paths */
 PUBLIC char *lynx_save_space = NULL; /* The prefix for save to disk paths */
 PUBLIC char *LYHostName = NULL;		/* treat as a local host name */
@@ -275,11 +282,20 @@ PUBLIC char *form_get_data = NULL;   /* User data for get form */
 PUBLIC char *http_error_file = NULL; /* Place HTTP status code in this file */
 	     /* Id:Password for protected forms */
 PUBLIC char *authentication_info[2] = {NULL, NULL};
+
+PUBLIC char *MBM_A_subbookmark[MBM_V_MAXFILES+1];
+PUBLIC char *MBM_A_subdescript[MBM_V_MAXFILES+1];
+
 PUBLIC BOOLEAN HEAD_request = FALSE;
 PUBLIC BOOLEAN scan_for_buried_news_references = TRUE;
 PUBLIC BOOLEAN LYRawMode;
 PUBLIC BOOLEAN LYDefaultRawMode;
 PUBLIC BOOLEAN LYUseDefaultRawMode = TRUE;
+#ifdef EXP_CHARTRANS
+PUBLIC char *UCAssume_MIMEcharset = NULL;
+PUBLIC char *UCAssume_localMIMEcharset = NULL;
+PUBLIC char *UCAssume_unrecMIMEcharset = NULL;
+#endif /* EXP_CHARTRANS */
 PUBLIC int LYlines = 24;
 PUBLIC int LYcols = 80;
 PUBLIC linkstruct links[MAXLINKS];
@@ -293,6 +309,7 @@ PUBLIC int AlertSecs;	/* Seconds to sleep() for HTAlert() messages   */
 PUBLIC BOOLEAN bookmark_start = FALSE;
 PUBLIC char *LYUserAgent = NULL;	/* Lynx User-Agent header          */
 PUBLIC char *LYUserAgentDefault = NULL;	/* Lynx default User-Agent header  */
+PUBLIC BOOLEAN LYUseMouse = FALSE;
 PUBLIC BOOLEAN LYNoRefererHeader=FALSE;	/* Never send Referer header?      */
 PUBLIC BOOLEAN LYNoRefererForThis=FALSE;/* No Referer header for this URL? */
 PUBLIC BOOLEAN LYNoFromHeader = TRUE;	/* Never send From header?         */
@@ -322,8 +339,6 @@ extern BOOL reloading;	    /* For Flushing Cache on Proxy Server (HTTP.c)  */
 extern int HTNewsChunkSize; /* Number of news articles per chunk (HTNews.c) */
 extern int HTNewsMaxChunk;  /* Max news articles before chunking (HTNews.c) */
 
-extern int mainloop NOPARAMS;
-
 PRIVATE BOOLEAN anon_restrictions_set = FALSE;
 PRIVATE BOOLEAN stack_dump = FALSE;
 PRIVATE char *terminal = NULL;
@@ -386,6 +401,7 @@ PRIVATE void free_lynx_globals NOARGS
     FREE(pref_charset);
     FREE(LynxSigFile);
     FREE(system_mail);
+    FREE(system_mail_flags);
     FREE(LYUserAgent);
     FREE(LYUserAgentDefault);
     FREE(LYHostName);
@@ -433,6 +449,34 @@ PUBLIC int main ARGS2(
     FILE *fp;
     char filename[256];
 
+#ifdef _WINDOWS 
+WSADATA WSAData;
+ {
+                int err;
+                WORD wVerReq;
+
+                _fmode = O_BINARY;
+
+                wVerReq = MAKEWORD(1,1);
+
+                err = WSAStartup(wVerReq, &WSAData);
+                if (err != 0)
+                {
+                        printf("No Winsock found, sorry.");
+                        sleep(5);
+                        return;
+                }
+ }
+#endif /* _WINDOWS */
+
+#ifdef DJGPP
+        sock_init();
+#endif
+
+#ifdef DOSPATH
+	 terminal = "vt100";
+#endif
+
     /*
      *  Set up the argument list.
      */
@@ -530,6 +574,14 @@ PUBLIC int main ARGS2(
     StrAllocCopy(language, PREFERRED_LANGUAGE);
     StrAllocCopy(pref_charset, PREFERRED_CHARSET);
     StrAllocCopy(system_mail, SYSTEM_MAIL);
+    StrAllocCopy(system_mail_flags, SYSTEM_MAIL_FLAGS);
+#ifdef DOSPATH
+       if ((cp = getenv("TEMP")) != NULL)
+                StrAllocCopy(lynx_temp_space, cp);
+       else if ((cp = getenv("TMP")) != NULL)
+                StrAllocCopy(lynx_temp_space, cp);
+       else
+#endif
     if ((cp = getenv("LYNX_TEMP_SPACE")) != NULL)
         StrAllocCopy(lynx_temp_space, cp);
     else
@@ -539,11 +591,15 @@ PUBLIC int main ARGS2(
 	StrAllocCopy(temp, lynx_temp_space);
 	if (((len = strlen(temp)) > 0) && temp[len-1] == '/')
 	    temp[len-1] = '\0';
+#ifdef DOSPATH
+	StrAllocCat(temp, HTDOS_wwwName((char *)Home_Dir()));
+#else
 #ifdef VMS
 	StrAllocCat(temp, HTVMS_wwwName((char *)Home_Dir()));
 #else
 	StrAllocCat(temp, Home_Dir());
 #endif /* VMS */
+#endif /* DOSPATH */
 	StrAllocCat(temp, cp);
 	StrAllocCopy(lynx_temp_space, temp);
 	FREE(temp);
@@ -583,7 +639,6 @@ PUBLIC int main ARGS2(
     }
 #else
     {
-        len;
 	if (((len = strlen(lynx_temp_space)) > 1) &&
 	    lynx_temp_space[len-1] != '/') {
 	    StrAllocCat(lynx_temp_space, "/");
@@ -665,15 +720,15 @@ PUBLIC int main ARGS2(
      *  set the default restrictions for that account NOW. - FM
      */
     if (!anon_restrictions_set && strlen((char *)ANONYMOUS_USER) > 0 &&
-#ifdef VMS
+#if defined (VMS) || defined (NOUSERS)
 	!strcasecomp(((char *)getenv("USER")==NULL ? " " : getenv("USER")),
 		     ANONYMOUS_USER)) {
 #else
-#ifdef NO_CUSERID
-        STREQ(((char *)getlogin()==NULL ? " " : getlogin()), ANONYMOUS_USER)) {
-#else
+#if HAVE_CUSERID
         STREQ((char *)cuserid((char *) NULL), ANONYMOUS_USER)) {
-#endif /* NO_CUSERID */
+#else
+        STREQ(((char *)getlogin()==NULL ? " " : getlogin()), ANONYMOUS_USER)) {
+#endif /* HAVE_CUSERID */
 #endif /* VMS */
 	parse_restrictions("default");
 	anon_restrictions_set = TRUE;
@@ -702,20 +757,26 @@ PUBLIC int main ARGS2(
     /*
      *  Convert a '~' in the configuration file path to $HOME.
      */
+#ifndef _WINDOWS /* avoid the whole ~ thing for now */
     if ((cp = strchr(lynx_cfg_file, '~'))) {
 	*(cp++) = '\0';
 	StrAllocCopy(temp, lynx_cfg_file);
 	if (((len = strlen(temp)) > 0) && temp[len-1] == '/')
 	    temp[len-1] = '\0';
+#ifdef DOSPATH
+	StrAllocCat(temp, HTDOS_wwwName((char *)Home_Dir()));
+#else
 #ifdef VMS
 	StrAllocCat(temp, HTVMS_wwwName((char *)Home_Dir()));
 #else
 	StrAllocCat(temp, Home_Dir());
 #endif /* VMS */
+#endif /* DOSPATH */
 	StrAllocCat(temp, cp);
 	StrAllocCopy(lynx_cfg_file, temp);
 	FREE(temp);
     }
+#endif /* _WINDOWS */
 
     /*
      *  If the configuration file is not available,
@@ -728,6 +789,17 @@ PUBLIC int main ARGS2(
     }
     fclose(fp);
 
+#ifdef EXP_CHARTRANS
+    /*
+     * Make sure we have the character sets declared.
+     * This will initialize the CHARTRANS handling. - kw
+     */
+    if (!LYCharSetsDeclared()) {
+        fprintf(stderr, "\nLynx character sets not declared.\n\n");
+	exit(-1);
+    }
+#endif /* EXP_CHARTRANS */
+
     /*
      *  Make sure we have the edit map declared. - FM
      */
@@ -736,7 +808,7 @@ PUBLIC int main ARGS2(
 	exit(-1);
     }
 
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
     /*
      *  Set up default foreground and background colors.
      */
@@ -785,11 +857,15 @@ PUBLIC int main ARGS2(
 	    StrAllocCopy(temp, lynx_save_space);
 	    if (((len = strlen(temp)) > 0) && temp[len-1] == '/')
 	        temp[len-1] = '\0';
+#ifdef DOSPATH
+	StrAllocCat(temp, HTDOS_wwwName((char *)Home_Dir()));
+#else
 #ifdef VMS
 	    StrAllocCat(temp, HTVMS_wwwName((char *)Home_Dir()));
 #else
 	    StrAllocCat(temp, Home_Dir());
 #endif /* VMS */
+#endif /* DOSPATH */
 	    StrAllocCat(temp, cp);
 	    StrAllocCopy(lynx_save_space, temp);
 	    FREE(temp);
@@ -875,10 +951,10 @@ PUBLIC int main ARGS2(
      */
     if (argc == 2 && strcmp(argv[1], "-") == 0) {
 	char buf[1025];
-	char *argv[2];
+	char *my_args[2];
  
-	argv[0] = buf;
-	argv[1] = NULL;
+	my_args[0] = buf;
+	my_args[1] = NULL;
  
 	while (fgets(buf, sizeof(buf) - 1, stdin)) {
 	    int j;
@@ -887,7 +963,7 @@ PUBLIC int main ARGS2(
 		(buf[j] == CR || buf[j] == LF); j--) {
 		buf[j] = '\0';
 	    }
-	    parse_arg(argv, NULL, -1);
+	    parse_arg(my_args, NULL, -1);
 	}
     } else {
 	for (i = 1; i < argc; i++) {
@@ -960,7 +1036,9 @@ PUBLIC int main ARGS2(
 
     /* trap interrupts */    
     if (!dump_output_immediately)
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, cleanup_sig);
+#endif /* NOSIGHUP */
     (void) signal(SIGTERM, cleanup_sig);
 #ifdef SIGWINCH
     (void) signal(SIGWINCH, size_change);
@@ -969,7 +1047,9 @@ PUBLIC int main ARGS2(
     if (!TRACE && !dump_output_immediately && !stack_dump) {
         (void) signal(SIGINT, cleanup_sig);
 #ifndef __linux__
+#ifndef DOSPATH
         (void) signal(SIGBUS, FatalProblem);
+#endif /* DOSPATH */
 #endif /* !__linux__ */
         (void) signal(SIGSEGV, FatalProblem);
         (void) signal(SIGILL, FatalProblem);
@@ -982,7 +1062,9 @@ PUBLIC int main ARGS2(
 	 *  So the runaway CPU time problem on Unix should not occur any
 	 *   more.
 	 */
+#ifndef DOSPATH
         (void) signal(SIGPIPE, SIG_IGN);
+#endif /* DOSPATH */
     }
 #endif /* !VMS */
 
@@ -1025,7 +1107,7 @@ PUBLIC int main ARGS2(
      *  Set up the inside/outside domain restriction flags. - FM
      */
     if (inlocaldomain()) {
-#if defined(NO_UTMP) || defined(VMS) /* not selective */
+#if !defined(HAVE_UTMP) || defined(VMS) /* not selective */
         telnet_ok = !no_inside_telnet && !no_outside_telnet && telnet_ok;
 	news_ok = !no_inside_news && !no_outside_news && news_ok;
 	ftp_ok = !no_inside_ftp && !no_outside_ftp && ftp_ok;
@@ -1037,7 +1119,7 @@ PUBLIC int main ARGS2(
 	news_ok = !no_inside_news && news_ok;
 	ftp_ok = !no_inside_ftp && ftp_ok;
 	rlogin_ok = !no_inside_rlogin && rlogin_ok;
-#endif /* NO_UTMP || VMS */
+#endif /* !HAVE_UTMP || VMS */
     } else {
 	if (TRACE)
 	   fprintf(stderr,"LYMain.c: User in REMOTE domain\n");
@@ -1062,7 +1144,9 @@ PUBLIC int main ARGS2(
         fprintf(stderr,
  "The '-head' switch is for http HEAD requests and cannot be used for\n'%s'.\n",
 		startfile);
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
         (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
         (void) signal(SIGINT, SIG_DFL);
@@ -1081,7 +1165,9 @@ PUBLIC int main ARGS2(
         fprintf(stderr,
  "The '-mime_header' switch is for http URLs and cannot be used for\n'%s'.\n",
 		startfile);
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
         (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
         (void) signal(SIGINT, SIG_DFL);
@@ -1100,7 +1186,9 @@ PUBLIC int main ARGS2(
         fprintf(stderr,
  "The '-traversal' switch is for http URLs and cannot be used for\n'%s'.\n",
 		startfile);
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
         (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
         (void) signal(SIGINT, SIG_DFL);
@@ -1161,7 +1249,9 @@ PUBLIC int main ARGS2(
 	status = mainloop();
         if (!nolist && keypad_mode == LINKS_ARE_NUMBERED)
 	    printlist(stdout,FALSE);
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
         (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
         (void) signal(SIGINT, SIG_DFL);
@@ -1275,6 +1365,44 @@ PRIVATE void parse_arg ARGS3(
 	    parse_restrictions("default");
 	    anon_restrictions_set = TRUE;
 
+#ifdef EXP_CHARTRANS
+    } else if ((strncmp(argv[0], "-assume_charset", 15) == 0) ||
+	       (strncmp(argv[0], "-assume_local_charset", 21) == 0) ||
+	       (strncmp(argv[0], "-assume_unrec_charset", 21) == 0)) {
+	BOOL local_flag = (argv[0][8] == 'l');
+	BOOL unrec_flag = (argv[0][8] == 'u');
+	if (nextarg) {
+	    int j;
+	    for (j = 0; cp[j]; j++)
+	        cp[j] = TOLOWER(cp[j]);
+	    if (local_flag) {
+		StrAllocCopy(UCAssume_localMIMEcharset, cp);
+		if (UCAssume_localMIMEcharset && *UCAssume_localMIMEcharset)
+		    UCLYhndl_HTFile_for_unspec =
+			UCGetLYhndl_byMIME(UCAssume_localMIMEcharset);
+	    } else if (unrec_flag) {
+		StrAllocCopy(UCAssume_unrecMIMEcharset, cp);
+		if (UCAssume_unrecMIMEcharset && *UCAssume_unrecMIMEcharset)
+		    UCLYhndl_for_unrec =
+			UCGetLYhndl_byMIME(UCAssume_unrecMIMEcharset);
+	    } else {
+		StrAllocCopy(UCAssume_MIMEcharset, cp);
+		if (UCAssume_MIMEcharset && *UCAssume_MIMEcharset)
+		    UCLYhndl_for_unspec =
+			UCGetLYhndl_byMIME(UCAssume_MIMEcharset);
+	    }
+	} else {
+	    if (local_flag)
+		UCLYhndl_HTFile_for_unspec = 0;
+	    else if (unrec_flag)
+		UCLYhndl_for_unrec = 0;
+	    else
+		UCLYhndl_for_unspec = 0;
+	}
+
+
+#endif
+
     } else if (strncmp(argv[0], "-auth", 5) == 0) {
         /*
 	 *  Authentication information for protected forms.
@@ -1789,7 +1917,7 @@ PRIVATE void parse_arg ARGS3(
    file_url        disallow using G)oto, served links or bookmarks for\n\
                    file: URL's\n\
    goto            disable the 'g' (goto) command\n");
-#if defined(NO_UTMP) || defined(VMS) /* not selective */
+#if !defined(HAVE_UTMP) || defined(VMS) /* not selective */
 	        printf("\
    inside_ftp      disallow ftps for people coming from inside your\n\
                    domain (utmp required for selectivity)\n\
@@ -1806,14 +1934,14 @@ PRIVATE void parse_arg ARGS3(
                    your domain\n\
    inside_rlogin   disallow rlogins for people coming from inside your domain\n\
    inside_telnet   disallow telnets for people coming from inside your domain\n");
-#endif /* NO_UTMP || VMS */
+#endif /* HAVE_UTMP || VMS */
 	        printf("\
    jump            disable the 'j' (jump) command\n\
    mail            disallow mail\n\
    multibook       disallow multiple bookmark files\n\
    news_post       disallow USENET News posting.\n\
    option_save     disallow saving options in .lynxrc\n");
-#if defined(NO_UTMP) || defined(VMS) /* not selective */
+#if !defined(HAVE_UTMP) || defined(VMS) /* not selective */
 	        printf("\
    outside_ftp     disallow ftps for people coming from outside your\n\
                    domain (utmp required for selectivity)\n\
@@ -1830,7 +1958,7 @@ PRIVATE void parse_arg ARGS3(
                    your domain\n\
    outside_rlogin  disallow rlogins for people coming from outside your domain\n\
    outside_telnet  disallow telnets for people coming from outside your domain\n");
-#endif /* NO_UTMP || VMS */
+#endif /* !HAVE_UTMP || VMS */
 		printf("\
    print           disallow most print options\n\
    shell           disallow shell escapes, and lynxexec, lynxprog or lynxcgi\n\
@@ -1927,6 +2055,10 @@ PRIVATE void parse_arg ARGS3(
 	else
 	    use_underscore = TRUE;
 
+#ifdef NCURSES_MOUSE_VERSION
+    } else if (strncmp(argv[0], "-use_mouse", 9) == 0) {
+        LYUseMouse = TRUE;
+#endif
     } else {
         goto Output_Error_and_Help_List;
     }
@@ -1976,6 +2108,11 @@ Output_Help_List:
     printf("    -                receive the arguments from stdin (enclose\n");
     printf("                     in double-quotes (\"-\") on VMS)\n");
     printf("    -anonymous       used to specify the anonymous account\n");
+#ifdef EXP_CHARTRANS
+    printf("    -assume_charset  charset for documents that don't specify it\n");
+    printf("    -assume_local_charset  charset assumed for local files\n");
+    printf("    -assume_unrec_charset  use this instead of unrecognized charsets\n");
+#endif /* EXP_CHARTRANS */
     printf("    -auth=id:pw      authentication information for protected forms\n");
     printf("    -base            prepend a request URL comment and BASE tag to text/html\n");
     printf("                     outputs for -source or -mime_header dumps\n");
@@ -2070,6 +2207,9 @@ Output_Help_List:
     printf("    -trace           turns on WWW trace mode\n");
     printf("    -traversal       traverse all http links derived from startfile\n");
     printf("    -underscore      toggles use of _underline_ format in dumps\n");
+#ifdef NCURSES_MOUSE_VERSION
+    printf("    -use_mouse       enable use of the mouse\n");
+#endif
     printf("    -validate        accept only http URLs (for validation)\n");
     printf("    -version         print Lynx version information\n");
     printf("    -vikeys          enable vi-like key movement\n");
@@ -2088,11 +2228,15 @@ PRIVATE void FatalProblem ARGS1(
     /*
      *  Ignore further interrupts. - mhc: 11/2/91
      */
-    (void) signal (SIGHUP, SIG_IGN);
+#ifndef NOSIGHUP
+				(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
     (void) signal (SIGTERM, SIG_IGN);
     (void) signal (SIGINT, SIG_IGN);
 #ifndef __linux__
+#ifndef DOSPATH
     (void) signal(SIGBUS, SIG_IGN);
+#endif /* ! DOSPATH */
 #endif /* !__linux__ */
     (void) signal(SIGSEGV, SIG_IGN);
     (void) signal(SIGILL, SIG_IGN);
@@ -2111,7 +2255,9 @@ PRIVATE void FatalProblem ARGS1(
     }
     cleanup_sig(0);
 #ifndef __linux__
+#ifndef DOSPATH
     signal(SIGBUS, SIG_DFL);
+#endif /* DOSPATH */
 #endif /* !__linux__ */
     signal(SIGSEGV, SIG_DFL);
     signal(SIGILL, SIG_DFL);
diff --git a/src/LYMainLoop.c b/src/LYMainLoop.c
index 1801682f..50fcbffb 100644
--- a/src/LYMainLoop.c
+++ b/src/LYMainLoop.c
@@ -34,6 +34,9 @@
 #include "LYCharSets.h"
 #include "LYCharUtils.h"
 #include "LYCookie.h"
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 
 #ifdef VMS
 #include "HTVMSUtils.h"
@@ -148,7 +151,8 @@ int mainloop NOARGS
     BOOLEAN FirstURLRecall = TRUE;
     char *temp = NULL;
     BOOLEAN ForcePush = FALSE;
-    int i, len;
+    unsigned int len;
+    int i;
 
 #ifdef DIRED_SUPPORT
     char *tp;
@@ -343,7 +347,9 @@ try_again:
 		        if ((ofp = fopen(TRAVERSE_ERRORS,"a+")) == NULL) {
  			    if ((ofp = fopen(TRAVERSE_ERRORS,"w")) == NULL) {
 			        perror(NOOPEN_TRAV_ERR_FILE);
+#ifndef NOSIGHUP
 				(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 				(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 				(void) signal(SIGINT, SIG_DFL);
@@ -376,7 +382,9 @@ try_again:
 		        printf("\nlynx: Can't access startfile %s\n",
 			       startfile);
 			if (!dump_output_immediately) {
+#ifndef NOSIGHUP
 			    (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 			    (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 			    (void) signal(SIGINT, SIG_DFL);
@@ -455,7 +463,9 @@ try_again:
  "\nlynx: Start file could not be found or is not text/html or text/plain\n");
 			   printf("      Exiting...\n");
 		           if (!dump_output_immediately) {
+#ifndef NOSIGHUP
 				(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 				(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 				(void) signal(SIGINT, SIG_DFL);
@@ -493,11 +503,15 @@ try_again:
 				  BOOKMARK_TITLE))) &&
 			(temp = HTParse(newdoc.address, "",
 		    		     PARSE_PATH+PARSE_PUNCTUATION)) != NULL) {
+#ifdef DOSPATH
+			cp = HTDOS_wwwName((char *)Home_Dir());
+#else
 #ifdef VMS
 			cp = HTVMS_wwwName((char *)Home_Dir());
 #else
 			cp = (char *)Home_Dir();
 #endif /* VMS */
+#endif /* DOSPATH */
 			len = strlen(cp);
 #ifdef VMS
 			if (!strncasecomp(temp, cp, len) &&
@@ -546,17 +560,22 @@ try_again:
 				    sleep(AlertSecs);
 				    return(-1);
 				}
-				if (temp = HTParse(newdoc.address, "",
-				 PARSE_ACCESS+PARSE_HOST+PARSE_PUNCTUATION)) {
+				if ((temp = HTParse(newdoc.address, "",
+				 PARSE_ACCESS+PARSE_HOST+PARSE_PUNCTUATION))) {
 				    StrAllocCopy(newdoc.address, temp);
 				    HTuncache_current_document();
 				    FREE(curdoc.address);
+#ifdef DOSPATH
+					 StrAllocCat(newdoc.address,
+							 HTDOS_wwwName((char *)Home_Dir()));
+#else
 #ifdef VMS
 				    StrAllocCat(newdoc.address,
 			    		    HTVMS_wwwName((char *)Home_Dir()));
 #else
 				    StrAllocCat(newdoc.address, Home_Dir());
 #endif /* VMS */
+#endif /* DOSPATH */
 				    StrAllocCat(newdoc.address, "/");
 				    StrAllocCat(newdoc.address,
 			    		(strncmp(BookmarkPage, "./", 2) ?
@@ -1090,7 +1109,9 @@ try_again:
 	            printf(
 		        "Fatal error - could not open output file %s\n",cfile);
 		    if (!dump_output_immediately) {
+#ifndef NOSIGHUP
 			(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 			(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 			(void) signal(SIGINT, SIG_DFL);
@@ -1141,7 +1162,6 @@ try_again:
 		    c = '\t';
 #endif /* FASTTAB */
 	    } else {
-get_keyboard_input:
 	        /*
 		 *  Get a keystroke from the user.
 	         *  Save the last keystroke to avoid
@@ -1215,7 +1235,9 @@ new_keyboard_input:
 			    (nhist <= 0 )) {
 			    if (!dump_output_immediately) {
 			        cleanup();
+#ifndef NOSIGHUP
 				(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 				(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 				(void) signal(SIGINT, SIG_DFL);
@@ -1253,7 +1275,9 @@ new_keyboard_input:
 	                (nhist <= 0 )) {
 			if (!dump_output_immediately) {
 			    cleanup();
+#ifndef NOSIGHUP
 			    (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 			    (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 			    (void) signal(SIGINT, SIG_DFL);
@@ -2001,7 +2025,13 @@ new_cmd:  /*
 	    } /* fall through to LYK_ACTIVATE */
 
 	case LYK_ACTIVATE:			/* follow a link */
-	    if (nlinks > 0) {
+	    {
+	     /* Is there a mouse-clicked link waiting? */
+	     int mouse_tmp = get_mouse_link();
+	     /* If yes, use it as the link */
+	     if (mouse_tmp != -1) curdoc.link = mouse_tmp;
+	    }
+	     if (nlinks > 0) {
 	        if (links[curdoc.link].type == WWW_FORM_LINK_TYPE) {
 		    /*
 		     *  Don't try to submit forms with bad actions. - FM
@@ -2139,8 +2169,8 @@ new_cmd:  /*
 		        !strcmp(lynxjumpfile, curdoc.address)) {
 			LYJumpFileURL = TRUE;
 			LYUserSpecifiedURL = TRUE;
-		    } else if (curdoc.title &&
-		    	       !strcmp(curdoc.title, HISTORY_PAGE_TITLE) ||
+		    } else if ((curdoc.title &&
+		    	       !strcmp(curdoc.title, HISTORY_PAGE_TITLE)) ||
 			       curdoc.bookmark != NULL ||
 			       (lynxjumpfile &&
 			        !strcmp(lynxjumpfile, curdoc.address))) {
@@ -2402,7 +2432,7 @@ check_goto_URL:
 	    LYFillLocalFileURL((char **)&temp, "file://localhost");
 	    LYEnsureAbsoluteURL((char **)&temp, "");
 	    sprintf(user_input_buffer, "%.*s",
-	    	    (sizeof(user_input_buffer) - 1), temp);
+	    	    (int)(sizeof(user_input_buffer) - 1), temp);
 	    FREE(temp);
 	    if ((no_file_url || no_goto_file) &&
 	        !strncmp(user_input_buffer,"file:",5)) {
@@ -3600,11 +3630,17 @@ check_add_bookmark_to_self:
 	        stop_curses();
 		printf(SPAWNING_MSG);
 	        fflush(stdout);
+#ifdef DOSPATH	
+	system("cls");	
+	system("echo Type EXIT to return to Lynx.");
+	system(getenv("COMSPEC") == NULL ? "command.com" : getenv("COMSPEC"));
+#else
 #ifdef VMS
 		system("");
 #else
 	        system("exec $SHELL");
 #endif /* VMS */
+#endif /* DOSPATH */
 	        start_curses();
 	        refresh_screen=TRUE;  /* for a showpage */
 	    } else {
diff --git a/src/LYMainLoop.h b/src/LYMainLoop.h
index 97addc03..b3a5bd99 100644
--- a/src/LYMainLoop.h
+++ b/src/LYMainLoop.h
@@ -2,8 +2,6 @@
 #ifndef LYMAINLOOP_H
 #define LYMAINLOOP_H
 
-
-
-
+extern int mainloop NOPARAMS;
 
 #endif /* LYMAINLOOP_H */
diff --git a/src/LYMap.c b/src/LYMap.c
index 3126611c..4aa0346a 100644
--- a/src/LYMap.c
+++ b/src/LYMap.c
@@ -54,7 +54,7 @@ PUBLIC BOOL LYMapsOnly = FALSE;
 /* 
  * Utility for freeing the list of MAPs. - FM
  */
-PUBLIC void LYLynxMaps_free NOARGS
+PRIVATE void LYLynxMaps_free NOARGS
 {
     ImageMap *map;
     MapElement *element;
diff --git a/src/LYNews.c b/src/LYNews.c
index 79ae8e39..65186f00 100644
--- a/src/LYNews.c
+++ b/src/LYNews.c
@@ -14,6 +14,7 @@
 #include "LYSystem.h"
 #include "GridText.h"
 #include "LYSignal.h"
+#include "LYNews.h"
 
 #include "LYGlobalDefs.h"
 
@@ -46,7 +47,7 @@ PUBLIC char *LYNewsPost ARGS2(
     char *cp = NULL;
     int c = 0;  /* user input */
     FILE *fd;
-    char tmpfile[256];
+    char my_tempfile[256];
     char *postfile = NULL;
     char *NewsGroups = NULL;
     char *org = NULL;
@@ -63,8 +64,8 @@ PUBLIC char *LYNewsPost ARGS2(
      *  Open a temporary file for the headers
      *  and message body. - FM
      */ 
-    tempname(tmpfile, NEW_FILE);
-    if ((fd = fopen(tmpfile, "w")) == NULL) {
+    tempname(my_tempfile, NEW_FILE);
+    if ((fd = fopen(my_tempfile, "w")) == NULL) {
 	HTAlert(CANNOT_OPEN_TEMP);
 	return(postfile);
     }
@@ -154,7 +155,7 @@ PUBLIC char *LYNewsPost ARGS2(
     	       *org != '\0') {
 	StrAllocCat(cp, org);
 #ifndef VMS
-    } else if (fp = fopen("/etc/organization", "r")) {
+    } else if ((fp = fopen("/etc/organization", "r")) != 0) {
 	if (fgets(user_input, sizeof(user_input), fp) != NULL) {
 	    if ((cp = strchr(user_input, '\n')) != NULL)
 	        *cp = '\0';
@@ -218,7 +219,7 @@ PUBLIC char *LYNewsPost ARGS2(
 	if (strstr(editor, "pico")) {
 	    editor_arg = " -t"; /* No prompt for filename to use */
 	}
-	sprintf(user_input,"%s%s %s", editor, editor_arg, tmpfile);
+	sprintf(user_input,"%s%s %s", editor, editor_arg, my_tempfile);
 	_statusline(SPAWNING_EDITOR_FOR_NEWS);
 	stop_curses();
 	if (system(user_input)) {
@@ -290,7 +291,7 @@ PUBLIC char *LYNewsPost ARGS2(
 	       !term_message && c != 7   && c != 3)
 	    c = LYgetch();
 	if (TOUPPER(c) == 'Y') {
-	    if ((fd = fopen(tmpfile, "a")) != NULL) {
+	    if ((fd = fopen(my_tempfile, "a")) != NULL) {
 	        fputs("-- \n", fd);
 	        while (fgets(user_input, sizeof(user_input), fp) != NULL) {
 		    fputs(user_input, fd);
@@ -301,7 +302,7 @@ PUBLIC char *LYNewsPost ARGS2(
 	fclose(fp);
     }
     clear();  /* clear the screen */
-    StrAllocCopy(postfile, tmpfile);
+    StrAllocCopy(postfile, my_tempfile);
     if (!followup)
         /*
 	 *  If it's not a followup, the current document
@@ -328,10 +329,10 @@ cleanup:
     term_message = FALSE;
     if (!postfile) {
 #ifdef VMS
-        while (remove(tmpfile) == 0)
+        while (remove(my_tempfile) == 0)
 	    ; /* loop through all versions */
 #else
-	remove(tmpfile);
+	remove(my_tempfile);
 #endif /* VMS */
     }
     FREE(NewsGroups);
diff --git a/src/LYOptions.c b/src/LYOptions.c
index a795fcfb..236ba680 100644
--- a/src/LYOptions.c
+++ b/src/LYOptions.c
@@ -36,12 +36,12 @@ PRIVATE int boolean_choice PARAMS((int status, int line,
 #define MAXCHOICES 10
 
 PRIVATE void option_statusline ARGS1(
-	char *,		text)
+	CONST char *,		text)
 {
     /*
      *  Make sure we have a pointer to a string.
      */
-    if (text == NULL)
+    if (text == 0)
         return;
 
     /*
@@ -956,6 +956,7 @@ PRIVATE int boolean_choice ARGS4(
 	char **,	choices)
 {
     int response = 0;
+    int respcmd;
     int number = 0;
     int col = (column >= 0 ? column : COL_OPTION_VALUES);
 	
@@ -982,10 +983,50 @@ PRIVATE int boolean_choice ARGS4(
 	if (term_options || response == 7 || response == 3)
 	    response = '\n';
 	if (response != '\n' && response != '\r') {
+	     respcmd = keymap[response+1];
+#if defined(DIRED_SUPPORT) && defined(OK_OVERRIDE)
+                     /* does this make sense here? dunno.. - kw */
+	     if (!respcmd && override[response+1] && !no_dired_support)
+	       respcmd = override[response+1];
+#endif /* DIRED_SUPPORT && OK_OVERRIDE */
+	     switch (respcmd) {
+	     case LYK_PREV_PAGE:
+	     case LYK_UP_TWO:
+	     case LYK_PREV_LINK:
+	     case LYK_UP_LINK:
+	     case LYK_LEFT_LINK:
+	     case LYK_PREV_DOC:
+		if(status == 0)
+		    status = number;  /* go back to end */
+		else
+		    status--;
+		break;
+	     case LYK_END:
+		status = number;
+		break;
+		
+	     case LYK_HOME:
+		status = 0;
+		break;
+	     case LYK_1:
+	     case LYK_2:
+	     case LYK_3:
+	     case LYK_4:
+	     case LYK_5:
+	     case LYK_6:
+	     case LYK_7:
+	     case LYK_8:
+	     case LYK_9:
+	       if((respcmd - LYK_1 + 1) <= number) {
+		 status = respcmd -LYK_1 + 1;
+		 break;
+	       }  /* else fall through! */
+	     default:
 	    if (status == number)
 		status = 0;  /* go over the top and around */
 	    else
 		status++;
+	      }  /* end of switch */
 	    addstr(choices[status]);
 	    refresh();
 	} else {
diff --git a/src/LYOptions.h b/src/LYOptions.h
index e7464226..c313d257 100644
--- a/src/LYOptions.h
+++ b/src/LYOptions.h
@@ -2,6 +2,8 @@
 #ifndef LYOPTIONS_H
 #define LYOPTIONS_H
 
+extern BOOLEAN term_options;
+
 extern void options NOPARAMS;
 extern void edit_bookmarks NOPARAMS;
 
diff --git a/src/LYPrint.c b/src/LYPrint.c
index 265747a4..f7cf2e34 100644
--- a/src/LYPrint.c
+++ b/src/LYPrint.c
@@ -19,6 +19,9 @@
 #ifdef VMS
 #include "HTVMSUtils.h"
 #endif /* VMS */
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 
 #include "LYLeaks.h"
 
@@ -305,11 +308,15 @@ PUBLIC int printfile ARGS1(document *,newdoc)
 		    strcpy(buffer, filename);
 		    if ((len=strlen(buffer)) > 0 && buffer[len-1] == '/')
 		        buffer[len-1] = '\0';
+#ifdef DOSPATH
+			 strcat(buffer, HTDOS_wwwName((char *)Home_Dir()));
+#else
 #ifdef VMS
 		    strcat(buffer, HTVMS_wwwName((char *)Home_Dir()));
 #else
 		    strcat(buffer, Home_Dir());
 #endif /* VMS */
+#endif /* DOSPATH */
 		    strcat(buffer, cp);
 		    strcpy(filename, buffer);
 		}
@@ -332,9 +339,17 @@ PUBLIC int printfile ARGS1(document *,newdoc)
 		else
 		    cp = NULL;
 		if (cp)
+#ifdef DOSPATH
+						  sprintf(buffer,"%s/%s", cp, HTDOS_name(filename));
+#else
                     sprintf(buffer,"%s/%s", cp, filename);
+#endif
 		else
+#ifdef DOSPATH
+			 strcpy(buffer, HTDOS_name(filename));
+#else
 		    strcpy(buffer, filename);
+#endif
 #endif /* VMS */
 
 		/* see if it already exists */
@@ -482,7 +497,7 @@ PUBLIC int printfile ARGS1(document *,newdoc)
 
 		remove_quotes(sug_filename);
 		sprintf(buffer, "%s/subject=\"%s\" %s %s", 
-			SYSTEM_MAIL, sug_filename, tempfile, user_response);
+			system_mail, sug_filename, tempfile, user_response);
 
         	stop_curses();
 		printf(MAILING_FILE);
@@ -492,18 +507,22 @@ PUBLIC int printfile ARGS1(document *,newdoc)
 		sleep(MessageSecs);
         	start_curses();
 #else /* Unix: */
-#ifdef MMDF
-		sprintf(buffer, "%s -mlruxto,cc*", SYSTEM_MAIL);
-#else
-		sprintf(buffer, "%s -t -oi", SYSTEM_MAIL);
-#endif /* MMDF */
+    		sprintf(buffer, "%s %s", system_mail, system_mail_flags);
 
+#ifdef DOSPATH
+	 sprintf(tempfile, "%s%s", lynx_temp_space, "temp_mail.txt");
+	 if ((outfile_fp = fopen(tempfile,"w")) == NULL) {
+			_statusline(MAIL_REQUEST_FAILED);
+			sleep(AlertSecs);
+			return;
+	 }
+#else
 		if ((outfile_fp = popen(buffer, "w")) == NULL) {
 			_statusline(MAIL_REQUEST_FAILED);
 			sleep(AlertSecs);
 			break;
 		}
-		
+#endif
 		if (HTisDocumentSource()) {
 		    /*
 		     *  Add Content-Type, Content-Location, and
@@ -543,7 +562,18 @@ PUBLIC int printfile ARGS1(document *,newdoc)
 		if (keypad_mode)
 		    printlist(outfile_fp, FALSE);
 
+#ifdef DOSPATH
+	 sprintf(buffer, "%s -t \"%s\" -F %s", system_mail, user_response, tempfile);
+	 fclose(outfile_fp);	/* Close the tmpfile. */
+	 stop_curses();
+	 printf("Sending \n\n$ %s\n\nPlease wait...", buffer);
+	 system(buffer);
+	 sleep(MessageSecs);
+	 start_curses();
+	 remove(tempfile);	/* Delete the tmpfile. */
+#else
 		pclose(outfile_fp);
+#endif
 #endif /* VMS */
 		break;
 	
@@ -931,7 +961,7 @@ PUBLIC int print_options ARGS2(char **,newfile, int,lines_in_file)
 	return(-1);
     }
 
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     StrAllocCopy(print_filename, "file://localhost/");
 #else
     StrAllocCopy(print_filename, "file://localhost");
diff --git a/src/LYReadCFG.c b/src/LYReadCFG.c
index f76f08dd..69c56c63 100644
--- a/src/LYReadCFG.c
+++ b/src/LYReadCFG.c
@@ -13,6 +13,7 @@
 #include "LYCurses.h"
 #include "LYSignal.h"
 #include "LYBookmark.h"
+#include "LYReadCFG.h"
 
 #ifdef DIRED_SUPPORT
 #include "LYLocal.h"
@@ -272,7 +273,28 @@ PRIVATE void add_printer_to_list ARGS2(
     }
 }
 
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
+#ifdef DOSPATH /* I.E. broken curses */
+static char *Color_Strings[16] =
+{
+	 "black",
+	 "blue",
+	 "green",
+	 "cyan",
+	 "red",
+	 "magenta",
+	 "brown",
+	 "lightgray",
+	 "gray",
+	 "brightblue",
+	 "brightgreen",
+	 "lightcyan",
+	 "brightred",
+	 "brightmagenta",
+	 "yellow",
+	 "white"
+};
+#else
 static char *Color_Strings[16] =
 {
     "black",
@@ -292,6 +314,7 @@ static char *Color_Strings[16] =
     "brightcyan",
     "white"
 };
+#endif /* DOSPATH (broken curses) */
 
 /*
  *  Validator for COLOR fields.
@@ -303,7 +326,7 @@ PRIVATE int check_color ARGS1(
 
     for (i = 0; i < 16; i++) {
 	if (!strcmp(color, Color_Strings[i]))
-	    return 0;
+	    return i;
     }
     return -1;
 }
@@ -327,7 +350,9 @@ Here FOREGROUND and BACKGROUND must be one of:\n"
 		Color_Strings[i + 2], Color_Strings[i + 3]);
     }
 
+#ifndef NOSIGHUP
     (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
     (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
     (void) signal(SIGINT, SIG_DFL);
@@ -361,13 +386,18 @@ PRIVATE void parse_color ARGS1(
         exit_with_color_syntax();
     *bg++ = 0;
 
+#if defined(USE_SLANG)
     if ((-1 == check_color(fg)) ||
         (-1 == check_color(bg)))
 	exit_with_color_syntax();
 
     SLtt_set_color(color, NULL, fg, bg);
+#else
+    if (lynx_chg_color(color, check_color(fg), check_color(bg)) < 0)
+	exit_with_color_syntax();
+#endif
 }
-#endif /* USE_SLANG */
+#endif /* defined(USE_SLANG) || defined(COLOR_CURSES) */
 
 /*
  * Process the configuration file (lynx.cfg).
@@ -483,10 +513,10 @@ PUBLIC void read_cfg ARGS1(
 	} else if (!strncasecomp(buffer, "COLLAPSE_BR_TAGS:", 17)) {
 		LYCollapseBRs = is_true(buffer+17);
 
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(COLOR_CURSES)
 	} else if (!strncasecomp(buffer, "COLOR:", 6)) {
 		parse_color(buffer + 6);
-#endif /* USE_SLANG */
+#endif /* defined(USE_SLANG) || defined(COLOR_CURSES) */
 
 	} else if (!strncasecomp(buffer, "cso_proxy:", 10)) {
 	    if (getenv("cso_proxy") == NULL) {
@@ -655,11 +685,7 @@ PUBLIC void read_cfg ARGS1(
 	break;
 
 	case 'I':
-	if (!strncasecomp(buffer, "NEWS_POSTING:", 13)) {
-	    LYNewsPosting = is_true(buffer+13);
-	    no_newspost = (LYNewsPosting == FALSE);
-
-	} else if (!strncasecomp(buffer, "INFOSECS:", 9)) {
+	if (!strncasecomp(buffer, "INFOSECS:", 9)) {
 	    strcpy(temp, buffer+9);
 	    for (i = 0; temp[i]; i++) {
 		if (!isdigit(temp[i])) {
@@ -794,7 +820,11 @@ PUBLIC void read_cfg ARGS1(
 	break;
 
 	case 'N':
-	if (!strncasecomp(buffer, "NEWS_CHUNK_SIZE:", 16)) {
+	if (!strncasecomp(buffer, "NEWS_POSTING:", 13)) {
+	    LYNewsPosting = is_true(buffer+13);
+	    no_newspost = (LYNewsPosting == FALSE);
+
+	} else if (!strncasecomp(buffer, "NEWS_CHUNK_SIZE:", 16)) {
 		HTNewsChunkSize = atoi(buffer+16);
 		/*
 		 * If the new HTNewsChunkSize exceeds the maximum,
@@ -1016,6 +1046,9 @@ PUBLIC void read_cfg ARGS1(
 
 	} else if (!strncasecomp(buffer, "SYSTEM_MAIL:", 12)) {
 	    StrAllocCopy(system_mail, buffer+12);
+
+	} else if (!strncasecomp(buffer, "SYSTEM_MAIL_FLAGS:", 18)) {
+	    StrAllocCopy(system_mail_flags, buffer+18);
 	}
 	break;
 
@@ -1025,7 +1058,6 @@ PUBLIC void read_cfg ARGS1(
 	    add_trusted(&buffer[13], EXEC_PATH); /* Add exec path */
 	}
 #endif /* EXEC_LINKS */
-
 #ifdef LYNXCGI_LINKS
 	if (!strncasecomp(buffer, "TRUSTED_LYNXCGI:", 16)) {
 	    add_trusted(&buffer[16], CGI_PATH); /* Add CGI path */
@@ -1050,6 +1082,11 @@ PUBLIC void read_cfg ARGS1(
 	    UseFixedRecords = is_true(buffer+18);
 #endif /* VMS */
 
+#ifdef NCURSES_MOUSE_VERSION
+	} else if(!strncasecomp(buffer, "USE_MOUSE:",10)) {
+		LYUseMouse = is_true(buffer+10);
+#endif
+
 	} else if (!strncasecomp(buffer, "USE_SELECT_POPUPS:", 18)) {
 	    LYSelectPopups = is_true(buffer+18);
 	}
diff --git a/src/LYSearch.c b/src/LYSearch.c
index 52a3e110..7dd6c26b 100644
--- a/src/LYSearch.c
+++ b/src/LYSearch.c
@@ -17,7 +17,7 @@
  * in not found do not reset cur and return false.
  */
 
-PUBLIC int check_for_target_in_links ARGS2(int *,cur, char *,new_target)
+PRIVATE int check_for_target_in_links ARGS2(int *,cur, char *,new_target)
 {
     int i = *cur+1;
 
diff --git a/src/LYShowInfo.c b/src/LYShowInfo.c
index b02b3a05..dc314523 100644
--- a/src/LYShowInfo.c
+++ b/src/LYShowInfo.c
@@ -62,7 +62,7 @@ PUBLIC int showinfo ARGS4(
     /*
      *  Make the temporary file a URL now.
      */
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     StrAllocCopy(info_url,"file://localhost/");
 #else
     StrAllocCopy(info_url,"file://localhost");
@@ -250,6 +250,20 @@ PUBLIC int showinfo ARGS4(
     if (HTLoadedDocumentCharset())
         fprintf(fp0, "<dt><em>&nbsp;Charset:</em> %s\n",
 		     HTLoadedDocumentCharset());
+#ifdef EXP_CHARTRANS
+    else {
+      LYUCcharset * p_in = HTAnchor_getUCInfoStage(HTMainAnchor,
+                                                             UCT_STAGE_PARSER);
+      if (!p_in || !(p_in->MIMEname) || !*(p_in->MIMEname) ||
+	  HTAnchor_getUCLYhndl(HTMainAnchor, UCT_STAGE_PARSER) < 0)
+	p_in = HTAnchor_getUCInfoStage(HTMainAnchor, UCT_STAGE_MIME);
+      if (p_in && p_in->MIMEname && *(p_in->MIMEname) &&
+	  HTAnchor_getUCLYhndl(HTMainAnchor, UCT_STAGE_MIME) >= 0) {
+        fprintf(fp0, "<dt><em>&nbsp;Charset:</em> %s (assumed)\n",
+		     p_in->MIMEname);
+      }
+    }
+#endif /* EXP_CHARTRANS */
 
     if ((cp = HText_getServer()) != NULL && *cp != '\0')
         fprintf(fp0, "<dt><em>&nbsp;&nbsp;Server:</em> %s\n", cp);
diff --git a/src/LYStrings.c b/src/LYStrings.c
index 593dd59c..093ca774 100644
--- a/src/LYStrings.c
+++ b/src/LYStrings.c
@@ -9,20 +9,88 @@
 #include "LYKeymap.h"
 #include "LYSignal.h"
 #include "LYClean.h"
+#include "LYMail.h"
+#include "LYOptions.h"
 
 #include <ctype.h>
 
 #include "LYLeaks.h"
 
-#if !defined(FANCY_CURSES) && !defined(NO_KEYPAD)
-#define NO_KEYPAD
-#endif /* !FANCY_CURSES && !NO_KEYPAD */
-
 #define FREE(x) if (x) {free(x); x = NULL;}
 
 extern BOOL HTPassHighCtrlRaw;
 extern HTCJKlang HTCJK;
 
+/* If you want to add mouse support for some new platform, it's fairly
+** simple to do.  Once you've determined the X and Y coordinates of
+** the mouse event, loop through the elements in the links[] array and
+** see if the coordinates fall within a highlighted link area.  If so,
+** the code must set mouse_link to the index of the chosen link,
+** and return a key value that corresponds to LYK_ACTIVATE.  The
+** LYK_ACTIVATE code in LYMainLoop.c will then check mouse_link
+** and activate that link.  If the mouse event didn't fall within a
+** link, the code should just set mouse_link to -1 and return -1. --AMK
+**/
+
+/* The number of the link selected w/ the mouse (-1 if none) */
+static int mouse_link = -1;   
+
+/* Return the value of mouse_link, erasing it */
+PUBLIC int get_mouse_link NOARGS
+{
+  int t; 
+  t=mouse_link; 
+  mouse_link = -1;
+  return t;
+}
+
+/* Given X and Y coordinates of a mouse event, set mouse_link to the
+** index of the corresponding hyperlink, or set mouse_link to -1 if no
+** link matches the event.  Returns -1 if no link matched the click,
+** or a keycode that must be returned from LYgetch() to activate the
+** link. 
+**/
+
+PRIVATE int set_clicked_link ARGS2(int,x,int,y)
+{
+  int i;
+
+  /* Loop over the links and see if we can get a match */
+  for(i=0; i < nlinks && mouse_link == -1; i++) {
+    /* Check the first line of the link */
+    if ( links[i].hightext != NULL && 
+	 links[i].ly == y && 
+	 (x - links[i].lx) < strlen(links[i].hightext ) ) {
+      mouse_link=i;
+    }
+    /* Check the second line */
+    if (links[i].hightext2 != NULL &&
+	1+links[i].ly == y &&
+	(x - links[i].hightext2_offset) < strlen(links[i].hightext2) ) {
+      mouse_link=i;
+    }
+  }
+  /* If no link was found, just return a do-nothing code */
+  if (mouse_link == -1) return -1;
+
+  /* If a link was hit, we must look for a key which will activate LYK_ACTIVATE
+  ** XXX The 127 in the following line will depend on the size of the keymap[]
+  ** array.  However, usually we'll find LYK_ACTIVATE somewhere in the first
+  ** 127 keys (it's usually mapped to the Enter key) 
+  **/
+  for (i=0; i<127; i++) {	 
+    if (LYisNonAlnumKeyname(i, LYK_ACTIVATE)) {
+      return i;
+    }
+  }
+    /* Whoops!  Nothing's defined as LYK_ACTIVATE!
+       Well, who are we to argue with the user? 
+       Forget about the mouse click */
+  mouse_link = -1;
+  return -1;
+}
+
+
 /*
  * LYstrncpy() terminates strings with a null byte.
  * Writes a null byte into the n+1 byte of dst.
@@ -42,6 +110,44 @@ PUBLIC char * LYstrncpy ARGS3(char *,dst, char *,src, int,n)
         *(dst+n) = '\0';
     return val;
 }
+#ifdef EXP_CHARTRANS
+/*
+ * LYmbcsstrncpy() terminates strings with a null byte.
+ * Takes acount of multibyte characters.
+ * src string is copied until either end of string or max number of
+ * either bytes or glyphs (mbcs sequences) (currently only UTF8).
+ */
+PUBLIC char * LYmbcsstrncpy ARGS5(char *,dst, char *,src, int,n_bytes,
+				  int,n_glyphs,	int,enc)
+{
+    char *val = dst;
+    int i_bytes = 0, i_glyphs = 0;
+
+    if (n_bytes < 0)
+        n_bytes = 0;
+    if (n_glyphs < 0)
+        n_glyphs = 0;
+
+#define IS_NEW_GLYPH(ch) (enc && ((unsigned char)(ch)&0xc0) != 0x80)
+
+    for (; *src != '\0' && i_bytes < n_bytes;
+	 i_bytes++) {
+	if (IS_NEW_GLYPH(*src))
+	    if (i_glyphs++ >= n_glyphs) {
+		*dst = '\0';
+		return val;
+	    }
+	*(dst++) = *(src++);
+    }
+    *dst = '\0';
+
+    return val;
+}
+#endif /* EXP_CHARTRANS */
+
+#undef GetChar
+
+#undef GetChar
 
 #ifdef USE_SLANG
 #ifdef VMS
@@ -49,20 +155,39 @@ PUBLIC char * LYstrncpy ARGS3(char *,dst, char *,src, int,n)
 #else
 #define GetChar (int)SLang_getkey
 #endif /* VMS */
-#else /* Not slang: */
+#endif /* USE_SLANG */
+
+#if !defined(GetChar) && defined(NCURSES)
+#define GetChar() wgetch(my_subwindow ? my_subwindow : stdscr)
+#endif
+
+#if !defined(GetChar) && defined(SNAKE)
+#define GetChar() wgetch(stdscr)
+#endif
+
+#if !defined(GetChar)
 #ifdef VMS
 #define GetChar() ttgetc()
 #else
-#if defined(SNAKE) || defined(NCURSES)
-#define GetChar() wgetch(stdscr)
-#else /* everything but VMS, SNAKE and NCURSES */
 #ifndef USE_GETCHAR
 #define USE_GETCHAR
 #endif /* !USE_GETCHAR */
 #define GetChar() getchar()  /* used to be "getc(stdin)" and "getch()" */
-#endif /* SNAKE || NCURSES */
 #endif /* VMS */
-#endif /* USE_SLANG */
+#endif /* !defined(GetChar) */
+
+#if defined(NCURSES)
+/*
+ * Workaround a bug in ncurses order-of-refresh by setting a pointer to
+ * the topmost window that should be displayed.
+ */
+PRIVATE WINDOW *my_subwindow;
+
+PUBLIC void LYsubwindow ARGS1(WINDOW *, param)
+{
+	my_subwindow = param;
+}
+#endif
 
 /*
  * LYgetch() translates some escape sequences and may fake noecho
@@ -96,6 +221,21 @@ re_read:
    }
 #endif /* !USE_SLANG || VMS */
 
+#ifdef DOSPATH
+	if (c == 0) c = '/';
+	if (c > 255) {      /* handle raw dos keys */
+		switch (c)
+		{
+			case 464: c = '-'; break;  /* keypad minus*/
+			case 465: c = '+'; break;  /* keypad plus*/
+			case 459: c = 13; break;  /* keypad enter*/
+			case 463: c = '*'; break;  /* keypad * */
+			case 440: c = 'Q'; break;  /* alt x */
+			default: break;
+		}
+//		if (c < 256) return(c);
+	}
+#endif
 #ifdef USE_GETCHAR
     if (c == EOF && errno == EINTR)	/* Ctrl-Z causes EINTR in getchar() */
         goto re_read;
@@ -123,7 +263,9 @@ re_read:
 	}
 #endif /* IGNORE_CTRL_C */
 	cleanup();
+#ifndef NOSIGHUP
         (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
         (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
         (void) signal(SIGINT, SIG_DFL);
@@ -232,10 +374,9 @@ re_read:
         }
 	if (isdigit(a) && (b == '[' || c == 155) && d != -1 && d != '~')
 	    d = GetChar();
-#if defined(NO_KEYPAD) || defined(VMS)
     }
-#else
-    } else {
+#if HAVE_KEYPAD
+    else {
 
 	/* convert keypad() mode keys into Lynx defined keys
 	 */
@@ -302,9 +443,24 @@ re_read:
 	   c=127;		   /* backspace key (delete, not Ctrl-H) */
 	   break;
 #endif /* KEY_BACKSPACE */
+#ifdef NCURSES_MOUSE_VERSION
+	case KEY_MOUSE:
+	  {
+           MEVENT event;
+           int err;
+
+	   c = -1;
+	   mouse_link = -1;
+	   err=getmouse(&event);
+	   if (event.bstate & BUTTON1_CLICKED) {
+	     c = set_clicked_link(event.x, event.y);
+	   }
+	  }
+	  break;
+#endif /* NCURSES_MOUSE_VERSION */
 	}
     }
-#endif /* defined(NO_KEYPAD) || defined(VMS) */
+#endif /* defined(HAVE_KEYPAD) */
 
     return(c);
 }
@@ -640,8 +796,6 @@ PUBLIC void LYRefreshEdit ARGS1(EDREC *,edit)
 PUBLIC int LYgetstr ARGS4(char *,inputline, int,hidden,
 			  int,bufsize, int,recall)
 {
-    extern BOOLEAN term_letter;     /* Flag from terminate_letter() AST  */
-    extern BOOLEAN term_options;    /* Flag from terminate_options() AST */
     extern BOOLEAN term_message;    /* Flag from terminate_message() AST */
 #ifdef VMS
     extern BOOLEAN HadVMSInterrupt; /* Flag from cleanup_sig() AST       */
@@ -742,7 +896,7 @@ PUBLIC char * LYstrstr ARGS2(char *,chptr, char *,tarptr)
  * It ignores the characters: LY_UNDERLINE_START_CHAR and
  * 			      LY_UNDERLINE_END_CHAR
  * 			      LY_BOLD_START_CHAR
- * 			      LY_BOLD_END_CHAR[B
+ * 			      LY_BOLD_END_CHAR
  *			      if present in chptr.
  * It is a case insensitive search.
  */
@@ -848,6 +1002,153 @@ PUBLIC char * LYno_attr_char_strstr ARGS2(char *,chptr, char *,tarptr)
     return(NULL);
 }
 
+#ifdef EXP_CHARTRANS
+
+#define IS_UTFEXTRA(ch) (utf_flag && ((unsigned char)(ch)&0xc0) == 0x80)
+/*
+ * LYno_attr_mbcs_case_strstr will find the first occurence of the string 
+ * pointed to by tarptr in the string pointed to by chptr.
+ * It takes account of MultiByte Character Sequences (UTF8).
+ * The physical lenght of the displayed string up to the end of the target
+ * string is returned in *nendp if the search is successful.
+ * It ignores the characters: LY_UNDERLINE_START_CHAR and
+ * 			      LY_UNDERLINE_END_CHAR
+ * 			      LY_BOLD_START_CHAR
+ * 			      LY_BOLD_END_CHAR[B
+ *			      if present in chptr.
+ * It assumes UTF8 if utf_flag is set.
+ * It is a case insensitive search.
+ */
+PUBLIC char * LYno_attr_mbcs_case_strstr ARGS4(char *,chptr, char *,tarptr,
+					       BOOL, utf_flag, int *,nendp)
+{
+    register char *tmpchptr, *tmptarptr;
+    int len = 0;
+
+    if (!chptr)
+        return(NULL);
+
+    while (IsSpecialAttrChar(*chptr) && *chptr != '\0')
+        chptr++;
+
+    for (; *chptr != '\0'; chptr++) {
+	    
+        if (TOUPPER(*chptr) == TOUPPER(*tarptr)) {
+	    int tarlen = 0;
+	    len++;
+
+            /* see if they line up */
+	    tmpchptr = chptr+1;
+	    tmptarptr = tarptr+1;
+
+	    if (*tmptarptr == '\0') { /* one char target */
+		*nendp = len;
+		 return(chptr);
+	    }
+	    while (1) {
+		 if (!IsSpecialAttrChar(*tmpchptr)) {
+
+                    if (TOUPPER(*tmpchptr) != TOUPPER(*tmptarptr))
+			break;
+
+		    if (!IS_UTFEXTRA(*tmptarptr))
+			tarlen++;
+		    tmpchptr++;
+		    tmptarptr++;
+
+		 } else {
+		    tmpchptr++;
+		 }
+
+                 if (*tmptarptr == '\0') {
+		     *nendp = len + tarlen;
+		     return(chptr);
+		 }
+		 if (*tmpchptr == '\0')
+		     break;
+	    }
+        } else if (!( IS_UTFEXTRA(*chptr) ||
+		      IsSpecialAttrChar(*chptr))) {
+	    len++;
+	}
+		       
+    } /* end for */
+
+    return(NULL);
+}
+
+/*
+ * LYno_attr_mbcs_strstr will find the first occurence of the string
+ * pointed to by tarptr in the string pointed to by chptr.
+ * It takes account of MultiByte Character Sequences (UTF8).
+ * The physical lenght of the displayed string up to the end of the target
+ * string is returned in *nendp if the search is successful.
+ * It ignores the characters: LY_UNDERLINE_START_CHAR and
+ *                            LY_UNDERLINE_END_CHAR
+ *                            LY_BOLD_START_CHAR
+ *                            LY_BOLD_END_CHAR
+ *			      if present in chptr.
+ * It assumes UTF8 if utf_flag is set.
+ * It is a case sensitive search.
+ */
+PUBLIC char * LYno_attr_mbcs_strstr ARGS4(char *,chptr, char *,tarptr,
+					       BOOL, utf_flag, int *,nendp)
+{
+    register char *tmpchptr, *tmptarptr;
+    int len = 0;
+
+    if (!chptr)
+        return(NULL);
+
+    while (IsSpecialAttrChar(*chptr) && *chptr != '\0')
+        chptr++;
+
+    for (; *chptr != '\0'; chptr++) {
+
+        if ((*chptr) == (*tarptr)) {
+	    int tarlen = 0;
+	    len++;
+
+            /* see if they line up */
+            tmpchptr = chptr+1;
+            tmptarptr = tarptr+1;
+
+	    if (*tmptarptr == '\0') { /* one char target */
+		*nendp = len + 1;
+		 return(chptr);
+	    }
+            while (1) {
+		 if (!IsSpecialAttrChar(*tmpchptr)) {
+
+                    if ((*tmpchptr) != (*tmptarptr))
+                        break;
+
+		    if (!IS_UTFEXTRA(*tmptarptr))
+			tarlen++;
+                    tmpchptr++;
+                    tmptarptr++;
+
+                 } else {
+                    tmpchptr++;
+                 }
+
+                 if (*tmptarptr == '\0') {
+		     *nendp = len + tarlen;
+		     return(chptr);
+		 }
+                 if (*tmpchptr == '\0')
+                     break;
+            }
+        } else if (!( IS_UTFEXTRA(*chptr) ||
+		      IsSpecialAttrChar(*chptr))) {
+	    len++;
+        }
+    } /* end for */
+
+    return(NULL);
+}
+#endif /* EXP_CHARTRANS */
+
 /*      Allocate a new copy of a string, and returns it
 */
 PUBLIC char * SNACopy ARGS3 (char **,dest, CONST char *,src, int,n)
diff --git a/src/LYStrings.h b/src/LYStrings.h
index 508d4708..ef1afd39 100644
--- a/src/LYStrings.h
+++ b/src/LYStrings.h
@@ -7,6 +7,7 @@
 extern char *strstr();
 #endif /* __STRICT_BSD__ */
 
+extern int get_mouse_link NOPARAMS;
 extern char * LYstrncpy PARAMS((char *dst, char *src, int n));
 extern int LYgetch NOPARAMS;
 extern int LYgetstr PARAMS((char *inputline, int hidden,
@@ -14,6 +15,14 @@ extern int LYgetstr PARAMS((char *inputline, int hidden,
 extern char * LYstrstr PARAMS((char *chptr, char *tarptr));
 extern char * LYno_attr_char_strstr PARAMS((char *chptr, char *tarptr));
 extern char * LYno_attr_char_case_strstr PARAMS((char *chptr, char *tarptr));
+#ifdef EXP_CHARTRANS
+extern char * LYmbcsstrncpy PARAMS((char *dst, char *src, int n_bytes,
+				    int n_glyphs,	int enc));
+extern char * LYno_attr_mbcs_strstr PARAMS((char *chptr, char *tarptr,
+					    BOOL utf_flag, int *nendp));
+extern char * LYno_attr_mbcs_case_strstr PARAMS((char *chptr, char *tarptr,
+					    BOOL utf_flag, int *nendp));
+#endif
 
 extern char * SNACopy PARAMS((char **dest, CONST char *src, int n));
 extern char * SNACat PARAMS((char **dest, CONST char *src, int n));
diff --git a/src/LYTraversal.c b/src/LYTraversal.c
index 255d8dae..1925860c 100644
--- a/src/LYTraversal.c
+++ b/src/LYTraversal.c
@@ -3,12 +3,12 @@
 #include "LYGlobalDefs.h"
 #include "LYUtils.h"
 #include "LYSignal.h"
+#include "LYTraversal.h"
 
 #include "LYexit.h"
 #include "LYLeaks.h"
 
 /* routines to handle special traversal feature */
-extern char *HText_getTitle();
 
 PUBLIC BOOLEAN lookup ARGS1(char *,target)
 {
@@ -18,7 +18,9 @@ PUBLIC BOOLEAN lookup ARGS1(char *,target)
     if ((ifp = fopen(TRAVERSE_FILE,"r")) == NULL) {
         if ((ifp = fopen(TRAVERSE_FILE,"w")) == NULL) {
             perror("unable to open or create a traversal file");
+#ifndef NOSIGHUP
 	    (void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 	    (void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 	    (void) signal(SIGINT, SIG_DFL);
@@ -54,7 +56,9 @@ PUBLIC void add_to_table ARGS1(char *,target)
 
     if ((ifp = fopen(TRAVERSE_FILE,"a+")) == NULL) {
 	perror("unable to open traversal file");
+#ifndef NOSIGHUP
 	(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 	(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 	(void) signal(SIGINT, SIG_DFL);
@@ -78,7 +82,9 @@ PUBLIC void add_to_traverse_list ARGS2(char *,fname, char *,prev_link_name)
 
     if ((ifp = fopen(TRAVERSE_FOUND_FILE,"a+")) == NULL) {
 	perror("unable to open traversal found file");
+#ifndef NOSIGHUP
 	(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 	(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 	(void) signal(SIGINT, SIG_DFL);
@@ -125,7 +131,9 @@ PUBLIC void add_to_reject_list ARGS1(char *,target)
 
     if ((ifp = fopen(TRAVERSE_REJECT_FILE,"a+")) == NULL) {
 	perror("unable to open reject file");
+#ifndef NOSIGHUP
 	(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 	(void) signal(SIGTERM, SIG_DFL);
 #ifndef VMS
 	(void) signal(SIGINT, SIG_DFL);
diff --git a/src/LYUpload.c b/src/LYUpload.c
index 4bc9b190..d6cbb1c5 100644
--- a/src/LYUpload.c
+++ b/src/LYUpload.c
@@ -255,7 +255,7 @@ PUBLIC int LYUpload_options ARGS2 (char **,newfile, char *,directory)
 #endif /* VMS */
 
     /* make the file a URL now */
-#ifdef VMS
+#if defined (VMS) || defined (DOSPATH)
     sprintf(upload_filename,"file://localhost/%s",tempfile);
 #else
     sprintf(upload_filename,"file://localhost%s",tempfile);
diff --git a/src/LYUtils.c b/src/LYUtils.c
index c45b99a0..4543edca 100644
--- a/src/LYUtils.c
+++ b/src/LYUtils.c
@@ -10,7 +10,13 @@
 #include "LYGlobalDefs.h"
 #include "LYSignal.h"
 #include "GridText.h"
+#ifdef EXP_CHARTRANS
+#include "LYCharSets.h"
+#endif /* EXP_CHARTRANS */
 
+#ifdef DOSPATH
+#include "HTDOS.h"
+#endif
 #ifdef VMS
 #include <descrip.h>
 #include <libclidef.h>
@@ -32,6 +38,14 @@
 #endif /* UTMPX_FOR_UTMP */
 #endif /* UNIX */
 
+#if NEED_PTEM_H
+/* they neglected to define struct winsize in termios.h -- it's only in
+ * termio.h and ptem.h (the former conflicts with other definitions).
+ */
+#include        <sys/stream.h>
+#include        <sys/ptem.h>
+#endif
+
 #include "LYLeaks.h"
 
 #ifdef SVR4_BSDSELECT
@@ -99,7 +113,7 @@ PUBLIC void highlight ARGS2(
 	     */
 	    /* start_bold();  */
 	    start_reverse();
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(FANCY_CURSES)
 	    start_underline ();
 #endif /* USE_SLANG */
 	} else {
@@ -126,10 +140,17 @@ PUBLIC void highlight ARGS2(
 	    /* copy into the buffer only what will fit within the
 	     * width of the screen
 	     */
+#ifdef EXP_CHARTRANS
+	    LYmbcsstrncpy(buffer,(links[cur].hightext ?
+				  links[cur].hightext : ""), 199,
+			  LYcols - links[cur].lx - 1,
+		       (LYCharSet_UC[current_char_set].enc == UCT_ENC_UTF8));
+#else
 	    LYstrncpy(buffer,
 	    	      (links[cur].hightext ?
 		       links[cur].hightext : ""),
 		      LYcols-links[cur].lx-1);
+#endif /* EXP_CHARTRANS */
 	    addstr(buffer);  
 	}
 
@@ -137,7 +158,7 @@ PUBLIC void highlight ARGS2(
 	if (links[cur].hightext2 && links[cur].ly < display_lines) {
 	    if (flag == ON) {
 	        stop_reverse();
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(FANCY_CURSES)
 		stop_underline ();
 #endif /* USE_SLANG */
 	    } else {
@@ -150,7 +171,7 @@ PUBLIC void highlight ARGS2(
 
 	    if (flag == ON) {
 	        start_reverse();
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(FANCY_CURSES)
 		start_underline ();
 #endif /* USE_SLANG */
 	    } else {
@@ -174,7 +195,7 @@ PUBLIC void highlight ARGS2(
 
 	if (flag == ON) {
 	    stop_reverse();
-#ifdef USE_SLANG
+#if defined(USE_SLANG) || defined(FANCY_CURSES)
 	    stop_underline ();
 #endif /* USE_SLANG */
 	} else {
@@ -295,7 +316,7 @@ PUBLIC char * strip_trailing_slash ARGS1(
 BOOLEAN mustshow = FALSE;
 
 PUBLIC void statusline ARGS1(
-	char *,		text)
+	CONST char *,	text)
 {
     char buffer[256];
     unsigned char *temp = NULL;
@@ -303,7 +324,7 @@ PUBLIC void statusline ARGS1(
     int max_length, len, i, j;
     unsigned char k;
 
-    if (!text || text==NULL)
+    if (text == NULL)
 	return;
 
     /*
@@ -406,9 +427,15 @@ PUBLIC void statusline ARGS1(
     }
     clrtoeol();
     if (text != NULL) {
+#ifdef COLOR_CURSES
+	lynx_set_color(2);
+	addstr(buffer);
+	lynx_set_color(0);
+#else
 	start_reverse();
 	addstr(buffer);
 	stop_reverse();
+#endif
     }
     refresh();
 
@@ -437,7 +464,7 @@ PUBLIC void toggle_novice_line NOARGS
 }
 
 PUBLIC void noviceline ARGS1(
-	int,		more)
+	int,		more_flag)
 {
 
     if (dump_output_immediately)
@@ -461,7 +488,7 @@ PUBLIC void noviceline ARGS1(
         addstr(novice_lines[lineno]);
 
 #ifdef NOTDEFINED
-    if (is_www_index && more) {
+    if (is_www_index && more_flag) {
         addstr("This is a searchable index.  Use ");
 	addstr(key_for_func(LYK_INDEX_SEARCH));
 	addstr(" to search:");
@@ -477,7 +504,7 @@ PUBLIC void noviceline ARGS1(
     } else {
         addstr("Type a command or ? for help:");                   
 
-        if (more) {
+        if (more_flag) {
 	    stop_reverse();
 	    addstr("                       ");
 	    start_reverse();
@@ -534,7 +561,13 @@ PUBLIC int HTCheckForInterrupt NOARGS
 #endif /* USE_SLANG */
 
     /** Keyboard 'Z' or 'z', or Control-G or Control-C **/
+#if defined (DOSPATH) && defined (NCURSES)
+		  nodelay(stdscr,TRUE);
+#endif /* DOSPATH */
     c = LYgetch();
+#if defined (DOSPATH) && defined (NCURSES)
+		  nodelay(stdscr,FALSE);
+#endif /* DOSPATH */
     if (TOUPPER(c) == 'Z' || c == 7 || c == 3)
 	return((int)TRUE);
 
@@ -822,6 +855,12 @@ PUBLIC int is_url ARGS1(
     while (isspace((unsigned char)*cp))
         cp++;
 
+#ifdef DOSPATH /* sorry! */
+	 if (strncmp(cp, "file:///", 8) && strlen(cp) == 19 &&
+		  cp[strlen(cp)-1] == ':')
+			  StrAllocCat(cp,"/");
+#endif
+
     if (!strncasecomp(cp, "news:", 5)) {
         if (strncmp(cp, "news", 4)) {
 	    for (i = 0; i < 4; i++)
@@ -1193,22 +1232,16 @@ PUBLIC char * quote_pathname ARGS1(
  * local domain
  *
  */
-#ifdef VMS
-#ifndef NO_UTMP
-#define NO_UTMP
-#endif /* NO_UTMP */
-#endif /* VMS */
-
 PUBLIC BOOLEAN inlocaldomain NOARGS
 {
-#ifdef NO_UTMP
+#if ! HAVE_UTMP
     return(TRUE);
 #else
     int n;
     FILE *fp;
     struct utmp me;
     char *cp, *mytty = NULL;
-    char *ttyname();
+    extern char *ttyname PARAMS((int fd));
 
     if ((cp=ttyname(0)))
 	mytty = strrchr(cp, '/');
@@ -1237,28 +1270,29 @@ PUBLIC BOOLEAN inlocaldomain NOARGS
     }
 
     return(FALSE);
-#endif /* NO_UTMP */
+#endif /* !HAVE_UTMP */
 }
 
 /**************
 ** This bit of code catches window size change signals
 **/
 
-#if defined(VMS) || defined(SNAKE)
-#define NO_SIZECHANGE
-#endif /* VMS || SNAKE */
-
-#if !defined(VMS) && !defined(ISC)
+#if !defined(VMS) && !defined(ISC) && !defined(DOSPATH)
 #include <sys/ioctl.h>
 #endif /* !VMS && !ISC */
 
-#ifdef HAVE_TERMIOS_H
-#include <termios.h>
+/* For systems that have both, but both can't be included, duh */
+#ifdef TERMIO_AND_TERMIOS
+# include <termio.h>
 #else
-#ifdef HAVE_TERMIO_H
-#include <termio.h>
-#endif /* HAVE_TERMIO_H */
-#endif /* HAVE_TERMIOS_H */
+# ifdef HAVE_TERMIOS_H
+#  include <termios.h>
+# else
+#  ifdef HAVE_TERMIO_H
+#   include <termio.h>
+#  endif /* HAVE_TERMIO_H */
+# endif /* HAVE_TERMIOS_H */
+#endif  /* TERMIO_AND_TERMIOS */
 
 PUBLIC void size_change ARGS1(
 	int,		sig)
@@ -1267,13 +1301,17 @@ PUBLIC void size_change ARGS1(
     SLtt_get_screen_size();
     LYlines = SLtt_Screen_Rows;
     LYcols  = SLtt_Screen_Cols;
+#ifdef SLANG_MBCS_HACK
+    PHYSICAL_SLtt_Screen_Cols = LYcols;
+    SLtt_Screen_Cols = LYcols * 6;
+#endif /* SLANG_MBCS_HACK */
     if (sig == 0)
         /*
 	 *  Called from start_curses().
 	 */
 	return;
 #else /* Curses: */
-#ifndef NO_SIZECHANGE
+#if HAVE_SIZECHANGE
 #ifdef TIOCGSIZE
     struct ttysize win;
 #else
@@ -1303,7 +1341,7 @@ PUBLIC void size_change ARGS1(
     }
 #endif /* TIOCGWINSZ */
 #endif /* TIOCGSIZE */
-#endif /* !NO_SIZECHANGE */
+#endif /* HAVE_SIZECHANGE */
 
     if (LYlines <= 0)
         LYlines = 24;
@@ -1399,9 +1437,9 @@ PUBLIC void change_sug_filename ARGS1(
      /*** rename any temporary files ***/
      temp = (char *)calloc(1, (strlen(lynx_temp_space) + 60));
      if (*lynx_temp_space == '/')
-         sprintf(temp, "file://localhost%sL%d", lynx_temp_space, getpid());
+         sprintf(temp, "file://localhost%sL%d", lynx_temp_space, (int)getpid());
      else
-         sprintf(temp, "file://localhost/%sL%d", lynx_temp_space, getpid());
+         sprintf(temp, "file://localhost/%sL%d", lynx_temp_space, (int)getpid());
      len = strlen(temp);
      if (0==strncmp(fname, temp, len)) {
          cp = strrchr(fname, '.');
@@ -1603,10 +1641,10 @@ PUBLIC void tempname ARGS2(
 	if (action == REMOVE_FILES) { /* REMOVE ALL FILES */ 
 	    for (; counter > 0; counter--) {
 	        sprintf(namebuffer, "%sL%d%uTMP.txt", lynx_temp_space,
-						      getpid(), counter-1);
+						      (int)getpid(), counter-1);
 		remove(namebuffer);
 	        sprintf(namebuffer, "%sL%d%uTMP.html", lynx_temp_space,
-						       getpid(), counter-1);
+						       (int)getpid(), counter-1);
 		remove(namebuffer);
 	    }
 	} else /* add a file */ {
@@ -1614,7 +1652,7 @@ PUBLIC void tempname ARGS2(
 	 * 	Create name
 	 */
 	    sprintf(namebuffer, "%sL%d%uTMP.html", lynx_temp_space,
-	    					   getpid(), counter++);
+	    					   (int)getpid(), counter++);
 	}
 	return;
 }
@@ -2010,11 +2048,30 @@ PUBLIC void LYConvertToURL ARGS1(
     if (!old_string || *old_string == '\0')
         return;
 
-    *AllocatedString = NULL;  /* so StrAllocCopy doesn't free it */
+#ifdef DOSPATH
+{
+	 char *cp_url = *AllocatedString;
+	 for(; *cp_url != '\0'; cp_url++)
+		if(*cp_url == '\\') *cp_url = '/';
+	 cp_url--;
+	 if(*cp_url == ':')
+		 StrAllocCat(*AllocatedString,"/");
+#ifdef NOTDEFINED
+	 if(strlen(old_string) > 3 && *cp_url == '/')
+		*cp_url = '\0';
+#endif
+}
+#endif
+
+	 *AllocatedString = NULL;  /* so StrAllocCopy doesn't free it */
+
     StrAllocCopy(*AllocatedString,"file://localhost");
 
     if (*old_string != '/') {
 	char *fragment = NULL;
+#ifdef DOSPATH
+	  StrAllocCat(*AllocatedString,"/");
+#endif /* DOSPATH */
 #ifdef VMS
 	/*
 	 *  Not a SHELL pathspec.  Get the full VMS spec and convert it.
@@ -2178,6 +2235,22 @@ have_VMS_URL:
 	    fprintf(stderr, "Trying: '%s'\n", *AllocatedString);
 	}
 #else /* Unix: */
+#ifdef DOSPATH
+	if (strlen(old_string) == 1 && *old_string == '.') {
+		 /*
+		  *  They want .
+		  */
+		char curdir[DIRNAMESIZE];
+		getcwd (curdir, DIRNAMESIZE);
+		StrAllocCopy(temp, HTDOS_wwwName(curdir));
+		StrAllocCat(*AllocatedString, temp);
+		FREE(temp);
+		if (TRACE) {
+			fprintf(stderr, "Converted '%s' to '%s'\n",
+					old_string, *AllocatedString);
+		}
+	} else
+#endif /* DOSPATH */
 	if (*old_string == '~') {
 	    /*
 	     *  On Unix, covert '~' to Home_Dir().
@@ -2206,18 +2279,28 @@ have_VMS_URL:
 	    struct stat st;
 	    FILE *fptemp = NULL;
 	    BOOL is_local = FALSE;
-#ifdef NO_GETCWD
-	    getwd (curdir);
-#else
+#if HAVE_GETCWD
 	    getcwd (curdir, DIRNAMESIZE);
+#else
+	    getwd (curdir);
 #endif /* NO_GETCWD */
 	    /*
 	     *  Concatenate and simplify, trimming any
 	     *  residual relative elements. - FM
 	     */
+#ifndef DOSPATH
 	    StrAllocCopy(temp, curdir);
 	    StrAllocCat(temp, "/");
 	    StrAllocCat(temp, old_string);
+#else
+	if (old_string[1] != ':' && old_string[1] != '|')
+	{
+		 StrAllocCopy(temp, HTDOS_wwwName(curdir));
+		 if(curdir[strlen(curdir)-1] != '/')
+					 StrAllocCat(temp, "/");
+		 StrAllocCat(temp, old_string);
+	} else StrAllocCopy(temp, old_string);
+#endif /* DOSPATH */
 	    LYTrimRelFromAbsPath(temp);
 	    if (TRACE) {
 		fprintf(stderr, "Converted '%s' to '%s'\n", old_string, temp);
@@ -2246,7 +2329,7 @@ have_VMS_URL:
 		     *  appended to the URL. - FM
 		     */
 		    if (fragment != NULL) {
-		        *fragment = '#';
+			*fragment = '#';
 			fragment = NULL;
 		    }
 		    StrAllocCat(*AllocatedString, temp);
@@ -2454,7 +2537,11 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
     } else if (Startup && !dump_output_immediately) {
 	fprintf(stdout, "Looking up '%s' first.\n", host);
     }
+#ifndef DJGPP
     if ((phost = gethostbyname(host)) != NULL) {
+#else
+    if (resolve(host) != 0) {
+#endif /* DJGPP */
         GotHost = TRUE;
 	FREE(host);
         FREE(Str);
@@ -2541,7 +2628,11 @@ PUBLIC BOOLEAN LYExpandHostForURL ARGS3(
 	    } else if (Startup && !dump_output_immediately) {
 	        fprintf(stdout, "Looking up '%s', guessing...\n", host);
 	    }
+#ifndef DJGPP
 	    GotHost = ((phost = gethostbyname(host)) != NULL);
+#else
+		 GotHost = (resolve(host) != 0);
+#endif /* DJGPP */
 	    if (HostColon != NULL) {
 	        *HostColon = ':';
 	    }
@@ -2876,6 +2967,12 @@ PUBLIC CONST char * Home_Dir NOARGS
 
     if (!homedir) {
 	if ((homedir = getenv("HOME")) == NULL) {
+#ifdef DOSPATH /* BAD!  WSB */
+		if ((homedir = getenv("TEMP")) == NULL) {
+			if ((homedir = getenv("TMP")) == NULL)
+				homedir = "C:\\";
+		}
+#else
 #ifdef VMS
 	    if ((homedir = getenv("SYS$LOGIN")) == NULL) {
 	        if ((homedir = getenv("SYS$SCRATCH")) == NULL)
@@ -2895,6 +2992,7 @@ PUBLIC CONST char * Home_Dir NOARGS
 		homedir = "/tmp";
 	    }
 #endif /* VMS */
+#endif /* DOSPATH */
 	}
     }
     return homedir;
@@ -3192,7 +3290,7 @@ PUBLIC time_t LYmktime ARGS1(
 	char *,		string)
 {
     char *s;
-    time_t now, clock;
+    time_t now, clock2;
     int day, month, year, hour, minutes, seconds;
     char *start;
     char temp[8];
@@ -3394,20 +3492,20 @@ PUBLIC time_t LYmktime ARGS1(
     }
     day += (year - 1968)*1461/4;
     day += ((((month*153) + 2)/5) - 672);
-    clock = (time_t)((day * 60 * 60 * 24) +
+    clock2 = (time_t)((day * 60 * 60 * 24) +
     		     (hour * 60 * 60) +
     		     (minutes * 60) +
 		     seconds);
-    if (clock <= time(NULL))
-        clock = (time_t)0;
-    if (TRACE && clock > 0)
+    if (clock2 <= time(NULL))
+        clock2 = (time_t)0;
+    if (TRACE && clock2 > 0)
         fprintf(stderr,
-		"LYmktime: clock=%i, ctime=%s", clock, ctime(&clock));
+		"LYmktime: clock=%i, ctime=%s", clock2, ctime(&clock2));
 
-    return(clock);
+    return(clock2);
 }
 
-#ifdef NO_PUTENV
+#if ! HAVE_PUTENV
 /* no putenv on the next so we use this code instead!
  */
 
@@ -3506,4 +3604,11 @@ PUBLIC int putenv ARGS1(
 
   return 0;
 }
-#endif /* NO_PUTENV */
+#endif /* !HAVE_PUTENV */
+
+#ifdef NEED_REMOVE
+int remove ARGS1(char *, name)
+{
+	return unlink(name);
+}
+#endif
diff --git a/src/LYUtils.h b/src/LYUtils.h
index ea5bebc1..477504d6 100644
--- a/src/LYUtils.h
+++ b/src/LYUtils.h
@@ -13,9 +13,9 @@ extern void free_and_clear PARAMS((char **obj));
 extern void collapse_spaces PARAMS((char *string));
 extern void convert_to_spaces PARAMS((char *string, BOOL condense));
 extern char * strip_trailing_slash PARAMS((char * dirname));
-extern void statusline PARAMS((char *text));
+extern void statusline PARAMS((CONST char *text));
 extern void toggle_novice_line NOPARAMS;
-extern void noviceline PARAMS((int more));
+extern void noviceline PARAMS((int more_flag));
 extern int HTCheckForInterrupt NOPARAMS;
 extern BOOLEAN LYisLocalFile PARAMS((char *filename));
 extern BOOLEAN LYisLocalHost PARAMS((char *filename));
@@ -53,9 +53,9 @@ extern BOOLEAN LYPathOffHomeOK PARAMS((char *fbuffer, int fbuffer_size));
 extern void LYAddPathToHome PARAMS((
 	char *fbuffer, int fbuffer_size, char *fname));
 extern time_t LYmktime PARAMS((char *string));
-#ifdef NO_PUTENV
+#if ! HAVE_PUTENV
 extern int putenv PARAMS((CONST char *string));
-#endif /* NO_PUTENV */
+#endif /* HAVE_PUTENV */
 
 /*
  *  Whether or not the status line must be shown.
diff --git a/src/LYexit.c b/src/LYexit.c
index 0429c017..7d737606 100644
--- a/src/LYexit.c
+++ b/src/LYexit.c
@@ -19,7 +19,7 @@
 /*
  *  Stack of functions to call upon exit.
  */
-PRIVATE void (*callstack[ATEXITSIZE])();
+PRIVATE void (*callstack[ATEXITSIZE]) NOPARAMS;
 PRIVATE int topOfStack = 0;
 
 /*
@@ -45,15 +45,22 @@ PUBLIC void LYexit ARGS1(
 	int,		status)
 {
 #ifndef VMS	/*  On VMS, the VMSexit() handler does these. - FM */
+#ifdef _WINDOWS
+  WSACleanup();
+#endif
     if (LYOutOfMemory == TRUE) {
 	/*
 	 *  Ignore further interrupts. - FM
  	 */
-	(void) signal (SIGHUP, SIG_IGN);
+#ifndef NOSIGHUP
+				(void) signal(SIGHUP, SIG_DFL);
+#endif /* NOSIGHUP */
 	(void) signal (SIGTERM, SIG_IGN);
 	(void) signal (SIGINT, SIG_IGN);
 #ifndef __linux__
+#ifndef DOSPATH
 	(void) signal(SIGBUS, SIG_IGN);
+#endif /* DOSPATH */
 #endif /* !__linux__ */
 	(void) signal(SIGSEGV, SIG_IGN);
 	(void) signal(SIGILL, SIG_IGN);
@@ -72,7 +79,9 @@ PUBLIC void LYexit ARGS1(
 	}
 	cleanup_sig(0);
 #ifndef __linux__
+#ifndef DOSPATH
 	signal(SIGBUS, SIG_DFL);
+#endif /* DOSPATH */
 #endif /* !__linux__ */
 	signal(SIGSEGV, SIG_DFL);
 	signal(SIGILL, SIG_DFL);
@@ -117,7 +126,7 @@ PUBLIC void LYexit ARGS1(
  *	06-15-94	created Lynx 2-3-1 Garrett Arch Blythe
  */
 #ifdef __STDC__
-PUBLIC int LYatexit(void (*function)())
+PUBLIC int LYatexit(void (*function)(void))
 #else /* Not ANSI, ugh! */
 PUBLIC int LYatexit(function)
 void (*function)();
diff --git a/src/LYrcFile.c b/src/LYrcFile.c
index 4d59e861..a67a64e8 100644
--- a/src/LYrcFile.c
+++ b/src/LYrcFile.c
@@ -18,18 +18,22 @@ PUBLIC void read_rc NOPARAMS
     char *cp, *cp2;
     int number_sign;
     char MBM_line[256];
-    int  MBM_counter, MBM_counter2;
-    char *MBM_cp, *MBM_cp2, *MBM_cp1;
-    int  MBM_i1, MBM_i2;
+    int  MBM_counter;
+    char *MBM_cp2, *MBM_cp1;
+    int  MBM_i2;
 
     /*
      *  Make an RC file name.
      */
+#ifdef DJGPP
+	 sprintf(rcfile, "%s/lynx.rc", Home_Dir());
+#else
 #ifdef VMS
     sprintf(rcfile, "sys$login:.lynxrc");
 #else
     sprintf(rcfile, "%s/.lynxrc", Home_Dir());
 #endif /* VMS */
+#endif /* DJGPP */
 
     /*
      *  Open the RC file for reading.
@@ -471,11 +475,15 @@ PUBLIC int save_rc NOPARAMS
     /*
      *  Make a name.
      */
+#ifdef DJGPP
+	 sprintf(rcfile, "%s/lynx.rc", Home_Dir());
+#else
 #ifdef VMS
     sprintf(rcfile, "sys$login:.lynxrc");
 #else
     sprintf(rcfile, "%s/.lynxrc", Home_Dir());
 #endif /* VMS */
+#endif /* DJGPP */
     
     /*
      *  Open the file for write.
diff --git a/src/Makefile b/src/Makefile
index 73e271b9..e11132e1 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -1,3 +1,6 @@
+SHELL = /bin/sh
+
+CHARTRANS_OBJS=UCdomap.o UCAux.o UCAuto.o
 OBJS=  LYClean.o LYShowInfo.o LYEdit.o LYStrings.o \
 LYMail.o HTAlert.o GridText.o LYGetFile.o \
 LYMain.o LYMainLoop.o LYCurses.o LYBookmark.o LYUtils.o \
@@ -5,13 +8,14 @@ LYOptions.o LYReadCFG.o LYSearch.o LYHistory.o \
 LYForms.o LYPrint.o LYrcFile.o LYDownload.o LYNews.o LYKeymap.o \
 HTML.o HTFWriter.o HTInit.o DefaultStyle.o LYLocal.o LYUpload.o \
 LYLeaks.o LYexit.o LYJump.o LYList.o LYCgi.o LYTraversal.o \
-LYEditmap.o LYCharSets.o LYCharUtils.o LYMap.o LYCookie.o
+LYEditmap.o LYCharSets.o LYCharUtils.o LYMap.o LYCookie.o \
+ $(CHARTRANS_OBJS)
 
 CFLAGS= $(MCFLAGS) -I.. $(SLANGINC)
 
 all: lynx
 
-lynx:   message $(OBJS) $(WWWLIB)
+lynx:   message do_chartrans_stuff $(OBJS) $(WWWLIB)
 	@echo "Linking and creating Lynx executable"
 	$(CC) $(CFLAGS) -o lynx  $(OBJS) $(WWWLIB) $(SLANGLIB) $(LIBS)
 	@echo "Copying Lynx executable into this directory"
@@ -21,6 +25,9 @@ lynx:   message $(OBJS) $(WWWLIB)
 message:
 	@echo "Compiling Lynx sources"
 
+do_chartrans_stuff:
+	-cd chrtrans; $(MAKE) MCFLAGS="$(MCFLAGS)" CC="$(CC)" tables
+
 dbg:	$(OBJS) $(WWWLIB)
 	@echo "Making Lynx code"
 	$(CC) -g $(OBJS) $(CFLAGS) $(WWWLIB) $(SLANGLIB) $(LIBS)
@@ -30,6 +37,7 @@ lint:
 
 clean:
 	rm -f lynx core *.[ob]
+	cd chrtrans && $(MAKE) clean
 
 LYMain.o: ../userdefs.h
 LYMainLoop.o: ../userdefs.h
@@ -45,4 +53,37 @@ HTInit.o: ../userdefs.h
 LYTraversal.o: ../userdefs.h
 LYMail.o: ../userdefs.h
 LYCharSets.o: ../userdefs.h
+
+CHRTR= chrtrans/
+
+TABLES= $(CHRTR)iso02_uni.h \
+ $(CHRTR)iso01_uni.h \
+ $(CHRTR)def7_uni.h \
+ $(CHRTR)iso03_uni.h \
+ $(CHRTR)iso04_uni.h \
+ $(CHRTR)iso05_uni.h \
+ $(CHRTR)iso07_uni.h \
+ $(CHRTR)iso09_uni.h \
+ $(CHRTR)iso10_uni.h \
+ $(CHRTR)koi8r_uni.h \
+ $(CHRTR)cp437_uni.h \
+ $(CHRTR)cp850_uni.h \
+ $(CHRTR)cp852_uni.h \
+ $(CHRTR)cp1250_uni.h \
+ $(CHRTR)cp1252_uni.h \
+ $(CHRTR)utf8_uni.h \
+ $(CHRTR)rfc_suni.h \
+ $(CHRTR)mnemonic_suni.h \
+ $(CHRTR)mnem_suni.h
+
+CMN=../WWW/Library/Implementation/
+
+$(TABLES):
+	-cd chrtrans; $(MAKE) tables
+
+UCdomap.o: UCdomap.c chrtrans/UCkd.h chrtrans/makeuctb chrtrans/makeuctb.c \
+                 UCdomap.h $(CMN)UCMap.h $(TABLES) ../userdefs.h
+	$(CC) -c $(CFLAGS) -o $@ $<
+
+UCAux.o : UCAux.c $(CMN)UCAux.h $(CMN)UCDefs.h
 LYCookie.o: ../userdefs.h
diff --git a/src/UCAuto.c b/src/UCAuto.c
new file mode 100644
index 00000000..ec267f26
--- /dev/null
+++ b/src/UCAuto.c
@@ -0,0 +1,215 @@
+#ifdef EXP_CHARTRANS
+#ifdef EXP_CHARTRANS_AUTOSWITCH
+#ifdef LINUX
+
+/* This file contains code for changing the Linux console mode.
+** Currently some names for font files are hardwired in here.
+** You have to change this code if it needs accomodation for your
+** system (or get the required files...).
+** 
+** Depending on the Display Character Set switched to, and the previous
+** one as far as it is known, system("setfont ...") and/or output of
+** escape sequences to switch console mode are done.  Curses will be
+** temporarily suspended while that happens.
+**
+** NOTE that the setfont calls will also affect all other virtual consoles.
+**
+** Any ideas how to do this for other systems?
+*/
+#include "tcp.h"
+#include "HTUtils.h"
+#include "UCMap.h"
+#include "UCDefs.h"
+#include "UCAuto.h"
+#include "LYGlobalDefs.h"
+
+typedef enum {Is_Unset, Is_Set, Dunno, Dont_Care} TGen_state_t;
+typedef enum {G0, G1} TGNstate_t;
+typedef enum
+{
+    GN_Blat1, GN_0decgraf, GN_Ucp437, GN_Kuser, GN_dunno, GN_dontCare
+} TTransT_t;
+
+static char T_font_fn[100] = "\0";
+static char T_umap_fn[100] = "\0";
+static char T_setfont_cmd[200] = "\0";
+#define SETFONT "setfont"
+#define NOOUTPUT "2>/dev/null"
+
+PRIVATE void call_setfont ARGS3(char *,font, char *,fnsuffix, char *,umap)
+{
+    if (font && *font && umap && *umap &&
+	0==strcmp(font,T_font_fn) && 0==strcmp(umap,T_umap_fn)) {
+	return;			/* no need to repeat */
+    }
+    if (font)
+	strcpy(T_font_fn, font);
+    if (umap)
+	strcpy(T_umap_fn, umap);
+
+    if (!*fnsuffix)
+	fnsuffix = "";
+
+    if (umap &&*umap && font && *font) {
+	sprintf(T_setfont_cmd, "%s %s%s -u %s %s",
+		SETFONT, font, fnsuffix, 	umap, 	NOOUTPUT);
+    } else if (font && *font) {
+	sprintf(T_setfont_cmd, "%s %s%s %s",
+		SETFONT, font, fnsuffix, 		NOOUTPUT);
+    } else if (umap && *umap) {
+	sprintf(T_setfont_cmd, "%s -u %s %s",
+		SETFONT, 			umap, 	NOOUTPUT);
+    } else {
+	*T_setfont_cmd = '\0';
+    }
+    
+    if (*T_setfont_cmd) {
+	system(T_setfont_cmd);
+    }
+}
+
+/* This is the thing that actually gets called from display_page(). */
+
+PUBLIC void UCChangeTerminalCodepage ARGS2(int, newcs, LYUCcharset *,p)
+{
+    static int lastcs = -1;
+    static char * lastname = NULL;
+    static TGNstate_t lastGN = G0;
+    static TTransT_t lastTransT = GN_dunno;
+    static TGen_state_t lastUtf = Dunno;
+    static TGen_state_t lastHasUmap = Dunno;
+
+    char * name = p->MIMEname;
+    TGNstate_t GN = G0;
+    TTransT_t TransT = GN_dunno;
+    TGen_state_t Utf = Dunno;
+    TGen_state_t HasUmap = Dunno;
+
+    char tmpbuf1[100], tmpbuf2[20];
+    char *cp;
+
+/* Font sizes are currently hardwired here... */
+#define SUFF1 ".f16"
+#define SUFF2 "-16.psf"
+#define SUFF3 "-8x16"
+#define SUFF4 "8x16"
+
+/* use this for output of escape sequences... */
+/* for some reason stdout won't do... maybe needs flush() somewhere.. */
+#define ESCOUT stderr
+
+#ifdef VMS
+#define DISPLAY "DECW$DISPLAY"
+#else
+#define DISPLAY "DISPLAY"
+#endif /* VMS */
+
+    if (display || (cp = getenv(DISPLAY)) != NULL) {
+      /* We won't do anything in an xterm.  Better that way...  */
+	return;
+    }
+
+    if (0==strcmp(name,"iso-8859-10")) {
+	call_setfont("iso10", SUFF1,	"iso10.uni");
+	TransT = GN_Kuser;
+	HasUmap = Is_Set;
+	Utf = Is_Unset;
+    } else if (0==strncmp(name,"iso-8859-1",10)) {
+	if ((lastHasUmap==Is_Set) && 0==strcmp(lastname,"cp850")) {
+	    /* cp850 already contains all latin1 characters */
+	    if (lastTransT != GN_Blat1)
+		TransT = GN_Blat1;
+	} else {
+	    call_setfont("lat1u", SUFF2,	"lat1u.uni");
+				/* "setfont lat1u-16.psf -u lat1u.uni" */
+	    HasUmap = Is_Set;
+	    if (lastTransT != GN_Blat1)
+		TransT = GN_Blat1;
+	}
+	Utf = Is_Unset;
+    } else if (0==strcmp(name,"iso-8859-2")) {
+/*	call_setfont("lat2", SUFF2,	"lat2.uni");  */
+				/* "setfont lat2-16.psf -u lat2.uni" */
+	call_setfont("iso02", SUFF1,	"iso02.uni");
+				/* "setfont iso02.f16 -u iso02.uni" */
+	TransT = GN_Kuser;
+	HasUmap = Is_Set;
+	Utf = Is_Unset;
+    } else if (0==strncmp(name,"iso-8859-",9)) {
+	sprintf(tmpbuf1, "iso0%s", &name[9]);
+	sprintf(tmpbuf2, "iso0%s%s", &name[9],".uni");
+        call_setfont(tmpbuf1,SUFF1,	tmpbuf2);
+				/* "setfont iso0N.f16 -u iso0N.uni" */
+	TransT = GN_Kuser;
+	HasUmap = Is_Set;
+	Utf = Is_Unset;
+    } else if (0==strcmp(name,"koi8-r")) {
+	call_setfont("koi8", SUFF3,	NULL);
+	TransT = GN_Kuser;
+	HasUmap = Is_Unset;
+	Utf = Is_Unset;
+    } else if (0==strcmp(name,"cp437")) {
+	call_setfont("default", SUFF4 ,	"cp437.uni");
+				/* "setfont default8x16 -u cp437.uni" */
+	if (TransT == GN_Kuser || TransT == GN_Ucp437)
+	    TransT = GN_dontCare;
+	else
+	    TransT = GN_Ucp437;
+	HasUmap = Is_Set;
+	Utf = Is_Unset;
+    } else if (0==strcmp(name,"cp850")) {
+	call_setfont("cp850"   ,SUFF3 ,	"cp850.uni");
+				/* "setfont cp850-8x16 -u cp850.uni" */
+	TransT = GN_Kuser;
+	HasUmap = Is_Set;
+	Utf = Is_Unset;
+    } else if (0==strcmp(name,"x-transparent")) {
+	Utf = Dont_Care;
+    } else if (0==strcmp(name,"us-ascii")) {
+	Utf = Dont_Care;
+    } else if (0==strncmp(name,"mnem",4)) {
+	Utf = Dont_Care;
+    }
+
+    if (TransT != lastTransT) {
+	if (TransT == GN_Blat1) {
+	    fprintf(ESCOUT,"\033(B"); /* switch Linux console to lat1 table */
+	} else if (TransT == GN_0decgraf) {
+	    fprintf(ESCOUT,"\033(0");
+	} else if (TransT == GN_Ucp437) {
+	    fprintf(ESCOUT,"\033(U"); /* switch Linux console to 437 table? */
+	} else if (TransT == GN_Kuser) {
+	    fprintf(ESCOUT,"\033(K"); /* switch Linux console to user table */
+	}
+	if (TransT != GN_dunno && TransT != GN_dontCare) {
+	    lastTransT = TransT;
+	} else {
+	    TransT = lastTransT;
+	}
+    }
+    
+    if (HasUmap != Dont_Care && HasUmap != Dunno)
+	lastHasUmap = HasUmap;
+
+    if (p->enc == UCT_ENC_UTF8) {
+	if (lastUtf != Is_Set) {
+	    Utf = Is_Set;
+	    fprintf(ESCOUT,"\033%%G"); /* turn Linux console UTF8 mode ON */
+	    lastUtf = Utf;
+	}
+	return;
+    } else if (lastUtf == Is_Set && Utf != Dont_Care) {
+	Utf = Is_Unset;
+	fprintf(ESCOUT,"\033%%@"); /* turn Linux console UTF8 mode OFF */
+	lastUtf = Utf;
+    }
+
+    if (Utf != Dont_Care && Utf != Dunno)
+	lastUtf = Utf;
+
+    lastcs = newcs;
+    lastname = name;
+}
+#endif /* LINUX */
+#endif /* EXP_CHARTRANS_AUTOSWITCH */
+#endif /* EXP_CHARTRANS */
diff --git a/src/UCAuto.h b/src/UCAuto.h
new file mode 100644
index 00000000..3f43e0c7
--- /dev/null
+++ b/src/UCAuto.h
@@ -0,0 +1 @@
+extern void UCChangeTerminalCodepage PARAMS((int newcs, LYUCcharset * p));
diff --git a/src/UCAux.c b/src/UCAux.c
new file mode 100644
index 00000000..cca77ebc
--- /dev/null
+++ b/src/UCAux.c
@@ -0,0 +1,213 @@
+#ifdef EXP_CHARTRANS
+#include "HTUtils.h"
+#include "tcp.h"
+
+#include "HTCJK.h"
+#include "UCDefs.h"
+#include "HTStream.h"
+#include "UCAux.h"
+
+extern HTCJKlang HTCJK;
+extern LYUCcharset LYCharSet_UC[];
+
+PUBLIC BOOL UCCanUniTranslateFrom ARGS1(int, from)
+{
+    if (from < 0)
+	return NO;
+    if (LYCharSet_UC[from].enc == UCT_ENC_7BIT ||
+	LYCharSet_UC[from].enc == UCT_ENC_UTF8)
+	return YES;
+    if (LYCharSet_UC[from].codepoints & (UCT_CP_SUBSETOF_LAT1))
+	return YES;
+    return (LYCharSet_UC[from].UChndl >= 0);
+}
+PUBLIC BOOL UCCanTranslateUniTo ARGS1(int, to)
+{
+    if (to < 0)
+	return NO;
+    return YES;			/* well at least some characters... */
+}
+PUBLIC BOOL UCCanTranslateFromTo ARGS2(int, from, int, to)
+{
+    if (from==to)
+	return YES;
+    if (from < 0 || to < 0)
+	return NO;
+    if (from==0)
+	return UCCanTranslateUniTo(to);
+    if (to==0)
+	return UCCanUniTranslateFrom(from);
+    if (LYCharSet_UC[to].enc == UCT_ENC_UTF8) {
+	return (LYCharSet_UC[from].UChndl >= 0);
+    }
+    {
+	char * fromname = LYCharSet_UC[from].MIMEname;
+	char * toname = LYCharSet_UC[to].MIMEname;
+	if (0==strcmp(fromname,"x-transparent") ||
+	    0==strcmp(toname,"x-transparent")) {
+	    return YES;
+	}
+	if (LYCharSet_UC[from].enc == UCT_ENC_CJK) {
+	    if (HTCJK == NOCJK)	/* use that global flag, for now */
+		return NO;
+	    if (HTCJK == JAPANESE && (
+		0==strcmp(fromname,"euc-jp") ||
+		0==strncmp(fromname,"iso-2022-jp",11) ||
+		0==strcmp(fromname,"shift_jis")
+		))
+		return YES;
+	    return NO;	/* if not handled by (from==to) above */
+	}
+	if (0==strcmp(fromname,"koi8-r")) {
+	    			/* will try to uses stripping of high bit... */
+	    return YES;
+	}
+	    
+	if (0==strcmp(fromname,"koi8-r") || /* from cyrillic */
+	    0==strcmp(fromname,"iso-8859-5") ||
+	    0==strcmp(fromname,"koi-8")) {
+	    if (0!=strcmp(toname,"iso-8859-5") &&
+		0!=strcmp(toname,"koi8-r") &&
+		0!=strcmp(toname,"iso-8859-2"))
+		return NO;
+	}
+    }
+    return (LYCharSet_UC[from].UChndl >= 0);
+}
+
+/* The idea here is that any stage of the stream pipe which is interested
+** in some charset dependent processing will call this function.
+** Given input and ouptput charsets, this function will set various flags
+** in a UCTransParams structure that _suggest_ to the caller what to do.
+**
+** Should be called once when a stage starts processing text (and the
+** input and output charsets are known), or whenever one of input or
+** output charsets has changed (e.g. by SGML.c stage after HTML.c stage
+** has processed a META tag).
+** The global flags (LYRawMode, HTPassEightBitRaw etc.) are currently
+** not taken into account here, it's still up to the caller to do something
+** about them.
+*/
+PUBLIC void UCSetTransParams ARGS5(
+    UCTransParams *, 	pT,
+    int,		cs_in,
+    CONST LYUCcharset*,	p_in,
+    int,		cs_out,
+    CONST LYUCcharset*,	p_out
+    )
+{
+    pT->transp = (0==strcmp(p_in->MIMEname,"x-transparent") ||
+		0==strcmp(p_out->MIMEname,"x-transparent"));
+    if (pT->transp) {
+	pT->do_cjk = FALSE;
+	pT->decode_utf8 = FALSE;
+	pT->output_utf8 = FALSE;	/* we may, but won't know about it */
+	pT->do_8bitraw = TRUE;
+	pT->use_raw_char_in = TRUE;
+	pT->strip_raw_char_in = FALSE;
+	pT->pass_160_173_raw = TRUE;
+    } else {
+	BOOL intm_ucs = FALSE;
+	BOOL use_ucs = FALSE;
+	pT->do_cjk = ((p_in->enc == UCT_ENC_CJK) && (HTCJK != NOCJK));
+	pT->decode_utf8 = (p_in->enc == UCT_ENC_UTF8);
+	pT->output_utf8 = (p_out->enc == UCT_ENC_UTF8);
+	if (pT->do_cjk) {
+	    intm_ucs = FALSE;
+	    pT->trans_to_uni = FALSE;
+	    use_ucs = FALSE;
+	    pT->do_8bitraw = FALSE;
+	    pT->pass_160_173_raw = TRUE;
+	    pT->use_raw_char_in = FALSE; /* not used for CJK */
+	    pT->trans_from_uni = FALSE; /* not used for CJK */
+	} else {
+	    intm_ucs = (
+		cs_in == 0 || pT->decode_utf8 ||
+	    (p_in->codepoints & (UCT_CP_SUBSETOF_LAT1|UCT_CP_SUBSETOF_UCS2))
+		);
+	    pT->trans_to_uni = (!intm_ucs &&
+				UCCanUniTranslateFrom(cs_in));
+	    pT->strip_raw_char_in =
+		((!intm_ucs ||
+		  (p_out->enc==UCT_ENC_7BIT) ||
+		  (p_out->repertoire & UCT_REP_SUBSETOF_LAT1)) &&
+		cs_in != cs_out &&
+		0==strcmp(p_in->MIMEname,"koi8-r"));
+	    use_ucs = (intm_ucs || pT->trans_to_uni);
+	    pT->do_8bitraw = (!use_ucs);
+	    pT->pass_160_173_raw = (!use_ucs &&
+				    !(p_in->like8859 & UCT_R_8859SPECL)
+			      );
+	    pT->use_raw_char_in = (!pT->output_utf8 && cs_in == cs_out);
+	    pT->trans_from_uni = (use_ucs && !pT->do_8bitraw &&
+				  !pT->use_raw_char_in &&
+				  UCCanTranslateUniTo(cs_out));
+	}
+    }
+}
+
+PUBLIC void UCTransParams_clear ARGS1(
+    UCTransParams *,    pT)
+{
+	pT->transp = FALSE;
+	pT->do_cjk = FALSE;
+	pT->decode_utf8 = FALSE;
+	pT->output_utf8 = FALSE;
+	pT->do_8bitraw = FALSE;
+	pT->use_raw_char_in = FALSE;
+	pT->strip_raw_char_in = FALSE;
+	pT->pass_160_173_raw = FALSE;
+	pT->trans_to_uni = FALSE;
+	pT->trans_from_uni = FALSE;
+}
+
+/* Given an output target HTStream* (can also be a HTStructured* via typecast),
+** the target stream's put_character method, and a unicode character, 
+** CPutUtf8_charstring() will either output the UTF8 encoding of the unicode
+** and return YES, or do nothing and return NO (if conversion would be
+** unnecessary or the unicode character is considered invalid).
+**
+** [Could be used more generally, but is currently only used for &#nnnnn 
+** stuff - generation of UTF8 from 8-bit encoded charsets not yet done
+** by SGML.c etc.]
+*/
+#define PUTC(ch) ((*myPutc)(target, (char)(ch)))
+#define PUTC2(ch) ((*myPutc)(target,(char)(0x80|(0x3f &(ch)))))
+
+PUBLIC BOOL UCPutUtf8_charstring ARGS3(
+    HTStream *,	target,
+    putc_func_t *,	myPutc,
+    long,	code)
+{
+    if (code < 128)
+	return NO;		/* indicate to caller we didn't handle it */
+    else if   (code <     0x800L) {
+	PUTC(0xc0 | (code>>6));
+	PUTC2(code);
+    } else if (code <   0x10000L) {
+	PUTC(0xe0 | (code>>12));
+	PUTC2(code>>6);
+	PUTC2(code);
+    } else if (code <  0x200000L) {
+	PUTC(0xf0 | (code>>18));
+	PUTC2(code>>12);
+	PUTC2(code>>6);
+	PUTC2(code);
+    } else if (code < 0x4000000L) {
+	PUTC(0xf8 | (code>>24));
+	PUTC2(code>>18);
+	PUTC2(code>>12);
+	PUTC2(code>>6);
+	PUTC2(code);
+    } else if (code<=0x7fffffffL) {
+	PUTC(0xfc | (code>>30));
+	PUTC2(code>>24);
+	PUTC2(code>>18);
+	PUTC2(code>>12);
+	PUTC2(code>>6);
+	PUTC2(code);
+    } else
+	return NO;
+    return YES;
+}
+#endif /* EXP_CHARTRANS */
diff --git a/src/UCdomap.c b/src/UCdomap.c
new file mode 100644
index 00000000..473fe181
--- /dev/null
+++ b/src/UCdomap.c
@@ -0,0 +1,1386 @@
+/*
+ * UCmap.c
+ * - K&R compatibility macros not (yet?) done -
+ *
+ * Derived from code in the Linux kernel console driver.
+ * The GNU Public Licence therefore applies, see 
+ * the file COPYING in the about_lynx directory 
+ * which should come with every Lynx distribution.
+ *
+ * [ original comment: -kw ]
+ *
+ * Mapping from internal code (such as Latin-1 or Unicode or IBM PC code)
+ * to font positions.
+ *
+ * aeb, 950210
+ */
+
+#include "chrtrans/UCkd.h"
+#include "tcp.h"
+#include "HTMLDTD.h"
+#include "HTAAUtil.h"		/* defines FREE */
+#include "HTAtom.h"		/* for use by UC_setup_LYCharSets_repl() */
+#include "LYGlobalDefs.h"
+#include "LYCharSets.h"
+#include "UCdomap.h"
+#include "UCMap.h"
+#include "UCDefs.h"
+
+		/* Include hash tables & parameters */
+#include "chrtrans/def7_uni.h"
+#include "chrtrans/iso01_uni.h"
+#include "chrtrans/iso02_uni.h"
+#include "chrtrans/iso03_uni.h"
+#include "chrtrans/iso04_uni.h"
+#include "chrtrans/iso05_uni.h"
+#include "chrtrans/iso07_uni.h"
+#include "chrtrans/iso09_uni.h"
+#include "chrtrans/iso10_uni.h"
+#include "chrtrans/koi8r_uni.h"
+#include "chrtrans/cp437_uni.h"
+#include "chrtrans/cp850_uni.h"
+#include "chrtrans/cp852_uni.h"
+#include "chrtrans/cp1250_uni.h"
+#include "chrtrans/cp1252_uni.h"
+#include "chrtrans/utf8_uni.h"
+#include "chrtrans/rfc_suni.h"
+#include "chrtrans/mnemonic_suni.h"
+/* #include "chrtrans/mnem_suni.h" */
+
+/* Some of the code below, and some of the comments, left in for
+   historical reasons.  Not all those tables below are currently
+   really needed (and what with all those hardwired codepoints), 
+   but let's keep them around for now, they may come in handy if we 
+   decide to make more extended use of the mechanisms (including e.g.
+   for chars < 127...)  - kw */
+
+static u16 translations[][256] = {
+  /* 8-bit Latin-1 mapped to Unicode -- trivial mapping */
+  {
+    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+    0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+    0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+    0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+    0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+    0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+    0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+    0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+    0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+    0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+    0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+    0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x007f,
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+    0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+    0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+    0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+    0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+    0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
+    0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
+    0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
+    0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+    0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+    0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+    0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+    0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+    0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+    0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
+  }, 
+  /* VT100 graphics mapped to Unicode */
+  {
+    0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+    0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+    0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+    0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001e, 0x001f,
+    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+    0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+    0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+    0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+    0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+    0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+    0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x00a0,
+    0x25c6, 0x2592, 0x2409, 0x240c, 0x240d, 0x240a, 0x00b0, 0x00b1,
+    0x2424, 0x240b, 0x2518, 0x2510, 0x250c, 0x2514, 0x253c, 0xf800,
+    0xf801, 0x2500, 0xf803, 0xf804, 0x251c, 0x2524, 0x2534, 0x252c,
+    0x2502, 0x2264, 0x2265, 0x03c0, 0x2260, 0x00a3, 0x00b7, 0x007f,
+    0x0080, 0x0081, 0x0082, 0x0083, 0x0084, 0x0085, 0x0086, 0x0087,
+    0x0088, 0x0089, 0x008a, 0x008b, 0x008c, 0x008d, 0x008e, 0x008f,
+    0x0090, 0x0091, 0x0092, 0x0093, 0x0094, 0x0095, 0x0096, 0x0097,
+    0x0098, 0x0099, 0x009a, 0x009b, 0x009c, 0x009d, 0x009e, 0x009f,
+    0x00a0, 0x00a1, 0x00a2, 0x00a3, 0x00a4, 0x00a5, 0x00a6, 0x00a7,
+    0x00a8, 0x00a9, 0x00aa, 0x00ab, 0x00ac, 0x00ad, 0x00ae, 0x00af,
+    0x00b0, 0x00b1, 0x00b2, 0x00b3, 0x00b4, 0x00b5, 0x00b6, 0x00b7,
+    0x00b8, 0x00b9, 0x00ba, 0x00bb, 0x00bc, 0x00bd, 0x00be, 0x00bf,
+    0x00c0, 0x00c1, 0x00c2, 0x00c3, 0x00c4, 0x00c5, 0x00c6, 0x00c7,
+    0x00c8, 0x00c9, 0x00ca, 0x00cb, 0x00cc, 0x00cd, 0x00ce, 0x00cf,
+    0x00d0, 0x00d1, 0x00d2, 0x00d3, 0x00d4, 0x00d5, 0x00d6, 0x00d7,
+    0x00d8, 0x00d9, 0x00da, 0x00db, 0x00dc, 0x00dd, 0x00de, 0x00df,
+    0x00e0, 0x00e1, 0x00e2, 0x00e3, 0x00e4, 0x00e5, 0x00e6, 0x00e7,
+    0x00e8, 0x00e9, 0x00ea, 0x00eb, 0x00ec, 0x00ed, 0x00ee, 0x00ef,
+    0x00f0, 0x00f1, 0x00f2, 0x00f3, 0x00f4, 0x00f5, 0x00f6, 0x00f7,
+    0x00f8, 0x00f9, 0x00fa, 0x00fb, 0x00fc, 0x00fd, 0x00fe, 0x00ff
+  },
+  /* IBM Codepage 437 mapped to Unicode */
+  {
+    0x0000, 0x263a, 0x263b, 0x2665, 0x2666, 0x2663, 0x2660, 0x2022, 
+    0x25d8, 0x25cb, 0x25d9, 0x2642, 0x2640, 0x266a, 0x266b, 0x263c,
+    0x25ba, 0x25c4, 0x2195, 0x203c, 0x00b6, 0x00a7, 0x25ac, 0x21a8,
+    0x2191, 0x2193, 0x2192, 0x2190, 0x221f, 0x2194, 0x25b2, 0x25bc,
+    0x0020, 0x0021, 0x0022, 0x0023, 0x0024, 0x0025, 0x0026, 0x0027,
+    0x0028, 0x0029, 0x002a, 0x002b, 0x002c, 0x002d, 0x002e, 0x002f,
+    0x0030, 0x0031, 0x0032, 0x0033, 0x0034, 0x0035, 0x0036, 0x0037,
+    0x0038, 0x0039, 0x003a, 0x003b, 0x003c, 0x003d, 0x003e, 0x003f,
+    0x0040, 0x0041, 0x0042, 0x0043, 0x0044, 0x0045, 0x0046, 0x0047,
+    0x0048, 0x0049, 0x004a, 0x004b, 0x004c, 0x004d, 0x004e, 0x004f,
+    0x0050, 0x0051, 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057,
+    0x0058, 0x0059, 0x005a, 0x005b, 0x005c, 0x005d, 0x005e, 0x005f,
+    0x0060, 0x0061, 0x0062, 0x0063, 0x0064, 0x0065, 0x0066, 0x0067,
+    0x0068, 0x0069, 0x006a, 0x006b, 0x006c, 0x006d, 0x006e, 0x006f,
+    0x0070, 0x0071, 0x0072, 0x0073, 0x0074, 0x0075, 0x0076, 0x0077,
+    0x0078, 0x0079, 0x007a, 0x007b, 0x007c, 0x007d, 0x007e, 0x2302,
+    0x00c7, 0x00fc, 0x00e9, 0x00e2, 0x00e4, 0x00e0, 0x00e5, 0x00e7,
+    0x00ea, 0x00eb, 0x00e8, 0x00ef, 0x00ee, 0x00ec, 0x00c4, 0x00c5,
+    0x00c9, 0x00e6, 0x00c6, 0x00f4, 0x00f6, 0x00f2, 0x00fb, 0x00f9,
+    0x00ff, 0x00d6, 0x00dc, 0x00a2, 0x00a3, 0x00a5, 0x20a7, 0x0192,
+    0x00e1, 0x00ed, 0x00f3, 0x00fa, 0x00f1, 0x00d1, 0x00aa, 0x00ba,
+    0x00bf, 0x2310, 0x00ac, 0x00bd, 0x00bc, 0x00a1, 0x00ab, 0x00bb,
+    0x2591, 0x2592, 0x2593, 0x2502, 0x2524, 0x2561, 0x2562, 0x2556,
+    0x2555, 0x2563, 0x2551, 0x2557, 0x255d, 0x255c, 0x255b, 0x2510,
+    0x2514, 0x2534, 0x252c, 0x251c, 0x2500, 0x253c, 0x255e, 0x255f,
+    0x255a, 0x2554, 0x2569, 0x2566, 0x2560, 0x2550, 0x256c, 0x2567,
+    0x2568, 0x2564, 0x2565, 0x2559, 0x2558, 0x2552, 0x2553, 0x256b,
+    0x256a, 0x2518, 0x250c, 0x2588, 0x2584, 0x258c, 0x2590, 0x2580,
+    0x03b1, 0x00df, 0x0393, 0x03c0, 0x03a3, 0x03c3, 0x00b5, 0x03c4,
+    0x03a6, 0x0398, 0x03a9, 0x03b4, 0x221e, 0x03c6, 0x03b5, 0x2229,
+    0x2261, 0x00b1, 0x2265, 0x2264, 0x2320, 0x2321, 0x00f7, 0x2248,
+    0x00b0, 0x2219, 0x00b7, 0x221a, 0x207f, 0x00b2, 0x25a0, 0x00a0
+  }, 
+  /* User mapping -- default to codes for direct font mapping */
+  {
+    0xf000, 0xf001, 0xf002, 0xf003, 0xf004, 0xf005, 0xf006, 0xf007,
+    0xf008, 0xf009, 0xf00a, 0xf00b, 0xf00c, 0xf00d, 0xf00e, 0xf00f,
+    0xf010, 0xf011, 0xf012, 0xf013, 0xf014, 0xf015, 0xf016, 0xf017,
+    0xf018, 0xf019, 0xf01a, 0xf01b, 0xf01c, 0xf01d, 0xf01e, 0xf01f,
+    0xf020, 0xf021, 0xf022, 0xf023, 0xf024, 0xf025, 0xf026, 0xf027,
+    0xf028, 0xf029, 0xf02a, 0xf02b, 0xf02c, 0xf02d, 0xf02e, 0xf02f,
+    0xf030, 0xf031, 0xf032, 0xf033, 0xf034, 0xf035, 0xf036, 0xf037,
+    0xf038, 0xf039, 0xf03a, 0xf03b, 0xf03c, 0xf03d, 0xf03e, 0xf03f,
+    0xf040, 0xf041, 0xf042, 0xf043, 0xf044, 0xf045, 0xf046, 0xf047,
+    0xf048, 0xf049, 0xf04a, 0xf04b, 0xf04c, 0xf04d, 0xf04e, 0xf04f,
+    0xf050, 0xf051, 0xf052, 0xf053, 0xf054, 0xf055, 0xf056, 0xf057,
+    0xf058, 0xf059, 0xf05a, 0xf05b, 0xf05c, 0xf05d, 0xf05e, 0xf05f,
+    0xf060, 0xf061, 0xf062, 0xf063, 0xf064, 0xf065, 0xf066, 0xf067,
+    0xf068, 0xf069, 0xf06a, 0xf06b, 0xf06c, 0xf06d, 0xf06e, 0xf06f,
+    0xf070, 0xf071, 0xf072, 0xf073, 0xf074, 0xf075, 0xf076, 0xf077,
+    0xf078, 0xf079, 0xf07a, 0xf07b, 0xf07c, 0xf07d, 0xf07e, 0xf07f,
+    0xf080, 0xf081, 0xf082, 0xf083, 0xf084, 0xf085, 0xf086, 0xf087,
+    0xf088, 0xf089, 0xf08a, 0xf08b, 0xf08c, 0xf08d, 0xf08e, 0xf08f,
+    0xf090, 0xf091, 0xf092, 0xf093, 0xf094, 0xf095, 0xf096, 0xf097,
+    0xf098, 0xf099, 0xf09a, 0xf09b, 0xf09c, 0xf09d, 0xf09e, 0xf09f,
+    0xf0a0, 0xf0a1, 0xf0a2, 0xf0a3, 0xf0a4, 0xf0a5, 0xf0a6, 0xf0a7,
+    0xf0a8, 0xf0a9, 0xf0aa, 0xf0ab, 0xf0ac, 0xf0ad, 0xf0ae, 0xf0af,
+    0xf0b0, 0xf0b1, 0xf0b2, 0xf0b3, 0xf0b4, 0xf0b5, 0xf0b6, 0xf0b7,
+    0xf0b8, 0xf0b9, 0xf0ba, 0xf0bb, 0xf0bc, 0xf0bd, 0xf0be, 0xf0bf,
+    0xf0c0, 0xf0c1, 0xf0c2, 0xf0c3, 0xf0c4, 0xf0c5, 0xf0c6, 0xf0c7,
+    0xf0c8, 0xf0c9, 0xf0ca, 0xf0cb, 0xf0cc, 0xf0cd, 0xf0ce, 0xf0cf,
+    0xf0d0, 0xf0d1, 0xf0d2, 0xf0d3, 0xf0d4, 0xf0d5, 0xf0d6, 0xf0d7,
+    0xf0d8, 0xf0d9, 0xf0da, 0xf0db, 0xf0dc, 0xf0dd, 0xf0de, 0xf0df,
+    0xf0e0, 0xf0e1, 0xf0e2, 0xf0e3, 0xf0e4, 0xf0e5, 0xf0e6, 0xf0e7,
+    0xf0e8, 0xf0e9, 0xf0ea, 0xf0eb, 0xf0ec, 0xf0ed, 0xf0ee, 0xf0ef,
+    0xf0f0, 0xf0f1, 0xf0f2, 0xf0f3, 0xf0f4, 0xf0f5, 0xf0f6, 0xf0f7,
+    0xf0f8, 0xf0f9, 0xf0fa, 0xf0fb, 0xf0fc, 0xf0fd, 0xf0fe, 0xf0ff
+  }
+};
+static u16 *UC_translate = NULL;
+
+/* The standard kernel character-to-font mappings are not invertible
+   -- this is just a best effort. */
+
+#define MAX_GLYPH 512		/* Max possible glyph value */
+
+static unsigned char * inv_translate = NULL;
+static unsigned char inv_norm_transl[MAX_GLYPH];
+static unsigned char * inverse_translations[4] = { NULL, NULL, NULL, NULL };
+
+PRIVATE void con_clear_unimap NOPARAMS;
+
+PRIVATE void set_inverse_transl ARGS1(int, i)
+{
+	int j, glyph;
+	u16 *p = translations[i];
+	unsigned char *q = inverse_translations[i];
+
+	if (!q) {
+		/* slightly messy to avoid calling kmalloc too early */
+		q = inverse_translations[i] = ((i == LAT1_MAP)
+			? inv_norm_transl
+			: (unsigned char *) malloc(MAX_GLYPH));
+		if (!q)
+			return;
+	}
+	for (j=0; j<MAX_GLYPH; j++)
+		q[j] = 0;
+
+	for (j=0; j<E_TABSZ; j++) {
+		glyph = conv_uni_to_pc(p[j]);
+		if (glyph >= 0 && glyph < MAX_GLYPH && q[glyph] < 32) {
+			/* prefer '-' above SHY etc. */
+		  	q[glyph] = j;
+		}
+	}
+}
+
+u16 *set_translate ARGS1(int, m)
+{
+	if (!inverse_translations[m])
+		set_inverse_transl(m);
+	inv_translate = inverse_translations[m];
+	return translations[m];
+}
+
+#ifdef NOTDEFINED
+/*
+ * Inverse translation is impossible for several reasons:
+ * 1. The font<->character maps are not 1-1.
+ * 2. The text may have been written while a different translation map
+ *    was active, or using Unicode.
+ * Still, it is now possible to a certain extent to cut and paste non-ASCII.
+ */
+unsigned char inverse_translate(int glyph) {
+	if ( glyph < 0 || glyph >= MAX_GLYPH )
+		return 0;
+	else
+		return ((inv_translate && inv_translate[glyph])
+			? inv_translate[glyph]
+			: (unsigned char)(glyph & 0xff));
+}
+
+/*
+ * Load customizable translation table
+ * arg points to a 256 byte translation table.
+ *
+ * The "old" variants are for translation directly to font (using the
+ * 0xf000-0xf0ff "transparent" Unicodes) whereas the "new" variants set
+ * Unicodes explictly.
+ */
+int con_set_trans_old(unsigned char * arg)
+{
+	int i;
+	u16 *p = translations[USER_MAP];
+#if(0)
+	i = verify_area(VERIFY_READ, (void *)arg, E_TABSZ);
+	if (i)
+		return i;
+#endif
+	for (i=0; i<E_TABSZ ; i++)
+		p[i] = UNI_DIRECT_BASE | (u16) arg[i];
+
+	set_inverse_transl(USER_MAP);
+	return 0;
+}
+
+int con_get_trans_old(unsigned char * arg)
+{
+	int i, ch;
+	u16 *p = translations[USER_MAP];
+#if(0)
+	i = verify_area(VERIFY_WRITE, (void *)arg, E_TABSZ);
+	if (i)
+		return i;
+#endif
+	for (i=0; i<E_TABSZ ; i++)
+	  {
+	    ch = conv_uni_to_pc(p[i]);
+/*	    put_user((ch & ~0xff) ? 0 : ch, arg+i); */
+	    arg[i] = (unsigned char)((ch & ~0xff) ? 0 : ch);
+	  }
+	return 0;
+}
+
+int con_set_trans_new(u16 * arg)
+{
+	int i;
+	u16 *p = translations[USER_MAP];
+#if(0)
+	i = verify_area(VERIFY_READ, (void *)arg,
+			E_TABSZ*sizeof(u16));
+	if (i)
+		return i;
+#endif
+	for (i=0; i<E_TABSZ ; i++)
+	  p[i] = arg[i];
+
+	set_inverse_transl(USER_MAP);
+	return 0;
+}
+
+int con_get_trans_new(u16 * arg)
+{
+	int i;
+	u16 *p = translations[USER_MAP];
+#if(0)
+	i = verify_area(VERIFY_WRITE, (void *)arg,
+			E_TABSZ*sizeof(u16));
+	if (i)
+		return i;
+#endif
+	for (i=0; i<E_TABSZ ; i++)
+	  arg[i] = p[i];
+	
+	return 0;
+}
+#endif /* NOTDEFINED */
+
+
+PRIVATE int
+UC_valid_UC_charset ARGS1(int, UC_charset_hndl)
+{
+  return (UC_charset_hndl >= 0 && UC_charset_hndl < UCNumCharsets);
+}
+
+PRIVATE void
+UC_con_set_trans ARGS3(int, UC_charset_in_hndl, int, Gn, int, update_flag)
+{
+  int i, j;
+  u16 *p;
+  u16 *ptrans;
+
+  if (!UC_valid_UC_charset(UC_charset_in_hndl))
+    {
+      if (TRACE)
+	fprintf(stderr,"UC_con_set_trans: Invalid charset handle %i.\n",
+		UC_charset_in_hndl);
+      return;
+    }
+  ptrans = translations[Gn];
+  p = UCInfo[UC_charset_in_hndl].unitable;
+#if(0)
+  if (p == UC_current_unitable) {    /* test whether pointers are equal */
+    return;			/* nothing to be done */
+  }
+  /* The font is always 256 characters - so far. */
+
+  con_clear_unimap();
+#endif
+  for ( i = 0 ; i < 256 ; i++ )
+    {
+      if ((j = UCInfo[UC_charset_in_hndl].unicount[i])) {
+	ptrans[i] = *p;
+	for ( ; j ; j-- )
+	  p++;
+      }
+      else
+	ptrans[i] = 0xfffd;
+    }
+  if (update_flag)  
+    set_inverse_transl(Gn);    /* Update inverse translation for this one */
+}
+/*
+ * Unicode -> current font conversion 
+ *
+ * A font has at most 512 chars, usually 256.
+ * But one font position may represent several Unicode chars.
+ * A hashtable is somewhat of a pain to deal with, so use a
+ * "paged table" instead.  Simulation has shown the memory cost of
+ * this 3-level paged table scheme to be comparable to a hash table.
+ */
+
+int hashtable_contents_valid = 0; /* Use ASCII-only mode for bootup*/
+int hashtable_str_contents_valid = 0; 
+
+static u16 **uni_pagedir[32] =
+{
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+};
+static char* **uni_pagedir_str[32] =
+{
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
+  NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
+};
+
+u16 * UC_current_unitable = NULL;
+struct unimapdesc_str *UC_current_unitable_str = NULL;
+
+PRIVATE int
+con_insert_unipair ARGS2(u16, unicode, u16, fontpos)
+{
+  int i, n;
+  u16 **p1, *p2;
+
+  if ( !(p1 = uni_pagedir[n = unicode >> 11]) )
+    {
+      p1 = uni_pagedir[n] = (u16* *) malloc(32*sizeof(u16 *));
+      if ( !p1 )
+	return -ENOMEM;
+
+      for ( i = 0 ; i < 32 ; i++ )
+	p1[i] = NULL;
+    }
+
+  if ( !(p2 = p1[n = (unicode >> 6) & 0x1f]) )
+    {
+      p2 = p1[n] = (u16 *) malloc(64*sizeof(u16));
+      if ( !p2 )
+	return -ENOMEM;
+
+      for ( i = 0 ; i < 64 ; i++ )
+	p2[i] = 0xffff;		/* No glyph for this character (yet) */
+    }
+
+  p2[unicode & 0x3f] = fontpos;
+  
+  return 0;
+}
+ 
+PRIVATE int
+con_insert_unipair_str ARGS2(u16, unicode, char *, replace_str)
+{
+  int i, n;
+  char ***p1, **p2;
+
+  if ( !(p1 = uni_pagedir_str[n = unicode >> 11]) )
+    {
+      p1 = uni_pagedir_str[n] = (char** *) malloc(32*sizeof(char **));
+      if ( !p1 )
+	return -ENOMEM;
+
+      for ( i = 0 ; i < 32 ; i++ )
+	p1[i] = NULL;
+    }
+
+  if ( !(p2 = p1[n = (unicode >> 6) & 0x1f]) )
+    {
+      p2 = p1[n] = (char* *) malloc(64*sizeof(char *));
+      if ( !p2 )
+	return -ENOMEM;
+
+      for ( i = 0 ; i < 64 ; i++ )
+	p2[i] = NULL;		/* No replace string this character (yet) */
+    }
+
+  p2[unicode & 0x3f] = replace_str;
+  
+  return 0;
+}
+ 
+/* ui arg was a leftover, deleted -kw */
+PRIVATE void
+con_clear_unimap NOARGS
+{
+  int i, j;
+  u16 **p1;
+  
+  for ( i = 0 ; i < 32 ; i++ )
+    {
+      if ( (p1 = uni_pagedir[i]) != NULL )
+	{
+	  for ( j = 0 ; j < 32 ; j++ )
+	    {
+	      if ( p1[j] )
+		free(p1[j]);
+	    }
+	  free(p1);
+	}
+      uni_pagedir[i] = NULL;
+    }
+
+  hashtable_contents_valid = 1;
+}
+
+PRIVATE void
+con_clear_unimap_str NOARGS
+{
+  int i, j;
+  char ***p1;
+  
+  for ( i = 0 ; i < 32 ; i++ )
+    {
+      if ( (p1 = uni_pagedir_str[i]) != NULL )
+	{
+	  for ( j = 0 ; j < 32 ; j++ )
+	    {
+	      if ( p1[j] )
+		free(p1[j]);
+	    }
+	  free(p1);
+	}
+      uni_pagedir_str[i] = NULL;
+    }
+
+  hashtable_str_contents_valid = 1;  /* ??? probably no use... */
+}
+
+#ifdef NOTDEFINED
+int
+con_set_unimap ARGS2(u16, ct, struct unipair *, list)
+{
+  int err = 0, err1, i;
+
+  while( ct-- )
+    {
+      if ( (err1 = con_insert_unipair(list->unicode,
+				      list->fontpos)) != 0 )
+	err = err1;
+      list++;
+    }
+
+  for ( i = 0 ; i <= 3 ; i++ )
+    set_inverse_transl(i); /* Update all inverse translations */
+  
+  return err;
+}
+#endif /* NOTDEFINED */
+
+/* Loads the unimap for the hardware font, as defined in uni_hash.tbl.
+   The representation used was the most compact I could come up
+   with.  This routine is executed at sys_setup time, and when the
+   PIO_FONTRESET ioctl is called. */
+
+PRIVATE void
+con_set_default_unimap NOARGS
+{
+  int i, j;
+  u16 *p;
+
+  /* The default font is always 256 characters */
+
+  con_clear_unimap();
+
+  p = dfont_unitable;
+  for ( i = 0 ; i < 256 ; i++ )
+    for ( j = dfont_unicount[i] ; j ; j-- )
+      con_insert_unipair(*(p++), i);
+
+  for ( i = 0 ; i <= 3 ; i++ )
+    set_inverse_transl(i);	/* Update all inverse translations */
+
+  UC_current_unitable = dfont_unitable;
+}
+
+PUBLIC int UCNumCharsets = 0;
+
+PUBLIC int UCLYhndl_HTFile_for_unspec = -1;
+PUBLIC int UCLYhndl_HTFile_for_unrec = -1;
+PUBLIC int UCLYhndl_for_unspec = -1;
+PUBLIC int UCLYhndl_for_unrec = -1;
+
+PRIVATE int
+UC_con_set_unimap ARGS2(int, UC_charset_out_hndl, int, update_flag)
+{
+  int i, j;
+  u16 *p;
+
+  if (!UC_valid_UC_charset(UC_charset_out_hndl))
+    {
+      if (TRACE)
+	fprintf(stderr,"UC_con_set_unimap: Invalid charset handle %i.\n",
+		UC_charset_out_hndl);
+      return -1;
+    }
+    
+  p = UCInfo[UC_charset_out_hndl].unitable;
+  if (p == UC_current_unitable) {    /* test whether pointers are equal */
+    return update_flag;			/* nothing to be done */
+  }
+  UC_current_unitable = p;
+
+  /* The font is always 256 characters - so far. */
+
+  con_clear_unimap();
+
+  for ( i = 0 ; i < 256 ; i++ )
+    for ( j = UCInfo[UC_charset_out_hndl].unicount[i] ; j ; j-- )
+      con_insert_unipair(*(p++), i);
+
+  if (update_flag)
+    for ( i = 0 ; i <= 3 ; i++ )
+      set_inverse_transl(i);	/* Update all inverse translations */
+  return 0;
+}
+
+PRIVATE int
+UC_con_set_unimap_str ARGS2(u16, ct, struct unipair_str *, list)
+{
+  int err = 0, err1;
+
+  while( ct-- )
+    {
+      if ( (err1 = con_insert_unipair_str(list->unicode,
+				      list->replace_str)) != 0 )
+	err = err1;
+      list++;
+    }
+
+     /* No inverse translations for replacement strings! */
+  if (!err) hashtable_str_contents_valid = 1;  
+  return err;
+}
+
+#if 0	/* UNUSED */
+int
+con_get_unimap ARGS3(u16, ct, u16 *, uct, struct unipair *, list)
+{
+	int i, j, k, ect;
+	u16 **p1, *p2;
+
+	ect = 0;
+	if (hashtable_contents_valid)
+	  {
+	    for ( i = 0 ; i < 32 ; i++ )
+	      if ( (p1 = uni_pagedir[i]) != NULL )
+		for ( j = 0 ; j < 32 ; j++ )
+		  if ( (p2 = *(p1++)) != NULL )
+		    for ( k = 0 ; k < 64 ; k++ )
+		      {
+			if ( *p2 < MAX_GLYPH && ect++ < ct )
+			  {
+			    list->unicode = (u16) ((i<<11)+(j<<6)+k);
+			    list->fontpos = (u16) *p2;
+			    list++;
+			  }
+			p2++;
+		      }
+	  }
+	*uct = ect;
+	return ((ect <= ct) ? 0 : -ENOMEM);
+}
+#endif
+
+int
+conv_uni_to_pc ARGS1(long, ucs) 
+{
+  int h;
+  u16 **p1, *p2;
+  
+  /* Only 16-bit codes supported at this time */
+  if (ucs > 0xffff)
+    ucs = 0xfffd;		/* U+FFFD: REPLACEMENT CHARACTER */
+  else if (ucs < 0x20 || ucs >= 0xfffe)
+    return -1;		/* Not a printable character */
+  else if (ucs == 0xfeff || (ucs >= 0x200a && ucs <= 0x200f))
+    return -2;			/* Zero-width space */
+  /*
+   * UNI_DIRECT_BASE indicates the start of the region in the User Zone
+   * which always has a 1:1 mapping to the currently loaded font.  The
+   * UNI_DIRECT_MASK indicates the bit span of the region.
+   */
+  else if ( (ucs & ~UNI_DIRECT_MASK) == UNI_DIRECT_BASE )
+    return ucs & UNI_DIRECT_MASK;
+  
+  if (!hashtable_contents_valid)
+    return -3;
+  
+  if ( (p1 = uni_pagedir[ucs >> 11]) &&
+      (p2 = p1[(ucs >> 6) & 0x1f]) &&
+      (h = p2[ucs & 0x3f]) < MAX_GLYPH )
+    return h;
+
+  return -4;		/* not found */
+}
+
+/* Note: contents of outbuf is not changes for negative return value! */
+PRIVATE int
+conv_uni_to_str ARGS3(char*, outbuf, int, buflen, long, ucs) 
+{
+  char *h;
+  char ***p1, **p2;
+  
+  /* Only 16-bit codes supported at this time */
+  if (ucs > 0xffff)
+    ucs = 0xfffd;		/* U+FFFD: REPLACEMENT CHARACTER */
+/* Maybe the following two cases should be allowed here?? -kw */
+  else if (ucs < 0x20 || ucs >= 0xfffe)
+    return -1;		/* Not a printable character */
+  else if (ucs == 0xfeff || (ucs >= 0x200a && ucs <= 0x200f))
+    return -2;			/* Zero-width space */
+  /*
+   * UNI_DIRECT_BASE indicates the start of the region in the User Zone
+   * which always has a 1:1 mapping to the currently loaded font.  The
+   * UNI_DIRECT_MASK indicates the bit span of the region.
+   */
+/* We dont handle the following here: */
+#if(0)
+  else if ( (ucs & ~UNI_DIRECT_MASK) == UNI_DIRECT_BASE )
+    return ucs & UNI_DIRECT_MASK;
+#endif
+  if (!hashtable_str_contents_valid)
+    return -3;
+  
+  if ( (p1 = uni_pagedir_str[ucs >> 11]) &&
+      (p2 = p1[(ucs >> 6) & 0x1f]) &&
+      (h = p2[ucs & 0x3f]) ) {
+    strncpy (outbuf,h,(size_t) (buflen-1));
+    return 1;     /* ok ! */
+  }
+  return -4;		/* not found */
+}
+
+PUBLIC int UCInitialized = 0;
+/*
+ * [ original comment: - kw ]
+ * This is called at sys_setup time, after memory and the console are
+ * initialized.  It must be possible to call kmalloc(..., GFP_KERNEL)
+ * from this function, hence the call from sys_setup.
+ */
+PRIVATE void
+UCconsole_map_init NOARGS
+{
+  con_set_default_unimap();
+  UCInitialized = 1;
+}
+
+/* OK now, finally, some stuff that is more specifically for Lynx: - kw */
+
+PUBLIC int UCGetcharset_byMIMEname PARAMS((char * UC_MIMEcharset));
+PUBLIC int UCGetcharset_byLYNXname PARAMS((char * UC_LYNXcharset));
+
+PUBLIC int UCTransUniChar ARGS2(long, unicode, int, charset_out)
+{
+  int rc;
+  int UChndl_out;
+  u16 * ut;
+
+  if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0)
+    return -12;
+
+  ut = UCInfo[UChndl_out].unitable;
+  if (ut != UC_current_unitable) {
+    rc = UC_con_set_unimap(UChndl_out, 1);
+    if (rc < 0)
+      return rc;
+  }
+  rc = conv_uni_to_pc(unicode);
+  if (rc == -4)
+    rc = conv_uni_to_pc(0xfffd);
+  return rc;
+}
+/* returns string length, or negative value for error. */
+  
+PUBLIC int UCTransUniCharStr ARGS5(char *, outbuf, int, buflen, long, unicode,
+			     int, charset_out, int, chk_single_flag)
+{
+  int rc, src = 0, ignore_err;
+  int UChndl_out;
+  struct unimapdesc_str * repl;
+  u16 * ut;
+
+if (buflen<2)
+  return -13;
+
+  if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0)
+    return -12;
+
+  if (chk_single_flag) {
+    ut = UCInfo[UChndl_out].unitable;
+    if (ut != UC_current_unitable) {
+      src = UC_con_set_unimap(UChndl_out, 1);
+      if (src < 0)
+	return src;
+    }
+    src = conv_uni_to_pc(unicode);
+    if (src >= 32) {
+      outbuf[0] = src; outbuf[1] = '\0';
+      return 1; }
+  }
+
+  repl = &(UCInfo[UChndl_out].replacedesc);
+  if (repl != UC_current_unitable_str)  {
+    con_clear_unimap_str();
+    ignore_err = UC_con_set_unimap_str(repl->entry_ct, repl->entries);
+    UC_current_unitable_str = repl;
+  }
+  rc = conv_uni_to_str(outbuf, buflen, unicode);
+  if (rc == -4)
+    rc = conv_uni_to_str(outbuf, buflen, 0xfffd);
+  if (rc >= 0)
+    return (strlen(outbuf));
+
+  if (chk_single_flag && src == -4) {
+    rc = conv_uni_to_pc(0xfffd);
+    if (rc >= 32) {
+      outbuf[0] = rc; outbuf[1] = '\0';
+      return 1; }
+    else return rc;
+  }
+  return -4;
+}
+
+int UC_lastautoGN = 0;
+
+PRIVATE int UC_MapGN ARGS2(int, UChndl, int, update_flag)
+{
+  int i,Gn,found,lasthndl;
+  found = 0;
+  Gn = -1;
+  for (i=0; i<4 && Gn<0; i++) { 
+    if (UC_GNhandles[i] < 0)
+      Gn = i;
+    else if (UC_GNhandles[i] == UChndl)
+      {Gn = i; found = 1;}
+  }
+  if (found) return Gn;
+  if (Gn >= 0) {
+    UCInfo[UChndl].GN = Gn;
+    UC_GNhandles[Gn] = UChndl;
+  }
+  else {
+    if (UC_lastautoGN == GRAF_MAP)
+      Gn = IBMPC_MAP;
+    else Gn = GRAF_MAP;
+    UC_lastautoGN = Gn;
+    lasthndl = UC_GNhandles[Gn];
+    UCInfo[lasthndl].GN = -1;
+    UCInfo[UChndl].GN = Gn;
+    UC_GNhandles[Gn] = UChndl;
+  }
+  UC_con_set_trans(UChndl,Gn,update_flag);
+  return Gn;
+}
+  
+PUBLIC int UCTransChar ARGS3(char, ch_in, int, charset_in, int, charset_out)
+{
+  int unicode, Gn;
+  int rc;
+  int UChndl_in, UChndl_out;
+  u16 * ut;
+  int upd = 0;
+
+#ifndef UC_NO_SHORTCUTS
+  if (charset_in == charset_out)
+    return (unsigned char)ch_in;
+#endif
+  if (charset_in < 0) return -11;
+  if ((UChndl_in = LYCharSet_UC[charset_in].UChndl) < 0)
+    return -11;
+  if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0)
+    return -12;
+  if (!UCInfo[UChndl_in].num_uni)
+    return -11;
+  if ((Gn = UCInfo[UChndl_in].GN) < 0)
+    {Gn = UC_MapGN(UChndl_in,0); upd = 1;}
+
+  ut = UCInfo[UChndl_out].unitable;
+  if (ut == UC_current_unitable) 
+    {if (upd) set_inverse_transl(Gn);}
+  else {
+    rc = UC_con_set_unimap(UChndl_out, 1);
+    if (rc > 0)
+      set_inverse_transl(Gn);
+    else if (rc < 0)
+      return rc;
+  }
+  UC_translate = set_translate(Gn);
+  unicode = UC_translate[(unsigned char)ch_in];
+  rc = conv_uni_to_pc(unicode);
+  if (rc == -4)
+    rc = conv_uni_to_pc(0xfffd);
+  return rc;
+}
+
+PUBLIC long int UCTransToUni ARGS2(char, ch_in, int, charset_in)
+{
+  int unicode, Gn;
+  unsigned char ch_iu;
+  int UChndl_in;
+
+  ch_iu = (unsigned char)ch_in;
+#ifndef UC_NO_SHORTCUTS
+  if (charset_in == 0)
+    return ch_iu;
+  if ((unsigned char)ch_in < 128)
+    return ch_iu;
+#endif
+  if (charset_in < 0) return -11;
+  if ((UChndl_in = LYCharSet_UC[charset_in].UChndl) < 0)
+    return -11;
+  if (!UCInfo[UChndl_in].num_uni)
+    return -11;
+  if ((Gn = UCInfo[UChndl_in].GN) < 0)
+    {Gn = UC_MapGN(UChndl_in,1);}
+
+  UC_translate = set_translate(Gn);
+  unicode = UC_translate[(unsigned char)ch_in];
+
+  return unicode;
+}
+
+#if 0	/* UNUSED */
+PUBLIC int UCReverseTransChar ARGS3(char, ch_out, int, charset_in, int, charset_out)
+{
+  int Gn;
+  int rc;
+  int UChndl_in, UChndl_out;
+  u16 * ut;
+
+#ifndef UC_NO_SHORTCUTS
+  if (charset_in == charset_out)
+    return ch_out;
+#endif
+  if (charset_in < 0) return -11;
+  if ((UChndl_in = LYCharSet_UC[charset_in].UChndl) < 0)
+    return -11;
+  if (charset_out < 0) return -12;
+  if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0)
+    return -12;
+  if (!UCInfo[UChndl_in].num_uni)
+    return -11;
+
+  ut = UCInfo[UChndl_out].unitable;
+  if (ut == UC_current_unitable) {
+    if ((Gn = UCInfo[UChndl_in].GN) >= 0) {
+      UC_translate = set_translate(Gn);
+      rc = inv_translate[(unsigned int)ch_out];
+      if (rc >= 32) return rc;
+    }
+    else {
+      Gn = UC_MapGN(UChndl_in,1);
+      UC_translate = set_translate(Gn);
+      rc = inv_translate[(unsigned int)ch_out];
+      if (rc >= 32) return rc;
+    }
+  }
+  return UCTransChar(ch_out, charset_out, charset_in);
+}
+#endif
+
+/* returns string length, or negative value for error. */
+  
+PUBLIC int UCTransCharStr ARGS6(char *, outbuf, int,  buflen, char,  ch_in,
+			int,  charset_in, int,  charset_out, int,  chk_single_flag)
+{
+  int unicode, Gn;
+  int rc, src = 0, ignore_err;
+  int UChndl_in, UChndl_out;
+  struct unimapdesc_str * repl;
+  u16 * ut;
+  int upd = 0;
+
+if (buflen<2)
+  return -13;
+#ifndef UC_NO_SHORTCUTS
+  if (chk_single_flag && charset_in == charset_out) {
+    outbuf[0] = ch_in; outbuf[1] = '\0';
+    return 1; }
+#endif
+  if (charset_in < 0) return -11;
+  if ((UChndl_in = LYCharSet_UC[charset_in].UChndl) < 0)
+    return -11;
+  if ((UChndl_out = LYCharSet_UC[charset_out].UChndl) < 0)
+    return -12;
+  if (!UCInfo[UChndl_in].num_uni)
+    return -11;
+  if ((Gn = UCInfo[UChndl_in].GN) < 0)
+    {Gn = UC_MapGN(UChndl_in,!chk_single_flag); upd=chk_single_flag;}
+
+  UC_translate = set_translate(Gn);
+  unicode = UC_translate[(unsigned char)ch_in];
+
+  if (chk_single_flag) {
+    ut = UCInfo[UChndl_out].unitable;
+    if (ut == UC_current_unitable) 
+      {if (upd) set_inverse_transl(Gn);}
+    else {
+      src = UC_con_set_unimap(UChndl_out, 1);
+      if (src > 0)
+	set_inverse_transl(Gn);
+      else if (src < 0)
+	return src;
+    }
+    src = conv_uni_to_pc(unicode);
+    if (src >= 32) {
+      outbuf[0] = src; outbuf[1] = '\0';
+      return 1; }
+  }
+
+  repl = &(UCInfo[UChndl_out].replacedesc);
+  if (repl != UC_current_unitable_str)  {
+    con_clear_unimap_str();
+    ignore_err = UC_con_set_unimap_str(repl->entry_ct, repl->entries);
+    UC_current_unitable_str = repl;
+  }
+  rc = conv_uni_to_str(outbuf, buflen, unicode);
+  if (rc == -4)
+    rc = conv_uni_to_str(outbuf, buflen, 0xfffd);
+  if (rc >= 0)
+    return (strlen(outbuf));
+
+  if (chk_single_flag && src == -4) {
+    rc = conv_uni_to_pc(0xfffd);
+    if (rc >= 32) {
+      outbuf[0] = rc; outbuf[1] = '\0';
+      return 1; }
+    else return rc;
+  }
+  return -4;
+}
+
+PRIVATE int UC_FindGN_byMIME ARGS1(char *, UC_MIMEcharset)
+{
+  int i;
+  for (i=0; i<4; i++)
+    if (!strcmp(UC_MIMEcharset,UC_GNsetMIMEnames[i]))
+      return i;
+  return -1;
+}
+
+PUBLIC int UCGetRawUniMode_byLYhndl ARGS1(int, i)
+{
+  if(i < 0) return 0;
+  return LYCharSet_UC[i].enc;
+}
+
+/* Currently the charset name has to match exactly -- not substring 
+   matching as was done before (see HTMIME.c, HTML.c).     */  
+PUBLIC int UCGetLYhndl_byMIME ARGS1(CONST char *,UC_MIMEcharset)
+{
+  int i;
+  int LYhndl = -1;
+
+  if (!UC_MIMEcharset || !(*UC_MIMEcharset)) return -1;
+
+  for (i=0; i<MAX_CHARSETS && i<LYNumCharsets &&
+                  LYchar_set_names[i] && LYhndl<0; i++)
+    if (LYCharSet_UC[i].MIMEname &&
+	!strcmp(UC_MIMEcharset,LYCharSet_UC[i].MIMEname)) {
+      LYhndl = i;
+    }
+  if (LYhndl < 0) {		/* not yet found, special treatment
+			 for several CJK charsets etc... cheating here
+			 Also recognize UTF-8 as synonym for UNICODE-1-1-UTF-8
+			 (The example file for now still uses the long name,
+			 so that's what will be used internally.) */
+      if (0==strcmp(UC_MIMEcharset, "utf-8"))
+	  return UCGetLYhndl_byMIME("unicode-1-1-utf-8");
+      if (0==strncmp(UC_MIMEcharset, "iso-2022-jp", 11))
+	  return UCGetLYhndl_byMIME("euc-jp");
+      else if (0==strcmp(UC_MIMEcharset, "euc-kr"))
+	  return UCGetLYhndl_byMIME("iso-2022-kr");
+      else if (0==strcmp(UC_MIMEcharset, "gb2312"))
+	  return UCGetLYhndl_byMIME("iso-2022-cn");
+      else if (0==strcmp(UC_MIMEcharset, "euc-cn"))
+	  return UCGetLYhndl_byMIME("iso-2022-cn");
+      else if (0==strcmp(UC_MIMEcharset, "koi-8")) /* accentsoft bogosity */
+	  return UCGetLYhndl_byMIME("koi8-r");
+  }
+  return LYhndl;        /* returns -1 if no charset found by that MIME name */
+}
+
+/* function UC_setup_LYCharSets_repl() tries to set up a subtable in
+   LYCharSets[] appropriate for this new charset, for compatibility
+   with the "old method".  Maybe not nice (maybe not evene necessary
+   any more), but it works (as far as it goes..).
+
+   We try to be conservative and only allocate new memory for this
+   if needed.  If not needed, just point to SevenBitApproximations[i].
+   [Could do the same for ISO_Latin1[] if it's identical to that, but
+    would make it even *more* messy than it already is...]
+   This the only function in this file that knows, or cares, about the
+   HTMLDTD or details of LYCharSets[] subtables (and therefore somewhat
+   violates the idea that this file should be independent of those).
+   As in other places, we rely on ISO_Latin1 being the *first* table
+   in LYCharSets.  - kw */
+
+/* We need to remember which ones were allocated and which are static.*/
+static char** remember_allocated_LYCharSets[MAX_CHARSETS];
+
+PRIVATE void UCreset_allocated_LYCharSets NOARGS
+{
+	int i=0;
+	for(;i<MAX_CHARSETS;i++)
+	remember_allocated_LYCharSets[i]=NULL;
+}
+
+PRIVATE void UCfree_allocated_LYCharSets NOARGS
+{
+    int i=0;
+    for(;i<MAX_CHARSETS;i++)
+    if(remember_allocated_LYCharSets[i]!=NULL)
+	FREE(remember_allocated_LYCharSets[i]);
+}
+
+PRIVATE char ** UC_setup_LYCharSets_repl ARGS2(int, UC_charset_in_hndl, int, lowest8)
+{
+  char ** ISO_Latin1 = LYCharSets[0];
+  char **p;
+  char **prepl;
+  u16 *pp;
+  char ** tp;
+  char *s7;
+  char *s8;
+  int i,j,changed;
+  u16 k;
+  u8 *ti;
+	/* create a temporary table for reverse lookup of latin1 codes: */
+  tp = (char **) malloc(96 * sizeof(char *));
+  if (!tp) return NULL;
+  for (i=0; i<96; i++)
+    tp[i] = NULL;
+  ti = (u8 *) malloc(96 * sizeof(u8));
+  if (!ti) {
+    FREE(tp);
+    return NULL;
+  }
+  for (i=0; i<96; i++)
+    ti[i] = 0;
+
+  pp = UCInfo[UC_charset_in_hndl].unitable;
+
+  /* Determine if we have any mapping of a Unicode in the range 160-255
+     to an allowed code point > 0x80 in our new charset...
+     Store any mappings found in ti[]. */
+  if (UCInfo[UC_charset_in_hndl].num_uni > 0)
+    for ( i = 0 ; i < 256 ; i++ )
+      {
+	if ((j = UCInfo[UC_charset_in_hndl].unicount[i])) {
+	  if ((k = *pp) >= 160 && k < 256 && i >= lowest8) {
+	    ti[k-160] = i;
+	  }
+	  for ( ; j ; j-- )
+	    pp++;
+	}
+      }
+  {
+    u16 ct;
+    struct unipair_str *list;
+    
+  /* Determine if we have any mapping of a Unicode in the range 160-255
+     to a replacement string for our new charset...
+     Store any mappings found in tp[]. */
+    ct = UCInfo[UC_charset_in_hndl].replacedesc.entry_ct;
+    list = UCInfo[UC_charset_in_hndl].replacedesc.entries;
+    while( ct-- )
+      {
+	if ((k = list->unicode) >= 160 && k < 256) {
+	  tp[k-160] = list->replace_str;
+	}
+	list++;
+      }
+  }
+  /* Now allocate a new table compatible with LYCharSets[] 
+     and with the HTMLDTD for entitied.
+     We don't know yet whether we'll keep it around. */
+  p = prepl = (char **) malloc(HTML_dtd.number_of_entities * sizeof(char *));
+  if (!p) {
+    FREE(tp); FREE(ti);
+    return NULL;
+  }
+  changed = 0;
+  for (i=0; i<HTML_dtd.number_of_entities; i++,p++) {
+      /* For each of those entities, we check what the "old method"
+	 ISO_Latin1[] mapping does with them.  If it is nothing we
+	 want to use, just point to the SevenBitApproximations[] string. */
+    s7 = SevenBitApproximations[i];
+    s8 = ISO_Latin1[i];
+    *p = s7;
+    if (s8 && (unsigned char)(*s8) >= 160 && strlen(s8) == 1) {
+      /* We have an entity that is mapped to one valid eightbit latin1 char*/
+      if (ti[(unsigned char)(*s8) - 160] >= lowest8 &&
+	  !(s7[0] == ti[(unsigned char)(*s8) - 160] && s7[1] == '\0')) {
+	  /* ...which in turn is mapped, by our "new method", to another
+	     valid eightbit char for this new charset: either to itself... */
+	if (ti[(unsigned char)(*s8) - 160] == (unsigned char)(*s8))
+	  *p = s8;
+	else {
+	    /*                                      ...or another byte... */ 
+#ifdef NOTDEFINED
+	  *p = (char *)malloc(2*sizeof(char));
+	  if (!*p) {
+	    FREE(tp); FREE(ti); FREE(prepl);
+	    return NULL;
+	  }
+	  (*p)[0] = ti[(unsigned char)(*s8) - 160];
+	  (*p)[1] = '\0';
+#else
+	  /* use this instead... make those buggers int HTAtoms, so
+	     they will be cleaned up at exit... all for the sake of
+	     preventing memory leaks, sigh */
+	  static char dummy[2];	/* one char dummy string */
+
+	  dummy[0] = ti[(unsigned char)(*s8) - 160];
+	  *p = HTAtom_name(HTAtom_for(dummy));
+#endif /* ! NOTDEFINED */
+	}
+	changed = 1;
+      }
+      else if (tp[(unsigned char)(*s8) - 160] &&
+	       0!=strcmp(s7,tp[(unsigned char)(*s8) - 160])) {
+	  /* ...or which is mapped, by our "new method", to a replacement
+	     string for this new charset. */
+	*p = tp[(unsigned char)(*s8) - 160];
+	changed = 1;
+      }
+    }
+  }
+  FREE(tp); FREE(ti);
+  if (!changed) {
+    FREE(prepl);
+    return NULL;
+  }
+  return prepl;
+}
+/* "New method" meets "Old method" ... */
+
+PRIVATE int UC_Register_with_LYCharSets ARGS4(int, s,
+				       char *, UC_MIMEcharset,
+				       char *, UC_LYNXcharset,
+				       int, lowest_eightbit)
+{
+  int i, LYhndl,found;
+  char ** repl;
+
+  LYhndl = -1;
+  if (LYNumCharsets == 0) /* initialize here; so whoever changes
+			    LYCharSets.c doesn't have to count... */
+    for (i=0; (i<MAX_CHARSETS) && LYchar_set_names[i]; i++)
+      LYNumCharsets = i+1;
+
+  /* Do different kinds of searches... after all, this is experimental...*/
+  for (i=0; i<MAX_CHARSETS && LYchar_set_names[i] && LYhndl<0; i++)
+    if (!strcmp(UC_LYNXcharset,LYchar_set_names[i]))
+      LYhndl = i;
+  for (i=0; i<MAX_CHARSETS && LYchar_set_names[i] && LYhndl<0; i++)
+    if (LYCharSet_UC[i].MIMEname &&
+	!strcmp(UC_MIMEcharset,LYCharSet_UC[i].MIMEname))
+      LYhndl = i;
+
+  if (LYhndl < 0) {		/* not found */
+    found = 0;
+    if (LYNumCharsets >= MAX_CHARSETS) {
+      if (TRACE)
+      fprintf(stderr,"UC_Register_with_LYCharSets: Too many. Ignoring %s/%s.",
+	      UC_MIMEcharset,UC_LYNXcharset);
+      return -1;
+    } 
+				/* add to LYCharSets.c lists */
+    LYhndl = LYNumCharsets;  LYNumCharsets ++;
+    LYlowest_eightbit[LYhndl] = 999;
+    LYCharSets[LYhndl] = SevenBitApproximations;
+				/* Hmm, try to be conservative here. */
+    LYchar_set_names[LYhndl] = UC_LYNXcharset;
+    LYchar_set_names[LYhndl+1] = (char *) 0;
+		      /* Terminating NULL may be looked for by Lynx code */
+  } else found = 1;
+
+  LYCharSet_UC[LYhndl].UChndl = s;
+			   /* Can we just copy the pointer? Hope so... */
+  LYCharSet_UC[LYhndl].MIMEname = UC_MIMEcharset;
+  LYCharSet_UC[LYhndl].enc = UCInfo[s].enc;
+
+  /* @@@ We really SHOULD get more info from the table files, and set
+   relevant flags in the LYCharSet_UC[] entry with that info...
+   for now, let's try it without - kw */
+
+  if (lowest_eightbit < LYlowest_eightbit[LYhndl])
+    LYlowest_eightbit[LYhndl] = lowest_eightbit;
+  else if (lowest_eightbit > LYlowest_eightbit[LYhndl])
+    UCInfo[s].lowest_eight = LYlowest_eightbit[LYhndl];
+
+  if (!found && LYhndl > 0) {
+    repl = UC_setup_LYCharSets_repl(s,UCInfo[s].lowest_eight);
+    if (repl) {
+      LYCharSets[LYhndl] = repl;
+      /* remember to FREE at exit */
+      remember_allocated_LYCharSets[LYhndl]=repl;
+    }
+  }
+  return LYhndl;
+}
+
+
+/* This only sets up the structure - no initialization of the tables
+ * is done here yet.
+ */
+void UC_Charset_Setup ARGS8(char *, UC_MIMEcharset,
+		      char *, UC_LYNXcharset,
+		      u8 *, unicount, u16 *, unitable, int,  nnuni,
+		      struct unimapdesc_str, replacedesc, int, lowest_eight,
+		      int, UC_rawuni)
+{
+  int s, Gn;
+  int i, status = 0, found;
+
+  /* Get (new?) slot */
+
+  found = -1;  
+  for (i=0; i<UCNumCharsets && found<0; i++) {
+    if (!strcmp(UCInfo[i].MIMEname,UC_MIMEcharset))
+      found = i;
+  }
+  if (found >= 0) s = found;
+  else {
+    if (UCNumCharsets >= MAX_CHARSETS)
+      {
+	if (TRACE)
+	  fprintf(stderr,"UC_Charset_Setup: Too many. Ignoring %s/%s.",
+		  UC_MIMEcharset,UC_LYNXcharset);
+	return;
+      }
+    s = UCNumCharsets;
+    UCInfo[s].MIMEname = UC_MIMEcharset;
+  }
+  UCInfo[s].LYNXname = UC_LYNXcharset;
+  UCInfo[s].unicount = unicount;
+  UCInfo[s].unitable = unitable;
+  UCInfo[s].num_uni = nnuni;
+  UCInfo[s].replacedesc = replacedesc;
+  Gn = UC_FindGN_byMIME(UC_MIMEcharset);
+  if (Gn >= 0)
+    UC_GNhandles[Gn] = s;
+  UCInfo[s].GN = Gn;
+  if (UC_rawuni == UCT_ENC_UTF8) lowest_eight = 128;  /* cheat here */
+  UCInfo[s].lowest_eight = lowest_eight;
+  UCInfo[s].enc = UC_rawuni;
+  UCInfo[s].LYhndl = UC_Register_with_LYCharSets(s, UC_MIMEcharset,
+					    UC_LYNXcharset, lowest_eight);
+  UCInfo[s].uc_status = status;
+  if (found < 0) UCNumCharsets++;
+  return;
+}
+
+PRIVATE void UCcleanup_mem NOARGS
+{
+    int i;
+    UCfree_allocated_LYCharSets();
+    con_clear_unimap_str();
+    con_clear_unimap();
+    for (i=1; i<4; i++)		/* first one is static! */
+	FREE(inverse_translations[i]);
+}
+
+PUBLIC void UCInit NOARGS
+{
+  UCreset_allocated_LYCharSets();
+  atexit(UCcleanup_mem);
+  UCconsole_map_init();
+
+  UC_CHARSET_SETUP;
+  UC_CHARSET_SETUP_iso_8859_1;
+  UC_CHARSET_SETUP_iso_8859_2;
+  UC_CHARSET_SETUP_iso_8859_3;
+  UC_CHARSET_SETUP_iso_8859_4;
+  UC_CHARSET_SETUP_iso_8859_5;
+  UC_CHARSET_SETUP_iso_8859_7;
+  UC_CHARSET_SETUP_iso_8859_9;
+  UC_CHARSET_SETUP_iso_8859_10;
+  UC_CHARSET_SETUP_koi8_r;
+
+  UC_CHARSET_SETUP_cp437;
+  UC_CHARSET_SETUP_cp850;
+  UC_CHARSET_SETUP_cp852;
+  UC_CHARSET_SETUP_windows_1250;
+  UC_CHARSET_SETUP_iso_8859_1_windows_;
+  UC_CHARSET_SETUP_unicode_1_1_utf_8;
+  UC_CHARSET_SETUP_mnemonic_ascii_0;
+  UC_CHARSET_SETUP_mnemonic;
+/*  UC_CHARSET_SETUP_mnem; */
+}
diff --git a/src/UCdomap.h b/src/UCdomap.h
new file mode 100644
index 00000000..0009f6eb
--- /dev/null
+++ b/src/UCdomap.h
@@ -0,0 +1,58 @@
+/*
+ * [old comments: - kw ]
+ * consolemap.h
+ *
+ * Interface between console.c, selection.c  and UCmap.c
+ */
+#define LAT1_MAP 0
+#define GRAF_MAP 1
+#define IBMPC_MAP 2
+#define USER_MAP 3
+
+#ifndef MAX_CHARSETS
+#define MAX_CHARSETS
+#endif
+
+extern int hashtable_contents_valid;
+extern unsigned char inverse_translate PARAMS((int glyph));
+extern u16 *set_translate PARAMS((int m));
+extern int conv_uni_to_pc PARAMS((long ucs));
+
+extern int hashtable_str_contents_valid;   /* ??? probably no use... */
+
+/* Some conventions i try to follow (loosely):
+   [a-z]* only internal, names from linux driver code.
+   UC_* to be only known internally.
+   UC[A-Z]* to be exported to other parts of Lynx. -kw
+*/
+
+extern void UC_Charset_Setup PARAMS((char * UC_MIMEcharset, char * UC_LYNXcharset,
+		      u8 * unicount, u16 * unitable, int nnuni,
+		      struct unimapdesc_str replacedesc, int lowest_eight,
+			     int UC_rawuni));
+
+char *UC_GNsetMIMEnames[4] =
+           {"iso-8859-1","x-dec-graphics","cp437","x-transparent"};
+int UC_GNhandles[4] = {-1, -1, -1, -1};
+
+struct UC_charset {
+  char *MIMEname;
+  char *LYNXname;
+  u8* unicount;
+  u16* unitable;
+  int num_uni;
+  struct unimapdesc_str replacedesc;
+  int uc_status;
+  int LYhndl;
+  int GN;
+  int lowest_eight;
+  int enc;
+};
+char * UC_charsetMIMEnames[MAX_CHARSETS];
+
+PUBLIC struct UC_charset UCInfo[MAX_CHARSETS];
+
+PUBLIC int UCNumCharsets;
+
+extern void UCInit NOARGS;
+
diff --git a/src/chrtrans/MAKEFILE.W32 b/src/chrtrans/MAKEFILE.W32
new file mode 100644
index 00000000..4968995f
--- /dev/null
+++ b/src/chrtrans/MAKEFILE.W32
@@ -0,0 +1,129 @@
+#

+# Borland C++ IDE generated makefile

+#

+.AUTODEPEND

+

+

+#

+# Borland C++ tools

+#

+IMPLIB  = Implib

+BCC32   = Bcc32 +BccW32.cfg 

+TLINK32 = TLink32

+TLIB    = TLib

+BRC32   = Brc32

+TASM32  = Tasm32

+#

+# IDE macros

+#

+

+

+#

+# Options

+#

+IDE_LFLAGS32 =  -LD:\BC45\LIB

+LLATC32_dbmakeuctbdexe =  -LCURSES;D:\BC45\LIB -Tpe -ap -c -wdpl -wdup

+RLATC32_dbmakeuctbdexe =  -w32 -k

+BLATC32_dbmakeuctbdexe = 

+CNIEAT_dbmakeuctbdexe = -I.\;..\..\CURSES;..;..\..\WWW\LIBRARY\IMPLEMENTATION;D:\BC45\INCLUDE -DNO_UNISTD_H;_WINDOWS;NCURSES;FANCY_CURSES;XMOSAIC_HACK;ACCESS_AUTH;NO_UTMP;NO_CUSERID;NO_TTYTYPE;NOSIGHUP;DOSPATH;NOUSERS

+LNIEAT_dbmakeuctbdexe = -x

+LEAT_dbmakeuctbdexe = $(LLATC32_dbmakeuctbdexe)

+REAT_dbmakeuctbdexe = $(RLATC32_dbmakeuctbdexe)

+BEAT_dbmakeuctbdexe = $(BLATC32_dbmakeuctbdexe)

+

+#

+# Dependency List

+#

+Dep_char = \

+   .\makeuctb.exe

+

+char : BccW32.cfg $(Dep_char)

+  echo MakeNode 

+

+Dep_dbmakeuctbdexe = \

+   .\makeuctb.obj

+

+.\makeuctb.exe : $(Dep_dbmakeuctbdexe)

+  $(TLINK32) @&&|

+ /v $(IDE_LFLAGS32) $(LEAT_dbmakeuctbdexe) $(LNIEAT_dbmakeuctbdexe) +

+D:\BC45\LIB\c0x32.obj+

+.\makeuctb.obj

+$<,$*

+D:\BC45\LIB\bidsf.lib+

+D:\BC45\LIB\import32.lib+

+D:\BC45\LIB\cw32.lib

+

+|

+

+.\makeuctb.obj :  makeuctb.c

+  $(BCC32) -P- -c @&&|

+ $(CEAT_dbmakeuctbdexe) $(CNIEAT_dbmakeuctbdexe) -o$@ makeuctb.c

+|

+

+# Compiler configuration file

+BccW32.cfg : 

+   Copy &&|

+-R

+-v

+-vi

+-H

+-H=lynx.csm

+-w-

+-A-

+-wcpt

+-wrpt

+-wrng

+-w-voi

+-w-ret

+-w-sus

+-w-dup

+-w-big

+-w-ext

+-w-zdi

+-w-bei

+-w-obi

+-w-ofp

+-w-eas

+-w-hid

+-w-ncf

+-w-ibc

+-w-dsz

+-w-nst

+-w-mpc

+-w-mpd

+-w-ntd

+-w-nvf

+-w-hch

+-w-inl

+-w-lin

+-w-lvc

+-w-pia

+-w-def

+-w-nod

+-w-pro

+-w-rvl

+-w-ccc

+-w-aus

+-w-par

+-w-rch

+-w-eff

+-w-ill

+-w-ias

+-w-msg

+-WC

+-Ot

+-d-

+-K

+-a-

+-w-stu

+-wbbf

+-w-dpu

+-wcln

+-wsig

+-wucp

+-g200

+-H-

+-v-

+| $@

+

+

diff --git a/src/chrtrans/MAKEW32.BAT b/src/chrtrans/MAKEW32.BAT
new file mode 100644
index 00000000..1259b344
--- /dev/null
+++ b/src/chrtrans/MAKEW32.BAT
@@ -0,0 +1,25 @@
+@echo If .tbl files are added or removed you will need to hand edit
+@echo this batch file.
+@echo .
+make -f makefile.w32
+makeuctb iso01_uni.tbl > iso01_uni.h
+makeuctb iso02_uni.tbl > iso02_uni.h
+makeuctb iso03_uni.tbl > iso03_uni.h
+makeuctb iso04_uni.tbl > iso04_uni.h
+makeuctb iso05_uni.tbl > iso05_uni.h
+makeuctb iso07_uni.tbl > iso07_uni.h
+makeuctb iso09_uni.tbl > iso09_uni.h
+makeuctb iso10_uni.tbl > iso10_uni.h
+makeuctb cp437_uni.tbl > cp437_uni.h
+makeuctb cp850_uni.tbl > cp850_uni.h
+makeuctb cp852_uni.tbl > cp852_uni.h
+makeuctb cp1250_uni.tbl > cp1250_uni.h
+makeuctb cp1252_uni.tbl > cp1252_uni.h
+makeuctb utf8_uni.tbl > utf8_uni.h
+makeuctb mnemonic_suni.tbl > mnemonic_suni.h
+makeuctb mnem_suni.tbl > mnem_suni.h
+makeuctb rfc_suni.tbl > rfc_suni.h
+makeuctb def7_uni.tbl > def7_uni.h
+makeuctb koi8r_uni.tbl > koi8r_uni.h
+
+
diff --git a/src/chrtrans/Makefile b/src/chrtrans/Makefile
new file mode 100644
index 00000000..055dbad2
--- /dev/null
+++ b/src/chrtrans/Makefile
@@ -0,0 +1,78 @@
+#
+# Makefile for the makeuctb and unicode tables.
+#
+# This may not yet work for the general case.
+# Only some dependencies included.
+#
+#
+CFLAGS = $(MCFLAGS) -I.. -I../.. -I../../WWW/Library/Implementation
+
+.SUFFIXES: .tbl
+#
+# This file contains the font map for the default (hardware) font
+#
+
+FONTMAP_INC = iso01_uni.h# default, if not set by recursive call
+
+### #include $(TOPDIR)/Rules.make ???
+
+### fastdep: $(FONTMAP_INC)
+
+### MCFLAGS=-g -DUNIX -DLINUX -DNO_KEYPAD -DNO_TTYTYPE -DEXP_CHARTRANS -I.. -I../../WWW/Library/Implementation -I../..
+
+CHRTR=
+
+TABLES= $(CHRTR)iso02_uni.h \
+ $(CHRTR)iso01_uni.h \
+ $(CHRTR)def7_uni.h \
+ $(CHRTR)iso03_uni.h \
+ $(CHRTR)iso04_uni.h \
+ $(CHRTR)iso05_uni.h \
+ $(CHRTR)iso07_uni.h \
+ $(CHRTR)iso09_uni.h \
+ $(CHRTR)iso10_uni.h \
+ $(CHRTR)koi8r_uni.h \
+ $(CHRTR)cp437_uni.h \
+ $(CHRTR)cp850_uni.h \
+ $(CHRTR)cp852_uni.h \
+ $(CHRTR)cp1250_uni.h \
+ $(CHRTR)cp1252_uni.h \
+ $(CHRTR)utf8_uni.h \
+ $(CHRTR)rfc_suni.h \
+ $(CHRTR)mnemonic_suni.h \
+ $(CHRTR)mnem_suni.h
+
+default: $(FONTMAP_INC)
+
+tables: $(TABLES)
+
+makeuctb: makeuctb.c UCkd.h
+	$(CC) $(CFLAGS) -o makeuctb makeuctb.c
+
+.tbl.h:
+	./makeuctb $*.tbl > $@
+
+iso01_uni.h: iso01_uni.tbl makeuctb
+iso02_uni.h: iso02_uni.tbl makeuctb
+iso03_uni.h: iso03_uni.tbl makeuctb
+iso04_uni.h: iso04_uni.tbl makeuctb
+iso05_uni.h: iso05_uni.tbl makeuctb
+iso07_uni.h: iso07_uni.tbl makeuctb
+iso09_uni.h: iso09_uni.tbl makeuctb
+iso10_uni.h: iso10_uni.tbl makeuctb
+cp437_uni.h: cp437_uni.tbl makeuctb
+cp850_uni.h: cp850_uni.tbl makeuctb
+cp852_uni.h: cp852_uni.tbl makeuctb
+cp1250_uni.h: cp1250_uni.tbl makeuctb
+cp1252_uni.h: cp1252_uni.tbl makeuctb
+utf8_uni.h: utf8_uni.tbl makeuctb
+mnemonic_suni.h: mnemonic_suni.tbl makeuctb
+mnem_suni.h: mnem_suni.tbl makeuctb
+rfc_suni.h: rfc_suni.tbl makeuctb
+
+clean:
+	rm -f makeuctb *.o *uni.h
+
+distclean: clean
+	-rm -rf obsolete
+	rm -f core *.bak *.sav *~ *.h_old
diff --git a/src/chrtrans/README.format b/src/chrtrans/README.format
new file mode 100644
index 00000000..e5eca7bf
--- /dev/null
+++ b/src/chrtrans/README.format
@@ -0,0 +1,103 @@
+Some notes on the format of table files used here.
+(See README.tables for what to do with them.)
+
+The format is derived from stuff in the console driver of the
+Linux kernel (as are the guts of the chartrans machinery).
+THAT DOES NOT MEAN that anything here is Linux specific - it isn't.
+
+[Note that the format may change, this is still somewhat experimental.]
+
+There are four kinds of lines:
+
+Summary example:
+
+  # This line is a comment, the next line is a directive
+  OBrand new Charset!
+  0x41    U+0041 U+0391
+  U+00cd:I'
+
+Description:
+
+a) comment lines start with a '#' character.
+   (trailing comments are allowed on some of the other lines, if in doubt
+   check the examples..)
+
+b) directives:
+   start with a special character, currently recognized are the letters:
+ 
+    O   The name under which this should appear on the O)ptions screen
+    M   The name for this charset in MIME syntax (one word with digits
+        and some other non-letters allowed, should be IANA registered)
+    R   a number which flags some special property (encoding) for this
+        charset [see utf8.uni for example, see UCDefs.h for details].
+
+c) character translation definitions:
+   they look like
+
+   0x41    U+0041 U+0391 ...
+
+   and are used for "forward" translation (mapping this charset to Unicode)
+   AS WELL AS "back" translation (mapping Unicodes to an 8-bit 
+   [incl. 7-bit ASCII] code).
+
+   For the "forward" direction, only the first Unicode is used; for
+   "back" translation, all listed Unicodes are mapped to the byte (i.e.
+   code point) on the left.
+
+   The above example line would tell the chartrans mechanism:
+   "For this charset, code position 65 [hex 0x41] contains Unicode
+    U+0041 (LATIN CAPITAL LETTER A).  For translation of Unicodes to
+    this charset, use byte value 65 [hex 0x41] for U+0041 (LATIN CAPITAL 
+    LETTER A) as well as for U+0391 (GREEK CAPITAL LETTER ALPHA)."
+
+  [Note that for bytes in the ASCII range 0x00-0x7F, the forward translations
+   will (probably) not be used by Lynx.  It doesn't hurt to list those,
+   too, for completeness.]
+
+   Some other forms are also accepted:
+
+ * Syntax accepted:
+ *	<fontpos>	<unicode> <unicode> ...
+ *	<fontpos>	<unicode range> <unicode range> ...
+ *	<fontpos>	idem
+ *	<range>		idem
+ *	<range>		<unicode range>
+ *
+ * where <range> ::= <fontpos>-<fontpos>
+ * and <unicode> ::= U+<h><h><h><h>
+ * and <h> ::= <hexadecimal digit>
+
+d) string replacement definitions:
+
+  They look like
+
+  U+00cd:I'
+
+  which would mean "Replace Unicode U+00cd (LATIN CAPITAL LETTER I WITH 
+  ACUTE" with the string (consisting of two character) I' (if no other
+  translation is available)."
+
+  Note that everything after the ':' is currently taken VERBATIM, so
+  careful with trailing blanks etc.
+
+ * Syntax accepted:
+ *      <unicode>	:<replace>
+ *      <unicode range>	:<replace>
+ *
+ * where <unicode range> ::= <unicode>-<unicode>
+ * and <unicode> ::= U+<h><h><h><h>
+ * and <h> ::= <hexadecimal digit>
+ * and <replace> any string not containing '\n' or '\0'
+
+Motivation:
+
+- It is an extention of the format already in use for Linux (kernel,
+  kbd package), those files can be used with some minimal editing.
+
+- It is easy to convert Unicode tables for other charsets, as they
+  are commonly found on ftp sites etc., to this format - the right
+  sed command should do 99% of the work.
+
+- The format is independent of details of other parts of the Lynx code,
+  unlike the "old" LYCharsets.c mechanism.  The tables don't have to
+  be changed in synch when e.g. new entities are added to the HTMLDTD.
diff --git a/src/chrtrans/README.tables b/src/chrtrans/README.tables
new file mode 100644
index 00000000..94622a99
--- /dev/null
+++ b/src/chrtrans/README.tables
@@ -0,0 +1,52 @@
+The translation table files in this directory are _examples only_.
+They were collected from several sources (among them Linux kbd package, 
+ftp://dkuug.dk/, ftp://unicode.org/) and automatically comverted (if
+applicable), but not checked in detail.  The Unicode/UCS2 values
+for some of the RFC1345 Mnemonic codes are out of date, a cleanup and
+update would be needed for serious use (including removing the mappings
+from the "private zone" U+E000 etc.).
+
+More tranlation files can be easily provided (and new character entities
+added to HTMLDTD.c), this set is just to test whether the system works 
+in principle (and also how it behaves with of incomplete data...)
+
+See the file README.format for a brief explanation of what's in the
+table files.
+
+The examples have names *_uni or *_suni with a .tbl suffix, but it
+doesn't really matter.  The auxiliary program makeuctb (MAKE UniCode
+TaBle) is used to "compile" them into C header files, which can be
+included by UCdomap.c.
+
+Ideally this should be taken care of by the Makefiles..
+
+
+To make a new chartrans table available to Lynx (and thereby make a new
+charset known to Lynx) you currently have to manually edit UCdomap.c, in
+two places:
+
+a) Near the top, you will find a bunch of lines (some may be commented out)
+  
+  #include "chrtrans/<fn>.h"
+
+Add or comment out as you wish. (But it's probably safest to leave the
+first one, referring to "chrtrans/iso01_uni.h", in place...)
+
+b) At the bottom, you will find a bunch of lines (again, some may be
+   commented out by default) of the form
+
+    UC_CHARSET_SETUP_<something>;
+
+which should correspond to the #include lines from a).  Again,
+add or substract as you wish (but preferably consistent with what you
+did under a)...) [The <something> is derived from the charset's MIME name.
+if in doubt, check the last lines of the corresponding ...uni.h file.]
+
+c) To let make automatically notice when you have changed one of the
+   table files, and automatically regenerate the *uni.h file(s), 
+you also have to add any new tables to both src/Makefile *and*
+src/chrtrans/Makefile.  (That may be inconvenient, but I didn't want to
+depend on features than not all makes may have.)  Note that for recompiling
+Lynx, a `make clean' should not be necessary if you have *only* made 
+changes to the files in src/chrtrans.
+
diff --git a/src/chrtrans/UCkd.h b/src/chrtrans/UCkd.h
new file mode 100644
index 00000000..2cc2ebdb
--- /dev/null
+++ b/src/chrtrans/UCkd.h
@@ -0,0 +1,59 @@
+#ifndef _UC_KD_H
+#define _UC_KD_H
+#include <sys/types.h>
+
+/* NOTE: THE FOLLOWING #define MAY NEED ADJUSTMENT.
+   u16 should be an unsigned type of 16 bit length (two octets).
+   u8  should be an unsigned type of 8  bit length (one octet).
+   */
+#ifndef u16
+#define u16 unsigned short
+#endif
+
+
+#ifndef u8
+#define u8 unsigned char
+#endif
+
+#ifdef NOTDEFINED
+struct consolefontdesc {
+	u_short charcount;	/* characters in font (256 or 512) */
+	u_short charheight;	/* scan lines per character (1-32) */
+	char *chardata;		/* font data in expanded form */
+};
+#endif
+typedef char scrnmap_t;
+#define		E_TABSZ		256
+
+struct unipair {
+	u16 unicode;
+	u16 fontpos;
+};
+struct unipair_str {
+	u16 unicode;
+	char * replace_str;
+};
+struct unimapdesc {
+	u16 entry_ct;
+	struct unipair *entries;
+};
+struct unimapdesc_str {
+	u16 entry_ct;
+	struct unipair_str *entries;
+};
+
+
+#define UNI_DIRECT_BASE 0xF000	/* start of Direct Font Region */
+#define UNI_DIRECT_MASK 0x01FF	/* Direct Font Region bitmask */
+
+#define UC_MAXLEN_ID_APPEND 20
+#define UC_MAXLEN_MIMECSNAME 40
+#define UC_MAXLEN_LYNXCSNAME 40
+#define UC_LEN_LYNXCSNAME 20
+
+#define EX_OK		0	/* successful termination */
+#define EX_USAGE	64	/* command line usage error */
+#define EX_DATAERR	65	/* data format error */
+#define EX_NOINPUT	66	/* cannot open input */
+
+#endif /* _UC_KD_H */
diff --git a/src/chrtrans/cp1250_uni.tbl b/src/chrtrans/cp1250_uni.tbl
new file mode 100644
index 00000000..75416b67
--- /dev/null
+++ b/src/chrtrans/cp1250_uni.tbl
@@ -0,0 +1,281 @@
+#The MIME name of this charset.
+Mwindows-1250
+
+#Name as a Display Charset (used on Options screen)
+O MS Windows CP 1250
+
+#
+#    Name:     cp1250_WinLatin2 to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.00
+#    Table format:  Format A
+#    Date:          04/24/96
+#    Authors:       Lori Brownell <loribr@microsoft.com>
+#                   K.D. Chang    <a-kchang@microsoft.com>
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp1250_WinLatin2 code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp1250_WinLatin2 order
+#
+#0x00    U+0000  #NULL
+#0x01    U+0001  #START OF HEADING
+#0x02    U+0002  #START OF TEXT
+#0x03    U+0003  #END OF TEXT
+#0x04    U+0004  #END OF TRANSMISSION
+#0x05    U+0005  #ENQUIRY
+#0x06    U+0006  #ACKNOWLEDGE
+#0x07    U+0007  #BELL
+#0x08    U+0008  #BACKSPACE
+#0x09    U+0009  #HORIZONTAL TABULATION
+#0x0A    U+000A  #LINE FEED
+#0x0B    U+000B  #VERTICAL TABULATION
+#0x0C    U+000C  #FORM FEED
+#0x0D    U+000D  #CARRIAGE RETURN
+#0x0E    U+000E  #SHIFT OUT
+#0x0F    U+000F  #SHIFT IN
+#0x10    U+0010  #DATA LINK ESCAPE
+#0x11    U+0011  #DEVICE CONTROL ONE
+#0x12    U+0012  #DEVICE CONTROL TWO
+#0x13    U+0013  #DEVICE CONTROL THREE
+#0x14    U+0014  #DEVICE CONTROL FOUR
+#0x15    U+0015  #NEGATIVE ACKNOWLEDGE
+#0x16    U+0016  #SYNCHRONOUS IDLE
+#0x17    U+0017  #END OF TRANSMISSION BLOCK
+#0x18    U+0018  #CANCEL
+#0x19    U+0019  #END OF MEDIUM
+#0x1A    U+001A  #SUBSTITUTE
+#0x1B    U+001B  #ESCAPE
+#0x1C    U+001C  #FILE SEPARATOR
+#0x1D    U+001D  #GROUP SEPARATOR
+#0x1E    U+001E  #RECORD SEPARATOR
+#0x1F    U+001F  #UNIT SEPARATOR
+0x20    U+0020  #SPACE
+0x21    U+0021  #EXCLAMATION MARK
+0x22    U+0022  #QUOTATION MARK
+0x23    U+0023  #NUMBER SIGN
+0x24    U+0024  #DOLLAR SIGN
+0x25    U+0025  #PERCENT SIGN
+0x26    U+0026  #AMPERSAND
+0x27    U+0027  #APOSTROPHE
+0x28    U+0028  #LEFT PARENTHESIS
+0x29    U+0029  #RIGHT PARENTHESIS
+0x2A    U+002A  #ASTERISK
+0x2B    U+002B  #PLUS SIGN
+0x2C    U+002C  #COMMA
+0x2D    U+002D  #HYPHEN-MINUS
+0x2E    U+002E  #FULL STOP
+0x2F    U+002F  #SOLIDUS
+0x30    U+0030  #DIGIT ZERO
+0x31    U+0031  #DIGIT ONE
+0x32    U+0032  #DIGIT TWO
+0x33    U+0033  #DIGIT THREE
+0x34    U+0034  #DIGIT FOUR
+0x35    U+0035  #DIGIT FIVE
+0x36    U+0036  #DIGIT SIX
+0x37    U+0037  #DIGIT SEVEN
+0x38    U+0038  #DIGIT EIGHT
+0x39    U+0039  #DIGIT NINE
+0x3A    U+003A  #COLON
+0x3B    U+003B  #SEMICOLON
+0x3C    U+003C  #LESS-THAN SIGN
+0x3D    U+003D  #EQUALS SIGN
+0x3E    U+003E  #GREATER-THAN SIGN
+0x3F    U+003F  #QUESTION MARK
+0x40    U+0040  #COMMERCIAL AT
+0x41    U+0041  #LATIN CAPITAL LETTER A
+0x42    U+0042  #LATIN CAPITAL LETTER B
+0x43    U+0043  #LATIN CAPITAL LETTER C
+0x44    U+0044  #LATIN CAPITAL LETTER D
+0x45    U+0045  #LATIN CAPITAL LETTER E
+0x46    U+0046  #LATIN CAPITAL LETTER F
+0x47    U+0047  #LATIN CAPITAL LETTER G
+0x48    U+0048  #LATIN CAPITAL LETTER H
+0x49    U+0049  #LATIN CAPITAL LETTER I
+0x4A    U+004A  #LATIN CAPITAL LETTER J
+0x4B    U+004B  #LATIN CAPITAL LETTER K
+0x4C    U+004C  #LATIN CAPITAL LETTER L
+0x4D    U+004D  #LATIN CAPITAL LETTER M
+0x4E    U+004E  #LATIN CAPITAL LETTER N
+0x4F    U+004F  #LATIN CAPITAL LETTER O
+0x50    U+0050  #LATIN CAPITAL LETTER P
+0x51    U+0051  #LATIN CAPITAL LETTER Q
+0x52    U+0052  #LATIN CAPITAL LETTER R
+0x53    U+0053  #LATIN CAPITAL LETTER S
+0x54    U+0054  #LATIN CAPITAL LETTER T
+0x55    U+0055  #LATIN CAPITAL LETTER U
+0x56    U+0056  #LATIN CAPITAL LETTER V
+0x57    U+0057  #LATIN CAPITAL LETTER W
+0x58    U+0058  #LATIN CAPITAL LETTER X
+0x59    U+0059  #LATIN CAPITAL LETTER Y
+0x5A    U+005A  #LATIN CAPITAL LETTER Z
+0x5B    U+005B  #LEFT SQUARE BRACKET
+0x5C    U+005C  #REVERSE SOLIDUS
+0x5D    U+005D  #RIGHT SQUARE BRACKET
+0x5E    U+005E  #CIRCUMFLEX ACCENT
+0x5F    U+005F  #LOW LINE
+0x60    U+0060  #GRAVE ACCENT
+0x61    U+0061  #LATIN SMALL LETTER A
+0x62    U+0062  #LATIN SMALL LETTER B
+0x63    U+0063  #LATIN SMALL LETTER C
+0x64    U+0064  #LATIN SMALL LETTER D
+0x65    U+0065  #LATIN SMALL LETTER E
+0x66    U+0066  #LATIN SMALL LETTER F
+0x67    U+0067  #LATIN SMALL LETTER G
+0x68    U+0068  #LATIN SMALL LETTER H
+0x69    U+0069  #LATIN SMALL LETTER I
+0x6A    U+006A  #LATIN SMALL LETTER J
+0x6B    U+006B  #LATIN SMALL LETTER K
+0x6C    U+006C  #LATIN SMALL LETTER L
+0x6D    U+006D  #LATIN SMALL LETTER M
+0x6E    U+006E  #LATIN SMALL LETTER N
+0x6F    U+006F  #LATIN SMALL LETTER O
+0x70    U+0070  #LATIN SMALL LETTER P
+0x71    U+0071  #LATIN SMALL LETTER Q
+0x72    U+0072  #LATIN SMALL LETTER R
+0x73    U+0073  #LATIN SMALL LETTER S
+0x74    U+0074  #LATIN SMALL LETTER T
+0x75    U+0075  #LATIN SMALL LETTER U
+0x76    U+0076  #LATIN SMALL LETTER V
+0x77    U+0077  #LATIN SMALL LETTER W
+0x78    U+0078  #LATIN SMALL LETTER X
+0x79    U+0079  #LATIN SMALL LETTER Y
+0x7A    U+007A  #LATIN SMALL LETTER Z
+0x7B    U+007B  #LEFT CURLY BRACKET
+0x7C    U+007C  #VERTICAL LINE
+0x7D    U+007D  #RIGHT CURLY BRACKET
+0x7E    U+007E  #TILDE
+#0x7F    U+007F  #DELETE
+#0x80            #UNDEFINED
+#0x81            #UNDEFINED
+0x82    U+201A  #SINGLE LOW-9 QUOTATION MARK
+#0x83            #UNDEFINED
+0x84    U+201E  #DOUBLE LOW-9 QUOTATION MARK
+0x85    U+2026  #HORIZONTAL ELLIPSIS
+0x86    U+2020  #DAGGER
+0x87    U+2021  #DOUBLE DAGGER
+#0x88            #UNDEFINED
+0x89    U+2030  #PER MILLE SIGN
+0x8A    U+0160  #LATIN CAPITAL LETTER S WITH CARON
+0x8B    U+2039  #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x8C    U+015A  #LATIN CAPITAL LETTER S WITH ACUTE
+0x8D    U+0164  #LATIN CAPITAL LETTER T WITH CARON
+0x8E    U+017D  #LATIN CAPITAL LETTER Z WITH CARON
+0x8F    U+0179  #LATIN CAPITAL LETTER Z WITH ACUTE
+#0x90            #UNDEFINED
+0x91    U+2018  #LEFT SINGLE QUOTATION MARK
+0x92    U+2019  #RIGHT SINGLE QUOTATION MARK
+0x93    U+201C  #LEFT DOUBLE QUOTATION MARK
+0x94    U+201D  #RIGHT DOUBLE QUOTATION MARK
+0x95    U+2022  #BULLET
+0x96    U+2013  #EN DASH
+0x97    U+2014  #EM DASH
+#0x98            #UNDEFINED
+0x99    U+2122  #TRADE MARK SIGN
+0x9A    U+0161  #LATIN SMALL LETTER S WITH CARON
+0x9B    U+203A  #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x9C    U+015B  #LATIN SMALL LETTER S WITH ACUTE
+0x9D    U+0165  #LATIN SMALL LETTER T WITH CARON
+0x9E    U+017E  #LATIN SMALL LETTER Z WITH CARON
+0x9F    U+017A  #LATIN SMALL LETTER Z WITH ACUTE
+0xA0    U+00A0  #NO-BREAK SPACE
+0xA1    U+02C7  #CARON
+0xA2    U+02D8  #BREVE
+0xA3    U+0141  #LATIN CAPITAL LETTER L WITH STROKE
+0xA4    U+00A4  #CURRENCY SIGN
+0xA5    U+0104  #LATIN CAPITAL LETTER A WITH OGONEK
+0xA6    U+00A6  #BROKEN BAR
+0xA7    U+00A7  #SECTION SIGN
+0xA8    U+00A8  #DIAERESIS
+0xA9    U+00A9  #COPYRIGHT SIGN
+0xAA    U+015E  #LATIN CAPITAL LETTER S WITH CEDILLA
+0xAB    U+00AB  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+#0xAC            #UNDEFINED
+0xAD    U+00AD  #SOFT HYPHEN
+0xAE    U+00AE  #REGISTERED SIGN
+0xAF    U+017B  #LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xB0    U+00B0  #DEGREE SIGN
+0xB1    U+00B1  #PLUS-MINUS SIGN
+0xB2    U+02DB  #OGONEK
+0xB3    U+0142  #LATIN SMALL LETTER L WITH STROKE
+0xB4    U+00B4  #ACUTE ACCENT
+0xB5    U+00B5  #MICRO SIGN
+0xB6    U+00B6  #PILCROW SIGN
+0xB7    U+00B7  #MIDDLE DOT
+0xB8    U+00B8  #CEDILLA
+0xB9    U+0105  #LATIN SMALL LETTER A WITH OGONEK
+0xBA    U+015F  #LATIN SMALL LETTER S WITH CEDILLA
+0xBB    U+00BB  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xBC    U+013D  #LATIN CAPITAL LETTER L WITH CARON
+0xBD    U+02DD  #DOUBLE ACUTE ACCENT
+0xBE    U+013E  #LATIN SMALL LETTER L WITH CARON
+0xBF    U+017C  #LATIN SMALL LETTER Z WITH DOT ABOVE
+0xC0    U+0154  #LATIN CAPITAL LETTER R WITH ACUTE
+0xC1    U+00C1  #LATIN CAPITAL LETTER A WITH ACUTE
+0xC2    U+00C2  #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xC3    U+0102  #LATIN CAPITAL LETTER A WITH BREVE
+0xC4    U+00C4  #LATIN CAPITAL LETTER A WITH DIAERESIS
+0xC5    U+0139  #LATIN CAPITAL LETTER L WITH ACUTE
+0xC6    U+0106  #LATIN CAPITAL LETTER C WITH ACUTE
+0xC7    U+00C7  #LATIN CAPITAL LETTER C WITH CEDILLA
+0xC8    U+010C  #LATIN CAPITAL LETTER C WITH CARON
+0xC9    U+00C9  #LATIN CAPITAL LETTER E WITH ACUTE
+0xCA    U+0118  #LATIN CAPITAL LETTER E WITH OGONEK
+0xCB    U+00CB  #LATIN CAPITAL LETTER E WITH DIAERESIS
+0xCC    U+011A  #LATIN CAPITAL LETTER E WITH CARON
+0xCD    U+00CD  #LATIN CAPITAL LETTER I WITH ACUTE
+0xCE    U+00CE  #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xCF    U+010E  #LATIN CAPITAL LETTER D WITH CARON
+0xD0    U+0110  #LATIN CAPITAL LETTER D WITH STROKE
+0xD1    U+0143  #LATIN CAPITAL LETTER N WITH ACUTE
+0xD2    U+0147  #LATIN CAPITAL LETTER N WITH CARON
+0xD3    U+00D3  #LATIN CAPITAL LETTER O WITH ACUTE
+0xD4    U+00D4  #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xD5    U+0150  #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0xD6    U+00D6  #LATIN CAPITAL LETTER O WITH DIAERESIS
+0xD7    U+00D7  #MULTIPLICATION SIGN
+0xD8    U+0158  #LATIN CAPITAL LETTER R WITH CARON
+0xD9    U+016E  #LATIN CAPITAL LETTER U WITH RING ABOVE
+0xDA    U+00DA  #LATIN CAPITAL LETTER U WITH ACUTE
+0xDB    U+0170  #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0xDC    U+00DC  #LATIN CAPITAL LETTER U WITH DIAERESIS
+0xDD    U+00DD  #LATIN CAPITAL LETTER Y WITH ACUTE
+0xDE    U+0162  #LATIN CAPITAL LETTER T WITH CEDILLA
+0xDF    U+00DF  #LATIN SMALL LETTER SHARP S
+0xE0    U+0155  #LATIN SMALL LETTER R WITH ACUTE
+0xE1    U+00E1  #LATIN SMALL LETTER A WITH ACUTE
+0xE2    U+00E2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xE3    U+0103  #LATIN SMALL LETTER A WITH BREVE
+0xE4    U+00E4  #LATIN SMALL LETTER A WITH DIAERESIS
+0xE5    U+013A  #LATIN SMALL LETTER L WITH ACUTE
+0xE6    U+0107  #LATIN SMALL LETTER C WITH ACUTE
+0xE7    U+00E7  #LATIN SMALL LETTER C WITH CEDILLA
+0xE8    U+010D  #LATIN SMALL LETTER C WITH CARON
+0xE9    U+00E9  #LATIN SMALL LETTER E WITH ACUTE
+0xEA    U+0119  #LATIN SMALL LETTER E WITH OGONEK
+0xEB    U+00EB  #LATIN SMALL LETTER E WITH DIAERESIS
+0xEC    U+011B  #LATIN SMALL LETTER E WITH CARON
+0xED    U+00ED  #LATIN SMALL LETTER I WITH ACUTE
+0xEE    U+00EE  #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xEF    U+010F  #LATIN SMALL LETTER D WITH CARON
+0xF0    U+0111  #LATIN SMALL LETTER D WITH STROKE
+0xF1    U+0144  #LATIN SMALL LETTER N WITH ACUTE
+0xF2    U+0148  #LATIN SMALL LETTER N WITH CARON
+0xF3    U+00F3  #LATIN SMALL LETTER O WITH ACUTE
+0xF4    U+00F4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xF5    U+0151  #LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0xF6    U+00F6  #LATIN SMALL LETTER O WITH DIAERESIS
+0xF7    U+00F7  #DIVISION SIGN
+0xF8    U+0159  #LATIN SMALL LETTER R WITH CARON
+0xF9    U+016F  #LATIN SMALL LETTER U WITH RING ABOVE
+0xFA    U+00FA  #LATIN SMALL LETTER U WITH ACUTE
+0xFB    U+0171  #LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0xFC    U+00FC  #LATIN SMALL LETTER U WITH DIAERESIS
+0xFD    U+00FD  #LATIN SMALL LETTER Y WITH ACUTE
+0xFE    U+0163  #LATIN SMALL LETTER T WITH CEDILLA
+0xFF    U+02D9  #DOT ABOVE
+
+
diff --git a/src/chrtrans/cp1252_uni.tbl b/src/chrtrans/cp1252_uni.tbl
new file mode 100644
index 00000000..e9660295
--- /dev/null
+++ b/src/chrtrans/cp1252_uni.tbl
@@ -0,0 +1,287 @@
+#Shall this become the "default" translation?
+#Meaning of that is currently unclear...  It's different
+#from the default input or defualt output charset...
+#but there has to be exactly one table marked as "default".
+D0
+#
+#The MIME name of this charset. 
+Miso-8859-1-windows-3.1-latin-1
+
+#Name as a Display Charset (used on Options screen)
+O MS Windows CP 1252
+
+#
+#    Name:     cp1252_WinLatin1 to Unicode table
+#    Unicode version: 1.1
+#    Table version: 1.1
+#    Table format:  Format A
+#    Date:          03/31/95
+#    Authors:       Michel Suignard <michelsu@microsoft.com>
+#                   Lori Hoerth <lorih@microsoft.com>
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp1252_WinLatin1 code (in hex)
+#        Column #2 is the Unicode (in hex as U+XXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp1252_WinLatin1 order
+#
+0x00    U+0000  #Null
+0x01    U+0001  #START OF HEADING
+0x02    U+0002  #START OF TEXT
+0x03    U+0003  #END OF TEXT
+0x04    U+0004  #END OF TRANSMISSION
+0x05    U+0005  #ENQUIRY
+0x06    U+0006  #ACKNOWLEDGE
+0x07    U+0007  #BELL
+0x08    U+0008  #BACKSPACE
+0x09    U+0009  #HORIZONTAL TABULATION
+0x0a    U+000a  #LINE FEED
+0x0b    U+000b  #VERTICAL TABULATION
+0x0c    U+000c  #FORM FEED
+0x0d    U+000d  #CARRIAGE RETURN
+0x0e    U+000e  #SHIFT OUT
+0x0f    U+000f  #SHIFT IN
+0x10    U+0010  #DATA LINK ESCAPE
+0x11    U+0011  #DEVICE CONTROL ONE
+0x12    U+0012  #DEVICE CONTROL TWO
+0x13    U+0013  #DEVICE CONTROL THREE
+0x14    U+0014  #DEVICE CONTROL FOUR
+0x15    U+0015  #NEGATIVE ACKNOWLEDGE
+0x16    U+0016  #SYNCHRONOUS IDLE
+0x17    U+0017  #END OF TRANSMISSION BLOCK
+0x18    U+0018  #CANCEL
+0x19    U+0019  #END OF MEDIUM
+0x1a    U+001a  #SUBSTITUTE
+0x1b    U+001b  #ESCAPE
+0x1c    U+001c  #FILE SEPARATOR
+0x1d    U+001d  #GROUP SEPARATOR
+0x1e    U+001e  #RECORD SEPARATOR
+0x1f    U+001f  #UNIT SEPARATOR
+0x20    U+0020  #SPACE
+0x21    U+0021  #EXCLAMATION MARK
+0x22    U+0022  #QUOTATION MARK
+0x23    U+0023  #NUMBER SIGN
+0x24    U+0024  #DOLLAR SIGN
+0x25    U+0025  #PERCENT SIGN
+0x26    U+0026  #AMPERSAND
+0x27    U+0027  #APOSTROPHE
+0x28    U+0028  #LEFT PARENTHESIS
+0x29    U+0029  #RIGHT PARENTHESIS
+0x2a    U+002a  #ASTERISK
+0x2b    U+002b  #PLUS SIGN
+0x2c    U+002c  #COMMA
+0x2d    U+002d  #HYPHEN-MINUS
+0x2e    U+002e  #FULL STOP
+0x2f    U+002f  #SOLIDUS
+0x30    U+0030  #DIGIT ZERO
+0x31    U+0031  #DIGIT ONE
+0x32    U+0032  #DIGIT TWO
+0x33    U+0033  #DIGIT THREE
+0x34    U+0034  #DIGIT FOUR
+0x35    U+0035  #DIGIT FIVE
+0x36    U+0036  #DIGIT SIX
+0x37    U+0037  #DIGIT SEVEN
+0x38    U+0038  #DIGIT EIGHT
+0x39    U+0039  #DIGIT NINE
+0x3a    U+003a  #COLON
+0x3b    U+003b  #SEMICOLON
+0x3c    U+003c  #LESS-THAN SIGN
+0x3d    U+003d  #EQUALS SIGN
+0x3e    U+003e  #GREATER-THAN SIGN
+0x3f    U+003f  #QUESTION MARK
+0x40    U+0040  #COMMERCIAL AT
+0x41    U+0041  #LATIN CAPITAL LETTER A
+0x42    U+0042  #LATIN CAPITAL LETTER B
+0x43    U+0043  #LATIN CAPITAL LETTER C
+0x44    U+0044  #LATIN CAPITAL LETTER D
+0x45    U+0045  #LATIN CAPITAL LETTER E
+0x46    U+0046  #LATIN CAPITAL LETTER F
+0x47    U+0047  #LATIN CAPITAL LETTER G
+0x48    U+0048  #LATIN CAPITAL LETTER H
+0x49    U+0049  #LATIN CAPITAL LETTER I
+0x4a    U+004a  #LATIN CAPITAL LETTER J
+0x4b    U+004b  #LATIN CAPITAL LETTER K
+0x4c    U+004c  #LATIN CAPITAL LETTER L
+0x4d    U+004d  #LATIN CAPITAL LETTER M
+0x4e    U+004e  #LATIN CAPITAL LETTER N
+0x4f    U+004f  #LATIN CAPITAL LETTER O
+0x50    U+0050  #LATIN CAPITAL LETTER P
+0x51    U+0051  #LATIN CAPITAL LETTER Q
+0x52    U+0052  #LATIN CAPITAL LETTER R
+0x53    U+0053  #LATIN CAPITAL LETTER S
+0x54    U+0054  #LATIN CAPITAL LETTER T
+0x55    U+0055  #LATIN CAPITAL LETTER U
+0x56    U+0056  #LATIN CAPITAL LETTER V
+0x57    U+0057  #LATIN CAPITAL LETTER W
+0x58    U+0058  #LATIN CAPITAL LETTER X
+0x59    U+0059  #LATIN CAPITAL LETTER Y
+0x5a    U+005a  #LATIN CAPITAL LETTER Z
+0x5b    U+005b  #LEFT SQUARE BRACKET
+0x5c    U+005c  #REVERSE SOLIDUS
+0x5d    U+005d  #RIGHT SQUARE BRACKET
+0x5e    U+005e  #CIRCUMFLEX ACCENT
+0x5f    U+005f  #LOW LINE
+0x60    U+0060  #GRAVE ACCENT
+0x61    U+0061  #LATIN SMALL LETTER A
+0x62    U+0062  #LATIN SMALL LETTER B
+0x63    U+0063  #LATIN SMALL LETTER C
+0x64    U+0064  #LATIN SMALL LETTER D
+0x65    U+0065  #LATIN SMALL LETTER E
+0x66    U+0066  #LATIN SMALL LETTER F
+0x67    U+0067  #LATIN SMALL LETTER G
+0x68    U+0068  #LATIN SMALL LETTER H
+0x69    U+0069  #LATIN SMALL LETTER I
+0x6a    U+006a  #LATIN SMALL LETTER J
+0x6b    U+006b  #LATIN SMALL LETTER K
+0x6c    U+006c  #LATIN SMALL LETTER L
+0x6d    U+006d  #LATIN SMALL LETTER M
+0x6e    U+006e  #LATIN SMALL LETTER N
+0x6f    U+006f  #LATIN SMALL LETTER O
+0x70    U+0070  #LATIN SMALL LETTER P
+0x71    U+0071  #LATIN SMALL LETTER Q
+0x72    U+0072  #LATIN SMALL LETTER R
+0x73    U+0073  #LATIN SMALL LETTER S
+0x74    U+0074  #LATIN SMALL LETTER T
+0x75    U+0075  #LATIN SMALL LETTER U
+0x76    U+0076  #LATIN SMALL LETTER V
+0x77    U+0077  #LATIN SMALL LETTER W
+0x78    U+0078  #LATIN SMALL LETTER X
+0x79    U+0079  #LATIN SMALL LETTER Y
+0x7a    U+007a  #LATIN SMALL LETTER Z
+0x7b    U+007b  #LEFT CURLY BRACKET
+0x7c    U+007c  #VERTICAL LINE
+0x7d    U+007d  #RIGHT CURLY BRACKET
+0x7e    U+007e  #TILDE
+0x7f    U+007f  #DELETE
+# 0x80    U+0080  #NOT USED
+# 0x81    U+0081  #NOT USED
+0x82    U+201a  #SINGLE LOW-9 QUOTATION MARK
+0x83    U+0192  #LATIN SMALL LETTER F WITH HOOK
+0x84    U+201e  #DOUBLE LOW-9 QUOTATION MARK
+0x85    U+2026  #HORIZONTAL ELLIPSIS
+0x86    U+2020  #DAGGER
+0x87    U+2021  #DOUBLE DAGGER
+0x88    U+02c6  #MODIFIER LETTER CIRCUMFLEX ACCENT
+0x89    U+2030  #PER MILLE SIGN
+0x8a    U+0160  #LATIN CAPITAL LETTER S WITH CARON
+0x8b    U+2039  #SINGLE LEFT-POINTING ANGLE QUOTATION MARK
+0x8c    U+0152  #LATIN CAPITAL LIGATURE OE
+0x8d    U+008d  #NOT USED
+0x8e    U+008e  #NOT USED
+0x8f    U+008f  #NOT USED
+0x90    U+0090  #NOT USED
+0x91    U+2018  #LEFT SINGLE QUOTATION MARK
+0x92    U+2019  #RIGHT SINGLE QUOTATION MARK
+0x93    U+201c  #LEFT DOUBLE QUOTATION MARK
+0x94    U+201d  #RIGHT DOUBLE QUOTATION MARK
+0x95    U+2022  #BULLET
+0x96    U+2013  #EN DASH
+0x97    U+2014  #EM DASH
+0x98    U+02dc  #SMALL TILDE
+0x99    U+2122  #TRADE MARK SIGN
+0x9a    U+0161  #LATIN SMALL LETTER S WITH CARON
+0x9b    U+203a  #SINGLE RIGHT-POINTING ANGLE QUOTATION MARK
+0x9c    U+0153  #LATIN SMALL LIGATURE OE
+0x9d    U+009d  #NOT USED
+0x9e    U+009e  #NOT USED
+0x9f    U+0178  #LATIN CAPITAL LETTER Y WITH DIAERESIS
+0xa0    U+00a0  #NO-BREAK SPACE
+0xa1    U+00a1  #INVERTED EXCLAMATION MARK
+0xa2    U+00a2  #CENT SIGN
+0xa3    U+00a3  #POUND SIGN
+0xa4    U+00a4  #CURRENCY SIGN
+0xa5    U+00a5  #YEN SIGN
+0xa6    U+00a6  #BROKEN BAR
+0xa7    U+00a7  #SECTION SIGN
+0xa8    U+00a8  #DIAERESIS
+0xa9    U+00a9  #COPYRIGHT SIGN
+0xaa    U+00aa  #FEMININE ORDINAL INDICATOR
+0xab    U+00ab  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xac    U+00ac  #NOT SIGN
+0xad    U+00ad  #SOFT HYPHEN
+0xae    U+00ae  #REGISTERED SIGN
+0xaf    U+00af  #MACRON
+0xb0    U+00b0  #DEGREE SIGN
+0xb1    U+00b1  #PLUS-MINUS SIGN
+0xb2    U+00b2  #SUPERSCRIPT TWO
+0xb3    U+00b3  #SUPERSCRIPT THREE
+0xb4    U+00b4  #ACUTE ACCENT
+0xb5    U+00b5  #MICRO SIGN
+0xb6    U+00b6  #PILCROW SIGN
+0xb7    U+00b7  #MIDDLE DOT
+0xb8    U+00b8  #CEDILLA
+0xb9    U+00b9  #SUPERSCRIPT ONE
+0xba    U+00ba  #MASCULINE ORDINAL INDICATOR
+0xbb    U+00bb  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xbc    U+00bc  #VULGAR FRACTION ONE QUARTER
+0xbd    U+00bd  #VULGAR FRACTION ONE HALF
+0xbe    U+00be  #VULGAR FRACTION THREE QUARTERS
+0xbf    U+00bf  #INVERTED QUESTION MARK
+0xc0    U+00c0  #LATIN CAPITAL LETTER A WITH GRAVE
+0xc1    U+00c1  #LATIN CAPITAL LETTER A WITH ACUTE
+0xc2    U+00c2  #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xc3    U+00c3  #LATIN CAPITAL LETTER A WITH TILDE
+0xc4    U+00c4  #LATIN CAPITAL LETTER A WITH DIAERESIS
+0xc5    U+00c5  #LATIN CAPITAL LETTER A WITH RING ABOVE
+0xc6    U+00c6  #LATIN CAPITAL LIGATURE AE
+0xc7    U+00c7  #LATIN CAPITAL LETTER C WITH CEDILLA
+0xc8    U+00c8  #LATIN CAPITAL LETTER E WITH GRAVE
+0xc9    U+00c9  #LATIN CAPITAL LETTER E WITH ACUTE
+0xca    U+00ca  #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xcb    U+00cb  #LATIN CAPITAL LETTER E WITH DIAERESIS
+0xcc    U+00cc  #LATIN CAPITAL LETTER I WITH GRAVE
+0xcd    U+00cd  #LATIN CAPITAL LETTER I WITH ACUTE
+0xce    U+00ce  #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xcf    U+00cf  #LATIN CAPITAL LETTER I WITH DIAERESIS
+0xd0    U+00d0  #LATIN CAPITAL LETTER ETH
+0xd1    U+00d1  #LATIN CAPITAL LETTER N WITH TILDE
+0xd2    U+00d2  #LATIN CAPITAL LETTER O WITH GRAVE
+0xd3    U+00d3  #LATIN CAPITAL LETTER O WITH ACUTE
+0xd4    U+00d4  #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xd5    U+00d5  #LATIN CAPITAL LETTER O WITH TILDE
+0xd6    U+00d6  #LATIN CAPITAL LETTER O WITH DIAERESIS
+0xd7    U+00d7  #MULTIPLICATION SIGN
+0xd8    U+00d8  #LATIN CAPITAL LETTER O WITH STROKE
+0xd9    U+00d9  #LATIN CAPITAL LETTER U WITH GRAVE
+0xda    U+00da  #LATIN CAPITAL LETTER U WITH ACUTE
+0xdb    U+00db  #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xdc    U+00dc  #LATIN CAPITAL LETTER U WITH DIAERESIS
+0xdd    U+00dd  #LATIN CAPITAL LETTER Y WITH ACUTE
+0xde    U+00de  #LATIN CAPITAL LETTER THORN
+0xdf    U+00df  #LATIN SMALL LETTER SHARP S
+0xe0    U+00e0  #LATIN SMALL LETTER A WITH GRAVE
+0xe1    U+00e1  #LATIN SMALL LETTER A WITH ACUTE
+0xe2    U+00e2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0xe3    U+00e3  #LATIN SMALL LETTER A WITH TILDE
+0xe4    U+00e4  #LATIN SMALL LETTER A WITH DIAERESIS
+0xe5    U+00e5  #LATIN SMALL LETTER A WITH RING ABOVE
+0xe6    U+00e6  #LATIN SMALL LIGATURE AE
+0xe7    U+00e7  #LATIN SMALL LETTER C WITH CEDILLA
+0xe8    U+00e8  #LATIN SMALL LETTER E WITH GRAVE
+0xe9    U+00e9  #LATIN SMALL LETTER E WITH ACUTE
+0xea    U+00ea  #LATIN SMALL LETTER E WITH CIRCUMFLEX
+0xeb    U+00eb  #LATIN SMALL LETTER E WITH DIAERESIS
+0xec    U+00ec  #LATIN SMALL LETTER I WITH GRAVE
+0xed    U+00ed  #LATIN SMALL LETTER I WITH ACUTE
+0xee    U+00ee  #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0xef    U+00ef  #LATIN SMALL LETTER I WITH DIAERESIS
+0xf0    U+00f0  #LATIN SMALL LETTER ETH
+0xf1    U+00f1  #LATIN SMALL LETTER N WITH TILDE
+0xf2    U+00f2  #LATIN SMALL LETTER O WITH GRAVE
+0xf3    U+00f3  #LATIN SMALL LETTER O WITH ACUTE
+0xf4    U+00f4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0xf5    U+00f5  #LATIN SMALL LETTER O WITH TILDE
+0xf6    U+00f6  #LATIN SMALL LETTER O WITH DIAERESIS
+0xf7    U+00f7  #DIVISION SIGN
+0xf8    U+00f8  #LATIN SMALL LETTER O WITH STROKE
+0xf9    U+00f9  #LATIN SMALL LETTER U WITH GRAVE
+0xfa    U+00fa  #LATIN SMALL LETTER U WITH ACUTE
+0xfb    U+00fb  #LATIN SMALL LETTER U WITH CIRCUMFLEX
+0xfc    U+00fc  #LATIN SMALL LETTER U WITH DIAERESIS
+0xfd    U+00fd  #LATIN SMALL LETTER Y WITH ACUTE
+0xfe    U+00fe  #LATIN SMALL LETTER THORN
+0xff    U+00ff  #LATIN SMALL LETTER Y WITH DIAERESIS
+
+
diff --git a/src/chrtrans/cp437_uni.tbl b/src/chrtrans/cp437_uni.tbl
new file mode 100644
index 00000000..ed97a69c
--- /dev/null
+++ b/src/chrtrans/cp437_uni.tbl
@@ -0,0 +1,303 @@
+#Shall this become the "default" translation?
+#Meaning of that is currently unclear...  It's different
+#from the default input or defualt output charset...
+#but there has to be exactly one table marked as "default".
+D0
+#
+#The MIME name of this charset. 
+Mcp437
+
+#Name as a Display Charset (used on Options screen)
+OIBM PC character set
+#
+#    Name:     cp437_DOSLatinUS to Unicode table
+#    Unicode version: 1.1
+#    Table version: 1.1
+#    Table format:  Format A
+#    Date:          03/31/95
+#    Authors:       Michel Suignard <michelsu@microsoft.com>
+#                   Lori Hoerth <lorih@microsoft.com>
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp1255_WinHebrew code (in hex)
+#        Column #2 is the Unicode (in hex as U+XXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp437_DOSLatinUS order
+#
+# some mapppings of greek letters to latin letters added,
+#  just for fun.. -kw
+#
+0x00	U+0000	#NULL
+0x01	U+0001	#START OF HEADING
+0x02	U+0002	#START OF TEXT
+0x03	U+0003	#END OF TEXT
+0x04	U+0004	#END OF TRANSMISSION
+0x05	U+0005	#ENQUIRY
+0x06	U+0006	#ACKNOWLEDGE
+0x07	U+0007	#BELL
+0x08	U+0008	#BACKSPACE
+0x09	U+0009	#HORIZONTAL TABULATION
+0x0a	U+000a	#LINE FEED
+0x0b	U+000b	#VERTICAL TABULATION
+0x0c	U+000c	#FORM FEED
+0x0d	U+000d	#CARRIAGE RETURN
+0x0e	U+000e	#SHIFT OUT
+0x0f	U+000f	#SHIFT IN
+0x10	U+0010	#DATA LINK ESCAPE
+0x11	U+0011	#DEVICE CONTROL ONE
+0x12	U+0012	#DEVICE CONTROL TWO
+0x13	U+0013	#DEVICE CONTROL THREE
+0x14	U+0014	U+03a0	#DEVICE CONTROL FOUR
+0x15	U+0015	#NEGATIVE ACKNOWLEDGE
+0x16	U+0016	#SYNCHRONOUS IDLE
+0x17	U+0017	#END OF TRANSMISSION BLOCK
+0x18	U+0018	#CANCEL
+0x19	U+0019	#END OF MEDIUM
+0x1a	U+001a	#SUBSTITUTE
+0x1b	U+001b	#ESCAPE
+0x1c	U+001c	#FILE SEPARATOR
+0x1d	U+001d	#GROUP SEPARATOR
+0x1e	U+001e	#RECORD SEPARATOR
+0x1f	U+001f	#UNIT SEPARATOR
+0x20	U+0020	#SPACE
+0x21	U+0021	#EXCLAMATION MARK
+0x22	U+0022	#QUOTATION MARK
+0x23	U+0023	#NUMBER SIGN
+0x24	U+0024	#DOLLAR SIGN
+0x25	U+0025	#PERCENT SIGN
+0x26	U+0026	#AMPERSAND
+0x27	U+0027	#APOSTROPHE
+0x28	U+0028	#LEFT PARENTHESIS
+0x29	U+0029	#RIGHT PARENTHESIS
+0x2a	U+002a	#ASTERISK
+0x2b	U+002b	#PLUS SIGN
+0x2c	U+002c	#COMMA
+0x2d	U+002d	#HYPHEN-MINUS
+0x2e	U+002e	#FULL STOP
+0x2f	U+002f	#SOLIDUS
+0x30	U+0030	#DIGIT ZERO
+0x31	U+0031	#DIGIT ONE
+0x32	U+0032	#DIGIT TWO
+0x33	U+0033	#DIGIT THREE
+0x34	U+0034	#DIGIT FOUR
+0x35	U+0035	#DIGIT FIVE
+0x36	U+0036	#DIGIT SIX
+0x37	U+0037	#DIGIT SEVEN
+0x38	U+0038	#DIGIT EIGHT
+0x39	U+0039	#DIGIT NINE
+0x3a	U+003a	#COLON
+0x3b	U+003b	#SEMICOLON
+0x3c	U+003c	#LESS-THAN SIGN
+0x3d	U+003d	#EQUALS SIGN
+0x3e	U+003e	#GREATER-THAN SIGN
+0x3f	U+003f	#QUESTION MARK
+0x40	U+0040	#COMMERCIAL AT
+0x41	U+0041	U+0391	#LATIN CAPITAL LETTER A
+0x42	U+0042	U+0392	#LATIN CAPITAL LETTER B
+0x43	U+0043	#LATIN CAPITAL LETTER C
+0x44	U+0044	#LATIN CAPITAL LETTER D
+0x45	U+0045	U+0395	#LATIN CAPITAL LETTER E
+0x46	U+0046	#LATIN CAPITAL LETTER F
+0x47	U+0047	#LATIN CAPITAL LETTER G
+0x48	U+0048	U+0397	#LATIN CAPITAL LETTER H
+0x49	U+0049	U+0399	#LATIN CAPITAL LETTER I
+0x4a	U+004a	#LATIN CAPITAL LETTER J
+0x4b	U+004b	U+039a	#LATIN CAPITAL LETTER K
+0x4c	U+004c	#LATIN CAPITAL LETTER L
+0x4d	U+004d	U+039c	#LATIN CAPITAL LETTER M
+0x4e	U+004e	U+039d	#LATIN CAPITAL LETTER N
+0x4f	U+004f	U+039f	#LATIN CAPITAL LETTER O
+0x50	U+0050	U+03a1	#LATIN CAPITAL LETTER P
+0x51	U+0051	#LATIN CAPITAL LETTER Q
+0x52	U+0052	#LATIN CAPITAL LETTER R
+0x53	U+0053	#LATIN CAPITAL LETTER S
+0x54	U+0054	U+03a4	#LATIN CAPITAL LETTER T
+0x55	U+0055	#LATIN CAPITAL LETTER U
+0x56	U+0056	#LATIN CAPITAL LETTER V
+0x57	U+0057	#LATIN CAPITAL LETTER W
+0x58	U+0058	U+03a7	#LATIN CAPITAL LETTER X
+0x59	U+0059	U+03a5	#LATIN CAPITAL LETTER Y
+0x5a	U+005a	U+0396	#LATIN CAPITAL LETTER Z
+0x5b	U+005b	#LEFT SQUARE BRACKET
+0x5c	U+005c	#REVERSE SOLIDUS
+0x5d	U+005d	#RIGHT SQUARE BRACKET
+0x5e	U+005e	#CIRCUMFLEX ACCENT
+0x5f	U+005f	#LOW LINE
+0x60	U+0060	#GRAVE ACCENT
+0x61	U+0061	#LATIN SMALL LETTER A
+0x62	U+0062	#LATIN SMALL LETTER B
+0x63	U+0063	#LATIN SMALL LETTER C
+0x64	U+0064	#LATIN SMALL LETTER D
+0x65	U+0065	#LATIN SMALL LETTER E
+0x66	U+0066	#LATIN SMALL LETTER F
+0x67	U+0067	U+03b3	#LATIN SMALL LETTER G
+0x68	U+0068	U+03b7	#LATIN SMALL LETTER H
+0x69	U+0069	U+03b9	#LATIN SMALL LETTER I
+0x6a	U+006a	#LATIN SMALL LETTER J
+0x6b	U+006b	U+03ba	#LATIN SMALL LETTER K
+0x6c	U+006c	U+03bb	#LATIN SMALL LETTER L
+0x6d	U+006d	#LATIN SMALL LETTER M
+0x6e	U+006e	#LATIN SMALL LETTER N
+0x6f	U+006f	U+03bf	#LATIN SMALL LETTER O
+0x70	U+0070	U+03c1	#LATIN SMALL LETTER P
+0x71	U+0071	#LATIN SMALL LETTER Q
+0x72	U+0072	#LATIN SMALL LETTER R
+0x73	U+0073	U+03c2	#LATIN SMALL LETTER S
+0x74	U+0074	#LATIN SMALL LETTER T
+0x75	U+0075	U+03c5	#LATIN SMALL LETTER U
+0x76	U+0076	U+03bd	#LATIN SMALL LETTER V
+0x77	U+0077	U+03c9	#LATIN SMALL LETTER W
+0x78	U+0078	U+03c7	#LATIN SMALL LETTER X
+0x79	U+0079	#LATIN SMALL LETTER Y
+0x7a	U+007a	U+03b6	#LATIN SMALL LETTER Z
+0x7b	U+007b	#LEFT CURLY BRACKET
+0x7c	U+007c	#VERTICAL LINE
+0x7d	U+007d	#RIGHT CURLY BRACKET
+0x7e	U+007e	#TILDE
+0x7f	U+007f	#DELETE
+0x80	U+00c7	#LATIN CAPITAL LETTER C WITH CEDILLA
+0x81	U+00fc	U+03cb	#LATIN SMALL LETTER U WITH DIAERESIS
+0x82	U+00e9	#LATIN SMALL LETTER E WITH ACUTE
+0x83	U+00e2	#LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x84	U+00e4	#LATIN SMALL LETTER A WITH DIAERESIS
+0x85	U+00e0	#LATIN SMALL LETTER A WITH GRAVE
+0x86	U+00e5	#LATIN SMALL LETTER A WITH RING ABOVE
+0x87	U+00e7	#LATIN SMALL LETTER C WITH CEDILLA
+0x88	U+00ea	#LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x89	U+00eb	#LATIN SMALL LETTER E WITH DIAERESIS
+0x8a	U+00e8	#LATIN SMALL LETTER E WITH GRAVE
+0x8b	U+00ef	U+03ca	#LATIN SMALL LETTER I WITH DIAERESIS
+0x8c	U+00ee	#LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x8d	U+00ec	#LATIN SMALL LETTER I WITH GRAVE
+0x8e	U+00c4	#LATIN CAPITAL LETTER A WITH DIAERESIS
+0x8f	U+00c5	#LATIN CAPITAL LETTER A WITH RING ABOVE
+0x90	U+00c9	#LATIN CAPITAL LETTER E WITH ACUTE
+0x91	U+00e6	#LATIN SMALL LIGATURE AE
+0x92	U+00c6	#LATIN CAPITAL LIGATURE AE
+0x93	U+00f4	#LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x94	U+00f6	#LATIN SMALL LETTER O WITH DIAERESIS
+0x95	U+00f2	#LATIN SMALL LETTER O WITH GRAVE
+0x96	U+00fb	#LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x97	U+00f9	#LATIN SMALL LETTER U WITH GRAVE
+0x98	U+00ff	#LATIN SMALL LETTER Y WITH DIAERESIS
+0x99	U+00d6	#LATIN CAPITAL LETTER O WITH DIAERESIS
+0x9a	U+00dc	#LATIN CAPITAL LETTER U WITH DIAERESIS
+0x9b	U+00a2	#CENT SIGN
+0x9c	U+00a3	#POUND SIGN
+0x9d	U+00a5	#YEN SIGN
+0x9e	U+20a7	#PESETA SIGN
+0x9f	U+0192	#LATIN SMALL LETTER F WITH HOOK
+0xa0	U+00e1	U+03ac	#LATIN SMALL LETTER A WITH ACUTE
+0xa1	U+00ed	U+03af	#LATIN SMALL LETTER I WITH ACUTE
+0xa2	U+00f3	U+03cc	#LATIN SMALL LETTER O WITH ACUTE
+0xa3	U+00fa	U+03cd	#LATIN SMALL LETTER U WITH ACUTE
+0xa4	U+00f1	#LATIN SMALL LETTER N WITH TILDE
+0xa5	U+00d1	#LATIN CAPITAL LETTER N WITH TILDE
+0xa6	U+00aa	#FEMININE ORDINAL INDICATOR
+0xa7	U+00ba	#MASCULINE ORDINAL INDICATOR
+0xa8	U+00bf	#INVERTED QUESTION MARK
+0xa9	U+2310	#REVERSED NOT SIGN
+0xaa	U+00ac	#NOT SIGN
+0xab	U+00bd	#VULGAR FRACTION ONE HALF
+0xac	U+00bc	#VULGAR FRACTION ONE QUARTER
+0xad	U+00a1	#INVERTED EXCLAMATION MARK
+0xae	U+00ab	#LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xaf	U+00bb	#RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xb0	U+2591	#LIGHT SHADE
+0xb1	U+2592	#MEDIUM SHADE
+0xb2	U+2593	#DARK SHADE
+0xb3	U+2502	#BOX DRAWINGS LIGHT VERTICAL
+0xb4	U+2524	#BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xb5	U+2561	#BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xb6	U+2562	#BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+0xb7	U+2556	#BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+0xb8	U+2555	#BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+0xb9	U+2563	#BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xba	U+2551	#BOX DRAWINGS DOUBLE VERTICAL
+0xbb	U+2557	#BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xbc	U+255d	#BOX DRAWINGS DOUBLE UP AND LEFT
+0xbd	U+255c	#BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+0xbe	U+255b	#BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+0xbf	U+2510	#BOX DRAWINGS LIGHT DOWN AND LEFT
+0xc0	U+2514	#BOX DRAWINGS LIGHT UP AND RIGHT
+0xc1	U+2534	#BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xc2	U+252c	#BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xc3	U+251c	#BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xc4	U+2500	#BOX DRAWINGS LIGHT HORIZONTAL
+0xc5	U+253c	#BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xc6	U+255e	#BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xc7	U+255f	#BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+0xc8	U+255a	#BOX DRAWINGS DOUBLE UP AND RIGHT
+0xc9	U+2554	#BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xca	U+2569	#BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xcb	U+2566	#BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xcc	U+2560	#BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xcd	U+2550	#BOX DRAWINGS DOUBLE HORIZONTAL
+0xce	U+256c	#BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xcf	U+2567	#BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+0xd0	U+2568	#BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+0xd1	U+2564	#BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+0xd2	U+2565	#BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+0xd3	U+2559	#BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+0xd4	U+2558	#BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+0xd5	U+2552	#BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+0xd6	U+2553	#BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+0xd7	U+256b	#BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+0xd8	U+256a	#BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xd9	U+2518	#BOX DRAWINGS LIGHT UP AND LEFT
+0xda	U+250c	#BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xdb	U+2588	#FULL BLOCK
+0xdc	U+2584	#LOWER HALF BLOCK
+0xdd	U+258c	#LEFT HALF BLOCK
+0xde	U+2590	#RIGHT HALF BLOCK
+0xdf	U+2580	#UPPER HALF BLOCK
+0xe0	U+03b1	#GREEK SMALL LETTER ALPHA
+0xe1	U+00df	U+03b2	#LATIN SMALL LETTER SHARP S
+0xe2	U+0393	#GREEK CAPITAL LETTER GAMMA
+0xe3	U+03c0	#GREEK SMALL LETTER PI
+0xe4	U+03a3	#GREEK CAPITAL LETTER SIGMA
+0xe5	U+03c3	#GREEK SMALL LETTER SIGMA
+0xe6	U+00b5	U+03bc	#MICRO SIGN
+0xe7	U+03c4	#GREEK SMALL LETTER TAU
+0xe8	U+03a6	#GREEK CAPITAL LETTER PHI
+0xe9	U+0398	U+03b8	#GREEK CAPITAL LETTER THETA
+0xea	U+03a9	#GREEK CAPITAL LETTER OMEGA
+0xeb	U+03b4	#GREEK SMALL LETTER DELTA
+0xec	U+221e	#INFINITY
+0xed	U+03c6	#GREEK SMALL LETTER PHI
+0xee	U+03b5	#GREEK SMALL LETTER EPSILON
+0xef	U+2229	#INTERSECTION
+0xf0	U+2261	#IDENTICAL TO
+0xf1	U+00b1	#PLUS-MINUS SIGN
+0xf2	U+2265	#GREATER-THAN OR EQUAL TO
+0xf3	U+2264	#LESS-THAN OR EQUAL TO
+0xf4	U+2320	#TOP HALF INTEGRAL
+0xf5	U+2321	#BOTTOM HALF INTEGRAL
+0xf6	U+00f7	#DIVISION SIGN
+0xf7	U+2248	#ALMOST EQUAL TO
+0xf8	U+00b0	#DEGREE SIGN
+0xf9	U+2219	#BULLET OPERATOR
+0xfa	U+00b7	#MIDDLE DOT
+0xfb	U+221a	#SQUARE ROOT
+0xfc	U+207f	#SUPERSCRIPT LATIN SMALL LETTER N
+0xfd	U+00b2	#SUPERSCRIPT TWO
+0xfe	U+25a0	#BLACK SQUARE
+0xff	U+00a0	#NO-BREAK SPACE
+
+U+03ac:a'
+U+03ad:î'
+U+03ae:h'
+U+03af:i'
+U+03cc:o'
+U+03cd:u'
+U+03ce:w'
+
+
+# TRADE MARK SIGN:
+U+2122:(TM)
+
+0x60    U+2018          # left single quotation mark
+0x27    U+2019-U+201b   # various single quotation marks
+0x22    U+201c-U+201f   # various double quotation marks
diff --git a/src/chrtrans/cp850_uni.tbl b/src/chrtrans/cp850_uni.tbl
new file mode 100644
index 00000000..96de277b
--- /dev/null
+++ b/src/chrtrans/cp850_uni.tbl
@@ -0,0 +1,292 @@
+#Shall this become the "default" translation?
+#Meaning of that is currently unclear...  It's different
+#from the default input or defualt output charset...
+#but there has to be exactly one table marked as "default".
+D0
+#
+#The MIME name of this charset. 
+Mcp850
+
+#Name as a Display Charset (used on Options screen)
+OIBM PC codepage 850 
+#
+#    Name:     cp850_DOSLatin1 to Unicode table
+#    Unicode version: 1.1
+#    Table version: 1.1
+#    Table format:  Format A
+#    Date:          03/31/95
+#    Authors:       Michel Suignard <michelsu@microsoft.com>
+#                   Lori Hoerth <lorih@microsoft.com>
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp1255_WinHebrew code (in hex)
+#        Column #2 is the Unicode (in hex as U+XXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp850_DOSLatin1 order
+#
+0x00	U+0000	#NULL
+0x01	U+0001	#START OF HEADING
+0x02	U+0002	#START OF TEXT
+0x03	U+0003	#END OF TEXT
+0x04	U+0004	#END OF TRANSMISSION
+0x05	U+0005	#ENQUIRY
+0x06	U+0006	#ACKNOWLEDGE
+0x07	U+0007	#BELL
+0x08	U+0008	#BACKSPACE
+0x09	U+0009	#HORIZONTAL TABULATION
+0x0a	U+000a	#LINE FEED
+0x0b	U+000b	#VERTICAL TABULATION
+0x0c	U+000c	#FORM FEED
+0x0d	U+000d	#CARRIAGE RETURN
+0x0e	U+000e	#SHIFT OUT
+0x0f	U+000f	#SHIFT IN
+0x10	U+0010	#DATA LINK ESCAPE
+0x11	U+0011	#DEVICE CONTROL ONE
+0x12	U+0012	#DEVICE CONTROL TWO
+0x13	U+0013	#DEVICE CONTROL THREE
+0x14	U+0014	#DEVICE CONTROL FOUR
+0x15	U+0015	#NEGATIVE ACKNOWLEDGE
+0x16	U+0016	#SYNCHRONOUS IDLE
+0x17	U+0017	#END OF TRANSMISSION BLOCK
+0x18	U+0018	#CANCEL
+0x19	U+0019	#END OF MEDIUM
+0x1a	U+001a	#SUBSTITUTE
+0x1b	U+001b	#ESCAPE
+0x1c	U+001c	#FILE SEPARATOR
+0x1d	U+001d	#GROUP SEPARATOR
+0x1e	U+001e	#RECORD SEPARATOR
+0x1f	U+001f	#UNIT SEPARATOR
+0x20	U+0020	#SPACE
+0x21	U+0021	#EXCLAMATION MARK
+0x22	U+0022	#QUOTATION MARK
+0x23	U+0023	#NUMBER SIGN
+0x24	U+0024	#DOLLAR SIGN
+0x25	U+0025	#PERCENT SIGN
+0x26	U+0026	#AMPERSAND
+0x27	U+0027	#APOSTROPHE
+0x28	U+0028	#LEFT PARENTHESIS
+0x29	U+0029	#RIGHT PARENTHESIS
+0x2a	U+002a	#ASTERISK
+0x2b	U+002b	#PLUS SIGN
+0x2c	U+002c	#COMMA
+0x2d	U+002d	#HYPHEN-MINUS
+0x2e	U+002e	#FULL STOP
+0x2f	U+002f	#SOLIDUS
+0x30	U+0030	#DIGIT ZERO
+0x31	U+0031	#DIGIT ONE
+0x32	U+0032	#DIGIT TWO
+0x33	U+0033	#DIGIT THREE
+0x34	U+0034	#DIGIT FOUR
+0x35	U+0035	#DIGIT FIVE
+0x36	U+0036	#DIGIT SIX
+0x37	U+0037	#DIGIT SEVEN
+0x38	U+0038	#DIGIT EIGHT
+0x39	U+0039	#DIGIT NINE
+0x3a	U+003a	#COLON
+0x3b	U+003b	#SEMICOLON
+0x3c	U+003c	#LESS-THAN SIGN
+0x3d	U+003d	#EQUALS SIGN
+0x3e	U+003e	#GREATER-THAN SIGN
+0x3f	U+003f	#QUESTION MARK
+0x40	U+0040	#COMMERCIAL AT
+0x41	U+0041	#LATIN CAPITAL LETTER A
+0x42	U+0042	#LATIN CAPITAL LETTER B
+0x43	U+0043	#LATIN CAPITAL LETTER C
+0x44	U+0044	#LATIN CAPITAL LETTER D
+0x45	U+0045	#LATIN CAPITAL LETTER E
+0x46	U+0046	#LATIN CAPITAL LETTER F
+0x47	U+0047	#LATIN CAPITAL LETTER G
+0x48	U+0048	#LATIN CAPITAL LETTER H
+0x49	U+0049	#LATIN CAPITAL LETTER I
+0x4a	U+004a	#LATIN CAPITAL LETTER J
+0x4b	U+004b	#LATIN CAPITAL LETTER K
+0x4c	U+004c	#LATIN CAPITAL LETTER L
+0x4d	U+004d	#LATIN CAPITAL LETTER M
+0x4e	U+004e	#LATIN CAPITAL LETTER N
+0x4f	U+004f	#LATIN CAPITAL LETTER O
+0x50	U+0050	#LATIN CAPITAL LETTER P
+0x51	U+0051	#LATIN CAPITAL LETTER Q
+0x52	U+0052	#LATIN CAPITAL LETTER R
+0x53	U+0053	#LATIN CAPITAL LETTER S
+0x54	U+0054	#LATIN CAPITAL LETTER T
+0x55	U+0055	#LATIN CAPITAL LETTER U
+0x56	U+0056	#LATIN CAPITAL LETTER V
+0x57	U+0057	#LATIN CAPITAL LETTER W
+0x58	U+0058	#LATIN CAPITAL LETTER X
+0x59	U+0059	#LATIN CAPITAL LETTER Y
+0x5a	U+005a	#LATIN CAPITAL LETTER Z
+0x5b	U+005b	#LEFT SQUARE BRACKET
+0x5c	U+005c	#REVERSE SOLIDUS
+0x5d	U+005d	#RIGHT SQUARE BRACKET
+0x5e	U+005e	#CIRCUMFLEX ACCENT
+0x5f	U+005f	#LOW LINE
+0x60	U+0060	#GRAVE ACCENT
+0x61	U+0061	#LATIN SMALL LETTER A
+0x62	U+0062	#LATIN SMALL LETTER B
+0x63	U+0063	#LATIN SMALL LETTER C
+0x64	U+0064	#LATIN SMALL LETTER D
+0x65	U+0065	#LATIN SMALL LETTER E
+0x66	U+0066	#LATIN SMALL LETTER F
+0x67	U+0067	#LATIN SMALL LETTER G
+0x68	U+0068	#LATIN SMALL LETTER H
+0x69	U+0069	#LATIN SMALL LETTER I
+0x6a	U+006a	#LATIN SMALL LETTER J
+0x6b	U+006b	#LATIN SMALL LETTER K
+0x6c	U+006c	#LATIN SMALL LETTER L
+0x6d	U+006d	#LATIN SMALL LETTER M
+0x6e	U+006e	#LATIN SMALL LETTER N
+0x6f	U+006f	#LATIN SMALL LETTER O
+0x70	U+0070	#LATIN SMALL LETTER P
+0x71	U+0071	#LATIN SMALL LETTER Q
+0x72	U+0072	#LATIN SMALL LETTER R
+0x73	U+0073	#LATIN SMALL LETTER S
+0x74	U+0074	#LATIN SMALL LETTER T
+0x75	U+0075	#LATIN SMALL LETTER U
+0x76	U+0076	#LATIN SMALL LETTER V
+0x77	U+0077	#LATIN SMALL LETTER W
+0x78	U+0078	#LATIN SMALL LETTER X
+0x79	U+0079	#LATIN SMALL LETTER Y
+0x7a	U+007a	#LATIN SMALL LETTER Z
+0x7b	U+007b	#LEFT CURLY BRACKET
+0x7c	U+007c	#VERTICAL LINE
+0x7d	U+007d	#RIGHT CURLY BRACKET
+0x7e	U+007e	#TILDE
+0x7f	U+007f	#DELETE
+0x80	U+00c7	#LATIN CAPITAL LETTER C WITH CEDILLA
+0x81	U+00fc	#LATIN SMALL LETTER U WITH DIAERESIS
+0x82	U+00e9	#LATIN SMALL LETTER E WITH ACUTE
+0x83	U+00e2	#LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x84	U+00e4	#LATIN SMALL LETTER A WITH DIAERESIS
+0x85	U+00e0	#LATIN SMALL LETTER A WITH GRAVE
+0x86	U+00e5	#LATIN SMALL LETTER A WITH RING ABOVE
+0x87	U+00e7	#LATIN SMALL LETTER C WITH CEDILLA
+0x88	U+00ea	#LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x89	U+00eb	#LATIN SMALL LETTER E WITH DIAERESIS
+0x8a	U+00e8	#LATIN SMALL LETTER E WITH GRAVE
+0x8b	U+00ef	#LATIN SMALL LETTER I WITH DIAERESIS
+0x8c	U+00ee	#LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x8d	U+00ec	#LATIN SMALL LETTER I WITH GRAVE
+0x8e	U+00c4	#LATIN CAPITAL LETTER A WITH DIAERESIS
+0x8f	U+00c5	#LATIN CAPITAL LETTER A WITH RING ABOVE
+0x90	U+00c9	#LATIN CAPITAL LETTER E WITH ACUTE
+0x91	U+00e6	#LATIN SMALL LIGATURE AE
+0x92	U+00c6	#LATIN CAPITAL LIGATURE AE
+0x93	U+00f4	#LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x94	U+00f6	#LATIN SMALL LETTER O WITH DIAERESIS
+0x95	U+00f2	#LATIN SMALL LETTER O WITH GRAVE
+0x96	U+00fb	#LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x97	U+00f9	#LATIN SMALL LETTER U WITH GRAVE
+0x98	U+00ff	#LATIN SMALL LETTER Y WITH DIAERESIS
+0x99	U+00d6	#LATIN CAPITAL LETTER O WITH DIAERESIS
+0x9a	U+00dc	#LATIN CAPITAL LETTER U WITH DIAERESIS
+0x9b	U+00f8	#LATIN SMALL LETTER O WITH STROKE
+0x9c	U+00a3	#POUND SIGN
+0x9d	U+00d8	#LATIN CAPITAL LETTER O WITH STROKE
+0x9e	U+00d7	#MULTIPLICATION SIGN
+0x9f	U+0192	#LATIN SMALL LETTER F WITH HOOK
+0xa0	U+00e1	#LATIN SMALL LETTER A WITH ACUTE
+0xa1	U+00ed	#LATIN SMALL LETTER I WITH ACUTE
+0xa2	U+00f3	#LATIN SMALL LETTER O WITH ACUTE
+0xa3	U+00fa	#LATIN SMALL LETTER U WITH ACUTE
+0xa4	U+00f1	#LATIN SMALL LETTER N WITH TILDE
+0xa5	U+00d1	#LATIN CAPITAL LETTER N WITH TILDE
+0xa6	U+00aa	#FEMININE ORDINAL INDICATOR
+0xa7	U+00ba	#MASCULINE ORDINAL INDICATOR
+0xa8	U+00bf	#INVERTED QUESTION MARK
+0xa9	U+00ae	#REGISTERED SIGN
+0xaa	U+00ac	#NOT SIGN
+0xab	U+00bd	#VULGAR FRACTION ONE HALF
+0xac	U+00bc	#VULGAR FRACTION ONE QUARTER
+0xad	U+00a1	#INVERTED EXCLAMATION MARK
+0xae	U+00ab	#LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xaf	U+00bb	#RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xb0	U+2591	#LIGHT SHADE
+0xb1	U+2592	#MEDIUM SHADE
+0xb2	U+2593	#DARK SHADE
+0xb3	U+2502	#BOX DRAWINGS LIGHT VERTICAL
+0xb4	U+2524	#BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xb5	U+00c1	#LATIN CAPITAL LETTER A WITH ACUTE
+0xb6	U+00c2	#LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xb7	U+00c0	#LATIN CAPITAL LETTER A WITH GRAVE
+0xb8	U+00a9	#COPYRIGHT SIGN
+0xb9	U+2563	#BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xba	U+2551	#BOX DRAWINGS DOUBLE VERTICAL
+0xbb	U+2557	#BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xbc	U+255d	#BOX DRAWINGS DOUBLE UP AND LEFT
+0xbd	U+00a2	#CENT SIGN
+0xbe	U+00a5	#YEN SIGN
+0xbf	U+2510	#BOX DRAWINGS LIGHT DOWN AND LEFT
+0xc0	U+2514	#BOX DRAWINGS LIGHT UP AND RIGHT
+0xc1	U+2534	#BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xc2	U+252c	#BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xc3	U+251c	#BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xc4	U+2500	#BOX DRAWINGS LIGHT HORIZONTAL
+0xc5	U+253c	#BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xc6	U+00e3	#LATIN SMALL LETTER A WITH TILDE
+0xc7	U+00c3	#LATIN CAPITAL LETTER A WITH TILDE
+0xc8	U+255a	#BOX DRAWINGS DOUBLE UP AND RIGHT
+0xc9	U+2554	#BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xca	U+2569	#BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xcb	U+2566	#BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xcc	U+2560	#BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xcd	U+2550	#BOX DRAWINGS DOUBLE HORIZONTAL
+0xce	U+256c	#BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xcf	U+00a4	#CURRENCY SIGN
+0xd0	U+00f0	#LATIN SMALL LETTER ETH
+0xd1	U+00d0	#LATIN CAPITAL LETTER ETH
+0xd2	U+00ca	#LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xd3	U+00cb	#LATIN CAPITAL LETTER E WITH DIAERESIS
+0xd4	U+00c8	#LATIN CAPITAL LETTER E WITH GRAVE
+0xd5	U+0131	#LATIN SMALL LETTER DOTLESS I
+0xd6	U+00cd	#LATIN CAPITAL LETTER I WITH ACUTE
+0xd7	U+00ce	#LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xd8	U+00cf	#LATIN CAPITAL LETTER I WITH DIAERESIS
+0xd9	U+2518	#BOX DRAWINGS LIGHT UP AND LEFT
+0xda	U+250c	#BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xdb	U+2588	#FULL BLOCK
+0xdc	U+2584	#LOWER HALF BLOCK
+0xdd	U+00a6	#BROKEN BAR
+0xde	U+00cc	#LATIN CAPITAL LETTER I WITH GRAVE
+0xdf	U+2580	#UPPER HALF BLOCK
+0xe0	U+00d3	#LATIN CAPITAL LETTER O WITH ACUTE
+0xe1	U+00df	#LATIN SMALL LETTER SHARP S
+0xe2	U+00d4	#LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xe3	U+00d2	#LATIN CAPITAL LETTER O WITH GRAVE
+0xe4	U+00f5	#LATIN SMALL LETTER O WITH TILDE
+0xe5	U+00d5	#LATIN CAPITAL LETTER O WITH TILDE
+0xe6	U+00b5	#MICRO SIGN
+0xe7	U+00fe	#LATIN SMALL LETTER THORN
+0xe8	U+00de	#LATIN CAPITAL LETTER THORN
+0xe9	U+00da	#LATIN CAPITAL LETTER U WITH ACUTE
+0xea	U+00db	#LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xeb	U+00d9	#LATIN CAPITAL LETTER U WITH GRAVE
+0xec	U+00fd	#LATIN SMALL LETTER Y WITH ACUTE
+0xed	U+00dd	#LATIN CAPITAL LETTER Y WITH ACUTE
+0xee	U+00af	#MACRON
+0xef	U+00b4	#ACUTE ACCENT
+0xf0	U+00ad	#SOFT HYPHEN
+0xf1	U+00b1	#PLUS-MINUS SIGN
+0xf2	U+2017	#DOUBLE LOW LINE
+0xf3	U+00be	#VULGAR FRACTION THREE QUARTERS
+0xf4	U+00b6	#PILCROW SIGN
+0xf5	U+00a7	#SECTION SIGN
+0xf6	U+00f7	#DIVISION SIGN
+0xf7	U+00b8	#CEDILLA
+0xf8	U+00b0	#DEGREE SIGN
+0xf9	U+00a8	#DIAERESIS
+0xfa	U+00b7	#MIDDLE DOT
+0xfb	U+00b9	#SUPERSCRIPT ONE
+0xfc	U+00b3	#SUPERSCRIPT THREE
+0xfd	U+00b2	#SUPERSCRIPT TWO
+0xfe	U+25a0	#BLACK SQUARE
+0xff	U+00a0	#NO-BREAK SPACE
+
+
+# TRADE MARK SIGN:
+U+2122:(TM)
+
+0x60    U+2018          # left single quotation mark
+0x27    U+2019-U+201b   # various single quotation marks
+0x22    U+201c-U+201f   # various double quotation marks
diff --git a/src/chrtrans/cp852_uni.tbl b/src/chrtrans/cp852_uni.tbl
new file mode 100644
index 00000000..e84454a8
--- /dev/null
+++ b/src/chrtrans/cp852_uni.tbl
@@ -0,0 +1,287 @@
+#The MIME name of this charset.
+Mcp852
+
+#Name as a Display Charset (used on Options screen)
+O PC Latin2 CP 852
+
+#
+#    Name:     cp852_DOSLatin2 to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.00
+#    Table format:  Format A
+#    Date:          04/24/96
+#    Authors:       Lori Brownell <loribr@microsoft.com>
+#                   K.D. Chang    <a-kchang@microsoft.com>
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp852_DOSLatin2 code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp852_DOSLatin2 order
+#
+#0x00    U+0000  #NULL
+#0x01    U+0001  #START OF HEADING
+#0x02    U+0002  #START OF TEXT
+#0x03    U+0003  #END OF TEXT
+#0x04    U+0004  #END OF TRANSMISSION
+#0x05    U+0005  #ENQUIRY
+#0x06    U+0006  #ACKNOWLEDGE
+#0x07    U+0007  #BELL
+#0x08    U+0008  #BACKSPACE
+#0x09    U+0009  #HORIZONTAL TABULATION
+#0x0a    U+000a  #LINE FEED
+#0x0b    U+000b  #VERTICAL TABULATION
+#0x0c    U+000c  #FORM FEED
+#0x0d    U+000d  #CARRIAGE RETURN
+#0x0e    U+000e  #SHIFT OUT
+#0x0f    U+000f  #SHIFT IN
+#0x10    U+0010  #DATA LINK ESCAPE
+#0x11    U+0011  #DEVICE CONTROL ONE
+#0x12    U+0012  #DEVICE CONTROL TWO
+#0x13    U+0013  #DEVICE CONTROL THREE
+#0x14    U+0014  #DEVICE CONTROL FOUR
+#0x15    U+0015  #NEGATIVE ACKNOWLEDGE
+#0x16    U+0016  #SYNCHRONOUS IDLE
+#0x17    U+0017  #END OF TRANSMISSION BLOCK
+#0x18    U+0018  #CANCEL
+#0x19    U+0019  #END OF MEDIUM
+#0x1a    U+001a  #SUBSTITUTE
+#0x1b    U+001b  #ESCAPE
+#0x1c    U+001c  #FILE SEPARATOR
+#0x1d    U+001d  #GROUP SEPARATOR
+#0x1e    U+001e  #RECORD SEPARATOR
+#0x1f    U+001f  #UNIT SEPARATOR
+0x20    U+0020  #SPACE
+0x21    U+0021  #EXCLAMATION MARK
+0x22    U+0022  #QUOTATION MARK
+0x23    U+0023  #NUMBER SIGN
+0x24    U+0024  #DOLLAR SIGN
+0x25    U+0025  #PERCENT SIGN
+0x26    U+0026  #AMPERSAND
+0x27    U+0027  #APOSTROPHE
+0x28    U+0028  #LEFT PARENTHESIS
+0x29    U+0029  #RIGHT PARENTHESIS
+0x2a    U+002a  #ASTERISK
+0x2b    U+002b  #PLUS SIGN
+0x2c    U+002c  #COMMA
+0x2d    U+002d  #HYPHEN-MINUS
+0x2e    U+002e  #FULL STOP
+0x2f    U+002f  #SOLIDUS
+0x30    U+0030  #DIGIT ZERO
+0x31    U+0031  #DIGIT ONE
+0x32    U+0032  #DIGIT TWO
+0x33    U+0033  #DIGIT THREE
+0x34    U+0034  #DIGIT FOUR
+0x35    U+0035  #DIGIT FIVE
+0x36    U+0036  #DIGIT SIX
+0x37    U+0037  #DIGIT SEVEN
+0x38    U+0038  #DIGIT EIGHT
+0x39    U+0039  #DIGIT NINE
+0x3a    U+003a  #COLON
+0x3b    U+003b  #SEMICOLON
+0x3c    U+003c  #LESS-THAN SIGN
+0x3d    U+003d  #EQUALS SIGN
+0x3e    U+003e  #GREATER-THAN SIGN
+0x3f    U+003f  #QUESTION MARK
+0x40    U+0040  #COMMERCIAL AT
+0x41    U+0041  #LATIN CAPITAL LETTER A
+0x42    U+0042  #LATIN CAPITAL LETTER B
+0x43    U+0043  #LATIN CAPITAL LETTER C
+0x44    U+0044  #LATIN CAPITAL LETTER D
+0x45    U+0045  #LATIN CAPITAL LETTER E
+0x46    U+0046  #LATIN CAPITAL LETTER F
+0x47    U+0047  #LATIN CAPITAL LETTER G
+0x48    U+0048  #LATIN CAPITAL LETTER H
+0x49    U+0049  #LATIN CAPITAL LETTER I
+0x4a    U+004a  #LATIN CAPITAL LETTER J
+0x4b    U+004b  #LATIN CAPITAL LETTER K
+0x4c    U+004c  #LATIN CAPITAL LETTER L
+0x4d    U+004d  #LATIN CAPITAL LETTER M
+0x4e    U+004e  #LATIN CAPITAL LETTER N
+0x4f    U+004f  #LATIN CAPITAL LETTER O
+0x50    U+0050  #LATIN CAPITAL LETTER P
+0x51    U+0051  #LATIN CAPITAL LETTER Q
+0x52    U+0052  #LATIN CAPITAL LETTER R
+0x53    U+0053  #LATIN CAPITAL LETTER S
+0x54    U+0054  #LATIN CAPITAL LETTER T
+0x55    U+0055  #LATIN CAPITAL LETTER U
+0x56    U+0056  #LATIN CAPITAL LETTER V
+0x57    U+0057  #LATIN CAPITAL LETTER W
+0x58    U+0058  #LATIN CAPITAL LETTER X
+0x59    U+0059  #LATIN CAPITAL LETTER Y
+0x5a    U+005a  #LATIN CAPITAL LETTER Z
+0x5b    U+005b  #LEFT SQUARE BRACKET
+0x5c    U+005c  #REVERSE SOLIDUS
+0x5d    U+005d  #RIGHT SQUARE BRACKET
+0x5e    U+005e  #CIRCUMFLEX ACCENT
+0x5f    U+005f  #LOW LINE
+0x60    U+0060  #GRAVE ACCENT
+0x61    U+0061  #LATIN SMALL LETTER A
+0x62    U+0062  #LATIN SMALL LETTER B
+0x63    U+0063  #LATIN SMALL LETTER C
+0x64    U+0064  #LATIN SMALL LETTER D
+0x65    U+0065  #LATIN SMALL LETTER E
+0x66    U+0066  #LATIN SMALL LETTER F
+0x67    U+0067  #LATIN SMALL LETTER G
+0x68    U+0068  #LATIN SMALL LETTER H
+0x69    U+0069  #LATIN SMALL LETTER I
+0x6a    U+006a  #LATIN SMALL LETTER J
+0x6b    U+006b  #LATIN SMALL LETTER K
+0x6c    U+006c  #LATIN SMALL LETTER L
+0x6d    U+006d  #LATIN SMALL LETTER M
+0x6e    U+006e  #LATIN SMALL LETTER N
+0x6f    U+006f  #LATIN SMALL LETTER O
+0x70    U+0070  #LATIN SMALL LETTER P
+0x71    U+0071  #LATIN SMALL LETTER Q
+0x72    U+0072  #LATIN SMALL LETTER R
+0x73    U+0073  #LATIN SMALL LETTER S
+0x74    U+0074  #LATIN SMALL LETTER T
+0x75    U+0075  #LATIN SMALL LETTER U
+0x76    U+0076  #LATIN SMALL LETTER V
+0x77    U+0077  #LATIN SMALL LETTER W
+0x78    U+0078  #LATIN SMALL LETTER X
+0x79    U+0079  #LATIN SMALL LETTER Y
+0x7a    U+007a  #LATIN SMALL LETTER Z
+0x7b    U+007b  #LEFT CURLY BRACKET
+0x7c    U+007c  #VERTICAL LINE
+0x7d    U+007d  #RIGHT CURLY BRACKET
+0x7e    U+007e  #TILDE
+#0x7f    U+007f  #DELETE
+0x80    U+00c7  #LATIN CAPITAL LETTER C WITH CEDILLA
+0x81    U+00fc  #LATIN SMALL LETTER U WITH DIAERESIS
+0x82    U+00e9  #LATIN SMALL LETTER E WITH ACUTE
+0x83    U+00e2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x84    U+00e4  #LATIN SMALL LETTER A WITH DIAERESIS
+0x85    U+016f  #LATIN SMALL LETTER U WITH RING ABOVE
+0x86    U+0107  #LATIN SMALL LETTER C WITH ACUTE
+0x87    U+00e7  #LATIN SMALL LETTER C WITH CEDILLA
+0x88    U+0142  #LATIN SMALL LETTER L WITH STROKE
+0x89    U+00eb  #LATIN SMALL LETTER E WITH DIAERESIS
+0x8a    U+0150  #LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
+0x8b    U+0151  #LATIN SMALL LETTER O WITH DOUBLE ACUTE
+0x8c    U+00ee  #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x8d    U+0179  #LATIN CAPITAL LETTER Z WITH ACUTE
+0x8e    U+00c4  #LATIN CAPITAL LETTER A WITH DIAERESIS
+0x8f    U+0106  #LATIN CAPITAL LETTER C WITH ACUTE
+0x90    U+00c9  #LATIN CAPITAL LETTER E WITH ACUTE
+0x91    U+0139  #LATIN CAPITAL LETTER L WITH ACUTE
+0x92    U+013a  #LATIN SMALL LETTER L WITH ACUTE
+0x93    U+00f4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x94    U+00f6  #LATIN SMALL LETTER O WITH DIAERESIS
+0x95    U+013d  #LATIN CAPITAL LETTER L WITH CARON
+0x96    U+013e  #LATIN SMALL LETTER L WITH CARON
+0x97    U+015a  #LATIN CAPITAL LETTER S WITH ACUTE
+0x98    U+015b  #LATIN SMALL LETTER S WITH ACUTE
+0x99    U+00d6  #LATIN CAPITAL LETTER O WITH DIAERESIS
+0x9a    U+00dc  #LATIN CAPITAL LETTER U WITH DIAERESIS
+0x9b    U+0164  #LATIN CAPITAL LETTER T WITH CARON
+0x9c    U+0165  #LATIN SMALL LETTER T WITH CARON
+0x9d    U+0141  #LATIN CAPITAL LETTER L WITH STROKE
+0x9e    U+00d7  #MULTIPLICATION SIGN
+0x9f    U+010d  #LATIN SMALL LETTER C WITH CARON
+0xa0    U+00e1  #LATIN SMALL LETTER A WITH ACUTE
+0xa1    U+00ed  #LATIN SMALL LETTER I WITH ACUTE
+0xa2    U+00f3  #LATIN SMALL LETTER O WITH ACUTE
+0xa3    U+00fa  #LATIN SMALL LETTER U WITH ACUTE
+0xa4    U+0104  #LATIN CAPITAL LETTER A WITH OGONEK
+0xa5    U+0105  #LATIN SMALL LETTER A WITH OGONEK
+0xa6    U+017d  #LATIN CAPITAL LETTER Z WITH CARON
+0xa7    U+017e  #LATIN SMALL LETTER Z WITH CARON
+0xa8    U+0118  #LATIN CAPITAL LETTER E WITH OGONEK
+0xa9    U+0119  #LATIN SMALL LETTER E WITH OGONEK
+0xaa    U+00ac  #NOT SIGN
+0xab    U+017a  #LATIN SMALL LETTER Z WITH ACUTE
+0xac    U+010c  #LATIN CAPITAL LETTER C WITH CARON
+0xad    U+015f  #LATIN SMALL LETTER S WITH CEDILLA
+0xae    U+00ab  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xaf    U+00bb  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xb0    U+2591  #LIGHT SHADE
+0xb1    U+2592  #MEDIUM SHADE
+0xb2    U+2593  #DARK SHADE
+0xb3    U+2502  #BOX DRAWINGS LIGHT VERTICAL
+0xb4    U+2524  #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xb5    U+00c1  #LATIN CAPITAL LETTER A WITH ACUTE
+0xb6    U+00c2  #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xb7    U+011a  #LATIN CAPITAL LETTER E WITH CARON
+0xb8    U+015e  #LATIN CAPITAL LETTER S WITH CEDILLA
+0xb9    U+2563  #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xba    U+2551  #BOX DRAWINGS DOUBLE VERTICAL
+0xbb    U+2557  #BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xbc    U+255d  #BOX DRAWINGS DOUBLE UP AND LEFT
+0xbd    U+017b  #LATIN CAPITAL LETTER Z WITH DOT ABOVE
+0xbe    U+017c  #LATIN SMALL LETTER Z WITH DOT ABOVE
+0xbf    U+2510  #BOX DRAWINGS LIGHT DOWN AND LEFT
+0xc0    U+2514  #BOX DRAWINGS LIGHT UP AND RIGHT
+0xc1    U+2534  #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xc2    U+252c  #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xc3    U+251c  #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xc4    U+2500  #BOX DRAWINGS LIGHT HORIZONTAL
+0xc5    U+253c  #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xc6    U+0102  #LATIN CAPITAL LETTER A WITH BREVE
+0xc7    U+0103  #LATIN SMALL LETTER A WITH BREVE
+0xc8    U+255a  #BOX DRAWINGS DOUBLE UP AND RIGHT
+0xc9    U+2554  #BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xca    U+2569  #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xcb    U+2566  #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xcc    U+2560  #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xcd    U+2550  #BOX DRAWINGS DOUBLE HORIZONTAL
+0xce    U+256c  #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xcf    U+00a4  #CURRENCY SIGN
+0xd0    U+0111  #LATIN SMALL LETTER D WITH STROKE
+0xd1    U+0110  #LATIN CAPITAL LETTER D WITH STROKE
+0xd2    U+010e  #LATIN CAPITAL LETTER D WITH CARON
+0xd3    U+00cb  #LATIN CAPITAL LETTER E WITH DIAERESIS
+0xd4    U+010f  #LATIN SMALL LETTER D WITH CARON
+0xd5    U+0147  #LATIN CAPITAL LETTER N WITH CARON
+0xd6    U+00cd  #LATIN CAPITAL LETTER I WITH ACUTE
+0xd7    U+00ce  #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xd8    U+011b  #LATIN SMALL LETTER E WITH CARON
+0xd9    U+2518  #BOX DRAWINGS LIGHT UP AND LEFT
+0xda    U+250c  #BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xdb    U+2588  #FULL BLOCK
+0xdc    U+2584  #LOWER HALF BLOCK
+0xdd    U+0162  #LATIN CAPITAL LETTER T WITH CEDILLA
+0xde    U+016e  #LATIN CAPITAL LETTER U WITH RING ABOVE
+0xdf    U+2580  #UPPER HALF BLOCK
+0xe0    U+00d3  #LATIN CAPITAL LETTER O WITH ACUTE
+0xe1    U+00df  #LATIN SMALL LETTER SHARP S
+0xe2    U+00d4  #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xe3    U+0143  #LATIN CAPITAL LETTER N WITH ACUTE
+0xe4    U+0144  #LATIN SMALL LETTER N WITH ACUTE
+0xe5    U+0148  #LATIN SMALL LETTER N WITH CARON
+0xe6    U+0160  #LATIN CAPITAL LETTER S WITH CARON
+0xe7    U+0161  #LATIN SMALL LETTER S WITH CARON
+0xe8    U+0154  #LATIN CAPITAL LETTER R WITH ACUTE
+0xe9    U+00da  #LATIN CAPITAL LETTER U WITH ACUTE
+0xea    U+0155  #LATIN SMALL LETTER R WITH ACUTE
+0xeb    U+0170  #LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
+0xec    U+00fd  #LATIN SMALL LETTER Y WITH ACUTE
+0xed    U+00dd  #LATIN CAPITAL LETTER Y WITH ACUTE
+0xee    U+0163  #LATIN SMALL LETTER T WITH CEDILLA
+0xef    U+00b4  #ACUTE ACCENT
+0xf0    U+00ad  #SOFT HYPHEN
+0xf1    U+02dd  #DOUBLE ACUTE ACCENT
+0xf2    U+02db  #OGONEK
+0xf3    U+02c7  #CARON
+0xf4    U+02d8  #BREVE
+0xf5    U+00a7  #SECTION SIGN
+0xf6    U+00f7  #DIVISION SIGN
+0xf7    U+00b8  #CEDILLA
+0xf8    U+00b0  #DEGREE SIGN
+0xf9    U+00a8  #DIAERESIS
+0xfa    U+02d9  #DOT ABOVE
+0xfb    U+0171  #LATIN SMALL LETTER U WITH DOUBLE ACUTE
+0xfc    U+0158  #LATIN CAPITAL LETTER R WITH CARON
+0xfd    U+0159  #LATIN SMALL LETTER R WITH CARON
+0xfe    U+25a0  #BLACK SQUARE
+0xff    U+00a0  #NO-BREAK SPACE
+
+
+# TRADE MARK SIGN:
+U+2122:(TM)
+
+0x60    U+2018          # left single quotation mark
+0x27    U+2019-U+201b   # various single quotation marks
+0x22    U+201c-U+201f   # various double quotation marks
diff --git a/src/chrtrans/def7_uni.tbl b/src/chrtrans/def7_uni.tbl
new file mode 100644
index 00000000..ab7fd4de
--- /dev/null
+++ b/src/chrtrans/def7_uni.tbl
@@ -0,0 +1,2150 @@
+# Default 7bit replacements.  If the MIME name is set to us-ascii,
+# this will be identified with the "7 bit approximations" Display
+# character set.
+
+#The MIME name of this charset.
+M us-ascii
+
+# Shall this become the "default" translation table?  YES!
+# There has to be exactly one table marked as "default".
+D1
+
+0x20-0x2f	idem
+0x3a	idem
+0x3f-0x7e	idem
+
+#U+00a0:NS
+U+00a1:!
+U+00a2:Ct
+U+00a3:Pd
+U+00a4:Cu
+U+00a5:Ye
+U+00a6:|
+U+00a7:SE
+U+00a8:"
+U+00a9:(C)
+U+00aa:-a
+U+00ab:<<
+U+00ac:NO
+U+00ad:--
+U+00ae:(R)
+U+00af:'m
+U+00b0:DG
+U+00b1:+-
+U+00b2:^2
+U+00b3:^3
+U+00b4:'
+U+00b5:My
+U+00b6:PI
+U+00b7:.M
+U+00b8:,
+U+00b9:^1
+U+00ba:-o
+U+00bb:>>
+U+00bc: 1/4
+U+00bd: 1/2
+U+00be: 3/4
+U+00bf:?
+0x41	U+00c0-U+00c3
+U+00c4:A:
+U+00c5:AA
+U+00c6:AE
+U+00c7:C,
+0x45	U+00c8-U+00cb
+0x49	U+00cc-U+00cf
+U+00d0:D-
+0x4e	U+00d1
+0x4f	U+00d2-U+00d5
+U+00d6:O:
+0x2a	U+00d7
+U+00d8:O/
+0x55	U+00d9-U+00db
+U+00dc:U:
+0x59	U+00dd
+U+00de:TH
+U+00df:ss
+U+00e0:`a
+0x61	U+00e1-U+00e3
+U+00e4:a:
+U+00e5:aa
+U+00e6:ae
+U+00e7:c,
+0x65	U+00e8-U+00eb
+U+00ec:`i
+0x69	U+00ed-U+00ef
+U+00f0:d-
+0x6e	U+00f1
+0x6f	U+00f2-U+00f5
+U+00f6:o:
+U+00f7:-:
+U+00f8:o/
+0x75	U+00f9-U+00fb
+U+00fc:u:
+0x79	U+00fd
+U+00fe:th
+0x79	U+00ff
+0x41	U+0100	U+0102	U+0104
+0x61	U+0101	U+0103	U+0105
+0x43	U+0106	U+0108	U+010a	U+010c
+0x63	U+0107	U+0109	U+010b	U+010d
+0x44	U+010e
+0x64	U+010f
+U+0110:D/
+U+0111:d/
+0x45	U+0112	U+0114	U+0116	U+0118	U+011a
+0x65	U+0113	U+0115	U+0117	U+0119	U+011b
+0x47	U+011c	U+011e	U+0120	U+0122
+0x67	U+011d	U+011f	U+0121	U+0123
+0x48	U+0124
+0x68	U+0125
+U+0126:H/
+0x48	U+0127 #	LATIN SMALL LETTER H BAR	-> H
+0x49	U+0128	U+012a	U+012c	U+012e	U+0130
+0x69	U+0129	U+012b	U+012d	U+012f	U+0131
+U+0132:IJ
+U+0133:ij
+0x4a	U+0134
+0x6a	U+0135
+0x4b	U+0136
+0x4b	U+0137
+U+0138:kk
+0x4c	U+0139	U+013b	U+013d
+0x6c	U+013a	U+013c	U+013e
+U+013f:L.
+U+0140:l.
+U+0141:L/
+U+0142:l/
+0x4e	U+0143	U+0145	U+0147
+0x6e	U+0144	U+0146	U+0148
+U+0149:'n
+U+014a:NG
+0x4e	U+014B #	LATIN SMALL LETTER ENG	-> N
+0x4f	U+014c	U+014e
+0x6f	U+014e	U+014f
+U+0150:O"
+U+0151:o"
+U+0152:OE
+U+0153:oe
+0x52	U+0154	U+0156	U+0158
+0x72	U+0155	U+0157	U+0159
+0x53	U+015a	U+015c	U+015e	U+0160
+0x73	U+015b	U+015d	U+015f	U+0161
+0x54	U+0162	U+0164
+0x74	U+0163	U+0165
+U+0166:T/
+U+0167:t/
+0x55	U+0168	U+016a	U+016c	U+016e	U+0172
+0x75	U+0169	U+016b	U+016d	U+016f	U+0173
+U+0170:U"
+U+0171:u"
+0x57	U+0174
+0x77	U+0175
+0x59	U+0176	U+0178
+0x79	U+0177
+0x5a	U+0179	U+017b	U+017d
+0x7a	U+017a	U+017c	U+017e
+U+017f:s1
+U+0187:C2
+U+0188:c2
+U+0191:F2
+U+0192:f2
+U+0198:K2
+U+0199:k2
+U+01a0:O9
+U+01a1:o9
+U+01a2:OI
+U+01a3:oi
+U+01a6:yr
+U+01af:U9
+U+01b0:u9
+U+01b5:Z/
+U+01b6:z/
+U+01b7:ED
+0x41	U+01cd
+0x61	U+01ce
+0x49	U+01cf
+0x69	U+01d0
+0x4f	U+01d1
+0x6f	U+01d2
+0x55	U+01d3
+0x75	U+01d4
+U+01d5:U:-
+U+01d6:u:-
+U+01d7:U:'
+U+01d8:u:'
+U+01d9:U:<
+U+01da:u:<
+U+01db:U:!
+U+01dc:u:!
+U+01de:A1
+U+01df:a1
+U+01e0:A7
+U+01e1:a7
+U+01e2:A3
+U+01e3:a3
+U+01e4:G/
+U+01e5:g/
+0x47	U+01e6
+0x67	U+01e7
+0x4b	U+01e8
+0x6b	U+01e9
+0x4f	U+01ea
+0x6f	U+01eb
+U+01ec:O1
+U+01ed:o1
+U+01ee:EZ
+U+01ef:ez
+0x6a	U+01f0
+0x47	U+01f4
+0x67	U+01f5
+U+01fa:AA'
+U+01fb:aa'
+U+01fc:AE'
+U+01fd:ae'
+U+01fe:O/'
+U+01ff:o/'
+U+0200:A!!
+U+0201:a!!
+U+0202:A)
+U+0203:a)
+U+0204:E!!
+U+0205:e!!
+U+0206:E)
+U+0207:e)
+U+0208:I!!
+U+0209:i!!
+U+020a:I)
+U+020b:i)
+U+020c:O!!
+U+020d:o!!
+U+020e:O)
+U+020f:o)
+U+0210:R!!
+U+0211:r!!
+U+0212:R)
+U+0213:r)
+U+0214:U!!
+U+0215:u!!
+U+0216:U)
+U+0217:u)
+
+# IPA symbols, from
+#   Linkname: FAQ: Representing IPA Phonetics in ASCII
+#        URL: http://www.hpl.hp.com/personal/Evan_Kirshenbaum/IPA/faq.html
+# 
+0x41	U+0251 #	LATIN SMALL LETTER SCRIPT A	-> A
+U+0252:A.
+U+0253:b`
+0x4f	U+0254 #	LATIN SMALL LETTER OPEN O	-> O
+U+0256:d.
+U+0257:d`
+U+0258:@<umd>
+0x40	U+0259 #	LATIN SMALL LETTER SCHWA	-> @
+0x52	U+025A #	LATIN SMALL LETTER SCHWA HOOK	-> R
+0x45	U+025B #	LATIN SMALL LETTER EPSILON	-> E
+U+025c:V"
+U+025d:R<umd>
+U+025e:O"
+0x4a	U+025F #	LATIN SMALL LETTER DOTLESS J BAR	-> J
+U+0260:g`
+0x67	U+0261 #	LATIN SMALL LETTER SCRIPT G
+0x47	U+0262 #	LATIN LETTER SMALL CAPITAL G
+0x51	U+0263 #	LATIN SMALL LETTER GAMMA	-> Q
+U+0264:o-
+U+0265:j<rnd>
+U+0266:h<?>
+U+0268:i"
+0x49	U+026A U+0269 # LATIN LETTER SMALL CAPITAL I, LATIN SMALL LETTER IOTA
+0x4c	U+026B #	LATIN SMALL LETTER L WITH MIDDLE TILDE
+0x4c	U+026C #	LATIN SMALL LETTER L BELT
+U+026d:l.
+U+026e:z<lat>
+U+026f:u-
+U+0270:j<vel>
+0x4d	U+0271 #	LATIN SMALL LETTER M HOOK
+U+0273:n.
+U+0274:n"
+U+0275:@.
+U+0276:&.
+0x55	U+0277 #	LATIN SMALL LETTER CLOSED OMEGA	-> U
+0x72	U+0279 #	LATIN SMALL LETTER TURNED R	-> r
+U+027a:*<lat>
+U+027b:r.
+U+027d:*.
+0x2a	U+027E #	LATIN SMALL LETTER FISHHOOK R	-> *
+U+0280:r"
+0x52	U+0280 #	LATIN LETTER SMALL CAPITAL R	-> R
+U+0281:g"
+U+0282:s.
+0x53	U+0283 #	LATIN SMALL LETTER ESH	-> S
+U+0284:J`
+U+0287:t!
+U+0288:t.
+U+0289:u"
+0x55	U+028A #	LATIN SMALL LETTER UPSILON	-> U
+U+028b:r<lbd>
+0x56	U+028C #	LATIN SMALL LETTER TURNED V	-> V
+U+028d:w<vls>
+U+028e:l^
+U+028f:I.
+U+0290:z.
+U+0292:ed
+0x3f	U+0294 #	LATIN SMALL LETTER GLOTTAL STOP	-> ?
+U+0295:H<vcd>
+U+0296:l!
+U+0297:c!
+U+0298:p!
+U+0299:b<trl>
+U+029b:G`
+0x6a	U+029d #	LATIN SMALL LETTER CROSSED-TAIL J
+U+029e:k!
+0x4c	U+029F #	LATIN LETTER SMALL CAPITAL L
+U+02a0:q`
+U+02b0:<h>
+U+02b1:<?>
+0x3b	U+02b2 U+0321
+U+02b3:<r>
+U+02b7:<w>
+U+02bb:;S
+0x60	U+02bc
+U+02c6:1>
+U+02c7:'<
+U+02c9:1-
+U+02cb:1!
+0x3a	U+02d0
+U+02d8:'(
+U+02d9:'.
+U+02da:'0
+U+02db:';
+U+02dc:1?
+U+02dd:'"
+0x7e	U+0303	U+0334
+0x2e	U+0322	U+0323
+U+0324:<?>
+U+0325:<o>
+0x2d	U+0329
+0x5b	U+032a
+U+032b:<w>
+U+0334:<H>
+U+0374:'
+U+0375:,
+U+037a:j3
+U+037e:?%
+U+0384:'*
+U+0385:'%
+U+0386:A%
+U+0387:.*
+U+0388:E%
+U+0389:Y%
+U+038a:I%
+U+038c:O%
+U+038e:U%
+U+038f:W%
+U+0390:i3
+U+0391:A
+U+0392:B
+U+0393:G*
+U+0394:D*
+U+0395:E
+U+0396:Z
+U+0397:Y*
+U+0398:H*
+U+0399:I
+U+039a:K
+U+039b:L*
+U+039c:M
+U+039d:N
+U+039e:C*
+U+039f:O
+U+03a0:P*
+U+03a1:R*
+U+03a3:S*
+U+03a4:T
+U+03a5:U*
+U+03a6:F*
+U+03a7:X*
+U+03a8:Q*
+U+03a9:W*
+U+03aa:J*
+U+03ab:V*
+U+03ac:a%
+U+03ad:e%
+U+03ae:y%
+U+03af:i%
+U+03b0:u3
+U+03b1:a*
+U+03b2:b*
+U+03b3:g*
+U+03b4:d*
+U+03b5:e*
+U+03b6:z*
+U+03b7:y*
+U+03b8:h*
+U+03b9:i*
+U+03ba:k*
+U+03bb:l*
+U+03bc:m*
+U+03bd:n*
+U+03be:c*
+U+03bf:o
+U+03c0:p*
+U+03c1:r*
+U+03c2:*s
+U+03c3:s*
+U+03c4:t*
+U+03c5:u*
+U+03c6:f*
+U+03c7:x*
+U+03c8:q*
+U+03c9:w*
+U+03ca:j*
+U+03cb:v*
+U+03cc:o%
+U+03cd:u%
+U+03ce:w%
+U+03d0:b3
+U+03da:T3
+U+03db:t3
+U+03dc:M3
+U+03dd:m3
+U+03de:K3
+U+03df:k3
+U+03e0:P3
+U+03e1:p3
+U+03f4:'%
+U+03f5:j3
+# Cyrillic capital letters
+0x6e	U+0401
+U+0402:D%
+U+0403:G%
+U+0404:IE
+U+0405:DS
+U+0406:II
+U+0407:YI
+U+0408:J%
+U+0409:LJ
+U+040a:NJ
+U+040b:Ts
+U+040c:KJ
+U+040e:V%
+U+040f:DZ
+0x61-0x62	U+0410-U+0411
+0x77	U+0412
+0x67	U+0413
+0x64-0x65	U+0414-U+0415
+0x76	U+0416
+0x7a	U+0417
+0x69-0x70	U+0418-U+041f
+0x72-0x75	U+0420-U+0423
+0x66	U+0424
+0x68	U+0425
+0x63	U+0426
+0x7e	U+0427
+0x7b	U+0428
+0x7d	U+0429
+0x27	U+042a
+0x79	U+042b
+0x78	U+042c
+0x7c	U+042d
+0x60	U+042e
+0x71	U+042f
+
+# Cyrillic small letters
+0x41-0x42	U+0430-U+0431
+0x57	U+0432
+0x47	U+0433
+0x44-0x45	U+0434-U+0435
+0x56	U+0436
+0x5a	U+0437
+0x49-0x50	U+0438-U+043f
+0x52-0x55	U+0440-U+0443
+0x46	U+0444
+0x48	U+0445
+0x43	U+0446
+0x5e	U+0447
+0x5b	U+0448
+0x5d	U+0449
+0x27	U+044a
+0x59	U+044b
+0x58	U+044c
+0x5c	U+044d
+0x40	U+044e
+0x51	U+044f
+
+0x65	U+0451	#:io
+U+0452:d%
+U+0453:g%
+U+0454:ie
+U+0455:ds
+U+0456:ii
+U+0457:yi
+U+0458:j%
+U+0459:lj
+U+045a:nj
+U+045b:ts
+U+045c:kj
+U+045e:v%
+U+045f:dz
+U+0462:Y3
+U+0463:y3
+U+046a:O3
+U+046b:o3
+U+0472:F3
+U+0473:f3
+U+0474:V3
+U+0475:v3
+U+0480:C3
+U+0481:c3
+U+0490:G3
+U+0491:g3
+U+05d0:A+
+U+05d1:B+
+U+05d2:G+
+U+05d3:D+
+U+05d4:H+
+U+05d5:W+
+U+05d6:Z+
+U+05d7:X+
+U+05d8:Tj
+U+05d9:J+
+U+05da:K%
+U+05db:K+
+U+05dc:L+
+U+05dd:M%
+U+05de:M+
+U+05df:N%
+U+05e0:N+
+U+05e1:S+
+U+05e2:E+
+U+05e3:P%
+U+05e4:P+
+U+05e5:Zj
+U+05e6:ZJ
+U+05e7:Q+
+U+05e8:R+
+U+05e9:Sh
+U+05ea:T+
+U+060c:,+
+U+061b:;+
+U+061f:?+
+U+0621:H'
+U+0622:aM
+U+0623:aH
+U+0624:wH
+U+0625:ah
+U+0626:yH
+U+0627:a+
+U+0628:b+
+U+0629:tm
+U+062a:t+
+U+062b:tk
+U+062c:g+
+U+062d:hk
+U+062e:x+
+U+062f:d+
+U+0630:dk
+U+0631:r+
+U+0632:z+
+U+0633:s+
+U+0634:sn
+U+0635:c+
+U+0636:dd
+U+0637:tj
+U+0638:zH
+U+0639:e+
+U+063a:i+
+U+0640:++
+U+0641:f+
+U+0642:q+
+U+0643:k+
+U+0644:l+
+U+0645:m+
+U+0646:n+
+U+0647:h+
+U+0648:w+
+U+0649:j+
+U+064a:y+
+U+064b::+
+U+064c:"+
+U+064d:=+
+U+064e:/+
+U+064f:'+
+U+0650:1+
+U+0651:3+
+U+0652:0+
+U+0660:0a
+U+0661:1a
+U+0662:2a
+U+0663:3a
+U+0664:4a
+U+0665:5a
+U+0666:6a
+U+0667:7a
+U+0668:8a
+U+0669:9a
+U+0670:aS
+U+067e:p+
+U+0681:hH
+U+0686:tc
+U+0698:zj
+U+06a4:v+
+U+06af:gf
+U+06f0:0a
+U+06f1:1a
+U+06f2:2a
+U+06f3:3a
+U+06f4:4a
+U+06f5:5a
+U+06f6:6a
+U+06f7:7a
+U+06f8:8a
+U+06f9:9a
+
+# Replacement strings for Ethiopic characters
+U+1200:he
+U+1201:hu
+U+1202:hi
+U+1203:ha
+U+1204:hE
+0x68	U+1205	#:h
+U+1206:ho
+U+1208:le
+U+1209:lu
+U+120A:li
+U+120B:la
+U+120C:lE
+0x6c	U+120D	#:l
+U+120E:lo
+U+120F:lWa
+U+1210:He
+U+1211:Hu
+U+1212:Hi
+U+1213:Ha
+U+1214:HE
+0x48	U+1215	#:H
+U+1216:Ho
+U+1217:HWa
+U+1218:me
+U+1219:mu
+U+121A:mi
+U+121B:ma
+U+121C:mE
+0x6d	U+121D	#:m
+U+121E:mo
+U+121F:mWa
+U+1220:`se
+U+1221:`su
+U+1222:`si
+U+1223:`sa
+U+1224:`sE
+U+1225:`s
+U+1226:`so
+U+1227:`sWa
+U+1228:re
+U+1229:ru
+U+122A:ri
+U+122B:ra
+U+122C:rE
+0x72	U+122D	#:r
+U+122E:ro
+U+122F:rWa
+U+1230:se
+U+1231:su
+U+1232:si
+U+1233:sa
+U+1234:sE
+0x73	U+1235	#:s
+U+1236:so
+U+1237:sWa
+U+1238:xe
+U+1239:xu
+U+123A:xi
+U+123B:xa
+U+123C:xE
+U+123D:xa
+U+123E:xo
+U+123F:xWa
+U+1240:qe
+U+1241:qu
+U+1242:qi
+U+1243:qa
+U+1244:qE
+0x71	U+1245	#:q
+U+1246:qo
+U+1248:qWe
+U+124A:qWi
+U+124B:qWa
+U+124C:qWE
+U+124D:qW
+U+1250:Qe
+U+1251:Qu
+U+1252:Qi
+U+1253:Qa
+U+1254:QE
+0x51	U+1255	#:Q
+U+1256:Qo
+U+1258:QWe
+U+125A:QWi
+U+125B:QWa
+U+125C:QWE
+U+125D:QW
+U+1260:be
+U+1261:bu
+U+1262:bi
+U+1263:ba
+U+1264:bE
+0x62	U+1265	#:b
+U+1266:bo
+U+1267:bWa
+U+1268:ve
+U+1269:vu
+U+126A:vi
+U+126B:va
+U+126C:vE
+0x76	U+126D	#:v
+U+126E:vo
+U+126F:vWa
+U+1270:te
+U+1271:tu
+U+1272:ti
+U+1273:ta
+U+1274:tE
+0x74	U+1275	#:t
+U+1276:to
+U+1277:tWa
+U+1278:ce
+U+1279:cu
+U+127A:ci
+U+127B:ca
+U+127C:cE
+0x63	U+127D	#:c
+U+127E:co
+U+127F:cWa
+U+1280:`he
+U+1281:`hu
+U+1282:`hi
+U+1283:`ha
+U+1284:`hE
+U+1285:`h
+U+1286:`ho
+U+1288:hWe
+U+128A:hWi
+U+128B:hWa
+U+128C:hWE
+U+128D:hW
+U+1290:na
+U+1291:nu
+U+1292:ni
+U+1293:na
+U+1294:nE
+0x6e	U+1295	#:n
+U+1296:no
+U+1297:nWa
+U+1298:Ne
+U+1299:Nu
+U+129A:Ni
+U+129B:Na
+U+129C:NE
+0x4e	U+129D	#:N
+U+129E:No
+U+129F:NWa
+0x65	U+12A0	#:e
+0x75	U+12A1	#:u
+0x69	U+12A2	#:i
+0x61	U+12A3	#:a
+0x45	U+12A4	#:E
+0x49	U+12A5	#:I
+0x6f	U+12A6	#:o
+U+12A7:e3
+U+12A8:ke
+U+12A9:ku
+U+12AA:ki
+U+12AB:ka
+U+12AC:kE
+0x6b	U+12AD	#:k
+U+12AE:ko
+U+12B0:kWe
+U+12B2:kWi
+U+12B3:kWa
+U+12B4:kWE
+U+12B5:kW
+U+12B8:Ke
+U+12B9:Ku
+U+12BA:Ki
+U+12BB:Ka
+U+12BC:KE
+0x4b	U+12BD	#:K
+U+12BE:Ko
+U+12C0:KWe
+U+12C2:KWi
+U+12C3:KWa
+U+12C4:KWE
+U+12C5:KW
+U+12C8:we
+U+12C9:wu
+U+12CA:wi
+U+12CB:wa
+U+12CC:wE
+0x77	U+12CD	#:w
+U+12CE:wo
+U+12D0:`e
+U+12D1:`u
+U+12D2:`i
+U+12D3:`a
+U+12D4:`E
+U+12D5:`I
+U+12D6:`o
+U+12D8:ze
+U+12D9:zu
+U+12DA:zi
+U+12DB:za
+U+12DC:zE
+0x7a	U+12DD	#:z
+U+12DE:zo
+U+12DF:zWa
+U+12E0:Ze
+U+12E1:Zu
+U+12E2:Zi
+U+12E3:Za
+U+12E4:ZE
+0x5a	U+12E5	#:Z
+U+12E6:Zo
+U+12E7:ZWa
+U+12E8:ye
+U+12E9:yu
+U+12EA:yi
+U+12EB:ya
+U+12EC:yE
+0x79	U+12ED	#:y
+U+12EE:yo
+U+12EF:yWa
+U+12F0:de
+U+12F1:du
+U+12F2:di
+U+12F3:da
+U+12F4:dE
+0x64	U+12F5	#:d
+U+12F6:do
+U+12F7:dWa
+U+12F8:De
+U+12F9:Du
+U+12FA:Di
+U+12FB:Da
+U+12FC:DE
+0x44	U+12FD	#:D
+U+12FE:Do
+U+12FF:DWa
+U+1300:je
+U+1301:ju
+U+1302:ji
+U+1303:ja
+U+1304:jE
+0x6a	U+1305	#:j
+U+1306:jo
+U+1307:jWa
+U+1308:ga
+U+1309:gu
+U+130A:gi
+U+130B:ga
+U+130C:gE
+0x67	U+130D	#:g
+U+130E:go
+U+1310:gWu
+U+1312:gWi
+U+1313:gWa
+U+1314:gWE
+U+1315:gW
+U+1318:Ge
+U+1319:Gu
+U+131A:Gi
+U+131B:Ga
+U+131C:GE
+0x47	U+131D	#:G
+U+131E:Go
+U+131F:GWa
+U+1320:Te
+U+1321:Tu
+U+1322:Ti
+U+1323:Ta
+U+1324:TE
+0x54	U+1325	#:T
+U+1326:To
+U+1327:TWa
+U+1328:Ce
+U+1329:Ca
+U+132A:Cu
+U+132B:Ca
+U+132C:CE
+0x43	U+132D	#:C
+U+132E:Co
+U+132F:CWa
+U+1330:Pe
+U+1331:Pu
+U+1332:Pi
+U+1333:Pa
+U+1334:PE
+0x50	U+1335	#:P
+U+1336:Po
+U+1337:PWa
+U+1338:SWe
+U+1339:SWu
+U+133A:SWi
+U+133B:SWa
+U+133C:SWE
+U+133D:SW
+U+133E:SWo
+U+133F:SWa
+U+1340:`Sa
+U+1341:`Su
+U+1342:`Si
+U+1343:`Sa
+U+1344:`SE
+U+1345:`S
+U+1346:`So
+U+1348:fa
+U+1349:fu
+U+134A:fi
+U+134B:fa
+U+134C:fE
+0x46	U+134D	#:f
+U+134E:fo
+U+134F:fWa
+U+1350:pe
+U+1351:pu
+U+1352:pi
+U+1353:pa
+U+1354:pE
+0x70	U+1355	#:p
+U+1356:po
+U+1357:pWa
+U+1358:mYa
+U+1359:rYa
+U+135A:fYa
+# ETHIOPIC SPACE U+1360 mapped to ASCII space above
+0x3a	U+1361	#::
+U+1362:::
+0x2c	U+1363	#:,
+U+1364:;
+U+1365:-:
+U+1366::-
+U+1367:`?
+U+1368::|:
+U+1369:`1
+U+136A:`2
+U+136B:`3
+U+136C:`4
+U+136D:`5
+U+136E:`6
+U+136F:`7
+U+1370:`8
+U+1371:`9
+U+1372:`10
+U+1373:`20
+U+1374:`30
+U+1375:`40
+U+1376:`50
+U+1377:`60
+U+1378:`70
+U+1379:`80
+U+137A:`90
+U+137B:`100
+U+137C:`10000
+
+
+U+1e00:A-0
+U+1e01:a-0
+U+1e02:B.
+U+1e03:b.
+U+1e04:B-.
+U+1e05:b-.
+U+1e06:B_
+U+1e07:b_
+U+1e08:C,'
+U+1e09:c,'
+U+1e0a:D.
+U+1e0b:d.
+U+1e0c:D-.
+U+1e0d:d-.
+U+1e0e:D_
+U+1e0f:d_
+U+1e10:D,
+U+1e11:d,
+U+1e12:D->
+U+1e13:d->
+U+1e14:E-!
+U+1e15:e-!
+U+1e16:E-'
+U+1e17:e-'
+U+1e18:E->
+U+1e19:e->
+U+1e1a:E-?
+U+1e1b:e-?
+U+1e1c:E,(
+U+1e1d:e,(
+U+1e1e:F.
+U+1e1f:f.
+U+1e20:G-
+U+1e21:g-
+U+1e22:H.
+U+1e23:h.
+U+1e24:H-.
+U+1e25:h-.
+U+1e26:H:
+U+1e27:h:
+U+1e28:H,
+U+1e29:h,
+U+1e2a:H-(
+U+1e2b:h-(
+U+1e2c:I-?
+U+1e2d:i-?
+U+1e2e:I:'
+U+1e2f:i:'
+U+1e30:K'
+U+1e31:k'
+U+1e32:K-.
+U+1e33:k-.
+U+1e34:K_
+U+1e35:k_
+U+1e36:L-.
+U+1e37:l-.
+U+1e38:L--.
+U+1e39:l--.
+U+1e3a:L_
+U+1e3b:l_
+U+1e3c:L->
+U+1e3d:l->
+U+1e3e:M'
+U+1e3f:m'
+U+1e40:M.
+U+1e41:m.
+U+1e42:M-.
+U+1e43:m-.
+U+1e44:N.
+U+1e45:n.
+U+1e46:N-.
+U+1e47:n-.
+U+1e48:N_
+U+1e49:n_
+U+1e4a:N->
+U+1e4b:n->
+U+1e4c:O?'
+U+1e4d:o?'
+U+1e4e:O?:
+U+1e4f:o?:
+U+1e50:O-!
+U+1e51:o-!
+U+1e52:O-'
+U+1e53:o-'
+U+1e54:P'
+U+1e55:p'
+U+1e56:P.
+U+1e57:p.
+U+1e58:R.
+U+1e59:r.
+U+1e5a:R-.
+U+1e5b:r-.
+U+1e5c:R--.
+U+1e5d:r--.
+U+1e5e:R_
+U+1e5f:r_
+U+1e60:S.
+U+1e61:s.
+U+1e62:S-.
+U+1e63:s-.
+U+1e64:S'.
+U+1e65:s'.
+U+1e66:S<.
+U+1e67:s<.
+U+1e68:S.-.
+U+1e69:s.-.
+U+1e6a:T.
+U+1e6b:t.
+U+1e6c:T-.
+U+1e6d:t-.
+U+1e6e:T_
+U+1e6f:t_
+U+1e70:T->
+U+1e71:t->
+U+1e72:U--:
+U+1e73:u--:
+U+1e74:U-?
+U+1e75:u-?
+U+1e76:U->
+U+1e77:u->
+U+1e78:U?'
+U+1e79:u?'
+U+1e7a:U-:
+U+1e7b:u-:
+U+1e7c:V?
+U+1e7d:v?
+U+1e7e:V-.
+U+1e7f:v-.
+U+1e80:W!
+U+1e81:w!
+U+1e82:W'
+U+1e83:w'
+U+1e84:W:
+U+1e85:w:
+U+1e86:W.
+U+1e87:w.
+U+1e88:W-.
+U+1e89:w-.
+U+1e8a:X.
+U+1e8b:x.
+U+1e8c:X:
+U+1e8d:x:
+U+1e8e:Y.
+U+1e8f:y.
+U+1e90:Z>
+U+1e91:z>
+U+1e92:Z-.
+U+1e93:z-.
+U+1e94:Z_
+U+1e95:z_
+U+1e96:h_
+U+1e97:t:
+U+1e98:w0
+U+1e99:y0
+U+1ea0:A-.
+U+1ea1:a-.
+U+1ea2:A2
+U+1ea3:a2
+U+1ea4:A>'
+U+1ea5:a>'
+U+1ea6:A>!
+U+1ea7:a>!
+U+1ea8:A>2
+U+1ea9:a>2
+U+1eaa:A>?
+U+1eab:a>?
+U+1eac:A>-.
+U+1ead:a>-.
+U+1eae:A('
+U+1eaf:a('
+U+1eb0:A(!
+U+1eb1:a(!
+U+1eb2:A(2
+U+1eb3:a(2
+U+1eb4:A(?
+U+1eb5:a(?
+U+1eb6:A(-.
+U+1eb7:a(-.
+U+1eb8:E-.
+U+1eb9:e-.
+U+1eba:E2
+U+1ebb:e2
+U+1ebc:E?
+U+1ebd:e?
+U+1ebe:E>'
+U+1ebf:e>'
+U+1ec0:E>!
+U+1ec1:e>!
+U+1ec2:E>2
+U+1ec3:e>2
+U+1ec4:E>?
+U+1ec5:e>?
+U+1ec6:E>-.
+U+1ec7:e>-.
+U+1ec8:I2
+U+1ec9:i2
+U+1eca:I-.
+U+1ecb:i-.
+U+1ecc:O-.
+U+1ecd:o-.
+U+1ece:O2
+U+1ecf:o2
+U+1ed0:O>'
+U+1ed1:o>'
+U+1ed2:O>!
+U+1ed3:o>!
+U+1ed4:O>2
+U+1ed5:o>2
+U+1ed6:O>?
+U+1ed7:o>?
+U+1ed8:O>-.
+U+1ed9:o>-.
+U+1eda:O9'
+U+1edb:o9'
+U+1edc:O9!
+U+1edd:o9!
+U+1ede:O92
+U+1edf:o92
+U+1ee0:O9?
+U+1ee1:o9?
+U+1ee2:O9-.
+U+1ee3:o9-.
+U+1ee4:U-.
+U+1ee5:u-.
+U+1ee6:U2
+U+1ee7:u2
+U+1ee8:U9'
+U+1ee9:u9'
+U+1eea:U9!
+U+1eeb:u9!
+U+1eec:U92
+U+1eed:u92
+U+1eee:U9?
+U+1eef:u9?
+U+1ef0:U9-.
+U+1ef1:u9-.
+U+1ef2:Y!
+U+1ef3:y!
+U+1ef4:Y-.
+U+1ef5:y-.
+U+1ef6:Y2
+U+1ef7:y2
+U+1ef8:Y?
+U+1ef9:y?
+U+1f00:;'
+U+1f01:,'
+U+1f02:;!
+U+1f03:,!
+U+1f04:?;
+U+1f05:?,
+U+1f06:!:
+U+1f07:?:
+U+1fbf:,,
+U+1fc0:?*
+U+1fc1:?:
+U+1fcd:,!
+U+1fce:,'
+U+1fcf:?,
+U+1fdd:;!
+U+1fde:;'
+U+1fdf:?;
+U+1fed:!:
+U+1fef:!*
+U+1ffe:;;
+0x20	U+2002	U+2004-U+2006  U+2009	# spaces
+U+2003:  
+U+200e:(->)
+U+200f:(<-)
+U+200a:
+0x2d	U+2010	U+2013-U+2015	# hyphen-like
+U+2016:||
+U+2017:=2
+0x60	U+2018		# left single quotation mark
+0x27	U+2019-U+201b	# various single quotation marks 
+0x22	U+201c-U+201f	# various double quotation marks
+U+2020:/-
+U+2021:/=
+U+2022: o 
+U+2025:..
+U+2025:...
+
+# Dont wanna see these:
+# POP DIRECTIONAL FORMATTING      202C
+U+202c:
+# LEFT-TO-RIGHT OVERRIDE  202D
+U+202d:
+
+U+2030: 0/00
+U+2032:'
+U+2033:''
+U+2034:'''
+U+2035:`
+U+2036:``
+U+2037:```
+U+2038:Ca
+U+2039:<
+U+203a:>
+U+203b::X
+U+203c:!!
+U+203e:'-
+U+2044:/
+U+2070:^0
+U+2074:^4
+U+2075:^5
+U+2076:^6
+U+2077:^7
+U+2078:^8
+U+2079:^9
+U+207a:^+
+U+207b:^-
+U+207c:^=
+U+207d:^(
+U+207e:^)
+U+207f:^n
+U+2080:_0
+U+2081:_1
+U+2082:_2
+U+2083:_3
+U+2084:_4
+U+2085:_5
+U+2086:_6
+U+2087:_7
+U+2088:_8
+U+2089:_9
+U+208a:_+
+U+208b:_-
+U+208c:_=
+U+208d:(
+U+208e:)
+U+20a3:Ff
+U+20a4:Li
+U+20a7:Pt
+U+20a9:W=
+U+2103:oC
+U+2105:c/o
+U+2109:oF
+U+2116:No.
+U+2117:PO
+U+211e:Rx
+U+2120:(SM)
+U+2122:(TM)
+U+2126:Ohm
+U+212b:Ang.
+U+2153: 1/3
+U+2154: 2/3
+U+2155: 1/5
+U+2156: 2/5
+U+2157: 3/5
+U+2158: 4/5
+U+2159: 1/6
+U+215a: 5/6
+U+215b: 1/8
+U+215c: 3/8
+U+215d: 5/8
+U+215e: 7/8
+U+2160:I
+U+2161:II
+U+2162:III
+U+2163:IV
+U+2164:V
+U+2165:VI
+U+2166:VII
+U+2167:VIII
+U+2168:IX
+U+2169:X
+U+216a:XI
+U+216b:XII
+U+216c:L
+U+216d:C
+U+216e:D
+U+216f:M
+U+2170:i
+U+2171:ii
+U+2172:iii
+U+2173:iv
+U+2174:v
+U+2175:vi
+U+2176:vii
+U+2177:viii
+U+2178:ix
+U+2179:x
+U+217a:xi
+U+217b:xii
+U+217c:l
+U+217d:c
+U+217e:d
+U+217f:m
+U+2180:1000RCD
+U+2181:5000R
+U+2182:10000R
+U+2190:<-
+U+2191:-!
+U+2192:->
+U+2193:-v
+U+2194:<>
+U+2195:UD
+U+2196:<!!
+U+2197://>
+U+2198:!!>
+U+2199:<//
+U+21a8:UD-
+U+21c0:>V
+U+21d0:<=
+U+21d2:=>
+U+21d4:==
+U+2200:FA
+U+2202:d
+U+2203:TE
+U+2205:{}
+U+2206:decr.
+U+2207:Nabla
+U+2208:(-
+U+220b:-)
+U+220f:*P
+U+2211:+Z
+U+2212: -
+U+2213:-/+
+U+2214:.+
+U+2217:*
+U+2218:Ob
+U+2219:sb
+U+221a:RT
+U+221d:0(
+U+221e:00
+U+221f:-L
+U+2220:-V
+U+2225:PP
+U+2227:AND
+U+2228:OR
+U+2229:(U
+U+222a:)U
+U+222b:In
+U+222c:DI
+U+222e:Io
+U+2234:.:
+U+2235::.
+U+2236::R
+U+2237:::
+U+223c:?1
+U+223e:CG
+U+2243:?-
+U+2245:?=
+U+2248:?2
+U+224c:=?
+U+2253:HI
+U+2260:!=
+U+2261:=3
+U+2264:=<
+U+2265:>=
+U+226a:<<
+U+226b:>>
+U+226e:!<
+U+226f:!>
+U+2282:(C
+U+2283:)C
+U+2286:(_
+U+2287:)_
+U+2299:0.
+U+229a:02
+U+22a5:-T
+U+22c5:.P
+U+22ee::3
+U+22ef:.3
+U+2302:Eh
+U+2308:<7
+U+2309:>7
+U+230a:7<
+U+230b:7>
+U+2310:NI
+U+2312:(A
+U+2315:TR
+U+2318:88
+U+2320:Iu
+U+2321:Il
+U+2329:</
+U+232a:/>
+U+2423:Vs
+U+2440:1h
+U+2441:3h
+U+2442:2h
+U+2443:4h
+U+2446:1j
+U+2447:2j
+U+2448:3j
+U+2449:4j
+U+2460:1-o
+U+2461:2-o
+U+2462:3-o
+U+2463:4-o
+U+2464:5-o
+U+2465:6-o
+U+2466:7-o
+U+2467:8-o
+U+2468:9-o
+U+2469:10-o
+U+246a:11-o
+U+246b:12-o
+U+246c:13-o
+U+246d:14-o
+U+246e:15-o
+U+246f:16-o
+U+2470:17-o
+U+2471:18-o
+U+2472:19-o
+U+2473:20-o
+U+2474:(1)
+U+2475:(2)
+U+2476:(3)
+U+2477:(4)
+U+2478:(5)
+U+2479:(6)
+U+247a:(7)
+U+247b:(8)
+U+247c:(9)
+U+247d:(10)
+U+247e:(11)
+U+247f:(12)
+U+2480:(13)
+U+2481:(14)
+U+2482:(15)
+U+2483:(16)
+U+2484:(17)
+U+2485:(18)
+U+2486:(19)
+U+2487:(20)
+U+2488:1.
+U+2489:2.
+U+248a:3.
+U+248b:4.
+U+248c:5.
+U+248d:6.
+U+248e:7.
+U+248f:8.
+U+2490:9.
+U+2491:10.
+U+2492:11.
+U+2493:12.
+U+2494:13.
+U+2495:14.
+U+2496:15.
+U+2497:16.
+U+2498:17.
+U+2499:18.
+U+249a:19.
+U+249b:20.
+U+249c:(a)
+U+249d:(b)
+U+249e:(c)
+U+249f:(d)
+U+24a0:(e)
+U+24a1:(f)
+U+24a2:(g)
+U+24a3:(h)
+U+24a4:(i)
+U+24a5:(j)
+U+24a6:(k)
+U+24a7:(l)
+U+24a8:(m)
+U+24a9:(n)
+U+24aa:(o)
+U+24ab:(p)
+U+24ac:(q)
+U+24ad:(r)
+U+24ae:(s)
+U+24af:(t)
+U+24b0:(u)
+U+24b1:(v)
+U+24b2:(w)
+U+24b3:(x)
+U+24b4:(y)
+U+24b5:(z)
+U+24b6:A-o
+U+24b7:B-o
+U+24b8:C-o
+U+24b9:D-o
+U+24ba:E-o
+U+24bb:F-o
+U+24bc:G-o
+U+24bd:H-o
+U+24be:I-o
+U+24bf:J-o
+U+24c0:K-o
+U+24c1:L-o
+U+24c2:M-o
+U+24c3:N-o
+U+24c4:O-o
+U+24c5:P-o
+U+24c6:Q-o
+U+24c7:R-o
+U+24c8:S-o
+U+24c9:T-o
+U+24ca:U-o
+U+24cb:V-o
+U+24cc:W-o
+U+24cd:X-o
+U+24ce:Y-o
+U+24cf:Z-o
+U+24d0:a-o
+U+24d1:b-o
+U+24d2:c-o
+U+24d3:d-o
+U+24d4:e-o
+U+24d5:f-o
+U+24d6:g-o
+U+24d7:h-o
+U+24d8:i-o
+U+24d9:j-o
+U+24da:k-o
+U+24db:l-o
+U+24dc:m-o
+U+24dd:n-o
+U+24de:o-o
+U+24df:p-o
+U+24e0:q-o
+U+24e1:r-o
+U+24e2:s-o
+U+24e3:t-o
+U+24e4:u-o
+U+24e5:v-o
+U+24e6:w-o
+U+24e7:x-o
+U+24e8:y-o
+U+24e9:z-o
+U+24ea:0-o
+U+2500:-
+U+2501:=
+U+2502:|
+U+2503:|
+U+2504:-
+U+2505:=
+U+2506:|
+U+2507:|
+U+2508:-
+U+2509:=
+U+250a:|
+U+250b:|
+0x2b	U+250c-U+256c	# box drawings, use +
+U+2571:/
+U+2572:\
+U+2580:TB
+U+2584:LB
+U+2588:FB
+U+258c:lB
+U+2590:RB
+U+2591:.S
+U+2592::S
+U+2593:?S
+U+25a0:fS
+U+25a1:OS
+U+25a2:RO
+U+25a3:Rr
+U+25a4:RF
+U+25a5:RY
+U+25a6:RH
+U+25a7:RZ
+U+25a8:RK
+U+25a9:RX
+U+25aa:sB
+U+25ac:SR
+U+25ad:Or
+U+25b2:UT
+U+25b3:uT
+U+25b6:PR
+U+25b7:Tr
+U+25ba:PR
+U+25bc:Dt
+U+25bd:dT
+U+25c0:PL
+U+25c1:Tl
+U+25c4:PL
+U+25c6:Db
+U+25c7:Dw
+U+25ca:LZ
+U+25cb:0m
+U+25ce:0o
+U+25cf:0M
+U+25d0:0L
+U+25d1:0R
+U+25d8:Sn
+U+25d9:Ic
+U+25e2:Fd
+U+25e3:Bd
+U+25ef:Ci
+U+2605:*2
+U+2606:*1
+U+260e:TEL
+U+260f:tel
+U+261c:<--
+U+261e:-->
+U+263a::-)
+U+263b:(-:
+U+263c:SU
+U+2640:f.
+U+2642:m.
+U+2660:cS
+U+2661:cH
+U+2662:cD
+U+2663:cC
+U+2664:cS-
+U+2665:cH-
+U+2666:cD-
+U+2667:cC-
+U+2669:Md
+U+266a:M8
+U+266b:M2
+U+266c:M16
+U+266d:b
+U+266e:Mx
+U+266f:#
+0x58	U+2713	U+2717	# check marks
+U+2720:-X
+0x20	U+3000	# ideographic space
+U+3001:,_
+U+3002:._
+U+3003:+"
+U+3004:JIS
+U+3005:*_
+U+3006:;_
+U+3007:0_
+U+300a:<+
+U+300b:>+
+U+300c:<'
+U+300d:>'
+U+300e:<"
+U+300f:>"
+U+3010:("
+U+3011:)"
+U+3012:=T
+U+3013:=_
+U+3014:('
+U+3015:)'
+U+3016:(I
+U+3017:)I
+U+301c:-?
+U+3020:=T:)
+U+3041:A5
+U+3042:a5
+U+3043:I5
+U+3044:i5
+U+3045:U5
+U+3046:u5
+U+3047:E5
+U+3048:e5
+U+3049:O5
+U+304a:o5
+U+304b:ka
+U+304c:ga
+U+304d:ki
+U+304e:gi
+U+304f:ku
+U+3050:gu
+U+3051:ke
+U+3052:ge
+U+3053:ko
+U+3054:go
+U+3055:sa
+U+3056:za
+U+3057:si
+U+3058:zi
+U+3059:su
+U+305a:zu
+U+305b:se
+U+305c:ze
+U+305d:so
+U+305e:zo
+U+305f:ta
+U+3060:da
+U+3061:ti
+U+3062:di
+U+3063:tU
+U+3064:tu
+U+3065:du
+U+3066:te
+U+3067:de
+U+3068:to
+U+3069:do
+U+306a:na
+U+306b:ni
+U+306c:nu
+U+306d:ne
+U+306e:no
+U+306f:ha
+U+3070:ba
+U+3071:pa
+U+3072:hi
+U+3073:bi
+U+3074:pi
+U+3075:hu
+U+3076:bu
+U+3077:pu
+U+3078:he
+U+3079:be
+U+307a:pe
+U+307b:ho
+U+307c:bo
+U+307d:po
+U+307e:ma
+U+307f:mi
+U+3080:mu
+U+3081:me
+U+3082:mo
+U+3083:yA
+U+3084:ya
+U+3085:yU
+U+3086:yu
+U+3087:yO
+U+3088:yo
+U+3089:ra
+U+308a:ri
+U+308b:ru
+U+308c:re
+U+308d:ro
+U+308e:wA
+U+308f:wa
+U+3090:wi
+U+3091:we
+U+3092:wo
+U+3093:n5
+U+3094:vu
+U+309b:"5
+U+309c:05
+U+309d:*5
+U+309e:+5
+U+30a1:a6
+U+30a2:A6
+U+30a3:i6
+U+30a4:I6
+U+30a5:u6
+U+30a6:U6
+U+30a7:e6
+U+30a8:E6
+U+30a9:o6
+U+30aa:O6
+U+30ab:Ka
+U+30ac:Ga
+U+30ad:Ki
+U+30ae:Gi
+U+30af:Ku
+U+30b0:Gu
+U+30b1:Ke
+U+30b2:Ge
+U+30b3:Ko
+U+30b4:Go
+U+30b5:Sa
+U+30b6:Za
+U+30b7:Si
+U+30b8:Zi
+U+30b9:Su
+U+30ba:Zu
+U+30bb:Se
+U+30bc:Ze
+U+30bd:So
+U+30be:Zo
+U+30bf:Ta
+U+30c0:Da
+U+30c1:Ti
+U+30c2:Di
+U+30c3:TU
+U+30c4:Tu
+U+30c5:Du
+U+30c6:Te
+U+30c7:De
+U+30c8:To
+U+30c9:Do
+U+30ca:Na
+U+30cb:Ni
+U+30cc:Nu
+U+30cd:Ne
+U+30ce:No
+U+30cf:Ha
+U+30d0:Ba
+U+30d1:Pa
+U+30d2:Hi
+U+30d3:Bi
+U+30d4:Pi
+U+30d5:Hu
+U+30d6:Bu
+U+30d7:Pu
+U+30d8:He
+U+30d9:Be
+U+30da:Pe
+U+30db:Ho
+U+30dc:Bo
+U+30dd:Po
+U+30de:Ma
+U+30df:Mi
+U+30e0:Mu
+U+30e1:Me
+U+30e2:Mo
+U+30e3:YA
+U+30e4:Ya
+U+30e5:YU
+U+30e6:Yu
+U+30e7:YO
+U+30e8:Yo
+U+30e9:Ra
+U+30ea:Ri
+U+30eb:Ru
+U+30ec:Re
+U+30ed:Ro
+U+30ee:WA
+U+30ef:Wa
+U+30f0:Wi
+U+30f1:We
+U+30f2:Wo
+U+30f3:N6
+U+30f4:Vu
+U+30f5:KA
+U+30f6:KE
+U+30f7:Va
+U+30f8:Vi
+U+30f9:Ve
+U+30fa:Vo
+U+30fb:.6
+U+30fc:-6
+U+30fd:*6
+U+30fe:+6
+U+3105:b4
+U+3106:p4
+U+3107:m4
+U+3108:f4
+U+3109:d4
+U+310a:t4
+U+310b:n4
+U+310c:l4
+U+310d:g4
+U+310e:k4
+U+310f:h4
+U+3110:j4
+U+3111:q4
+U+3112:x4
+U+3113:zh
+U+3114:ch
+U+3115:sh
+U+3116:r4
+U+3117:z4
+U+3118:c4
+U+3119:s4
+U+311a:a4
+U+311b:o4
+U+311c:e4
+U+311d:eh4
+U+311e:ai
+U+311f:ei
+U+3120:au
+U+3121:ou
+U+3122:an
+U+3123:en
+U+3124:aN
+U+3125:eN
+U+3126:er
+U+3127:i4
+U+3128:u4
+U+3129:iu
+U+312a:v4
+U+312b:nG
+U+312c:gn
+U+321c:(JU)
+U+3220:1c
+U+3221:2c
+U+3222:3c
+U+3223:4c
+U+3224:5c
+U+3225:6c
+U+3226:7c
+U+3227:8c
+U+3228:9c
+U+3229:10c
+U+327f:KSC
+U+33c2:am
+U+33d8:pm
+U+fb00:ff
+U+fb01:fi
+U+fb02:fl
+U+fb03:ffi
+U+fb04:ffl
+U+fb05:St
+U+fb06:st
+U+fe7d:3+;
+U+fe82:aM.
+U+fe84:aH.
+U+fe88:ah.
+U+fe8d:a+-
+U+fe8e:a+.
+U+fe8f:b+-
+U+fe90:b+.
+U+fe91:b+,
+U+fe92:b+;
+U+fe93:tm-
+U+fe94:tm.
+U+fe95:t+-
+U+fe96:t+.
+U+fe97:t+,
+U+fe98:t+;
+U+fe99:tk-
+U+fe9a:tk.
+U+fe9b:tk,
+U+fe9c:tk;
+U+fe9d:g+-
+U+fe9e:g+.
+U+fe9f:g+,
+U+fea0:g+;
+U+fea1:hk-
+U+fea2:hk.
+U+fea3:hk,
+U+fea4:hk;
+U+fea5:x+-
+U+fea6:x+.
+U+fea7:x+,
+U+fea8:x+;
+U+fea9:d+-
+U+feaa:d+.
+U+feab:dk-
+U+feac:dk.
+U+fead:r+-
+U+feae:r+.
+U+feaf:z+-
+U+feb0:z+.
+U+feb1:s+-
+U+feb2:s+.
+U+feb3:s+,
+U+feb4:s+;
+U+feb5:sn-
+U+feb6:sn.
+U+feb7:sn,
+U+feb8:sn;
+U+feb9:c+-
+U+feba:c+.
+U+febb:c+,
+U+febc:c+;
+U+febd:dd-
+U+febe:dd.
+U+febf:dd,
+U+fec0:dd;
+U+fec1:tj-
+U+fec2:tj.
+U+fec3:tj,
+U+fec4:tj;
+U+fec5:zH-
+U+fec6:zH.
+U+fec7:zH,
+U+fec8:zH;
+U+fec9:e+-
+U+feca:e+.
+U+fecb:e+,
+U+fecc:e+;
+U+fecd:i+-
+U+fece:i+.
+U+fecf:i+,
+U+fed0:i+;
+U+fed1:f+-
+U+fed2:f+.
+U+fed3:f+,
+U+fed4:f+;
+U+fed5:q+-
+U+fed6:q+.
+U+fed7:q+,
+U+fed8:q+;
+U+fed9:k+-
+U+feda:k+.
+U+fedb:k+,
+U+fedc:k+;
+U+fedd:l+-
+U+fede:l+.
+U+fedf:l+,
+U+fee0:l+;
+U+fee1:m+-
+U+fee2:m+.
+U+fee3:m+,
+U+fee4:m+;
+U+fee5:n+-
+U+fee6:n+.
+U+fee7:n+,
+U+fee8:n+;
+U+fee9:h+-
+U+feea:h+.
+U+feeb:h+,
+U+feec:h+;
+U+feed:w+-
+U+feee:w+.
+U+feef:j+-
+U+fef0:j+.
+U+fef1:y+-
+U+fef2:y+.
+U+fef3:y+,
+U+fef4:y+;
+U+fef5:lM-
+U+fef6:lM.
+U+fef7:lH-
+U+fef8:lH.
+U+fef9:lh-
+U+fefa:lh.
+U+fefb:la-
+U+fefc:la.
+U+0000:NU
+U+0001:SH
+U+0002:SX
+U+0003:EX
+U+0004:ET
+U+0005:EQ
+U+0006:AK
+U+0007:BL
+U+0008:BS
+U+0009:HT
+U+000a:LF
+U+000b:VT
+U+000c:FF
+U+000d:CR
+U+000e:SO
+U+000f:SI
+U+0010:DL
+U+0011:D1
+U+0012:D2
+U+0013:D3
+U+0014:D4
+U+0015:NK
+U+0016:SY
+U+0017:EB
+U+0018:CN
+U+0019:EM
+U+001a:SB
+U+001b:EC
+U+001c:FS
+U+001d:GS
+U+001e:RS
+U+001f:US
+U+007f:DT
+U+0080:PA
+U+0081:HO
+U+0082:BH
+U+0083:NH
+U+0084:IN
+U+0085:NL
+U+0086:SA
+U+0087:ES
+U+0088:HS
+U+0089:HJ
+U+008a:VS
+U+008b:PD
+U+008c:PU
+U+008d:RI
+U+008e:S2
+U+008f:S3
+U+0090:DC
+U+0091:P1
+U+0092:P2
+U+0093:TS
+U+0094:CC
+U+0095:MW
+U+0096:SG
+U+0097:EG
+U+0098:SS
+U+0099:GC
+U+009a:SC
+U+009b:CI
+U+009c:ST
+U+009d:OC
+U+009e:PM
+U+009f:AC
+U+e000:"3
+U+e001:"1
+U+e002:"!
+U+e003:"'
+U+e004:">
+U+e005:"?
+U+e006:"-
+U+e007:"(
+U+e008:".
+U+e009:":
+U+e00a:"0
+U+e00b:",
+U+e00c:"_
+U+e00d:""
+U+e00e:";
+U+e00f:"<
+U+e010:"=
+U+e011:"/
+U+e012:"p
+U+e013:"d
+U+e014:"i
+U+e015:+_
+U+e016:a+:
+U+e017:Tel
+U+e018:UA
+U+e019:UB
+U+e01e:Mc
+U+e01f:Fl
+
+U+e020:pm
+U+e021:Tel
+U+e022:a+:
+U+e023:Fl
+U+e024:GF
+U+e025:>V
+U+e026:!*
+U+e027:?*
+U+e028:J<
diff --git a/src/chrtrans/iso01_uni.tbl b/src/chrtrans/iso01_uni.tbl
new file mode 100644
index 00000000..15dc6f6a
--- /dev/null
+++ b/src/chrtrans/iso01_uni.tbl
@@ -0,0 +1,427 @@
+#
+# Unicode mapping table for ISO 8859-1 fonts iso01.*
+# [use: unicode_start iso01.f16 iso01]
+#
+#Shall this become the "default" translation?
+#Meaning of that is currently not well defined.  It is different
+#from the default input or default output charset...
+#but there has to be exactly one table marked as "default".
+D0
+#
+#The MIME name of this charset. 
+Miso-8859-1
+
+#Name as a Display Charset (used on Options screen)
+OISO Latin 1
+
+0x20	U+0020  U+1360 
+0x21-0x62	idem
+# The following line is an example for mapping several accented versions
+# of small letter 'c' to 'c':
+0x63	U+0063 U+0107 U+0109 U+010B U+010D
+0x64-0x7e	idem
+0x7f		U+2302
+0xa0-0xff	idem
+#0x00	U+fffd   # don't let failed char lookups return '\0'
+# Mappings of cntrl chars, left in from original, just to see what happens...
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+
+0xd0	U+0110	# Dstrok and ETH are nearly the same...
+
+# Dont wanna see these:
+# POP DIRECTIONAL FORMATTING      202C
+U+202c:
+# LEFT-TO-RIGHT OVERRIDE  202D
+U+202d:
+
+# Replacement strings for Ethiopic characters
+U+1200:he
+U+1201:hu
+U+1202:hi
+U+1203:ha
+U+1204:hE
+U+1205:h
+U+1206:ho
+U+1208:le
+U+1209:lu
+U+120A:li
+U+120B:la
+U+120C:lE
+U+120D:l
+U+120E:lo
+U+120F:lWa
+U+1210:He
+U+1211:Hu
+U+1212:Hi
+U+1213:Ha
+U+1214:HE
+U+1215:H
+U+1216:Ho
+U+1217:HWa
+U+1218:me
+U+1219:mu
+U+121A:mi
+U+121B:ma
+U+121C:mE
+U+121D:m
+U+121E:mo
+U+121F:mWa
+U+1220:`se
+U+1221:`su
+U+1222:`si
+U+1223:`sa
+U+1224:`sE
+U+1225:`s
+U+1226:`so
+U+1227:`sWa
+U+1228:re
+U+1229:ru
+U+122A:ri
+U+122B:ra
+U+122C:rE
+U+122D:r
+U+122E:ro
+U+122F:rWa
+U+1230:se
+U+1231:su
+U+1232:si
+U+1233:sa
+U+1234:sE
+U+1235:s
+U+1236:so
+U+1237:sWa
+U+1238:xe
+U+1239:xu
+U+123A:xi
+U+123B:xa
+U+123C:xE
+U+123D:xa
+U+123E:xo
+U+123F:xWa
+U+1240:qe
+U+1241:qu
+U+1242:qi
+U+1243:qa
+U+1244:qE
+U+1245:q
+U+1246:qo
+U+1248:qWe
+U+124A:qWi
+U+124B:qWa
+U+124C:qWE
+U+124D:qW
+U+1250:Qe
+U+1251:Qu
+U+1252:Qi
+U+1253:Qa
+U+1254:QE
+U+1255:Q
+U+1256:Qo
+U+1258:QWe
+U+125A:QWi
+U+125B:QWa
+U+125C:QWE
+U+125D:QW
+U+1260:be
+U+1261:bu
+U+1262:bi
+U+1263:ba
+U+1264:bE
+U+1265:b
+U+1266:bo
+U+1267:bWa
+U+1268:ve
+U+1269:vu
+U+126A:vi
+U+126B:va
+U+126C:vE
+U+126D:v
+U+126E:vo
+U+126F:vWa
+U+1270:te
+U+1271:tu
+U+1272:ti
+U+1273:ta
+U+1274:tE
+U+1275:t
+U+1276:to
+U+1277:tWa
+U+1278:ce
+U+1279:cu
+U+127A:ci
+U+127B:ca
+U+127C:cE
+U+127D:c
+U+127E:co
+U+127F:cWa
+U+1280:`he
+U+1281:`hu
+U+1282:`hi
+U+1283:`ha
+U+1284:`hE
+U+1285:`h
+U+1286:`ho
+U+1288:hWe
+U+128A:hWi
+U+128B:hWa
+U+128C:hWE
+U+128D:hW
+U+1290:na
+U+1291:nu
+U+1292:ni
+U+1293:na
+U+1294:nE
+U+1295:n
+U+1296:no
+U+1297:nWa
+U+1298:Ne
+U+1299:Nu
+U+129A:Ni
+U+129B:Na
+U+129C:NE
+U+129D:N
+U+129E:No
+U+129F:NWa
+U+12A0:e
+U+12A1:u
+U+12A2:i
+U+12A3:a
+U+12A4:E
+U+12A5:I
+U+12A6:o
+U+12A7:e3
+U+12A8:ke
+U+12A9:ku
+U+12AA:ki
+U+12AB:ka
+U+12AC:kE
+U+12AD:k
+U+12AE:ko
+U+12B0:kWe
+U+12B2:kWi
+U+12B3:kWa
+U+12B4:kWE
+U+12B5:kW
+U+12B8:Ke
+U+12B9:Ku
+U+12BA:Ki
+U+12BB:Ka
+U+12BC:KE
+U+12BD:K
+U+12BE:Ko
+U+12C0:KWe
+U+12C2:KWi
+U+12C3:KWa
+U+12C4:KWE
+U+12C5:KW
+U+12C8:we
+U+12C9:wu
+U+12CA:wi
+U+12CB:wa
+U+12CC:wE
+U+12CD:w
+U+12CE:wo
+U+12D0:`e
+U+12D1:`u
+U+12D2:`i
+U+12D3:`a
+U+12D4:`E
+U+12D5:`I
+U+12D6:`o
+U+12D8:ze
+U+12D9:zu
+U+12DA:zi
+U+12DB:za
+U+12DC:zE
+U+12DD:z
+U+12DE:zo
+U+12DF:zWa
+U+12E0:Ze
+U+12E1:Zu
+U+12E2:Zi
+U+12E3:Za
+U+12E4:ZE
+U+12E5:Z
+U+12E6:Zo
+U+12E7:ZWa
+U+12E8:ye
+U+12E9:yu
+U+12EA:yi
+U+12EB:ya
+U+12EC:yE
+U+12ED:y
+U+12EE:yo
+U+12EF:yWa
+U+12F0:de
+U+12F1:du
+U+12F2:di
+U+12F3:da
+U+12F4:dE
+U+12F5:d
+U+12F6:do
+U+12F7:dWa
+U+12F8:De
+U+12F9:Du
+U+12FA:Di
+U+12FB:Da
+U+12FC:DE
+U+12FD:D
+U+12FE:Do
+U+12FF:DWa
+U+1300:je
+U+1301:ju
+U+1302:ji
+U+1303:ja
+U+1304:jE
+U+1305:j
+U+1306:jo
+U+1307:jWa
+U+1308:ga
+U+1309:gu
+U+130A:gi
+U+130B:ga
+U+130C:gE
+U+130D:g
+U+130E:go
+U+1310:gWu
+U+1312:gWi
+U+1313:gWa
+U+1314:gWE
+U+1315:gW
+U+1318:Ge
+U+1319:Gu
+U+131A:Gi
+U+131B:Ga
+U+131C:GE
+U+131D:G
+U+131E:Go
+U+131F:GWa
+U+1320:Te
+U+1321:Tu
+U+1322:Ti
+U+1323:Ta
+U+1324:TE
+U+1325:T
+U+1326:To
+U+1327:TWa
+U+1328:Ce
+U+1329:Ca
+U+132A:Cu
+U+132B:Ca
+U+132C:CE
+U+132D:C
+U+132E:Co
+U+132F:CWa
+U+1330:Pe
+U+1331:Pu
+U+1332:Pi
+U+1333:Pa
+U+1334:PE
+U+1335:P
+U+1336:Po
+U+1337:PWa
+U+1338:SWe
+U+1339:SWu
+U+133A:SWi
+U+133B:SWa
+U+133C:SWE
+U+133D:SW
+U+133E:SWo
+U+133F:SWa
+U+1340:`Sa
+U+1341:`Su
+U+1342:`Si
+U+1343:`Sa
+U+1344:`SE
+U+1345:`S
+U+1346:`So
+U+1348:fa
+U+1349:fu
+U+134A:fi
+U+134B:fa
+U+134C:fE
+U+134D:f
+U+134E:fo
+U+134F:fWa
+U+1350:pe
+U+1351:pu
+U+1352:pi
+U+1353:pa
+U+1354:pE
+U+1355:p
+U+1356:po
+U+1357:pWa
+U+1358:mYa
+U+1359:rYa
+U+135A:fYa
+# ETHIOPIC SPACE U+1360 mapped to ASCII space above
+U+1361::
+U+1362:::
+U+1363:,
+U+1364:;
+U+1365:-:
+U+1366::-
+U+1367:`?
+U+1368::|:
+U+1369:`1
+U+136A:`2
+U+136B:`3
+U+136C:`4
+U+136D:`5
+U+136E:`6
+U+136F:`7
+U+1370:`8
+U+1371:`9
+U+1372:`10
+U+1373:`20
+U+1374:`30
+U+1375:`40
+U+1376:`50
+U+1377:`60
+U+1378:`70
+U+1379:`80
+U+137A:`90
+U+137B:`100
+U+137C:`10000
+
+
+# TRADE MARK SIGN:
+U+2122:(TM)
+
+0x60    U+2018          # left single quotation mark
+0x27    U+2019-U+201b   # various single quotation marks
+0x22    U+201c-U+201f   # various double quotation marks
diff --git a/src/chrtrans/iso02_uni.tbl b/src/chrtrans/iso02_uni.tbl
new file mode 100644
index 00000000..dec4d843
--- /dev/null
+++ b/src/chrtrans/iso02_uni.tbl
@@ -0,0 +1,155 @@
+#
+# Unicode mapping table for ISO 8859-2 fonts iso02.*
+# [use: unicode_start iso02.f16 iso02]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+
+#The MIME name of this charset. 
+Miso-8859-2
+
+#Name as a Display Charset (used on Options screen)
+OISO Latin 2
+ 
+#
+#0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+02d8
+0xa3	U+0141
+0xa4	U+00a4
+0xa5	U+013d
+0xa6	U+015a
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0160
+0xaa	U+015e
+0xab	U+0164
+0xac	U+0179
+0xad	U+00ad
+0xae	U+017d
+0xaf	U+017b
+0xb0	U+00b0
+0xb1	U+0105
+0xb2	U+02db
+0xb3	U+0142
+0xb4	U+00b4
+0xb5	U+013e
+0xb6	U+015b
+0xb7	U+02c7
+0xb8	U+00b8
+0xb9	U+0161
+0xba	U+015f
+0xbb	U+0165
+0xbc	U+017a
+0xbd	U+02dd
+0xbe	U+017e
+0xbf	U+017c
+0xc0	U+0154
+0xc1	U+00c1
+0xc2	U+00c2
+0xc3	U+0102
+0xc4	U+00c4
+0xc5	U+0139
+0xc6	U+0106
+0xc7	U+00c7
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+011a
+0xcd	U+00cd
+0xce	U+00ce
+0xcf	U+010e
+0xd0	U+0110 U+00d0
+0xd1	U+0143
+0xd2	U+0147
+0xd3	U+00d3
+0xd4	U+00d4
+0xd5	U+0150
+0xd6	U+00d6
+0xd7	U+00d7
+0xd8	U+0158
+0xd9	U+016e
+0xda	U+00da
+0xdb	U+0170
+0xdc	U+00dc
+0xdd	U+00dd
+0xde	U+0162
+0xdf	U+00df
+0xe0	U+0155
+0xe1	U+00e1
+0xe2	U+00e2
+0xe3	U+0103
+0xe4	U+00e4
+0xe5	U+013a
+0xe6	U+0107
+0xe7	U+00e7
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+011b
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+010f
+0xf0	U+0111
+0xf1	U+0144
+0xf2	U+0148
+0xf3	U+00f3
+0xf4	U+00f4
+0xf5	U+0151
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+0159
+0xf9	U+016f
+0xfa	U+00fa
+0xfb	U+0171
+0xfc	U+00fc
+0xfd	U+00fd
+0xfe	U+0163
+0xff	U+02d9
+
+
+# TRADE MARK SIGN:
+U+2122:(TM)
+
+0x60    U+2018          # left single quotation mark
+0x27    U+2019-U+201b   # various single quotation marks
+0x22    U+201c-U+201f   # various double quotation marks
diff --git a/src/chrtrans/iso03_uni.tbl b/src/chrtrans/iso03_uni.tbl
new file mode 100644
index 00000000..875f4d41
--- /dev/null
+++ b/src/chrtrans/iso03_uni.tbl
@@ -0,0 +1,149 @@
+#
+# Unicode mapping table for ISO 8859-3 fonts iso03.*
+# [use: unicode_start iso03.f16 iso03]
+#
+#The MIME name of this charset. 
+Miso-8859-3
+
+#Name as a Display Charset (used on Options screen)
+OISO Latin 3
+ 
+0x20-0x7e	idem
+0x7f		U+2302
+#
+#0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0126
+0xa2	U+02d8
+0xa3	U+00a3
+0xa4	U+00a4
+# 0xa5	unused
+0xa6	U+0124
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0130
+0xaa	U+015e
+0xab	U+011e
+0xac	U+0134
+0xad	U+00ad
+# 0xae	unused
+0xaf	U+017b
+0xb0	U+00b0
+0xb1	U+0127
+0xb2	U+00b2
+0xb3	U+00b3
+0xb4	U+00b4
+0xb5	U+00b5
+0xb6	U+0125
+0xb7	U+00b7
+0xb8	U+00b8
+0xb9	U+0131
+0xba	U+015f
+0xbb	U+011f
+0xbc	U+0135
+0xbd	U+00bd
+# 0xbe	unused
+0xbf	U+017c
+0xc0	U+00c0
+0xc1	U+00c1
+0xc2	U+00c2
+# 0xc3	unused
+0xc4	U+00c4
+0xc5	U+010a
+0xc6	U+0108
+0xc7	U+00c7
+0xc8	U+00c8
+0xc9	U+00c9
+0xca	U+00ca
+0xcb	U+00cb
+0xcc	U+00cc
+0xcd	U+00cd
+0xce	U+00ce
+0xcf	U+00cf
+# 0xd0	unused
+0xd1	U+00d1
+0xd2	U+00d2
+0xd3	U+00d3
+0xd4	U+00d4
+0xd5	U+0120
+0xd6	U+00d6
+0xd7	U+00d7
+0xd8	U+011c
+0xd9	U+00d9
+0xda	U+00da
+0xdb	U+00db
+0xdc	U+00dc
+0xdd	U+016c
+0xde	U+015c
+0xdf	U+00df
+0xe0	U+00e0
+0xe1	U+00e1
+0xe2	U+00e2
+# 0xe3	unused
+0xe4	U+00e4
+0xe5	U+010b
+0xe6	U+0109
+0xe7	U+00e7
+0xe8	U+00e8
+0xe9	U+00e9
+0xea	U+00ea
+0xeb	U+00eb
+0xec	U+00ec
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+00ef
+# 0xf0	unused
+0xf1	U+00f1
+0xf2	U+00f2
+0xf3	U+00f3
+0xf4	U+00f4
+0xf5	U+0121
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+011d
+0xf9	U+00f9
+0xfa	U+00fa
+0xfb	U+00fb
+0xfc	U+00fc
+0xfd	U+016d
+0xfe	U+015d
+0xff	U+02d9
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/iso04_uni.tbl b/src/chrtrans/iso04_uni.tbl
new file mode 100644
index 00000000..d0e6f8e2
--- /dev/null
+++ b/src/chrtrans/iso04_uni.tbl
@@ -0,0 +1,149 @@
+#
+# Unicode mapping table for ISO 8859-4 fonts iso04.*
+# [use: unicode_start iso04.f16 iso04]
+#
+#The MIME name of this charset. 
+Miso-8859-4
+
+#Name as a Display Charset (used on Options screen)
+OISO Latin 4
+ 
+0x20-0x7e	idem
+0x7f		U+2302
+#
+#0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+0138
+0xa3	U+0156
+0xa4	U+00a4
+0xa5	U+0128
+0xa6	U+013b
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+0160
+0xaa	U+0112
+0xab	U+0122
+0xac	U+0166
+0xad	U+00ad
+0xae	U+017d
+0xaf	U+00af
+0xb0	U+00b0
+0xb1	U+0105
+0xb2	U+02db
+0xb3	U+0157
+0xb4	U+00b4
+0xb5	U+0129
+0xb6	U+013c
+0xb7	U+02c7
+0xb8	U+00b8
+0xb9	U+0161
+0xba	U+0113
+0xbb	U+0123
+0xbc	U+0167
+0xbd	U+014a
+0xbe	U+017e
+0xbf	U+014b
+0xc0	U+0100
+0xc1	U+00c1
+0xc2	U+00c2
+0xc3	U+00c3
+0xc4	U+00c4
+0xc5	U+00c5
+0xc6	U+00c6
+0xc7	U+012e
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+0116
+0xcd	U+00cd
+0xce	U+00ce
+0xcf	U+012a
+0xd0	U+0110
+0xd1	U+0145
+0xd2	U+014c
+0xd3	U+0136
+0xd4	U+00d4
+0xd5	U+00d5
+0xd6	U+00d6
+0xd7	U+00d7
+0xd8	U+00d8
+0xd9	U+0172
+0xda	U+00da
+0xdb	U+00db
+0xdc	U+00dc
+0xdd	U+0168
+0xde	U+016a
+0xdf	U+00df
+0xe0	U+0101
+0xe1	U+00e1
+0xe2	U+00e2
+0xe3	U+00e3
+0xe4	U+00e4
+0xe5	U+00e5
+0xe6	U+00e6
+0xe7	U+012f
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+0117
+0xed	U+00ed
+0xee	U+00ee
+0xef	U+012b
+0xf0	U+0111
+0xf1	U+0146
+0xf2	U+014d
+0xf3	U+0137
+0xf4	U+00f4
+0xf5	U+00f5
+0xf6	U+00f6
+0xf7	U+00f7
+0xf8	U+00f8
+0xf9	U+0173
+0xfa	U+00fa
+0xfb	U+00fb
+0xfc	U+00fc
+0xfd	U+0169
+0xfe	U+016b
+0xff	U+02d9
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/iso05_uni.tbl b/src/chrtrans/iso05_uni.tbl
new file mode 100644
index 00000000..5179dc8d
--- /dev/null
+++ b/src/chrtrans/iso05_uni.tbl
@@ -0,0 +1,149 @@
+#
+# Unicode mapping table for ISO 8859-5 fonts iso05.*
+# [use: unicode_start iso05.f16 iso05]
+#
+#The MIME name of this charset. 
+Miso-8859-5
+
+#Name as a Display Charset (used on Options screen)
+OISO 8859-5 Cyrillic
+
+0x20-0x7e	idem
+0x7f		U+2302
+#
+#0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0401
+0xa2	U+0402
+0xa3	U+0403
+0xa4	U+0404
+0xa5	U+0405
+0xa6	U+0406
+0xa7	U+0407
+0xa8	U+0408
+0xa9	U+0409
+0xaa	U+040a
+0xab	U+040b
+0xac	U+040c
+0xad	U+00ad
+0xae	U+040e
+0xaf	U+040f
+0xb0	U+0410
+0xb1	U+0411
+0xb2	U+0412
+0xb3	U+0413
+0xb4	U+0414
+0xb5	U+0415
+0xb6	U+0416
+0xb7	U+0417
+0xb8	U+0418
+0xb9	U+0419
+0xba	U+041a
+0xbb	U+041b
+0xbc	U+041c
+0xbd	U+041d
+0xbe	U+041e
+0xbf	U+041f
+0xc0	U+0420
+0xc1	U+0421
+0xc2	U+0422
+0xc3	U+0423
+0xc4	U+0424
+0xc5	U+0425
+0xc6	U+0426
+0xc7	U+0427
+0xc8	U+0428
+0xc9	U+0429
+0xca	U+042a
+0xcb	U+042b
+0xcc	U+042c
+0xcd	U+042d
+0xce	U+042e
+0xcf	U+042f
+0xd0	U+0430
+0xd1	U+0431
+0xd2	U+0432
+0xd3	U+0433
+0xd4	U+0434
+0xd5	U+0435
+0xd6	U+0436
+0xd7	U+0437
+0xd8	U+0438
+0xd9	U+0439
+0xda	U+043a
+0xdb	U+043b
+0xdc	U+043c
+0xdd	U+043d
+0xde	U+043e
+0xdf	U+043f
+0xe0	U+0440
+0xe1	U+0441
+0xe2	U+0442
+0xe3	U+0443
+0xe4	U+0444
+0xe5	U+0445
+0xe6	U+0446
+0xe7	U+0447
+0xe8	U+0448
+0xe9	U+0449
+0xea	U+044a
+0xeb	U+044b
+0xec	U+044c
+0xed	U+044d
+0xee	U+044e
+0xef	U+044f
+0xf0	U+2116
+0xf1	U+0451
+0xf2	U+0452
+0xf3	U+0453
+0xf4	U+0454
+0xf5	U+0455
+0xf6	U+0456
+0xf7	U+0457
+0xf8	U+0458
+0xf9	U+0459
+0xfa	U+045a
+0xfb	U+045b
+0xfc	U+045c
+0xfd	U+00a7
+0xfe	U+045e
+0xff	U+045f
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/iso06_uni.tbl b/src/chrtrans/iso06_uni.tbl
new file mode 100644
index 00000000..61630521
--- /dev/null
+++ b/src/chrtrans/iso06_uni.tbl
@@ -0,0 +1,98 @@
+#
+# Unicode mapping table for ISO 8859-6 fonts iso06.*
+# [use: unicode_start iso06.f16 iso06]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa4	U+00a4
+0xac	U+060c
+0xad	U+00ad
+0xbb	U+061b
+0xbf	U+061f
+0xc1	U+0621
+0xc2	U+0622
+0xc3	U+0623
+0xc4	U+0624
+0xc5	U+0625
+0xc6	U+0626
+0xc7	U+0627
+0xc8	U+0628
+0xc9	U+0629
+0xca	U+062a
+0xcb	U+062b
+0xcc	U+062c
+0xcd	U+062d
+0xce	U+062e
+0xcf	U+062f
+0xd0	U+0630
+0xd1	U+0631
+0xd2	U+0632
+0xd3	U+0633
+0xd4	U+0634
+0xd5	U+0635
+0xd6	U+0636
+0xd7	U+0637
+0xd8	U+0638
+0xd9	U+0639
+0xda	U+063a
+0xe0	U+0640
+0xe1	U+0641
+0xe2	U+0642
+0xe3	U+0643
+0xe4	U+0644
+0xe5	U+0645
+0xe6	U+0646
+0xe7	U+0647
+0xe8	U+0648
+0xe9	U+0649
+0xea	U+064a
+0xeb	U+064b
+0xec	U+064c
+0xed	U+064d
+0xee	U+064e
+0xef	U+064f
+0xf0	U+0650
+0xf1	U+0651
+0xf2	U+0652
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/iso07_uni.tbl b/src/chrtrans/iso07_uni.tbl
new file mode 100644
index 00000000..4698888a
--- /dev/null
+++ b/src/chrtrans/iso07_uni.tbl
@@ -0,0 +1,143 @@
+#
+# Unicode mapping table for ISO 8859-7 fonts iso07.*
+# [use: unicode_start iso07.f16 iso07]
+#
+#The MIME name of this charset. 
+Miso-8859-7
+
+#Name as a Display Charset (used on Options screen)
+OISO 8859-7 Greek
+ 
+0x20-0x7e	idem
+0x7f		U+2302
+#
+#0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0371
+0xa2	U+0372
+0xa3	U+00a3
+0xa6	U+00a6
+0xa7	U+00a7
+0xa8	U+00a8
+0xa9	U+00a9
+0xab	U+00ab
+0xac	U+00ac
+0xad	U+00ad
+0xaf	U+2015
+0xb0	U+00b0
+0xb1	U+00b1
+0xb2	U+00b2
+0xb3	U+00b3
+0xb4	U+03f3
+0xb5	U+03f4
+0xb6	U+0386
+0xb7	U+00b7
+0xb8	U+0388
+0xb9	U+0389
+0xba	U+038a
+0xbb	U+00bb
+0xbc	U+038c
+0xbd	U+00bd
+0xbe	U+038e
+0xbf	U+038f
+0xc0	U+0390
+0xc1	U+0391
+0xc2	U+0392
+0xc3	U+0393
+0xc4	U+0394
+0xc5	U+0395
+0xc6	U+0396
+0xc7	U+0397
+0xc8	U+0398
+0xc9	U+0399
+0xca	U+039a
+0xcb	U+039b
+0xcc	U+039c
+0xcd	U+039d
+0xce	U+039e
+0xcf	U+039f
+0xd0	U+03a0
+0xd1	U+03a1
+0xd3	U+03a3
+0xd4	U+03a4
+0xd5	U+03a5
+0xd6	U+03a6
+0xd7	U+03a7
+0xd8	U+03a8
+0xd9	U+03a9
+0xda	U+03aa
+0xdb	U+03ab
+0xdc	U+03ac
+0xdd	U+03ad
+0xde	U+03ae
+0xdf	U+03af
+0xe0	U+03b0
+0xe1	U+03b1
+0xe2	U+03b2
+0xe3	U+03b3
+0xe4	U+03b4
+0xe5	U+03b5
+0xe6	U+03b6
+0xe7	U+03b7
+0xe8	U+03b8
+0xe9	U+03b9
+0xea	U+03ba
+0xeb	U+03bb
+0xec	U+03bc
+0xed	U+03bd
+0xee	U+03be
+0xef	U+03bf
+0xf0	U+03c0
+0xf1	U+03c1
+0xf2	U+03c2
+0xf3	U+03c3
+0xf4	U+03c4
+0xf5	U+03c5
+0xf6	U+03c6
+0xf7	U+03c7
+0xf8	U+03c8
+0xf9	U+03c9
+0xfa	U+03ca
+0xfb	U+03cb
+0xfc	U+03cc
+0xfd	U+03cd
+0xfe	U+03ce
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/iso08_uni.tbl b/src/chrtrans/iso08_uni.tbl
new file mode 100644
index 00000000..20ae4ac7
--- /dev/null
+++ b/src/chrtrans/iso08_uni.tbl
@@ -0,0 +1,84 @@
+#
+# Unicode mapping table for ISO 8859-8 fonts iso08.*
+# [use: unicode_start iso08.f16 iso08]
+#
+0x20-0x7e	idem
+0x7f		U+2302
+#
+0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa2-0xa9	idem
+0xaa	U+00d7
+0xab-0xae	idem
+0xaf	U+203e
+0xb0-0xb9	idem
+0xba	U+00f7
+0xbb-0xbe	idem
+0xbf	U+051f
+0xdf	U+2017
+0xe0	U+05d0
+0xe1	U+05d1
+0xe2	U+05d2
+0xe3	U+05d3
+0xe4	U+05d4
+0xe5	U+05d5
+0xe6	U+05d6
+0xe7	U+05d7
+0xe8	U+05d8
+0xe9	U+05d9
+0xea	U+05da
+0xeb	U+05db
+0xec	U+05dc
+0xed	U+05dd
+0xee	U+05de
+0xef	U+05df
+0xf0	U+05e0
+0xf1	U+05e1
+0xf2	U+05e2
+0xf3	U+05e3
+0xf4	U+05e4
+0xf5	U+05e5
+0xf6	U+05e6
+0xf7	U+05e7
+0xf8	U+05e8
+0xf9	U+05e9
+0xfa	U+05ea
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/iso09_uni.tbl b/src/chrtrans/iso09_uni.tbl
new file mode 100644
index 00000000..224cc26c
--- /dev/null
+++ b/src/chrtrans/iso09_uni.tbl
@@ -0,0 +1,63 @@
+#
+# Unicode mapping table for ISO 8859-9 fonts iso09.*
+# [use: unicode_start iso09.f16 iso09]
+#
+#The MIME name of this charset. 
+Miso-8859-9
+
+#Name as a Display Charset (used on Options screen)
+OISO 8859-9 (Latin 5)
+ 
+0x20-0x7e	idem
+0x7f		U+2302
+0xa0-0xcf	idem
+0xd0	U+011e
+0xd1-0xdc	idem
+0xdd	U+0130
+0xde	U+015e
+0xdf-0xef	idem
+0xf0	U+011f
+0xf1-0xfc	idem
+0xfd	U+0131
+0xfe	U+015f
+0xff	U+00ff
+#
+#0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/iso10_uni.tbl b/src/chrtrans/iso10_uni.tbl
new file mode 100644
index 00000000..f1123e3d
--- /dev/null
+++ b/src/chrtrans/iso10_uni.tbl
@@ -0,0 +1,123 @@
+#
+# Unicode mapping table for the fonts iso10.*
+# [use: unicode_start iso10.f16 iso10]
+#
+#This is not default font!
+D0
+
+#The MIME name of this charset. 
+
+Miso-8859-10
+
+#Name as a Display Charset (used on Options screen)
+OISO 8859-10
+ 
+0x20-0x7e	idem
+0x7f		U+2302
+#
+#0x00	U+fffd
+0x01	U+263A
+0x02	U+263B
+0x03	U+2665
+0x04	U+2666
+0x05	U+2663
+0x06	U+2660
+0x07	U+2022
+0x08	U+25D8
+0x09	U+25CB
+0x0A	U+25D9
+0x0B	U+2642
+0x0C	U+2640
+0x0D	U+266A
+0x0E	U+266B
+0x0E	U+266C
+0x0F	U+263C
+0x10	U+25B6
+0x10	U+25BA
+0x11	U+25C0
+0x11	U+25C4
+0x12	U+2195
+0x13	U+203C
+0x14	U+00B6
+0x15	U+00A7
+0x16	U+25AC
+0x17	U+21A8
+0x18	U+2191
+0x19	U+2193
+0x1A	U+2192
+0x1B	U+2190
+0x1C	U+221F
+0x1C	U+2319
+0x1D	U+2194
+0x1E	U+25B2
+0x1F	U+25BC
+#
+0xa0	U+00a0
+0xa1	U+0104
+0xa2	U+0112
+0xa3	U+0122
+0xa4	U+012a
+0xa5	U+0128
+0xa6	U+0136
+0xa7	U+013b
+0xa8	U+0143
+0xa9	U+0156
+0xaa	U+0160
+0xab	U+0166
+0xac	U+017d
+0xad	U+00ad
+0xae	U+0138
+0xaf	U+014a
+0xb0	U+0111
+0xb1	U+0105
+0xb2	U+0113
+0xb3	U+0123
+0xb4	U+012b
+0xb5	U+0129
+0xb6	U+0137
+0xb7	U+013c
+0xb8	U+0144
+0xb9	U+0157
+0xba	U+0161
+0xbb	U+0167
+0xbc	U+017e
+0xbd	U+2015 # HORIZONTAL BAR
+0xbe	U+00df
+0xbf	U+014b
+0xc0	U+0100
+0xc1-0xc6	idem
+0xc7	U+012e
+0xc8	U+010c
+0xc9	U+00c9
+0xca	U+0118
+0xcb	U+00cb
+0xcc	U+0116
+0xcd-0xd0	idem
+0xd1	U+0145
+0xd2	U+014c
+0xd3-0xd6	idem
+0xd7	U+0168
+0xd8	U+00d8
+0xd9	U+0172
+0xda-0xde	idem
+0xdf	U+016a
+0xe0	U+0101
+0xe1-0xe6	idem
+0xe7	U+012f
+0xe8	U+010d
+0xe9	U+00e9
+0xea	U+0119
+0xeb	U+00eb
+0xec	U+0117
+0xed-0xf0	idem
+0xf1	U+0146
+0xf2	U+014d
+0xf3-0xf6	idem
+0xf7	U+0169
+0xf8	U+00f8
+0xf9	U+0173
+0xfa-0xfe	idem
+0xff	U+016b
+
+# TRADE MARK SIGN:
+U+2122:(TM)
diff --git a/src/chrtrans/koi8r_uni.tbl b/src/chrtrans/koi8r_uni.tbl
new file mode 100644
index 00000000..99b5e28d
--- /dev/null
+++ b/src/chrtrans/koi8r_uni.tbl
@@ -0,0 +1,139 @@
+
+
+# Options screen name for this character set
+O KOI8-R character set
+
+# MIME name for this charset
+M koi8-r
+
+# Based on a table received from "Glenn E. Thobe" <thobe@lafn.org>
+#hex unicode # description     
+#--- U+---- # ---------------     
+0x80 U+2500 # FORMS LIGHT HORIZONTAL   
+0x81 U+2502 # FORMS LIGHT VERTICAL   
+0x82 U+250C # FORMS LIGHT DOWN AND RIGHT 
+0x83 U+2510 # FORMS LIGHT DOWN AND LEFT 
+0x84 U+2514 # FORMS LIGHT UP AND RIGHT 
+0x85 U+2518 # FORMS LIGHT UP AND LEFT 
+0x86 U+251C # FORMS LIGHT VERTICAL AND RIGHT 
+0x87 U+2524 # FORMS LIGHT VERTICAL AND LEFT 
+0x88 U+252C # FORMS LIGHT DOWN AND HORIZONTAL 
+0x89 U+2534 # FORMS LIGHT UP AND HORIZONTAL 
+0x8A U+253C # FORMS LIGHT VERTICAL AND HORIZONTAL 
+0x8B U+2580 # UPPER HALF BLOCK   
+0x8C U+2584 # LOWER HALF BLOCK   
+0x8D U+2588 # FULL BLOCK    
+0x8E U+258C # LEFT HALF BLOCK   
+0x8F U+2590 # RIGHT HALF BLOCK   
+0x90 U+2591 # LIGHT SHADE    
+0x91 U+2592 # MEDIUM SHADE    
+0x92 U+2593 # DARK SHADE    
+0x93 U+2320 # TOP HALF INTEGRAL   
+0x94 U+25A0 # BLACK SMALL SQUARE   
+0x95 U+2219 # BULLET OPERATOR    
+0x96 U+221A # SQUARE ROOT    
+0x97 U+2248 # ALMOST EQUAL TO   
+0x98 U+2264 # LESS THAN OR EQUAL TO 
+0x99 U+2265 # GREATER THAN OR EQUAL TO 
+0x9A U+00A0 # NON-BREAKING SPACE    
+0x9B U+2321 # BOTTOM HALF INTEGRAL   
+0x9C U+00B0 # DEGREE SIGN    
+0x9D U+00B2 # SUPERSCRIPT DIGIT TWO   
+0x9E U+00B7 # MIDDLE DOT    
+0x9F U+00F7 # DIVISION SIGN    
+0xA0 U+2550 # FORMS DOUBLE HORIZONTAL   
+0xA1 U+2551 # FORMS DOUBLE VERTICAL   
+0xA2 U+2552 # FORMS DOWN SINGLE AND RIGHT DOUBLE
+0xA3 U+0451 # SMA IO    
+0xA4 U+2553 # FORMS DOWN DOUBLE AND RIGHT SINGLE
+0xA5 U+2554 # FORMS DOUBLE DOWN AND RIGHT 
+0xA6 U+2555 # FORMS DOWN SINGLE AND LEFT DOUBLE
+0xA7 U+2556 # FORMS DOWN DOUBLE AND LEFT SINGLE
+0xA8 U+2557 # FORMS DOUBLE DOWN AND LEFT 
+0xA9 U+2558 # FORMS UP SINGLE AND RIGHT DOUBLE
+0xAA U+2559 # FORMS UP DOUBLE AND RIGHT SINGLE
+0xAB U+255A # FORMS DOUBLE UP AND RIGHT 
+0xAC U+255B # FORMS UP SINGLE AND LEFT DOUBLE
+0xAD U+255C # FORMS UP DOUBLE AND LEFT SINGLE
+0xAE U+255D # FORMS DOUBLE UP AND LEFT 
+0xAF U+255E # FORMS VERTICAL SINGLE AND RIGHT DOUBLE
+0xB0 U+255F # FORMS VERTICAL DOUBLE AND RIGHT SINGLE
+0xB1 U+2560 # FORMS DOUBLE VERTICAL AND RIGHT 
+0xB2 U+2561 # FORMS VERTICAL SINGLE AND LEFT DOUBLE
+0xB3 U+0401 # CAP IO    
+0xB4 U+2562 # FORMS VERTICAL DOUBLE AND LEFT SINGLE
+0xB5 U+2563 # FORMS DOUBLE VERTICAL AND LEFT 
+0xB6 U+2564 # FORMS DOWN SINGLE AND HORIZONTAL DOUBLE
+0xB7 U+2565 # FORMS DOWN DOUBLE AND HORIZONTAL SINGLE
+0xB8 U+2566 # FORMS DOUBLE DOWN AND HORIZONTAL 
+0xB9 U+2567 # FORMS UP SINGLE AND HORIZONTAL DOUBLE
+0xBA U+2568 # FORMS UP DOUBLE AND HORIZONTAL SINGLE
+0xBB U+2569 # FORMS DOUBLE UP AND HORIZONTAL 
+0xBC U+256A # FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xBD U+256B # FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+0xBE U+256C # FORMS DOUBLE VERTICAL AND HORIZONTAL 
+0xBF U+00A9 # COPYRIGHT SIGN    
+0xC0 U+044E # SMA IU    
+0xC1 U+0430 # SMA A    
+0xC2 U+0431 # SMA BE    
+0xC3 U+0446 # SMA TSE    
+0xC4 U+0434 # SMA DE    
+0xC5 U+0435 # SMA IE    
+0xC6 U+0444 # SMA EF    
+0xC7 U+0433 # SMA GE    
+0xC8 U+0445 # SMA KHA    
+0xC9 U+0438 # SMA II    
+0xCA U+0439 # SMA SHORT II   
+0xCB U+043A # SMA KA    
+0xCC U+043B # SMA EL    
+0xCD U+043C # SMA EM    
+0xCE U+043D # SMA EN    
+0xCF U+043E # SMA O    
+0xD0 U+043F # SMA PE    
+0xD1 U+044F # SMA IA    
+0xD2 U+0440 # SMA ER    
+0xD3 U+0441 # SMA ES    
+0xD4 U+0442 # SMA TE    
+0xD5 U+0443 # SMA U    
+0xD6 U+0436 # SMA ZHE    
+0xD7 U+0432 # SMA VE    
+0xD8 U+044C # SMA SOFT SIGN   
+0xD9 U+044B # SMA YERI    
+0xDA U+0437 # SMA ZE    
+0xDB U+0448 # SMA SHA    
+0xDC U+044D # SMA REVERSED E   
+0xDD U+0449 # SMA SHCHA    
+0xDE U+0447 # SMA CHE    
+0xDF U+044A # SMA HARD SIGN   
+0xE0 U+042E # CAP IU    
+0xE1 U+0410 # CAP A    
+0xE2 U+0411 # CAP BE    
+0xE3 U+0426 # CAP TSE    
+0xE4 U+0414 # CAP DE    
+0xE5 U+0415 # CAP IE    
+0xE6 U+0424 # CAP EF    
+0xE7 U+0413 # CAP GE    
+0xE8 U+0425 # CAP KHA    
+0xE9 U+0418 # CAP II    
+0xEA U+0419 # CAP SHORT II   
+0xEB U+041A # CAP KA    
+0xEC U+041B # CAP EL    
+0xED U+041C # CAP EM    
+0xEE U+041D # CAP EN    
+0xEF U+041E # CAP O    
+0xF0 U+041F # CAP PE    
+0xF1 U+042F # CAP IA    
+0xF2 U+0420 # CAP ER    
+0xF3 U+0421 # CAP ES    
+0xF4 U+0422 # CAP TE    
+0xF5 U+0423 # CAP U    
+0xF6 U+0416 # CAP ZHE    
+0xF7 U+0412 # CAP VE    
+0xF8 U+042C # CAP SOFT SIGN   
+0xF9 U+042B # CAP YERI    
+0xFA U+0417 # CAP ZE    
+0xFB U+0428 # CAP SHA    
+0xFC U+042D # CAP REVERSED E   
+0xFD U+0429 # CAP SHCHA    
+0xFE U+0427 # CAP CHE    
+0xFF U+042A # CAP HARD SIGN   
diff --git a/src/chrtrans/makefile.in b/src/chrtrans/makefile.in
new file mode 100644
index 00000000..8d5da41f
--- /dev/null
+++ b/src/chrtrans/makefile.in
@@ -0,0 +1,100 @@
+#
+# Makefile for the makeuctb and unicode tables.
+#
+# This may not yet work for the general case.
+# Only some dependencies included.
+#
+#
+SHELL = /bin/sh
+
+prefix		= @prefix@
+exec_prefix	= @exec_prefix@
+srcdir		= @srcdir@
+VPATH		= $(srcdir)
+
+WWWINC		= WWW/Library/Implementation
+SITE_DEFS	= # FIXME: set in parent makefile
+MCFLAGS		= # FIXME: set in parent makefile
+
+CC		= @CC@
+CPPOPTS		= @DEFS@ @CPPFLAGS@ -I.. -I../.. -I../../$(WWWINC) $(MCFLAGS)
+CFLAGS		= $(CPPOPTS) @CFLAGS@
+
+#
+# This file contains the font map for the default (hardware) font
+#
+
+FONTMAP_INC = iso01_uni.h# default, if not set by recursive call
+
+### #include $(TOPDIR)/Rules.make ???
+
+### fastdep: $(FONTMAP_INC)
+
+### MCFLAGS=-g -DUNIX -DLINUX -DNO_KEYPAD -DNO_TTYTYPE -DEXP_CHARTRANS -I.. -I../../WWW/Library/Implementation -I../..
+
+CHRTR=
+
+TABLES= $(CHRTR)iso02_uni.h \
+ $(CHRTR)iso01_uni.h \
+ $(CHRTR)def7_uni.h \
+ $(CHRTR)iso03_uni.h \
+ $(CHRTR)iso04_uni.h \
+ $(CHRTR)iso05_uni.h \
+ $(CHRTR)iso07_uni.h \
+ $(CHRTR)iso09_uni.h \
+ $(CHRTR)iso10_uni.h \
+ $(CHRTR)koi8r_uni.h \
+ $(CHRTR)cp437_uni.h \
+ $(CHRTR)cp850_uni.h \
+ $(CHRTR)cp852_uni.h \
+ $(CHRTR)cp1250_uni.h \
+ $(CHRTR)cp1252_uni.h \
+ $(CHRTR)utf8_uni.h \
+ $(CHRTR)rfc_suni.h \
+ $(CHRTR)mnemonic_suni.h \
+ $(CHRTR)mnem_suni.h
+
+default: $(FONTMAP_INC)
+
+tables: $(TABLES)
+
+makeuctb: makeuctb.c UCkd.h
+	$(CC) $(CFLAGS) -o makeuctb makeuctb.c
+
+.SUFFIXES : .tbl .i
+
+.c.o:
+@SHOW_CC@
+	@ECHO_CC@$(CC) $(CPPOPTS) $(CFLAGS) -c $(srcdir)/$*.c
+
+.c.i:
+@SHOW_CC@
+	@ECHO_CC@$(CPP) -C $(CPPOPTS) $*.c >$@
+
+.tbl.h:
+	./makeuctb $*.tbl > $@
+
+iso01_uni.h: iso01_uni.tbl makeuctb
+iso02_uni.h: iso02_uni.tbl makeuctb
+iso03_uni.h: iso03_uni.tbl makeuctb
+iso04_uni.h: iso04_uni.tbl makeuctb
+iso05_uni.h: iso05_uni.tbl makeuctb
+iso07_uni.h: iso07_uni.tbl makeuctb
+iso09_uni.h: iso09_uni.tbl makeuctb
+iso10_uni.h: iso10_uni.tbl makeuctb
+cp437_uni.h: cp437_uni.tbl makeuctb
+cp850_uni.h: cp850_uni.tbl makeuctb
+cp852_uni.h: cp852_uni.tbl makeuctb
+cp1250_uni.h: cp1250_uni.tbl makeuctb
+cp1252_uni.h: cp1252_uni.tbl makeuctb
+utf8_uni.h: utf8_uni.tbl makeuctb
+mnemonic_suni.h: mnemonic_suni.tbl makeuctb
+mnem_suni.h: mnem_suni.tbl makeuctb
+rfc_suni.h: rfc_suni.tbl makeuctb
+
+clean:
+	rm -f makeuctb *.o *uni.h
+
+distclean: clean
+	-rm -rf obsolete
+	rm -f core *.bak *.sav *~ *.h_old
diff --git a/src/chrtrans/makeuctb.c b/src/chrtrans/makeuctb.c
new file mode 100644
index 00000000..aeb1a0e9
--- /dev/null
+++ b/src/chrtrans/makeuctb.c
@@ -0,0 +1,564 @@
+/*
+ * makeuctb.c, derived from conmakehash.c
+ *
+ * [ original comments: - kw ]
+ * Create arrays for initializing the kernel folded tables (using a hash
+ * table turned out to be to limiting...)  Unfortunately we can't simply
+ * preinitialize the tables at compile time since kfree() cannot accept
+ * memory not allocated by kmalloc(), and doing our own memory management
+ * just for this seems like massive overkill.
+ *
+ * Copyright (C) 1995 H. Peter Anvin
+ *
+ * This program is a part of the Linux kernel, and may be freely
+ * copied under the terms of the GNU General Public License (GPL),
+ * version 2, or at your option any later version.
+ */
+
+#ifdef NOTDEFINED
+#include <stdio.h>
+#include <stdlib.h>
+#include <sysexits.h>
+#include <string.h>
+#include <ctype.h>
+#else
+#include "tcp.h"
+#undef exit			/* don't try to use LYexit() */
+#endif
+
+#ifndef TOLOWER
+#define TOLOWER(c) (isupper((unsigned char)c) ? tolower((unsigned char)c) : (c))
+#endif /* ndef TOLOWER */
+
+#include "UCkd.h"
+#include "UCDefs.h"
+
+#define MAX_FONTLEN 256
+
+/* We don't deal with UCS4 here... -kw */
+typedef u16 unicode;
+
+PRIVATE void usage ARGS1(char *, argv0)
+{
+  fprintf(stderr, "Usage: \n");
+  fprintf(stderr, "        %s chartable [charsetmimename] [charsetdisplayname]\n", argv0);
+  fprintf(stderr, "Utility to convert .tbl into .h files for Lynx compilation.\n");
+  exit(EX_USAGE);
+}
+
+PRIVATE int getunicode ARGS1(char **, p0)
+{
+  char *p = *p0;
+
+  while (*p == ' ' || *p == '\t')
+    p++;
+  if (*p == '-')
+      return -2;
+  else if (*p != 'U' || p[1] != '+' ||
+      !isxdigit(p[2]) || !isxdigit(p[3]) || !isxdigit(p[4]) ||
+      !isxdigit(p[5]) || isxdigit(p[6]))
+    return -1;
+  *p0 = p+6;
+  return strtol(p+2,0,16);
+}
+
+unicode unitable[MAX_FONTLEN][255];
+				/* Massive overkill, but who cares? */
+int unicount[MAX_FONTLEN];
+
+struct unimapdesc_str themap_str = {0, NULL};
+
+char *tblname;
+
+PRIVATE void addpair_str ARGS2(char *, str, int, un)
+{
+  int i;
+
+
+  if ( un <= 0xfffe )
+    {
+      /* Initialize the map for replacement strings */
+
+      if (!themap_str.entry_ct) {
+	themap_str.entries =
+	  (struct unipair_str *) malloc (2000 * sizeof (struct unipair_str));
+	    if (! themap_str.entries)
+	      {
+		fprintf(stderr,
+			"%s: Out of memory\n", tblname);
+		exit(EX_DATAERR);
+	      }
+      }
+
+      /* Check it isn't a duplicate */
+      
+      else for ( i = 0 ; i < themap_str.entry_ct ; i++ )
+	if ( themap_str.entries[i].unicode == un ) {
+	  themap_str.entries[i].replace_str = str;
+	  return;
+	}
+
+      /* Add to list */
+
+      if ( themap_str.entry_ct > 1999 )
+	{
+	  fprintf(stderr, "ERROR: Only 2000 unicode replacement strings permitted!\n");
+	  exit(EX_DATAERR);
+	}
+
+      themap_str.entries[themap_str.entry_ct].unicode = un;
+      themap_str.entries[themap_str.entry_ct].replace_str = str;
+      themap_str.entry_ct++;
+    }
+
+  /* otherwise: ignore */
+}
+
+PRIVATE void addpair ARGS2(int, fp, int, un)
+{
+  int i;
+
+  if ( un <= 0xfffe )
+    {
+      /* Check it isn't a duplicate */
+
+      for ( i = 0 ; i < unicount[fp] ; i++ )
+	if ( unitable[fp][i] == un )
+	  return;
+
+      /* Add to list */
+
+      if ( unicount[fp] > 254 )
+	{
+	  fprintf(stderr, "ERROR: Only 255 unicodes/glyph permitted!\n");
+	  exit(EX_DATAERR);
+	}
+
+      unitable[fp][unicount[fp]] = un;
+      unicount[fp]++;
+    }
+
+  /* otherwise: ignore */
+}
+
+char this_MIMEcharset[UC_MAXLEN_MIMECSNAME +1];
+char this_LYNXcharset[UC_MAXLEN_LYNXCSNAME +1];
+char id_append[UC_MAXLEN_ID_APPEND +1] = "_";
+int this_isDefaultMap = -1;
+int RawUni = 0;
+int lowest_eight = 999;
+
+int main ARGS2(int, argc, char **, argv)
+{
+  FILE *ctbl;
+  char buffer[65536];
+  int fontlen;
+  int i, nuni, nent;
+  int fp0, fp1, un0, un1;
+  char *p, *p1;
+  char *tbuf, ch;
+
+  if ( argc < 2 || argc > 4 )
+    usage(argv[0]);
+
+  if ( !strcmp(argv[1],"-") )
+    {
+      ctbl = stdin;
+      tblname = "stdin";
+    }
+  else
+    {
+      ctbl = fopen(tblname = argv[1], "r");
+      if ( !ctbl )
+	{
+	  perror(tblname);
+	  exit(EX_NOINPUT);
+	}
+    }
+
+  /* For now we assume the default font is always 256 characters. */    
+  fontlen = 256;
+
+  /* Initialize table */
+
+  for ( i = 0 ; i < fontlen ; i++ )
+    unicount[i] = 0;
+
+  /* Now we come to the tricky part.  Parse the input table. */
+
+  while ( fgets(buffer, sizeof(buffer), ctbl) != NULL )
+    {
+      if ( (p = strchr(buffer, '\n')) != NULL )
+	*p = '\0';
+      else
+	fprintf(stderr, "%s: Warning: line too long\n", tblname);
+
+      p = buffer;
+
+/*
+ * Syntax accepted:
+ *	<fontpos>	<unicode> <unicode> ...
+ *	<fontpos>	<unicode range> <unicode range> ...
+ *	<fontpos>	idem
+ *	<range>		idem
+ *	<range>		<unicode range>
+ *      <unicode>	:<replace>
+ *      <unicode range>	:<replace>
+ *
+ * where <range> ::= <fontpos>-<fontpos>
+ * and <unicode> ::= U+<h><h><h><h>
+ * and <h> ::= <hexadecimal digit>
+ * and <replace> any string not containing '\n' or '\0'
+ */
+
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (!*p || *p == '#')
+	continue;	/* skip comment or blank line */
+
+      switch (*p) {
+      case 'R':			/* Raw Unicode? I.e. needs some special
+				 processing.  One digit code. */
+	p++;
+	while (*p == ' ' || *p == '\t')
+	  p++;
+	RawUni = strtol(p,0,10);
+	continue;
+
+      case 'D':			/* Is this the default display font? */
+	p++;
+	while (*p == ' ' || *p == '\t')
+	  p++;
+	this_isDefaultMap = (*p == '1');
+	continue;
+      case 'M':
+	p++;
+	while (*p == ' ' || *p == '\t')
+	  p++;
+	sscanf(p,"%40s",this_MIMEcharset);
+	continue;
+      case 'O':            /* Display charset name for options screen */
+	p++;
+	while (*p == ' ' || *p == '\t')
+	  p++;
+	for (i=0; *p && i<UC_MAXLEN_LYNXCSNAME; p++,i++) 
+	  this_LYNXcharset[i] = *p;
+	this_LYNXcharset[i] = '\0';
+	continue;
+      }
+
+      if(*p == 'U')
+	{
+	  un0 = getunicode(&p);
+	  if (un0 < 0)
+	    {
+	      fprintf(stderr, "Bad input line: %s\n", buffer);
+	      exit(EX_DATAERR);
+	      fprintf(stderr,
+		      "%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",
+		      tblname, fp0, fp1);
+	      exit(EX_DATAERR);
+	    }
+	  un1 = un0;
+	  while (*p == ' ' || *p == '\t')
+	    p++;
+	  if (*p == '-')
+	    {
+	      p++;
+	      while (*p == ' ' || *p == '\t')
+		p++;
+	      un1 = getunicode(&p);
+	      if (un1 < 0 || un1 < un0)
+		{
+		  fprintf(stderr,
+			  "%s: Bad Unicode range U+%x-U+%x\n",
+			  tblname, un0, un1);
+		  fprintf(stderr, "Bad input line: %s\n", buffer);
+		  exit(EX_DATAERR);
+		}
+	      while (*p == ' ' || *p == '\t')
+		p++;
+	    }
+	  if (*p != ':')
+	    {
+	      fprintf(stderr, "No ':' where expected: %s\n", buffer);
+	      continue;
+	    }
+
+	  tbuf = (char *) malloc (4*strlen(++p) + 1);
+	  if (!(p1 = tbuf))
+	    {
+	      fprintf(stderr,
+		      "%s: Out of memory\n", tblname);
+	      exit(EX_DATAERR);
+	    }
+	  for(ch = *p; (ch = *p) != '\0'; p++,p1++)
+	    {
+	      if ((unsigned char)ch < 32 || ch == '\\' || ch == '\"' ||
+		  (unsigned char)ch >= 127)
+		{
+		  sprintf(p1,"\\%.3o",(unsigned char)ch); 
+/*		  fprintf(stderr,"%s\n",tbuf); */
+		  p1 += 3;
+		}
+	      else
+		*p1 = ch;
+	    }
+	  *p1 = '\0';
+	  for(i=un0; i<=un1; i++)
+/*	    printf("U+0x%x:%s\n",i,tbuf); */
+	    addpair_str(tbuf,i);
+	    continue;
+	}
+	
+      fp0 = strtol(p, &p1, 0);
+      if (p1 == p)
+	{
+	  fprintf(stderr, "Bad input line: %s\n", buffer);
+	  exit(EX_DATAERR);
+        }
+      p = p1;
+
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (*p == '-')
+	{
+	  p++;
+	  fp1 = strtol(p, &p1, 0);
+	  if (p1 == p)
+	    {
+	      fprintf(stderr, "Bad input line: %s\n", buffer);
+	      exit(EX_DATAERR);
+	    }
+	  p = p1;
+        }
+      else
+	fp1 = 0;
+
+      if ( fp0 < 0 || fp0 >= fontlen )
+	{
+	    fprintf(stderr,
+		    "%s: Glyph number (0x%x) larger than font length\n",
+		    tblname, fp0);
+	    exit(EX_DATAERR);
+	}
+      if ( fp1 && (fp1 < fp0 || fp1 >= fontlen) )
+	{
+	    fprintf(stderr,
+		    "%s: Bad end of range (0x%x)\n",
+		    tblname, fp1);
+	    exit(EX_DATAERR);
+	}
+
+      if (fp1)
+	{
+	  /* we have a range; expect the word "idem" or a Unicode range of the
+	     same length */
+	  while (*p == ' ' || *p == '\t')
+	    p++;
+	  if (!strncmp(p, "idem", 4))
+	    {
+	      for (i=fp0; i<=fp1; i++)
+		addpair(i,i);
+	      p += 4;
+	    }
+	  else
+	    {
+	      un0 = getunicode(&p);
+	      while (*p == ' ' || *p == '\t')
+		p++;
+	      if (*p != '-')
+		{
+		  fprintf(stderr,
+"%s: Corresponding to a range of font positions, there should be a Unicode range\n",
+			  tblname);
+		  exit(EX_DATAERR);
+	        }
+	      p++;
+	      un1 = getunicode(&p);
+	      if (un0 < 0 || un1 < 0)
+		{
+		  fprintf(stderr,
+"%s: Bad Unicode range corresponding to font position range 0x%x-0x%x\n",
+			  tblname, fp0, fp1);
+		  exit(EX_DATAERR);
+	        }
+	      if (un1 - un0 != fp1 - fp0)
+		{
+		  fprintf(stderr,
+"%s: Unicode range U+%x-U+%x not of the same length as font position range 0x%x-0x%x\n",
+			  tblname, un0, un1, fp0, fp1);
+		  exit(EX_DATAERR);
+	        }
+	      for(i=fp0; i<=fp1; i++)
+		addpair(i,un0-fp0+i);
+	    }
+        }
+      else
+	{
+	    /* no range; expect a list of unicode values or unicode ranges
+	       for a single font position, or the word "idem" */
+
+	    while (*p == ' ' || *p == '\t')
+		p++;
+	    if (!strncmp(p, "idem", 4))
+	    {
+		addpair(fp0,fp0);
+		p += 4;
+	    }
+	    while ( (un0 = getunicode(&p)) >= 0 ) {
+		addpair(fp0, un0);
+		while (*p == ' ' || *p == '\t')
+		    p++;
+		if (*p == '-') {
+		    p++;
+		    un1 = getunicode(&p);
+		    if (un1 < un0)
+		    {
+			fprintf(stderr,
+				"%s: Bad Unicode range 0x%x-0x%x\n",
+				tblname, un0, un1);
+			exit(EX_DATAERR);
+		    }
+		    for(un0++; un0 <= un1; un0++)
+			addpair(fp0, un0);
+		}
+	    }
+	}
+      while (*p == ' ' || *p == '\t')
+	p++;
+      if (*p && *p != '#')
+	fprintf(stderr, "%s: trailing junk (%s) ignored\n", tblname, p);
+    }
+
+  /* Okay, we hit EOF, now output hash table */
+  
+  fclose(ctbl);
+  
+
+  /* Compute total size of Unicode list */
+  nuni = 0;
+  for ( i = 0 ; i < fontlen ; i++ )
+    nuni += unicount[i];
+
+  if (argc >=3 )
+    strncpy(this_MIMEcharset,argv[2],UC_MAXLEN_MIMECSNAME);
+  else if (!this_MIMEcharset || ! *this_MIMEcharset) {
+    strncpy(this_MIMEcharset,tblname,UC_MAXLEN_MIMECSNAME);
+    if ((p = strchr(this_MIMEcharset,'.')) != 0)
+      *p = '\0';
+  }
+  for (p=this_MIMEcharset; *p; p++)
+      *p = TOLOWER(*p);
+  if (argc >=4 )
+    strncpy(this_LYNXcharset,argv[3],UC_MAXLEN_LYNXCSNAME);
+  else if (!this_LYNXcharset || ! *this_LYNXcharset) {
+    strncpy(this_LYNXcharset,this_MIMEcharset,UC_MAXLEN_LYNXCSNAME);
+  }
+  if ((i=strlen(this_LYNXcharset)) < UC_LEN_LYNXCSNAME) {
+    for (;i<UC_LEN_LYNXCSNAME;i++) 
+      this_LYNXcharset[i] = ' ';
+    this_LYNXcharset[i] = '\0';
+  }
+/*
+  fprintf(stderr,"this_MIMEcharset: %s.\n",this_MIMEcharset);
+  fprintf(stderr,"this_LYNXcharset: %s.\n",this_LYNXcharset);
+*/
+  if (this_isDefaultMap == -1)
+    this_isDefaultMap = !strncmp(this_MIMEcharset,"iso-8859-1",10);
+  fprintf(stderr,"makeuctb: %s: %stranslation map",
+	  this_MIMEcharset, (this_isDefaultMap ? "default " : ""));
+  if (this_isDefaultMap == 1)
+    *id_append = '\0';
+  else
+  for (i=0,p=this_MIMEcharset; *p && (i < UC_MAXLEN_ID_APPEND-1); p++,i++)
+    id_append[i+1] = isalnum(*p) ? *p : '_';
+  id_append[i+1] = '\0';
+  fprintf(stderr," (%s).\n", id_append);
+
+
+  printf("\
+/*\n\
+ * uni_hash.tbl\n\
+ *\n\
+ * Do not edit this file; it was automatically generated by\n\
+ *\n\
+ * %s %s\n\
+ *\n\
+ */\n\
+\n\
+static u8 dfont_unicount%s[%d] = \n\
+{\n\t", argv[0], argv[1], id_append, fontlen);
+
+  for ( i = 0 ; i < fontlen ; i++ )
+    {
+      if (i >= 128 && unicount[i] > 0 && i < lowest_eight)
+        lowest_eight = i;
+      printf("%3d", unicount[i]);
+      if ( i == fontlen-1 )
+        printf("\n};\n");
+      else if ( i % 8 == 7 )
+        printf(",\n\t");
+      else
+        printf(", ");
+    }
+
+  if (nuni)
+    printf("\nstatic u16 dfont_unitable%s[%d] = \n{\n\t", id_append, nuni);
+  else
+    printf("\nstatic u16 dfont_unitable%s[1]; /* dummy */\n", id_append);
+
+  fp0 = 0;
+  nent = 0;
+  for ( i = 0 ; i < nuni ; i++ )
+    {
+       while ( nent >= unicount[fp0] )
+         {
+            fp0++;
+            nent = 0;
+         }
+       printf("0x%04x", unitable[fp0][nent++]);
+       if ( i == nuni-1 )
+         printf("\n};\n");
+       else if ( i % 8 == 7 )
+         printf(",\n\t");
+       else
+         printf(", ");
+    }
+
+  if (themap_str.entry_ct)
+    printf("\n\
+static struct unipair_str repl_map%s[%d] = \n\
+{\n\t", id_append, themap_str.entry_ct);
+  else
+printf("\n\
+/* static struct unipair_str repl_map%s[]; */\n", id_append);
+    
+  for ( i = 0 ; i < themap_str.entry_ct ; i++ )
+    {
+      printf("{0x%x,\"%s\"}", themap_str.entries[i].unicode,
+                              themap_str.entries[i].replace_str);
+      if ( i == themap_str.entry_ct-1 )
+        printf("\n};\n");
+      else if ( i % 4 == 3 )
+        printf(",\n\t");
+      else
+        printf(", ");
+    }
+  if (themap_str.entry_ct)
+    printf("\n\
+static struct unimapdesc_str dfont_replacedesc%s = {%d,repl_map%s};\n",
+id_append, themap_str.entry_ct, id_append);
+  else
+    printf("\n\
+static struct unimapdesc_str dfont_replacedesc%s = {0,NULL};\n",id_append);
+
+  printf("#define UC_CHARSET_SETUP%s UC_Charset_Setup(\
+\"%s\",\\\n\"%s\",\\\n\
+dfont_unicount%s,dfont_unitable%s,%i,\\\n\
+dfont_replacedesc%s,%i,%i)\n",
+id_append, this_MIMEcharset, this_LYNXcharset,
+id_append, id_append, nuni, id_append, lowest_eight, RawUni);
+
+  exit(EX_OK);
+}
diff --git a/src/chrtrans/mnem_suni.tbl b/src/chrtrans/mnem_suni.tbl
new file mode 100644
index 00000000..43c4f707
--- /dev/null
+++ b/src/chrtrans/mnem_suni.tbl
@@ -0,0 +1,1899 @@
+#The MIME name of this charset. 
+Mmnem
+
+#Name as a Display Charset (used on Options screen)
+ORFC1345 Mnem
+ 
+# U+0020: SP
+U+0021:!
+U+0022:"
+U+0023: Nb
+U+0024: DO
+U+0025:%
+U+0026:&&
+U+0027:'
+U+0028:(
+U+0029:)
+U+002a:*
+U+002b:+
+U+002c:,
+U+002d:-
+U+002e:.
+U+002f:/
+U+0030:0
+U+0031:1
+U+0032:2
+U+0033:3
+U+0034:4
+U+0035:5
+U+0036:6
+U+0037:7
+U+0038:8
+U+0039:9
+U+003a::
+U+003b:;
+U+003c:<
+U+003d:=
+U+003e:>
+U+003f:?
+U+0040: At
+U+0041:A
+U+0042:B
+U+0043:C
+U+0044:D
+U+0045:E
+U+0046:F
+U+0047:G
+U+0048:H
+U+0049:I
+U+004a:J
+U+004b:K
+U+004c:L
+U+004d:M
+U+004e:N
+U+004f:O
+U+0050:P
+U+0051:Q
+U+0052:R
+U+0053:S
+U+0054:T
+U+0055:U
+U+0056:V
+U+0057:W
+U+0058:X
+U+0059:Y
+U+005a:Z
+U+005b: <(
+U+005c: //
+U+005d: )>
+U+005e: '>
+U+005f:_
+U+0060: '!
+U+0061:a
+U+0062:b
+U+0063:c
+U+0064:d
+U+0065:e
+U+0066:f
+U+0067:g
+U+0068:h
+U+0069:i
+U+006a:j
+U+006b:k
+U+006c:l
+U+006d:m
+U+006e:n
+U+006f:o
+U+0070:p
+U+0071:q
+U+0072:r
+U+0073:s
+U+0074:t
+U+0075:u
+U+0076:v
+U+0077:w
+U+0078:x
+U+0079:y
+U+007a:z
+U+007b: (!
+U+007c: !!
+U+007d: !)
+U+007e: '?
+U+00a0: NS
+U+00a1: !I
+U+00a2: Ct
+U+00a3: Pd
+U+00a4: Cu
+U+00a5: Ye
+U+00a6: BB
+U+00a7: SE
+U+00a8: ':
+U+00a9: Co
+U+00aa: -a
+U+00ab: <<
+U+00ac: NO
+U+00ad: --
+U+00ae: Rg
+U+00af: 'm
+U+00b0: DG
+U+00b1: +-
+U+00b2: 2S
+U+00b3: 3S
+U+00b4: ''
+U+00b5: My
+U+00b6: PI
+U+00b7: .M
+U+00b8: ',
+U+00b9: 1S
+U+00ba: -o
+U+00bb: >>
+U+00bc: 14
+U+00bd: 12
+U+00be: 34
+U+00bf: ?I
+U+00c0: A!
+U+00c1: A'
+U+00c2: A>
+U+00c3: A?
+U+00c4: A:
+U+00c5: AA
+U+00c6: AE
+U+00c7: C,
+U+00c8: E!
+U+00c9: E'
+U+00ca: E>
+U+00cb: E:
+U+00cc: I!
+U+00cd: I'
+U+00ce: I>
+U+00cf: I:
+U+00d0: D-
+U+00d1: N?
+U+00d2: O!
+U+00d3: O'
+U+00d4: O>
+U+00d5: O?
+U+00d6: O:
+U+00d7: *X
+U+00d8: O/
+U+00d9: U!
+U+00da: U'
+U+00db: U>
+U+00dc: U:
+U+00dd: Y'
+U+00de: TH
+U+00df: ss
+U+00e0: a!
+U+00e1: a'
+U+00e2: a>
+U+00e3: a?
+U+00e4: a:
+U+00e5: aa
+U+00e6: ae
+U+00e7: c,
+U+00e8: e!
+U+00e9: e'
+U+00ea: e>
+U+00eb: e:
+U+00ec: i!
+U+00ed: i'
+U+00ee: i>
+U+00ef: i:
+U+00f0: d-
+U+00f1: n?
+U+00f2: o!
+U+00f3: o'
+U+00f4: o>
+U+00f5: o?
+U+00f6: o:
+U+00f7: -:
+U+00f8: o/
+U+00f9: u!
+U+00fa: u'
+U+00fb: u>
+U+00fc: u:
+U+00fd: y'
+U+00fe: th
+U+00ff: y:
+U+0100: A-
+U+0101: a-
+U+0102: A(
+U+0103: a(
+U+0104: A;
+U+0105: a;
+U+0106: C'
+U+0107: c'
+U+0108: C>
+U+0109: c>
+U+010a: C.
+U+010b: c.
+U+010c: C<
+U+010d: c<
+U+010e: D<
+U+010f: d<
+U+0110: D/
+U+0111: d/
+U+0112: E-
+U+0113: e-
+U+0114: E(
+U+0115: e(
+U+0116: E.
+U+0117: e.
+U+0118: E;
+U+0119: e;
+U+011a: E<
+U+011b: e<
+U+011c: G>
+U+011d: g>
+U+011e: G(
+U+011f: g(
+U+0120: G.
+U+0121: g.
+U+0122: G,
+U+0123: g,
+U+0124: H>
+U+0125: h>
+U+0126: H/
+U+0127: h/
+U+0128: I?
+U+0129: i?
+U+012a: I-
+U+012b: i-
+U+012c: I(
+U+012d: i(
+U+012e: I;
+U+012f: i;
+U+0130: I.
+U+0131: i.
+U+0132: IJ
+U+0133: ij
+U+0134: J>
+U+0135: j>
+U+0136: K,
+U+0137: k,
+U+0138: kk
+U+0139: L'
+U+013a: l'
+U+013b: L,
+U+013c: l,
+U+013d: L<
+U+013e: l<
+U+013f: L.
+U+0140: l.
+U+0141: L/
+U+0142: l/
+U+0143: N'
+U+0144: n'
+U+0145: N,
+U+0146: n,
+U+0147: N<
+U+0148: n<
+U+0149: 'n
+U+014a: NG
+U+014b: ng
+U+014c: O-
+U+014d: o-
+U+014e: O(
+U+014f: o(
+U+0150: O"
+U+0151: o"
+U+0152: OE
+U+0153: oe
+U+0154: R'
+U+0155: r'
+U+0156: R,
+U+0157: r,
+U+0158: R<
+U+0159: r<
+U+015a: S'
+U+015b: s'
+U+015c: S>
+U+015d: s>
+U+015e: S,
+U+015f: s,
+U+0160: S<
+U+0161: s<
+U+0162: T,
+U+0163: t,
+U+0164: T<
+U+0165: t<
+U+0166: T/
+U+0167: t/
+U+0168: U?
+U+0169: u?
+U+016a: U-
+U+016b: u-
+U+016c: U(
+U+016d: u(
+U+016e: U0
+U+016f: u0
+U+0170: U"
+U+0171: u"
+U+0172: U;
+U+0173: u;
+U+0174: W>
+U+0175: w>
+U+0176: Y>
+U+0177: y>
+U+0178: Y:
+U+0179: Z'
+U+017a: z'
+U+017b: Z.
+U+017c: z.
+U+017d: Z<
+U+017e: z<
+U+01a0: O9
+U+01a1: o9
+U+01a2: OI
+U+01a3: oi
+U+01a6: yr
+U+01af: U9
+U+01b0: u9
+U+01b5: Z/
+U+01b6: z/
+U+01b7: ED
+U+01cd: A<
+U+01ce: a<
+U+01cf: I<
+U+01d0: i<
+U+01d1: O<
+U+01d2: o<
+U+01d3: U<
+U+01d4: u<
+U+01d5: _U:-_
+U+01d6: _u:-_
+U+01d7: _U:'_
+U+01d8: _u:'_
+U+01d9: _U:<_
+U+01da: _u:<_
+U+01db: _U:!_
+U+01dc: _u:!_
+U+01de: A1
+U+01df: a1
+U+01e0: A7
+U+01e1: a7
+U+01e2: A3
+U+01e3: a3
+U+01e4: G/
+U+01e5: g/
+U+01e6: G<
+U+01e7: g<
+U+01e8: K<
+U+01e9: k<
+U+01ea: O;
+U+01eb: o;
+U+01ec: O1
+U+01ed: o1
+U+01ee: EZ
+U+01ef: ez
+U+01f0: j<
+U+01f4: G'
+U+01f5: g'
+U+01fa: _AA'_
+U+01fb: _aa'_
+U+01fc: _AE'_
+U+01fd: _ae'_
+U+01fe: _O/'_
+U+01ff: _o/'_
+U+02bf: ;S
+U+02c7: '<
+U+02d8: '(
+U+02d9: '.
+U+02da: '0
+U+02db: ';
+U+02dd: '"
+U+0386: A%
+U+0388: E%
+U+0389: Y%
+U+038a: I%
+U+038c: O%
+U+038e: U%
+U+038f: W%
+U+0390: i3
+U+0391: A*
+U+0392: B*
+U+0393: G*
+U+0394: D*
+U+0395: E*
+U+0396: Z*
+U+0397: Y*
+U+0398: H*
+U+0399: I*
+U+039a: K*
+U+039b: L*
+U+039c: M*
+U+039d: N*
+U+039e: C*
+U+039f: O*
+U+03a0: P*
+U+03a1: R*
+U+03a3: S*
+U+03a4: T*
+U+03a5: U*
+U+03a6: F*
+U+03a7: X*
+U+03a8: Q*
+U+03a9: W*
+U+03aa: J*
+U+03ab: V*
+U+03ac: a%
+U+03ad: e%
+U+03ae: y%
+U+03af: i%
+U+03b0: u3
+U+03b1: a*
+U+03b2: b*
+U+03b3: g*
+U+03b4: d*
+U+03b5: e*
+U+03b6: z*
+U+03b7: y*
+U+03b8: h*
+U+03b9: i*
+U+03ba: k*
+U+03bb: l*
+U+03bc: m*
+U+03bd: n*
+U+03be: c*
+U+03bf: o*
+U+03c0: p*
+U+03c1: r*
+U+03c2: *s
+U+03c3: s*
+U+03c4: t*
+U+03c5: u*
+U+03c6: f*
+U+03c7: x*
+U+03c8: q*
+U+03c9: w*
+U+03ca: j*
+U+03cb: v*
+U+03cc: o%
+U+03cd: u%
+U+03ce: w%
+U+03d8: 'G
+U+03d9: ,G
+U+03da: T3
+U+03db: t3
+U+03dc: M3
+U+03dd: m3
+U+03de: K3
+U+03df: k3
+U+03e0: P3
+U+03e1: p3
+U+03f4: '%
+U+03f5: j3
+U+0401: IO
+U+0402: D%
+U+0403: G%
+U+0404: IE
+U+0405: DS
+U+0406: II
+U+0407: YI
+U+0408: J%
+U+0409: LJ
+U+040a: NJ
+U+040b: Ts
+U+040c: KJ
+U+040e: V%
+U+040f: DZ
+U+0410: A=
+U+0411: B=
+U+0412: V=
+U+0413: G=
+U+0414: D=
+U+0415: E=
+U+0416: Z%
+U+0417: Z=
+U+0418: I=
+U+0419: J=
+U+041a: K=
+U+041b: L=
+U+041c: M=
+U+041d: N=
+U+041e: O=
+U+041f: P=
+U+0420: R=
+U+0421: S=
+U+0422: T=
+U+0423: U=
+U+0424: F=
+U+0425: H=
+U+0426: C=
+U+0427: C%
+U+0428: S%
+U+0429: Sc
+U+042a: ="
+U+042b: Y=
+U+042c: %"
+U+042d: JE
+U+042e: JU
+U+042f: JA
+U+0430: a=
+U+0431: b=
+U+0432: v=
+U+0433: g=
+U+0434: d=
+U+0435: e=
+U+0436: z%
+U+0437: z=
+U+0438: i=
+U+0439: j=
+U+043a: k=
+U+043b: l=
+U+043c: m=
+U+043d: n=
+U+043e: o=
+U+043f: p=
+U+0440: r=
+U+0441: s=
+U+0442: t=
+U+0443: u=
+U+0444: f=
+U+0445: h=
+U+0446: c=
+U+0447: c%
+U+0448: s%
+U+0449: sc
+U+044a: ='
+U+044b: y=
+U+044c: %'
+U+044d: je
+U+044e: ju
+U+044f: ja
+U+0451: io
+U+0452: d%
+U+0453: g%
+U+0454: ie
+U+0455: ds
+U+0456: ii
+U+0457: yi
+U+0458: j%
+U+0459: lj
+U+045a: nj
+U+045b: ts
+U+045c: kj
+U+045e: v%
+U+045f: dz
+U+0462: Y3
+U+0463: y3
+U+046a: O3
+U+046b: o3
+U+0472: F3
+U+0473: f3
+U+0474: V3
+U+0475: v3
+U+0480: C3
+U+0481: c3
+U+0490: G3
+U+0491: g3
+U+05d0: A+
+U+05d1: B+
+U+05d2: G+
+U+05d3: D+
+U+05d4: H+
+U+05d5: W+
+U+05d6: Z+
+U+05d7: X+
+U+05d8: Tj
+U+05d9: J+
+U+05da: K%
+U+05db: K+
+U+05dc: L+
+U+05dd: M%
+U+05de: M+
+U+05df: N%
+U+05e0: N+
+U+05e1: S+
+U+05e2: E+
+U+05e3: P%
+U+05e4: P+
+U+05e5: Zj
+U+05e6: ZJ
+U+05e7: Q+
+U+05e8: R+
+U+05e9: Sh
+U+05ea: T+
+U+060c: ,+
+U+061b: ;+
+U+061f: ?+
+U+0621: H'
+U+0622: aM
+U+0623: aH
+U+0624: wH
+U+0625: ah
+U+0626: yH
+U+0627: a+
+U+0628: b+
+U+0629: tm
+U+062a: t+
+U+062b: tk
+U+062c: g+
+U+062d: hk
+U+062e: x+
+U+062f: d+
+U+0630: dk
+U+0631: r+
+U+0632: z+
+U+0633: s+
+U+0634: sn
+U+0635: c+
+U+0636: dd
+U+0637: tj
+U+0638: zH
+U+0639: e+
+U+063a: i+
+U+0640: ++
+U+0641: f+
+U+0642: q+
+U+0643: k+
+U+0644: l+
+U+0645: m+
+U+0646: n+
+U+0647: h+
+U+0648: w+
+U+0649: j+
+U+064a: y+
+U+064b: :+
+U+064c: "+
+U+064d: =+
+U+064e: /+
+U+064f: '+
+U+0650: 1+
+U+0651: 3+
+U+0652: 0+
+U+0670: aS
+U+067e: p+
+U+06a4: v+
+U+06af: gf
+U+06f0: 0a
+U+06f1: 1a
+U+06f2: 2a
+U+06f3: 3a
+U+06f4: 4a
+U+06f5: 5a
+U+06f6: 6a
+U+06f7: 7a
+U+06f8: 8a
+U+06f9: 9a
+U+1e00: _A-0_
+U+1e01: _a-0_
+U+1e02: B.
+U+1e03: b.
+U+1e04: _B-._
+U+1e05: _b-._
+U+1e06: B_
+U+1e07: b_
+U+1e08: _C,'_
+U+1e09: _c,'_
+U+1e0a: D.
+U+1e0b: d.
+U+1e0c: _D-._
+U+1e0d: _d-._
+U+1e0e: D_
+U+1e0f: d_
+U+1e10: D,
+U+1e11: d,
+U+1e12: _D->_
+U+1e13: _d->_
+U+1e14: _E-!_
+U+1e15: _e-!_
+U+1e16: _E-'_
+U+1e17: _e-'_
+U+1e18: _E->_
+U+1e19: _e->_
+U+1e1a: _E-?_
+U+1e1b: _e-?_
+U+1e1c: _E,(_
+U+1e1d: _e,(_
+U+1e1e: F.
+U+1e1f: f.
+U+1e20: G-
+U+1e21: g-
+U+1e22: H.
+U+1e23: h.
+U+1e24: _H-._
+U+1e25: _h-._
+U+1e26: H:
+U+1e27: h:
+U+1e28: H,
+U+1e29: h,
+U+1e2a: _H-(_
+U+1e2b: _h-(_
+U+1e2c: _I-?_
+U+1e2d: _i-?_
+U+1e2e: _I:'_
+U+1e2f: _i:'_
+U+1e30: K'
+U+1e31: k'
+U+1e32: _K-._
+U+1e33: _k-._
+U+1e34: K_
+U+1e35: k_
+U+1e36: _L-._
+U+1e37: _l-._
+U+1e38: _L--._
+U+1e39: _l--._
+U+1e3a: L_
+U+1e3b: l_
+U+1e3c: _L->_
+U+1e3d: _l->_
+U+1e3e: M'
+U+1e3f: m'
+U+1e40: M.
+U+1e41: m.
+U+1e42: _M-._
+U+1e43: _m-._
+U+1e44: N.
+U+1e45: n.
+U+1e46: _N-._
+U+1e47: _n-._
+U+1e48: N_
+U+1e49: n_
+U+1e4a: _N->_
+U+1e4b: _N->_
+U+1e4c: _O?'_
+U+1e4d: _o?'_
+U+1e4e: _O?:_
+U+1e4f: _o?:_
+U+1e50: _O-!_
+U+1e51: _o-!_
+U+1e52: _O-'_
+U+1e53: _o-'_
+U+1e54: P'
+U+1e55: p'
+U+1e56: P.
+U+1e57: p.
+U+1e58: R.
+U+1e59: r.
+U+1e5a: _R-._
+U+1e5b: _r-._
+U+1e5c: _R--._
+U+1e5d: _r--._
+U+1e5e: R_
+U+1e5f: r_
+U+1e60: S.
+U+1e61: s.
+U+1e62: _S-._
+U+1e63: _s-._
+U+1e64: _S'._
+U+1e65: _s'._
+U+1e66: _S<._
+U+1e67: _s<._
+U+1e68: _S.-._
+U+1e69: _S.-._
+U+1e6a: T.
+U+1e6b: t.
+U+1e6c: _T-._
+U+1e6d: _t-._
+U+1e6e: T_
+U+1e6f: t_
+U+1e70: _T->_
+U+1e71: _t->_
+U+1e72: _U--:_
+U+1e73: _u--:_
+U+1e74: _U-?_
+U+1e75: _u-?_
+U+1e76: _U->_
+U+1e77: _u->_
+U+1e78: _U?'_
+U+1e79: _u?'_
+U+1e7a: _U-:_
+U+1e7b: _u-:_
+U+1e7c: V?
+U+1e7d: v?
+U+1e7e: _V-._
+U+1e7f: _v-._
+U+1e80: W!
+U+1e81: w!
+U+1e82: W'
+U+1e83: w'
+U+1e84: W:
+U+1e85: w:
+U+1e86: W.
+U+1e87: w.
+U+1e88: _W-._
+U+1e89: _w-._
+U+1e8a: X.
+U+1e8b: x.
+U+1e8c: X:
+U+1e8d: x:
+U+1e8e: Y.
+U+1e8f: y.
+U+1e90: Z>
+U+1e91: z>
+U+1e92: _Z-._
+U+1e93: _z-._
+U+1e94: Z_
+U+1e95: z_
+U+1e96: h_
+U+1e97: t:
+U+1e98: w0
+U+1e99: y0
+U+1ea0: _A-._
+U+1ea1: _a-._
+U+1ea2: A2
+U+1ea3: a2
+U+1ea4: _A>'_
+U+1ea5: _a>'_
+U+1ea6: _A>!_
+U+1ea7: _a>!_
+U+1ea8: _A>2_
+U+1ea9: _a>2_
+U+1eaa: _A>?_
+U+1eab: _a>?_
+U+1eac: _A>-._
+U+1ead: _a>-._
+U+1eae: _A('_
+U+1eaf: _a('_
+U+1eb0: _A(!_
+U+1eb1: _a(!_
+U+1eb2: _A(2_
+U+1eb3: _a(2_
+U+1eb4: _A(?_
+U+1eb5: _a(?_
+U+1eb6: _A(-._
+U+1eb7: _a(-._
+U+1eb8: _E-._
+U+1eb9: _e-._
+U+1eba: E2
+U+1ebb: e2
+U+1ebc: E?
+U+1ebd: e?
+U+1ebe: _E>'_
+U+1ebf: _e>'_
+U+1ec0: _E>!_
+U+1ec1: _e>!_
+U+1ec2: _E>2_
+U+1ec3: _e>2_
+U+1ec4: _E>?_
+U+1ec5: _e>?_
+U+1ec6: _E>-._
+U+1ec7: _e>-._
+U+1ec8: I2
+U+1ec9: i2
+U+1eca: _I-._
+U+1ecb: _i-._
+U+1ecc: _O-._
+U+1ecd: _o-._
+U+1ece: O2
+U+1ecf: o2
+U+1ed0: _O>'_
+U+1ed1: _o>'_
+U+1ed2: _O>!_
+U+1ed3: _o>!_
+U+1ed4: _O>2_
+U+1ed5: _o>2_
+U+1ed6: _O>?_
+U+1ed7: _o>?_
+U+1ed8: _O>-._
+U+1ed9: _o>-._
+U+1eda: _O9'_
+U+1edb: _o9'_
+U+1edc: _O9!_
+U+1edd: _o9!_
+U+1ede: _O92_
+U+1edf: _o92_
+U+1ee0: _O9?_
+U+1ee1: _o9?_
+U+1ee2: _O9-._
+U+1ee3: _o9-._
+U+1ee4: _U-._
+U+1ee5: _u-._
+U+1ee6: U2
+U+1ee7: u2
+U+1ee8: _U9'_
+U+1ee9: _u9'_
+U+1eea: _U9!_
+U+1eeb: _u9!_
+U+1eec: _U92_
+U+1eed: _u92_
+U+1eee: _U9?_
+U+1eef: _u9?_
+U+1ef0: _U9-._
+U+1ef1: _u9-._
+U+1ef2: Y!
+U+1ef3: y!
+U+1ef4: _Y-._
+U+1ef5: _y-._
+U+1ef6: Y2
+U+1ef7: y2
+U+1ef8: Y?
+U+1ef9: y?
+U+1f00: ;'
+U+1f01: ,'
+U+1f02: ;!
+U+1f03: ,!
+U+1f04: ?;
+U+1f05: ?,
+U+1f06: !:
+U+1f07: ?:
+U+2002: 1N
+U+2003: 1M
+U+2004: 3M
+U+2005: 4M
+U+2006: 6M
+U+2009: 1T
+U+200a: 1H
+U+2010: -1
+U+2013: -N
+U+2014: -M
+U+2015: -3
+U+2016: !2
+U+2017: =2
+U+2018: '6
+U+2019: '9
+U+201a: .9
+U+201b: 9'
+U+201c: "6
+U+201d: "9
+U+201e: :9
+U+201f: 9"
+U+2020: /-
+U+2021: /=
+U+2025: ..
+U+2030: %0
+U+2032: 1'
+U+2033: 2'
+U+2034: 3'
+U+2035: 1"
+U+2036: 2"
+U+2037: 3"
+U+2038: Ca
+U+2039: <1
+U+203a: >1
+U+203b: :X
+U+203c: _!*2_
+U+203e: '-
+U+2044: /f
+U+2070: 0S
+U+2074: 4S
+U+2075: 5S
+U+2076: 6S
+U+2077: 7S
+U+2078: 8S
+U+2079: 9S
+U+207a: +S
+U+207b: -S
+U+207c: =S
+U+207d: (S
+U+207e: )S
+U+207f: nS
+U+2080: 0s
+U+2081: 1s
+U+2082: 2s
+U+2083: 3s
+U+2084: 4s
+U+2085: 5s
+U+2086: 6s
+U+2087: 7s
+U+2088: 8s
+U+2089: 9s
+U+208a: +s
+U+208b: -s
+U+208c: =s
+U+208d: (s
+U+208e: )s
+U+20a4: Li
+U+20a7: Pt
+U+20a9: W=
+U+2103: oC
+U+2105: co
+U+2109: oF
+U+2116: N0
+U+2117: PO
+U+211e: Rx
+U+2120: SM
+U+2122: TM
+U+2126: Om
+U+212b: AO
+U+2153: 13
+U+2154: 23
+U+2155: 15
+U+2156: 25
+U+2157: 35
+U+2158: 45
+U+2159: 16
+U+215a: 56
+U+215b: 18
+U+215c: 38
+U+215d: 58
+U+215e: 78
+U+2160: 1R
+U+2161: 2R
+U+2162: 3R
+U+2163: 4R
+U+2164: 5R
+U+2165: 6R
+U+2166: 7R
+U+2167: 8R
+U+2168: 9R
+U+2169: aR
+U+216a: bR
+U+216b: cR
+U+216c: _50R_
+U+216d: _100R_
+U+216e: _500R_
+U+216f: _1000R_
+U+2170: 1r
+U+2171: 2r
+U+2172: 3r
+U+2173: 4r
+U+2174: 5r
+U+2175: 6r
+U+2176: 7r
+U+2177: 8r
+U+2178: 9r
+U+2179: ar
+U+217a: br
+U+217b: cr
+U+217c: _50r_
+U+217d: _100r_
+U+217e: _500r_
+U+217f: _1000r_
+U+2180: _1000RCD_
+U+2181: _5000R_
+U+2182: _10000R_
+U+2190: <-
+U+2191: -!
+U+2192: ->
+U+2193: -v
+U+2194: <>
+U+2195: UD
+U+2196: _<!!_
+U+2197: _//>_
+U+2198: _!!>_
+U+2199: _<//_
+U+21d0: <=
+U+21d2: =>
+U+21d4: ==
+U+2200: FA
+U+2202: dP
+U+2203: TE
+U+2205: /0
+U+2206: DE
+U+2207: NB
+U+2208: (-
+U+220b: -)
+U+220f: *P
+U+2211: +Z
+U+2212: -2
+U+2213: -+
+U+2217: *-
+U+2218: Ob
+U+2219: Sb
+U+221a: RT
+U+221d: 0(
+U+221e: 00
+U+221f: -L
+U+2220: -V
+U+2225: PP
+U+2227: AN
+U+2228: OR
+U+2229: (U
+U+222a: )U
+U+222b: In
+U+222c: DI
+U+222e: Io
+U+2234: .:
+U+2235: :.
+U+2236: :R
+U+2237: ::
+U+223c: ?1
+U+223e: CG
+U+2243: ?-
+U+2245: ?=
+U+2248: ?2
+U+224c: =?
+U+2253: HI
+U+2260: !=
+U+2261: =3
+U+2264: =<
+U+2265: >=
+U+226a: <*
+U+226b: *>
+U+226e: !<
+U+226f: !>
+U+2282: (C
+U+2283: )C
+U+2286: (_
+U+2287: )_
+U+2299: 0.
+U+229a: 02
+U+22a5: -T
+U+22c5: .P
+U+22ee: :3
+U+22ef: .3
+U+2302: Eh
+U+2308: <7
+U+2309: >7
+U+230a: 7<
+U+230b: 7>
+U+2310: NI
+U+2312: (A
+U+2315: TR
+U+2320: Iu
+U+2321: Il
+U+2329: </
+U+232a: />
+U+2423: Vs
+U+2440: 1h
+U+2441: 3h
+U+2442: 2h
+U+2443: 4h
+U+2446: 1j
+U+2447: 2j
+U+2448: 3j
+U+2449: 4j
+U+2460: _1-o_
+U+2461: _2-o_
+U+2462: _3-o_
+U+2463: _4-o_
+U+2464: _5-o_
+U+2465: _6-o_
+U+2466: _7-o_
+U+2467: _8-o_
+U+2468: _9-o_
+U+2469: _10-o_
+U+246a: _11-o_
+U+246b: _12-o_
+U+246c: _13-o_
+U+246d: _14-o_
+U+246e: _15-o_
+U+246f: _16-o_
+U+2470: _17-o_
+U+2471: _18-o_
+U+2472: _19-o_
+U+2473: _20-o_
+U+2474: _(1)_
+U+2475: _(2)_
+U+2476: _(3)_
+U+2477: _(4)_
+U+2478: _(5)_
+U+2479: _(6)_
+U+247a: _(7)_
+U+247b: _(8)_
+U+247c: _(9)_
+U+247d: _(10)_
+U+247e: _(11)_
+U+247f: _(12)_
+U+2480: _(13)_
+U+2481: _(14)_
+U+2482: _(15)_
+U+2483: _(16)_
+U+2484: _(17)_
+U+2485: _(18)_
+U+2486: _(19)_
+U+2487: _(20)_
+U+2488: 1.
+U+2489: 2.
+U+248a: 3.
+U+248b: 4.
+U+248c: 5.
+U+248d: 6.
+U+248e: 7.
+U+248f: 8.
+U+2490: 9.
+U+2491: _10._
+U+2492: _11._
+U+2493: _12._
+U+2494: _13._
+U+2495: _14._
+U+2496: _15._
+U+2497: _16._
+U+2498: _17._
+U+2499: _18._
+U+249a: _19._
+U+249b: _20._
+U+249c: _(a)_
+U+249d: _(b)_
+U+249e: _(c)_
+U+249f: _(d)_
+U+24a0: _(e)_
+U+24a1: _(f)_
+U+24a2: _(g)_
+U+24a3: _(h)_
+U+24a4: _(i)_
+U+24a5: _(j)_
+U+24a6: _(k)_
+U+24a7: _(l)_
+U+24a8: _(m)_
+U+24a9: _(n)_
+U+24aa: _(o)_
+U+24ab: _(p)_
+U+24ac: _(q)_
+U+24ad: _(r)_
+U+24ae: _(s)_
+U+24af: _(t)_
+U+24b0: _(u)_
+U+24b1: _(v)_
+U+24b2: _(w)_
+U+24b3: _(x)_
+U+24b4: _(y)_
+U+24b5: _(z)_
+U+24b6: _A-o_
+U+24b7: _B-o_
+U+24b8: _C-o_
+U+24b9: _D-o_
+U+24ba: _E-o_
+U+24bb: _F-o_
+U+24bc: _G-o_
+U+24bd: _H-o_
+U+24be: _I-o_
+U+24bf: _J-o_
+U+24c0: _K-o_
+U+24c1: _L-o_
+U+24c2: _M-o_
+U+24c3: _N-o_
+U+24c4: _O-o_
+U+24c5: _P-o_
+U+24c6: _Q-o_
+U+24c7: _R-o_
+U+24c8: _S-o_
+U+24c9: _T-o_
+U+24ca: _U-o_
+U+24cb: _V-o_
+U+24cc: _W-o_
+U+24cd: _X-o_
+U+24ce: _Y-o_
+U+24cf: _Z-o_
+U+24d0: _a-o_
+U+24d1: _b-o_
+U+24d2: _c-o_
+U+24d3: _d-o_
+U+24d4: _e-o_
+U+24d5: _f-o_
+U+24d6: _g-o_
+U+24d7: _h-o_
+U+24d8: _i-o_
+U+24d9: _j-o_
+U+24da: _k-o_
+U+24db: _l-o_
+U+24dc: _m-o_
+U+24dd: _n-o_
+U+24de: _o-o_
+U+24df: _p-o_
+U+24e0: _q-o_
+U+24e1: _r-o_
+U+24e2: _s-o_
+U+24e3: _t-o_
+U+24e4: _u-o_
+U+24e5: _v-o_
+U+24e6: _w-o_
+U+24e7: _x-o_
+U+24e8: _y-o_
+U+24e9: _z-o_
+U+24ea: _0-o_
+U+2500: hh
+U+2501: HH
+U+2502: vv
+U+2503: VV
+U+2504: 3-
+U+2505: 3_
+U+2506: 3!
+U+2507: 3/
+U+2508: 4-
+U+2509: 4_
+U+250a: 4!
+U+250b: 4/
+U+250c: dr
+U+250d: dR
+U+250e: Dr
+U+250f: DR
+U+2510: dl
+U+2511: dL
+U+2512: Dl
+U+2513: LD
+U+2514: ur
+U+2515: uR
+U+2516: Ur
+U+2517: UR
+U+2518: ul
+U+2519: uL
+U+251a: Ul
+U+251b: UL
+U+251c: vr
+U+251d: vR
+U+251e: _Udr_
+U+251f: _uDr_
+U+2520: Vr
+U+2521: _UdR_
+U+2522: _uDR_
+U+2523: VR
+U+2524: vl
+U+2525: vL
+U+2526: _Udl_
+U+2527: _uDl_
+U+2528: Vl
+U+2529: _UdL_
+U+252a: _uDL_
+U+252b: VL
+U+252c: dh
+U+252d: _dLr_
+U+252e: _dlR_
+U+252f: dH
+U+2530: Dh
+U+2531: _DLr_
+U+2532: _DlR_
+U+2533: DH
+U+2534: uh
+U+2535: _uLr_
+U+2536: _ulR_
+U+2537: uH
+U+2538: Uh
+U+2539: _ULr_
+U+253a: _UlR_
+U+253b: UH
+U+253c: vh
+U+253d: _vLr_
+U+253e: _vlR_
+U+253f: vH
+U+2540: _Udh_
+U+2541: _uDh_
+U+2542: Vh
+U+2543: _UdLr_
+U+2544: _UdlR_
+U+2545: _uDLr_
+U+2546: _uDlR_
+U+2547: _UdH_
+U+2548: _uDH_
+U+2549: _VLr_
+U+254a: _VlR_
+U+254b: VH
+U+2571: FD
+U+2572: BD
+U+2580: TB
+U+2584: LB
+U+2588: FB
+U+258c: lB
+U+2590: RB
+U+2591: .S
+U+2592: :S
+U+2593: ?S
+U+25a0: fS
+U+25a1: OS
+U+25a2: RO
+U+25a3: Rr
+U+25a4: RF
+U+25a5: RY
+U+25a6: RH
+U+25a7: RZ
+U+25a8: RK
+U+25a9: RX
+U+25aa: sB
+U+25ac: SR
+U+25ad: Or
+U+25b2: UT
+U+25b3: uT
+U+25b6: PR
+U+25b7: Tr
+U+25bc: Dt
+U+25bd: dT
+U+25c0: PL
+U+25c1: Tl
+U+25c6: Db
+U+25c7: Dw
+U+25ca: LZ
+U+25cb: 0m
+U+25ce: 0o
+U+25cf: 0M
+U+25d0: 0L
+U+25d1: 0R
+U+25d8: Sn
+U+25d9: Ic
+U+25e2: Fd
+U+25e3: Bd
+U+2605: *2
+U+2606: *1
+U+260e: _TEL_
+U+260f: _tel_
+U+261c: <H
+U+261e: >H
+U+263a: 0u
+U+263b: 0U
+U+263c: SU
+U+2640: Fm
+U+2642: Ml
+U+2660: cS
+U+2661: cH
+U+2662: cD
+U+2663: cC
+U+2664: _cS-_
+U+2665: _cH-_
+U+2666: _cD-_
+U+2667: _cC-_
+U+2669: Md
+U+266a: M8
+U+266b: M2
+U+266c: _M16_
+U+266d: Mb
+U+266e: Mx
+U+266f: MX
+U+2713: OK
+U+2717: XX
+U+2720: -X
+U+3000: IS
+U+3001: ,_
+U+3002: ._
+U+3003: +"
+U+3004: +_
+U+3005: *_
+U+3006: ;_
+U+3007: 0_
+U+300a: <+
+U+300b: >+
+U+300c: <'
+U+300d: >'
+U+300e: <"
+U+300f: >"
+U+3010: ("
+U+3011: )"
+U+3012: =T
+U+3013: =_
+U+3014: ('
+U+3015: )'
+U+3016: (I
+U+3017: )I
+U+301c: -?
+U+3020: _=T:)_
+U+3041: A5
+U+3042: a5
+U+3043: I5
+U+3044: i5
+U+3045: U5
+U+3046: u5
+U+3047: E5
+U+3048: e5
+U+3049: O5
+U+304a: o5
+U+304b: ka
+U+304c: ga
+U+304d: ki
+U+304e: gi
+U+304f: ku
+U+3050: gu
+U+3051: ke
+U+3052: ge
+U+3053: ko
+U+3054: go
+U+3055: sa
+U+3056: za
+U+3057: si
+U+3058: zi
+U+3059: su
+U+305a: zu
+U+305b: se
+U+305c: ze
+U+305d: so
+U+305e: zo
+U+305f: ta
+U+3060: da
+U+3061: ti
+U+3062: di
+U+3063: tU
+U+3064: tu
+U+3065: du
+U+3066: te
+U+3067: de
+U+3068: to
+U+3069: do
+U+306a: na
+U+306b: ni
+U+306c: nu
+U+306d: ne
+U+306e: no
+U+306f: ha
+U+3070: ba
+U+3071: pa
+U+3072: hi
+U+3073: bi
+U+3074: pi
+U+3075: hu
+U+3076: bu
+U+3077: pu
+U+3078: he
+U+3079: be
+U+307a: pe
+U+307b: ho
+U+307c: bo
+U+307d: po
+U+307e: ma
+U+307f: mi
+U+3080: mu
+U+3081: me
+U+3082: mo
+U+3083: yA
+U+3084: ya
+U+3085: yU
+U+3086: yu
+U+3087: yO
+U+3088: yo
+U+3089: ra
+U+308a: ri
+U+308b: ru
+U+308c: re
+U+308d: ro
+U+308e: wA
+U+308f: wa
+U+3090: wi
+U+3091: we
+U+3092: wo
+U+3093: n5
+U+3094: vu
+U+309b: "5
+U+309c: 05
+U+309d: *5
+U+309e: +5
+U+30a1: a6
+U+30a2: A6
+U+30a3: i6
+U+30a4: I6
+U+30a5: u6
+U+30a6: U6
+U+30a7: e6
+U+30a8: E6
+U+30a9: o6
+U+30aa: O6
+U+30ab: Ka
+U+30ac: Ga
+U+30ad: Ki
+U+30ae: Gi
+U+30af: Ku
+U+30b0: Gu
+U+30b1: Ke
+U+30b2: Ge
+U+30b3: Ko
+U+30b4: Go
+U+30b5: Sa
+U+30b6: Za
+U+30b7: Si
+U+30b8: Zi
+U+30b9: Su
+U+30ba: Zu
+U+30bb: Se
+U+30bc: Ze
+U+30bd: So
+U+30be: Zo
+U+30bf: Ta
+U+30c0: Da
+U+30c1: Ti
+U+30c2: Di
+U+30c3: TU
+U+30c4: Tu
+U+30c5: Du
+U+30c6: Te
+U+30c7: De
+U+30c8: To
+U+30c9: Do
+U+30ca: Na
+U+30cb: Ni
+U+30cc: Nu
+U+30cd: Ne
+U+30ce: No
+U+30cf: Ha
+U+30d0: Ba
+U+30d1: Pa
+U+30d2: Hi
+U+30d3: Bi
+U+30d4: Pi
+U+30d5: Hu
+U+30d6: Bu
+U+30d7: Pu
+U+30d8: He
+U+30d9: Be
+U+30da: Pe
+U+30db: Ho
+U+30dc: Bo
+U+30dd: Po
+U+30de: Ma
+U+30df: Mi
+U+30e0: Mu
+U+30e1: Me
+U+30e2: Mo
+U+30e3: YA
+U+30e4: Ya
+U+30e5: YU
+U+30e6: Yu
+U+30e7: YO
+U+30e8: Yo
+U+30e9: Ra
+U+30ea: Ri
+U+30eb: Ru
+U+30ec: Re
+U+30ed: Ro
+U+30ee: WA
+U+30ef: Wa
+U+30f0: Wi
+U+30f1: We
+U+30f2: Wo
+U+30f3: N6
+U+30f4: Vu
+U+30f5: KA
+U+30f6: KE
+U+30f7: Va
+U+30f8: Vi
+U+30f9: Ve
+U+30fa: Vo
+U+30fb: .6
+U+30fc: -6
+U+30fd: *6
+U+30fe: +6
+U+3105: b4
+U+3106: p4
+U+3107: m4
+U+3108: f4
+U+3109: d4
+U+310a: t4
+U+310b: n4
+U+310c: l4
+U+310d: g4
+U+310e: k4
+U+310f: h4
+U+3110: j4
+U+3111: q4
+U+3112: x4
+U+3113: zh
+U+3114: ch
+U+3115: sh
+U+3116: r4
+U+3117: z4
+U+3118: c4
+U+3119: s4
+U+311a: a4
+U+311b: o4
+U+311c: e4
+U+311d: _eh4_
+U+311e: ai
+U+311f: ei
+U+3120: au
+U+3121: ou
+U+3122: an
+U+3123: en
+U+3124: aN
+U+3125: eN
+U+3126: er
+U+3127: i4
+U+3128: u4
+U+3129: iu
+U+312a: v4
+U+312b: nG
+U+312c: gn
+U+321c: _(JU)_
+U+3220: 1c
+U+3221: 2c
+U+3222: 3c
+U+3223: 4c
+U+3224: 5c
+U+3225: 6c
+U+3226: 7c
+U+3227: 8c
+U+3228: 9c
+U+3229: _10c_
+U+327f: _KSC_
+U+fb00: ff
+U+fb01: fi
+U+fb02: fl
+U+fb03: _ffi_
+U+fb04: _ffl_
+U+fb05: ft
+U+fb06: st
+U+fe7d: _3+;_
+U+fe82: _aM._
+U+fe84: _aH._
+U+fe8d: _a+-_
+U+fe8e: _a+._
+U+fe8f: _b+-_
+U+fe90: _b+,_
+U+fe91: _b+;_
+U+fe92: _b+._
+U+fe93: _tm-_
+U+fe94: _tm._
+U+fe95: _t+-_
+U+fe96: _t+,_
+U+fe97: _t+;_
+U+fe98: _t+._
+U+fe99: _tk-_
+U+fe9a: _tk,_
+U+fe9b: _tk;_
+U+fe9c: _tk._
+U+fe9d: _g+-_
+U+fe9e: _g+,_
+U+fe9f: _g+;_
+U+fea0: _g+._
+U+fea1: _hk-_
+U+fea2: _hk,_
+U+fea3: _hk;_
+U+fea4: _hk._
+U+fea5: _x+-_
+U+fea6: _x+,_
+U+fea7: _x+;_
+U+fea8: _x+._
+U+fea9: _d+-_
+U+feaa: _d+._
+U+feab: _dk-_
+U+feac: _dk._
+U+fead: _r+-_
+U+feae: _r+._
+U+feaf: _z+-_
+U+feb0: _z+._
+U+feb1: _s+-_
+U+feb2: _s+,_
+U+feb3: _s+;_
+U+feb4: _s+._
+U+feb5: _sn-_
+U+feb6: _sn,_
+U+feb7: _sn;_
+U+feb8: _sn._
+U+feb9: _c+-_
+U+feba: _c+,_
+U+febb: _c+;_
+U+febc: _c+._
+U+febd: _dd-_
+U+febe: _dd,_
+U+febf: _dd;_
+U+fec0: _dd._
+U+fec1: _tj-_
+U+fec2: _tj,_
+U+fec3: _tj;_
+U+fec4: _tj._
+U+fec5: _zH-_
+U+fec6: _zH,_
+U+fec7: _zH;_
+U+fec8: _zH._
+U+fec9: _e+-_
+U+feca: _e+,_
+U+fecb: _e+;_
+U+fecc: _e+._
+U+fecd: _i+-_
+U+fece: _i+,_
+U+fecf: _i+;_
+U+fed0: _i+._
+U+fed1: _f+-_
+U+fed2: _f+,_
+U+fed3: _f+;_
+U+fed4: _f+._
+U+fed5: _q+-_
+U+fed6: _q+,_
+U+fed7: _q+;_
+U+fed8: _q+._
+U+fed9: _k+-_
+U+feda: _k+,_
+U+fedb: _k+;_
+U+fedc: _k+._
+U+fedd: _l+-_
+U+fede: _l+,_
+U+fedf: _l+;_
+U+fee0: _l+._
+U+fee1: _m+-_
+U+fee2: _m+,_
+U+fee3: _m+;_
+U+fee4: _m+._
+U+fee5: _n+-_
+U+fee6: _n+,_
+U+fee7: _n+;_
+U+fee8: _n+._
+U+fee9: _h+-_
+U+feea: _h+,_
+U+feeb: _h+;_
+U+feec: _h+._
+U+feed: _w+-_
+U+feee: _w+._
+U+feef: _j+-_
+U+fef0: _j+._
+U+fef1: _y+-_
+U+fef2: _y+,_
+U+fef3: _y+;_
+U+fef4: _y+._
+U+fef5: _lM-_
+U+fef6: _lM._
+U+fef7: _lH-_
+U+fef8: _lH._
+U+fef9: _lh-_
+U+fefa: _lh._
+U+fefb: _la-_
+U+fefc: _la._
+U+0000: NU
+U+0001: SH
+U+0002: SX
+U+0003: EX
+U+0004: ET
+U+0005: EQ
+U+0006: AK
+U+0007: BL
+U+0008: BS
+U+0009: HT
+# U+000a: LF
+U+000b: VT
+U+000c: FF
+U+000d: CR
+U+000e: SO
+U+000f: SI
+U+0010: DL
+U+0011: D1
+U+0012: D2
+U+0013: D3
+U+0014: D4
+U+0015: NK
+U+0016: SY
+U+0017: EB
+U+0018: CN
+U+0019: EM
+U+001a: SB
+U+001b: EC
+U+001c: FS
+U+001d: GS
+U+001e: RS
+U+001f: US
+U+007f: DT
+U+0080: PA
+U+0081: HO
+U+0082: BH
+U+0083: NH
+U+0084: IN
+U+0085: NL
+U+0086: SA
+U+0087: ES
+U+0088: HS
+U+0089: HJ
+U+008a: VS
+U+008b: PD
+U+008c: PU
+U+008d: RI
+U+008e: S2
+U+008f: S3
+U+0090: DC
+U+0091: P1
+U+0092: P2
+U+0093: TS
+U+0094: CC
+U+0095: MW
+U+0096: SG
+U+0097: EG
+U+0098: SS
+U+0099: GC
+U+009a: SC
+U+009b: CI
+U+009c: ST
+U+009d: OC
+U+009e: PM
+U+009f: AC
+U+e001: /c
+U+e002: UA
+U+e003: UB
+U+e004: "3
+U+e005: "1
+U+e006: "!
+U+e007: "'
+U+e008: ">
+U+e009: "?
+U+e00a: "-
+U+e00b: "(
+U+e00c: ".
+U+e00d: ":
+U+e00e: "0
+U+e00f: ""
+U+e010: "<
+U+e011: ",
+U+e012: ";
+U+e013: "_
+U+e014: "=
+U+e015: "/
+U+e016: "i
+U+e017: "d
+U+e018: "p
+U+e019: ;;
+U+e01a: ,,
+U+e01b: b3
+U+e01c: Ci
+U+e01d: f(
+U+e01e: ed
+U+e01f: am
+U+e020: pm
+U+e021: _Tel_
+U+e022: _a+:_
+U+e023: Fl
+U+e024: GF
+U+e025: >V
+U+e026: !*
+U+e027: ?*
+U+e028: J<
diff --git a/src/chrtrans/mnemonic_suni.tbl b/src/chrtrans/mnemonic_suni.tbl
new file mode 100644
index 00000000..d2f05d89
--- /dev/null
+++ b/src/chrtrans/mnemonic_suni.tbl
@@ -0,0 +1,1899 @@
+#The MIME name of this charset. 
+Mmnemonic
+
+#Name as a Display Charset (used on Options screen)
+ORFC1345 Mnemonic
+ 
+# U+0020:&SP
+U+0021:!
+U+0022:"
+U+0023:&Nb
+U+0024:&DO
+U+0025:%
+U+0026:&&
+U+0027:'
+U+0028:(
+U+0029:)
+U+002a:*
+U+002b:+
+U+002c:,
+U+002d:-
+U+002e:.
+U+002f:/
+U+0030:0
+U+0031:1
+U+0032:2
+U+0033:3
+U+0034:4
+U+0035:5
+U+0036:6
+U+0037:7
+U+0038:8
+U+0039:9
+U+003a::
+U+003b:;
+U+003c:<
+U+003d:=
+U+003e:>
+U+003f:?
+U+0040:&At
+U+0041:A
+U+0042:B
+U+0043:C
+U+0044:D
+U+0045:E
+U+0046:F
+U+0047:G
+U+0048:H
+U+0049:I
+U+004a:J
+U+004b:K
+U+004c:L
+U+004d:M
+U+004e:N
+U+004f:O
+U+0050:P
+U+0051:Q
+U+0052:R
+U+0053:S
+U+0054:T
+U+0055:U
+U+0056:V
+U+0057:W
+U+0058:X
+U+0059:Y
+U+005a:Z
+U+005b:&<(
+U+005c:&//
+U+005d:&)>
+U+005e:&'>
+U+005f:_
+U+0060:&'!
+U+0061:a
+U+0062:b
+U+0063:c
+U+0064:d
+U+0065:e
+U+0066:f
+U+0067:g
+U+0068:h
+U+0069:i
+U+006a:j
+U+006b:k
+U+006c:l
+U+006d:m
+U+006e:n
+U+006f:o
+U+0070:p
+U+0071:q
+U+0072:r
+U+0073:s
+U+0074:t
+U+0075:u
+U+0076:v
+U+0077:w
+U+0078:x
+U+0079:y
+U+007a:z
+U+007b:&(!
+U+007c:&!!
+U+007d:&!)
+U+007e:&'?
+U+00a0:&NS
+U+00a1:&!I
+U+00a2:&Ct
+U+00a3:&Pd
+U+00a4:&Cu
+U+00a5:&Ye
+U+00a6:&BB
+U+00a7:&SE
+U+00a8:&':
+U+00a9:&Co
+U+00aa:&-a
+U+00ab:&<<
+U+00ac:&NO
+U+00ad:&--
+U+00ae:&Rg
+U+00af:&'m
+U+00b0:&DG
+U+00b1:&+-
+U+00b2:&2S
+U+00b3:&3S
+U+00b4:&''
+U+00b5:&My
+U+00b6:&PI
+U+00b7:&.M
+U+00b8:&',
+U+00b9:&1S
+U+00ba:&-o
+U+00bb:&>>
+U+00bc:&14
+U+00bd:&12
+U+00be:&34
+U+00bf:&?I
+U+00c0:&A!
+U+00c1:&A'
+U+00c2:&A>
+U+00c3:&A?
+U+00c4:&A:
+U+00c5:&AA
+U+00c6:&AE
+U+00c7:&C,
+U+00c8:&E!
+U+00c9:&E'
+U+00ca:&E>
+U+00cb:&E:
+U+00cc:&I!
+U+00cd:&I'
+U+00ce:&I>
+U+00cf:&I:
+U+00d0:&D-
+U+00d1:&N?
+U+00d2:&O!
+U+00d3:&O'
+U+00d4:&O>
+U+00d5:&O?
+U+00d6:&O:
+U+00d7:&*X
+U+00d8:&O/
+U+00d9:&U!
+U+00da:&U'
+U+00db:&U>
+U+00dc:&U:
+U+00dd:&Y'
+U+00de:&TH
+U+00df:&ss
+U+00e0:&a!
+U+00e1:&a'
+U+00e2:&a>
+U+00e3:&a?
+U+00e4:&a:
+U+00e5:&aa
+U+00e6:&ae
+U+00e7:&c,
+U+00e8:&e!
+U+00e9:&e'
+U+00ea:&e>
+U+00eb:&e:
+U+00ec:&i!
+U+00ed:&i'
+U+00ee:&i>
+U+00ef:&i:
+U+00f0:&d-
+U+00f1:&n?
+U+00f2:&o!
+U+00f3:&o'
+U+00f4:&o>
+U+00f5:&o?
+U+00f6:&o:
+U+00f7:&-:
+U+00f8:&o/
+U+00f9:&u!
+U+00fa:&u'
+U+00fb:&u>
+U+00fc:&u:
+U+00fd:&y'
+U+00fe:&th
+U+00ff:&y:
+U+0100:&A-
+U+0101:&a-
+U+0102:&A(
+U+0103:&a(
+U+0104:&A;
+U+0105:&a;
+U+0106:&C'
+U+0107:&c'
+U+0108:&C>
+U+0109:&c>
+U+010a:&C.
+U+010b:&c.
+U+010c:&C<
+U+010d:&c<
+U+010e:&D<
+U+010f:&d<
+U+0110:&D/
+U+0111:&d/
+U+0112:&E-
+U+0113:&e-
+U+0114:&E(
+U+0115:&e(
+U+0116:&E.
+U+0117:&e.
+U+0118:&E;
+U+0119:&e;
+U+011a:&E<
+U+011b:&e<
+U+011c:&G>
+U+011d:&g>
+U+011e:&G(
+U+011f:&g(
+U+0120:&G.
+U+0121:&g.
+U+0122:&G,
+U+0123:&g,
+U+0124:&H>
+U+0125:&h>
+U+0126:&H/
+U+0127:&h/
+U+0128:&I?
+U+0129:&i?
+U+012a:&I-
+U+012b:&i-
+U+012c:&I(
+U+012d:&i(
+U+012e:&I;
+U+012f:&i;
+U+0130:&I.
+U+0131:&i.
+U+0132:&IJ
+U+0133:&ij
+U+0134:&J>
+U+0135:&j>
+U+0136:&K,
+U+0137:&k,
+U+0138:&kk
+U+0139:&L'
+U+013a:&l'
+U+013b:&L,
+U+013c:&l,
+U+013d:&L<
+U+013e:&l<
+U+013f:&L.
+U+0140:&l.
+U+0141:&L/
+U+0142:&l/
+U+0143:&N'
+U+0144:&n'
+U+0145:&N,
+U+0146:&n,
+U+0147:&N<
+U+0148:&n<
+U+0149:&'n
+U+014a:&NG
+U+014b:&ng
+U+014c:&O-
+U+014d:&o-
+U+014e:&O(
+U+014f:&o(
+U+0150:&O"
+U+0151:&o"
+U+0152:&OE
+U+0153:&oe
+U+0154:&R'
+U+0155:&r'
+U+0156:&R,
+U+0157:&r,
+U+0158:&R<
+U+0159:&r<
+U+015a:&S'
+U+015b:&s'
+U+015c:&S>
+U+015d:&s>
+U+015e:&S,
+U+015f:&s,
+U+0160:&S<
+U+0161:&s<
+U+0162:&T,
+U+0163:&t,
+U+0164:&T<
+U+0165:&t<
+U+0166:&T/
+U+0167:&t/
+U+0168:&U?
+U+0169:&u?
+U+016a:&U-
+U+016b:&u-
+U+016c:&U(
+U+016d:&u(
+U+016e:&U0
+U+016f:&u0
+U+0170:&U"
+U+0171:&u"
+U+0172:&U;
+U+0173:&u;
+U+0174:&W>
+U+0175:&w>
+U+0176:&Y>
+U+0177:&y>
+U+0178:&Y:
+U+0179:&Z'
+U+017a:&z'
+U+017b:&Z.
+U+017c:&z.
+U+017d:&Z<
+U+017e:&z<
+U+01a0:&O9
+U+01a1:&o9
+U+01a2:&OI
+U+01a3:&oi
+U+01a6:&yr
+U+01af:&U9
+U+01b0:&u9
+U+01b5:&Z/
+U+01b6:&z/
+U+01b7:&ED
+U+01cd:&A<
+U+01ce:&a<
+U+01cf:&I<
+U+01d0:&i<
+U+01d1:&O<
+U+01d2:&o<
+U+01d3:&U<
+U+01d4:&u<
+U+01d5:&_U:-_
+U+01d6:&_u:-_
+U+01d7:&_U:'_
+U+01d8:&_u:'_
+U+01d9:&_U:<_
+U+01da:&_u:<_
+U+01db:&_U:!_
+U+01dc:&_u:!_
+U+01de:&A1
+U+01df:&a1
+U+01e0:&A7
+U+01e1:&a7
+U+01e2:&A3
+U+01e3:&a3
+U+01e4:&G/
+U+01e5:&g/
+U+01e6:&G<
+U+01e7:&g<
+U+01e8:&K<
+U+01e9:&k<
+U+01ea:&O;
+U+01eb:&o;
+U+01ec:&O1
+U+01ed:&o1
+U+01ee:&EZ
+U+01ef:&ez
+U+01f0:&j<
+U+01f4:&G'
+U+01f5:&g'
+U+01fa:&_AA'_
+U+01fb:&_aa'_
+U+01fc:&_AE'_
+U+01fd:&_ae'_
+U+01fe:&_O/'_
+U+01ff:&_o/'_
+U+02bf:&;S
+U+02c7:&'<
+U+02d8:&'(
+U+02d9:&'.
+U+02da:&'0
+U+02db:&';
+U+02dd:&'"
+U+0386:&A%
+U+0388:&E%
+U+0389:&Y%
+U+038a:&I%
+U+038c:&O%
+U+038e:&U%
+U+038f:&W%
+U+0390:&i3
+U+0391:&A*
+U+0392:&B*
+U+0393:&G*
+U+0394:&D*
+U+0395:&E*
+U+0396:&Z*
+U+0397:&Y*
+U+0398:&H*
+U+0399:&I*
+U+039a:&K*
+U+039b:&L*
+U+039c:&M*
+U+039d:&N*
+U+039e:&C*
+U+039f:&O*
+U+03a0:&P*
+U+03a1:&R*
+U+03a3:&S*
+U+03a4:&T*
+U+03a5:&U*
+U+03a6:&F*
+U+03a7:&X*
+U+03a8:&Q*
+U+03a9:&W*
+U+03aa:&J*
+U+03ab:&V*
+U+03ac:&a%
+U+03ad:&e%
+U+03ae:&y%
+U+03af:&i%
+U+03b0:&u3
+U+03b1:&a*
+U+03b2:&b*
+U+03b3:&g*
+U+03b4:&d*
+U+03b5:&e*
+U+03b6:&z*
+U+03b7:&y*
+U+03b8:&h*
+U+03b9:&i*
+U+03ba:&k*
+U+03bb:&l*
+U+03bc:&m*
+U+03bd:&n*
+U+03be:&c*
+U+03bf:&o*
+U+03c0:&p*
+U+03c1:&r*
+U+03c2:&*s
+U+03c3:&s*
+U+03c4:&t*
+U+03c5:&u*
+U+03c6:&f*
+U+03c7:&x*
+U+03c8:&q*
+U+03c9:&w*
+U+03ca:&j*
+U+03cb:&v*
+U+03cc:&o%
+U+03cd:&u%
+U+03ce:&w%
+U+03d8:&'G
+U+03d9:&,G
+U+03da:&T3
+U+03db:&t3
+U+03dc:&M3
+U+03dd:&m3
+U+03de:&K3
+U+03df:&k3
+U+03e0:&P3
+U+03e1:&p3
+U+03f4:&'%
+U+03f5:&j3
+U+0401:&IO
+U+0402:&D%
+U+0403:&G%
+U+0404:&IE
+U+0405:&DS
+U+0406:&II
+U+0407:&YI
+U+0408:&J%
+U+0409:&LJ
+U+040a:&NJ
+U+040b:&Ts
+U+040c:&KJ
+U+040e:&V%
+U+040f:&DZ
+U+0410:&A=
+U+0411:&B=
+U+0412:&V=
+U+0413:&G=
+U+0414:&D=
+U+0415:&E=
+U+0416:&Z%
+U+0417:&Z=
+U+0418:&I=
+U+0419:&J=
+U+041a:&K=
+U+041b:&L=
+U+041c:&M=
+U+041d:&N=
+U+041e:&O=
+U+041f:&P=
+U+0420:&R=
+U+0421:&S=
+U+0422:&T=
+U+0423:&U=
+U+0424:&F=
+U+0425:&H=
+U+0426:&C=
+U+0427:&C%
+U+0428:&S%
+U+0429:&Sc
+U+042a:&="
+U+042b:&Y=
+U+042c:&%"
+U+042d:&JE
+U+042e:&JU
+U+042f:&JA
+U+0430:&a=
+U+0431:&b=
+U+0432:&v=
+U+0433:&g=
+U+0434:&d=
+U+0435:&e=
+U+0436:&z%
+U+0437:&z=
+U+0438:&i=
+U+0439:&j=
+U+043a:&k=
+U+043b:&l=
+U+043c:&m=
+U+043d:&n=
+U+043e:&o=
+U+043f:&p=
+U+0440:&r=
+U+0441:&s=
+U+0442:&t=
+U+0443:&u=
+U+0444:&f=
+U+0445:&h=
+U+0446:&c=
+U+0447:&c%
+U+0448:&s%
+U+0449:&sc
+U+044a:&='
+U+044b:&y=
+U+044c:&%'
+U+044d:&je
+U+044e:&ju
+U+044f:&ja
+U+0451:&io
+U+0452:&d%
+U+0453:&g%
+U+0454:&ie
+U+0455:&ds
+U+0456:&ii
+U+0457:&yi
+U+0458:&j%
+U+0459:&lj
+U+045a:&nj
+U+045b:&ts
+U+045c:&kj
+U+045e:&v%
+U+045f:&dz
+U+0462:&Y3
+U+0463:&y3
+U+046a:&O3
+U+046b:&o3
+U+0472:&F3
+U+0473:&f3
+U+0474:&V3
+U+0475:&v3
+U+0480:&C3
+U+0481:&c3
+U+0490:&G3
+U+0491:&g3
+U+05d0:&A+
+U+05d1:&B+
+U+05d2:&G+
+U+05d3:&D+
+U+05d4:&H+
+U+05d5:&W+
+U+05d6:&Z+
+U+05d7:&X+
+U+05d8:&Tj
+U+05d9:&J+
+U+05da:&K%
+U+05db:&K+
+U+05dc:&L+
+U+05dd:&M%
+U+05de:&M+
+U+05df:&N%
+U+05e0:&N+
+U+05e1:&S+
+U+05e2:&E+
+U+05e3:&P%
+U+05e4:&P+
+U+05e5:&Zj
+U+05e6:&ZJ
+U+05e7:&Q+
+U+05e8:&R+
+U+05e9:&Sh
+U+05ea:&T+
+U+060c:&,+
+U+061b:&;+
+U+061f:&?+
+U+0621:&H'
+U+0622:&aM
+U+0623:&aH
+U+0624:&wH
+U+0625:&ah
+U+0626:&yH
+U+0627:&a+
+U+0628:&b+
+U+0629:&tm
+U+062a:&t+
+U+062b:&tk
+U+062c:&g+
+U+062d:&hk
+U+062e:&x+
+U+062f:&d+
+U+0630:&dk
+U+0631:&r+
+U+0632:&z+
+U+0633:&s+
+U+0634:&sn
+U+0635:&c+
+U+0636:&dd
+U+0637:&tj
+U+0638:&zH
+U+0639:&e+
+U+063a:&i+
+U+0640:&++
+U+0641:&f+
+U+0642:&q+
+U+0643:&k+
+U+0644:&l+
+U+0645:&m+
+U+0646:&n+
+U+0647:&h+
+U+0648:&w+
+U+0649:&j+
+U+064a:&y+
+U+064b:&:+
+U+064c:&"+
+U+064d:&=+
+U+064e:&/+
+U+064f:&'+
+U+0650:&1+
+U+0651:&3+
+U+0652:&0+
+U+0670:&aS
+U+067e:&p+
+U+06a4:&v+
+U+06af:&gf
+U+06f0:&0a
+U+06f1:&1a
+U+06f2:&2a
+U+06f3:&3a
+U+06f4:&4a
+U+06f5:&5a
+U+06f6:&6a
+U+06f7:&7a
+U+06f8:&8a
+U+06f9:&9a
+U+1e00:&_A-0_
+U+1e01:&_a-0_
+U+1e02:&B.
+U+1e03:&b.
+U+1e04:&_B-._
+U+1e05:&_b-._
+U+1e06:&B_
+U+1e07:&b_
+U+1e08:&_C,'_
+U+1e09:&_c,'_
+U+1e0a:&D.
+U+1e0b:&d.
+U+1e0c:&_D-._
+U+1e0d:&_d-._
+U+1e0e:&D_
+U+1e0f:&d_
+U+1e10:&D,
+U+1e11:&d,
+U+1e12:&_D->_
+U+1e13:&_d->_
+U+1e14:&_E-!_
+U+1e15:&_e-!_
+U+1e16:&_E-'_
+U+1e17:&_e-'_
+U+1e18:&_E->_
+U+1e19:&_e->_
+U+1e1a:&_E-?_
+U+1e1b:&_e-?_
+U+1e1c:&_E,(_
+U+1e1d:&_e,(_
+U+1e1e:&F.
+U+1e1f:&f.
+U+1e20:&G-
+U+1e21:&g-
+U+1e22:&H.
+U+1e23:&h.
+U+1e24:&_H-._
+U+1e25:&_h-._
+U+1e26:&H:
+U+1e27:&h:
+U+1e28:&H,
+U+1e29:&h,
+U+1e2a:&_H-(_
+U+1e2b:&_h-(_
+U+1e2c:&_I-?_
+U+1e2d:&_i-?_
+U+1e2e:&_I:'_
+U+1e2f:&_i:'_
+U+1e30:&K'
+U+1e31:&k'
+U+1e32:&_K-._
+U+1e33:&_k-._
+U+1e34:&K_
+U+1e35:&k_
+U+1e36:&_L-._
+U+1e37:&_l-._
+U+1e38:&_L--._
+U+1e39:&_l--._
+U+1e3a:&L_
+U+1e3b:&l_
+U+1e3c:&_L->_
+U+1e3d:&_l->_
+U+1e3e:&M'
+U+1e3f:&m'
+U+1e40:&M.
+U+1e41:&m.
+U+1e42:&_M-._
+U+1e43:&_m-._
+U+1e44:&N.
+U+1e45:&n.
+U+1e46:&_N-._
+U+1e47:&_n-._
+U+1e48:&N_
+U+1e49:&n_
+U+1e4a:&_N->_
+U+1e4b:&_N->_
+U+1e4c:&_O?'_
+U+1e4d:&_o?'_
+U+1e4e:&_O?:_
+U+1e4f:&_o?:_
+U+1e50:&_O-!_
+U+1e51:&_o-!_
+U+1e52:&_O-'_
+U+1e53:&_o-'_
+U+1e54:&P'
+U+1e55:&p'
+U+1e56:&P.
+U+1e57:&p.
+U+1e58:&R.
+U+1e59:&r.
+U+1e5a:&_R-._
+U+1e5b:&_r-._
+U+1e5c:&_R--._
+U+1e5d:&_r--._
+U+1e5e:&R_
+U+1e5f:&r_
+U+1e60:&S.
+U+1e61:&s.
+U+1e62:&_S-._
+U+1e63:&_s-._
+U+1e64:&_S'._
+U+1e65:&_s'._
+U+1e66:&_S<._
+U+1e67:&_s<._
+U+1e68:&_S.-._
+U+1e69:&_S.-._
+U+1e6a:&T.
+U+1e6b:&t.
+U+1e6c:&_T-._
+U+1e6d:&_t-._
+U+1e6e:&T_
+U+1e6f:&t_
+U+1e70:&_T->_
+U+1e71:&_t->_
+U+1e72:&_U--:_
+U+1e73:&_u--:_
+U+1e74:&_U-?_
+U+1e75:&_u-?_
+U+1e76:&_U->_
+U+1e77:&_u->_
+U+1e78:&_U?'_
+U+1e79:&_u?'_
+U+1e7a:&_U-:_
+U+1e7b:&_u-:_
+U+1e7c:&V?
+U+1e7d:&v?
+U+1e7e:&_V-._
+U+1e7f:&_v-._
+U+1e80:&W!
+U+1e81:&w!
+U+1e82:&W'
+U+1e83:&w'
+U+1e84:&W:
+U+1e85:&w:
+U+1e86:&W.
+U+1e87:&w.
+U+1e88:&_W-._
+U+1e89:&_w-._
+U+1e8a:&X.
+U+1e8b:&x.
+U+1e8c:&X:
+U+1e8d:&x:
+U+1e8e:&Y.
+U+1e8f:&y.
+U+1e90:&Z>
+U+1e91:&z>
+U+1e92:&_Z-._
+U+1e93:&_z-._
+U+1e94:&Z_
+U+1e95:&z_
+U+1e96:&h_
+U+1e97:&t:
+U+1e98:&w0
+U+1e99:&y0
+U+1ea0:&_A-._
+U+1ea1:&_a-._
+U+1ea2:&A2
+U+1ea3:&a2
+U+1ea4:&_A>'_
+U+1ea5:&_a>'_
+U+1ea6:&_A>!_
+U+1ea7:&_a>!_
+U+1ea8:&_A>2_
+U+1ea9:&_a>2_
+U+1eaa:&_A>?_
+U+1eab:&_a>?_
+U+1eac:&_A>-._
+U+1ead:&_a>-._
+U+1eae:&_A('_
+U+1eaf:&_a('_
+U+1eb0:&_A(!_
+U+1eb1:&_a(!_
+U+1eb2:&_A(2_
+U+1eb3:&_a(2_
+U+1eb4:&_A(?_
+U+1eb5:&_a(?_
+U+1eb6:&_A(-._
+U+1eb7:&_a(-._
+U+1eb8:&_E-._
+U+1eb9:&_e-._
+U+1eba:&E2
+U+1ebb:&e2
+U+1ebc:&E?
+U+1ebd:&e?
+U+1ebe:&_E>'_
+U+1ebf:&_e>'_
+U+1ec0:&_E>!_
+U+1ec1:&_e>!_
+U+1ec2:&_E>2_
+U+1ec3:&_e>2_
+U+1ec4:&_E>?_
+U+1ec5:&_e>?_
+U+1ec6:&_E>-._
+U+1ec7:&_e>-._
+U+1ec8:&I2
+U+1ec9:&i2
+U+1eca:&_I-._
+U+1ecb:&_i-._
+U+1ecc:&_O-._
+U+1ecd:&_o-._
+U+1ece:&O2
+U+1ecf:&o2
+U+1ed0:&_O>'_
+U+1ed1:&_o>'_
+U+1ed2:&_O>!_
+U+1ed3:&_o>!_
+U+1ed4:&_O>2_
+U+1ed5:&_o>2_
+U+1ed6:&_O>?_
+U+1ed7:&_o>?_
+U+1ed8:&_O>-._
+U+1ed9:&_o>-._
+U+1eda:&_O9'_
+U+1edb:&_o9'_
+U+1edc:&_O9!_
+U+1edd:&_o9!_
+U+1ede:&_O92_
+U+1edf:&_o92_
+U+1ee0:&_O9?_
+U+1ee1:&_o9?_
+U+1ee2:&_O9-._
+U+1ee3:&_o9-._
+U+1ee4:&_U-._
+U+1ee5:&_u-._
+U+1ee6:&U2
+U+1ee7:&u2
+U+1ee8:&_U9'_
+U+1ee9:&_u9'_
+U+1eea:&_U9!_
+U+1eeb:&_u9!_
+U+1eec:&_U92_
+U+1eed:&_u92_
+U+1eee:&_U9?_
+U+1eef:&_u9?_
+U+1ef0:&_U9-._
+U+1ef1:&_u9-._
+U+1ef2:&Y!
+U+1ef3:&y!
+U+1ef4:&_Y-._
+U+1ef5:&_y-._
+U+1ef6:&Y2
+U+1ef7:&y2
+U+1ef8:&Y?
+U+1ef9:&y?
+U+1f00:&;'
+U+1f01:&,'
+U+1f02:&;!
+U+1f03:&,!
+U+1f04:&?;
+U+1f05:&?,
+U+1f06:&!:
+U+1f07:&?:
+U+2002:&1N
+U+2003:&1M
+U+2004:&3M
+U+2005:&4M
+U+2006:&6M
+U+2009:&1T
+U+200a:&1H
+U+2010:&-1
+U+2013:&-N
+U+2014:&-M
+U+2015:&-3
+U+2016:&!2
+U+2017:&=2
+U+2018:&'6
+U+2019:&'9
+U+201a:&.9
+U+201b:&9'
+U+201c:&"6
+U+201d:&"9
+U+201e:&:9
+U+201f:&9"
+U+2020:&/-
+U+2021:&/=
+U+2025:&..
+U+2030:&%0
+U+2032:&1'
+U+2033:&2'
+U+2034:&3'
+U+2035:&1"
+U+2036:&2"
+U+2037:&3"
+U+2038:&Ca
+U+2039:&<1
+U+203a:&>1
+U+203b:&:X
+U+203c:&_!*2_
+U+203e:&'-
+U+2044:&/f
+U+2070:&0S
+U+2074:&4S
+U+2075:&5S
+U+2076:&6S
+U+2077:&7S
+U+2078:&8S
+U+2079:&9S
+U+207a:&+S
+U+207b:&-S
+U+207c:&=S
+U+207d:&(S
+U+207e:&)S
+U+207f:&nS
+U+2080:&0s
+U+2081:&1s
+U+2082:&2s
+U+2083:&3s
+U+2084:&4s
+U+2085:&5s
+U+2086:&6s
+U+2087:&7s
+U+2088:&8s
+U+2089:&9s
+U+208a:&+s
+U+208b:&-s
+U+208c:&=s
+U+208d:&(s
+U+208e:&)s
+U+20a4:&Li
+U+20a7:&Pt
+U+20a9:&W=
+U+2103:&oC
+U+2105:&co
+U+2109:&oF
+U+2116:&N0
+U+2117:&PO
+U+211e:&Rx
+U+2120:&SM
+U+2122:&TM
+U+2126:&Om
+U+212b:&AO
+U+2153:&13
+U+2154:&23
+U+2155:&15
+U+2156:&25
+U+2157:&35
+U+2158:&45
+U+2159:&16
+U+215a:&56
+U+215b:&18
+U+215c:&38
+U+215d:&58
+U+215e:&78
+U+2160:&1R
+U+2161:&2R
+U+2162:&3R
+U+2163:&4R
+U+2164:&5R
+U+2165:&6R
+U+2166:&7R
+U+2167:&8R
+U+2168:&9R
+U+2169:&aR
+U+216a:&bR
+U+216b:&cR
+U+216c:&_50R_
+U+216d:&_100R_
+U+216e:&_500R_
+U+216f:&_1000R_
+U+2170:&1r
+U+2171:&2r
+U+2172:&3r
+U+2173:&4r
+U+2174:&5r
+U+2175:&6r
+U+2176:&7r
+U+2177:&8r
+U+2178:&9r
+U+2179:&ar
+U+217a:&br
+U+217b:&cr
+U+217c:&_50r_
+U+217d:&_100r_
+U+217e:&_500r_
+U+217f:&_1000r_
+U+2180:&_1000RCD_
+U+2181:&_5000R_
+U+2182:&_10000R_
+U+2190:&<-
+U+2191:&-!
+U+2192:&->
+U+2193:&-v
+U+2194:&<>
+U+2195:&UD
+U+2196:&_<!!_
+U+2197:&_//>_
+U+2198:&_!!>_
+U+2199:&_<//_
+U+21d0:&<=
+U+21d2:&=>
+U+21d4:&==
+U+2200:&FA
+U+2202:&dP
+U+2203:&TE
+U+2205:&/0
+U+2206:&DE
+U+2207:&NB
+U+2208:&(-
+U+220b:&-)
+U+220f:&*P
+U+2211:&+Z
+U+2212:&-2
+U+2213:&-+
+U+2217:&*-
+U+2218:&Ob
+U+2219:&Sb
+U+221a:&RT
+U+221d:&0(
+U+221e:&00
+U+221f:&-L
+U+2220:&-V
+U+2225:&PP
+U+2227:&AN
+U+2228:&OR
+U+2229:&(U
+U+222a:&)U
+U+222b:&In
+U+222c:&DI
+U+222e:&Io
+U+2234:&.:
+U+2235:&:.
+U+2236:&:R
+U+2237:&::
+U+223c:&?1
+U+223e:&CG
+U+2243:&?-
+U+2245:&?=
+U+2248:&?2
+U+224c:&=?
+U+2253:&HI
+U+2260:&!=
+U+2261:&=3
+U+2264:&=<
+U+2265:&>=
+U+226a:&<*
+U+226b:&*>
+U+226e:&!<
+U+226f:&!>
+U+2282:&(C
+U+2283:&)C
+U+2286:&(_
+U+2287:&)_
+U+2299:&0.
+U+229a:&02
+U+22a5:&-T
+U+22c5:&.P
+U+22ee:&:3
+U+22ef:&.3
+U+2302:&Eh
+U+2308:&<7
+U+2309:&>7
+U+230a:&7<
+U+230b:&7>
+U+2310:&NI
+U+2312:&(A
+U+2315:&TR
+U+2320:&Iu
+U+2321:&Il
+U+2329:&</
+U+232a:&/>
+U+2423:&Vs
+U+2440:&1h
+U+2441:&3h
+U+2442:&2h
+U+2443:&4h
+U+2446:&1j
+U+2447:&2j
+U+2448:&3j
+U+2449:&4j
+U+2460:&_1-o_
+U+2461:&_2-o_
+U+2462:&_3-o_
+U+2463:&_4-o_
+U+2464:&_5-o_
+U+2465:&_6-o_
+U+2466:&_7-o_
+U+2467:&_8-o_
+U+2468:&_9-o_
+U+2469:&_10-o_
+U+246a:&_11-o_
+U+246b:&_12-o_
+U+246c:&_13-o_
+U+246d:&_14-o_
+U+246e:&_15-o_
+U+246f:&_16-o_
+U+2470:&_17-o_
+U+2471:&_18-o_
+U+2472:&_19-o_
+U+2473:&_20-o_
+U+2474:&_(1)_
+U+2475:&_(2)_
+U+2476:&_(3)_
+U+2477:&_(4)_
+U+2478:&_(5)_
+U+2479:&_(6)_
+U+247a:&_(7)_
+U+247b:&_(8)_
+U+247c:&_(9)_
+U+247d:&_(10)_
+U+247e:&_(11)_
+U+247f:&_(12)_
+U+2480:&_(13)_
+U+2481:&_(14)_
+U+2482:&_(15)_
+U+2483:&_(16)_
+U+2484:&_(17)_
+U+2485:&_(18)_
+U+2486:&_(19)_
+U+2487:&_(20)_
+U+2488:&1.
+U+2489:&2.
+U+248a:&3.
+U+248b:&4.
+U+248c:&5.
+U+248d:&6.
+U+248e:&7.
+U+248f:&8.
+U+2490:&9.
+U+2491:&_10._
+U+2492:&_11._
+U+2493:&_12._
+U+2494:&_13._
+U+2495:&_14._
+U+2496:&_15._
+U+2497:&_16._
+U+2498:&_17._
+U+2499:&_18._
+U+249a:&_19._
+U+249b:&_20._
+U+249c:&_(a)_
+U+249d:&_(b)_
+U+249e:&_(c)_
+U+249f:&_(d)_
+U+24a0:&_(e)_
+U+24a1:&_(f)_
+U+24a2:&_(g)_
+U+24a3:&_(h)_
+U+24a4:&_(i)_
+U+24a5:&_(j)_
+U+24a6:&_(k)_
+U+24a7:&_(l)_
+U+24a8:&_(m)_
+U+24a9:&_(n)_
+U+24aa:&_(o)_
+U+24ab:&_(p)_
+U+24ac:&_(q)_
+U+24ad:&_(r)_
+U+24ae:&_(s)_
+U+24af:&_(t)_
+U+24b0:&_(u)_
+U+24b1:&_(v)_
+U+24b2:&_(w)_
+U+24b3:&_(x)_
+U+24b4:&_(y)_
+U+24b5:&_(z)_
+U+24b6:&_A-o_
+U+24b7:&_B-o_
+U+24b8:&_C-o_
+U+24b9:&_D-o_
+U+24ba:&_E-o_
+U+24bb:&_F-o_
+U+24bc:&_G-o_
+U+24bd:&_H-o_
+U+24be:&_I-o_
+U+24bf:&_J-o_
+U+24c0:&_K-o_
+U+24c1:&_L-o_
+U+24c2:&_M-o_
+U+24c3:&_N-o_
+U+24c4:&_O-o_
+U+24c5:&_P-o_
+U+24c6:&_Q-o_
+U+24c7:&_R-o_
+U+24c8:&_S-o_
+U+24c9:&_T-o_
+U+24ca:&_U-o_
+U+24cb:&_V-o_
+U+24cc:&_W-o_
+U+24cd:&_X-o_
+U+24ce:&_Y-o_
+U+24cf:&_Z-o_
+U+24d0:&_a-o_
+U+24d1:&_b-o_
+U+24d2:&_c-o_
+U+24d3:&_d-o_
+U+24d4:&_e-o_
+U+24d5:&_f-o_
+U+24d6:&_g-o_
+U+24d7:&_h-o_
+U+24d8:&_i-o_
+U+24d9:&_j-o_
+U+24da:&_k-o_
+U+24db:&_l-o_
+U+24dc:&_m-o_
+U+24dd:&_n-o_
+U+24de:&_o-o_
+U+24df:&_p-o_
+U+24e0:&_q-o_
+U+24e1:&_r-o_
+U+24e2:&_s-o_
+U+24e3:&_t-o_
+U+24e4:&_u-o_
+U+24e5:&_v-o_
+U+24e6:&_w-o_
+U+24e7:&_x-o_
+U+24e8:&_y-o_
+U+24e9:&_z-o_
+U+24ea:&_0-o_
+U+2500:&hh
+U+2501:&HH
+U+2502:&vv
+U+2503:&VV
+U+2504:&3-
+U+2505:&3_
+U+2506:&3!
+U+2507:&3/
+U+2508:&4-
+U+2509:&4_
+U+250a:&4!
+U+250b:&4/
+U+250c:&dr
+U+250d:&dR
+U+250e:&Dr
+U+250f:&DR
+U+2510:&dl
+U+2511:&dL
+U+2512:&Dl
+U+2513:&LD
+U+2514:&ur
+U+2515:&uR
+U+2516:&Ur
+U+2517:&UR
+U+2518:&ul
+U+2519:&uL
+U+251a:&Ul
+U+251b:&UL
+U+251c:&vr
+U+251d:&vR
+U+251e:&_Udr_
+U+251f:&_uDr_
+U+2520:&Vr
+U+2521:&_UdR_
+U+2522:&_uDR_
+U+2523:&VR
+U+2524:&vl
+U+2525:&vL
+U+2526:&_Udl_
+U+2527:&_uDl_
+U+2528:&Vl
+U+2529:&_UdL_
+U+252a:&_uDL_
+U+252b:&VL
+U+252c:&dh
+U+252d:&_dLr_
+U+252e:&_dlR_
+U+252f:&dH
+U+2530:&Dh
+U+2531:&_DLr_
+U+2532:&_DlR_
+U+2533:&DH
+U+2534:&uh
+U+2535:&_uLr_
+U+2536:&_ulR_
+U+2537:&uH
+U+2538:&Uh
+U+2539:&_ULr_
+U+253a:&_UlR_
+U+253b:&UH
+U+253c:&vh
+U+253d:&_vLr_
+U+253e:&_vlR_
+U+253f:&vH
+U+2540:&_Udh_
+U+2541:&_uDh_
+U+2542:&Vh
+U+2543:&_UdLr_
+U+2544:&_UdlR_
+U+2545:&_uDLr_
+U+2546:&_uDlR_
+U+2547:&_UdH_
+U+2548:&_uDH_
+U+2549:&_VLr_
+U+254a:&_VlR_
+U+254b:&VH
+U+2571:&FD
+U+2572:&BD
+U+2580:&TB
+U+2584:&LB
+U+2588:&FB
+U+258c:&lB
+U+2590:&RB
+U+2591:&.S
+U+2592:&:S
+U+2593:&?S
+U+25a0:&fS
+U+25a1:&OS
+U+25a2:&RO
+U+25a3:&Rr
+U+25a4:&RF
+U+25a5:&RY
+U+25a6:&RH
+U+25a7:&RZ
+U+25a8:&RK
+U+25a9:&RX
+U+25aa:&sB
+U+25ac:&SR
+U+25ad:&Or
+U+25b2:&UT
+U+25b3:&uT
+U+25b6:&PR
+U+25b7:&Tr
+U+25bc:&Dt
+U+25bd:&dT
+U+25c0:&PL
+U+25c1:&Tl
+U+25c6:&Db
+U+25c7:&Dw
+U+25ca:&LZ
+U+25cb:&0m
+U+25ce:&0o
+U+25cf:&0M
+U+25d0:&0L
+U+25d1:&0R
+U+25d8:&Sn
+U+25d9:&Ic
+U+25e2:&Fd
+U+25e3:&Bd
+U+2605:&*2
+U+2606:&*1
+U+260e:&_TEL_
+U+260f:&_tel_
+U+261c:&<H
+U+261e:&>H
+U+263a:&0u
+U+263b:&0U
+U+263c:&SU
+U+2640:&Fm
+U+2642:&Ml
+U+2660:&cS
+U+2661:&cH
+U+2662:&cD
+U+2663:&cC
+U+2664:&_cS-_
+U+2665:&_cH-_
+U+2666:&_cD-_
+U+2667:&_cC-_
+U+2669:&Md
+U+266a:&M8
+U+266b:&M2
+U+266c:&_M16_
+U+266d:&Mb
+U+266e:&Mx
+U+266f:&MX
+U+2713:&OK
+U+2717:&XX
+U+2720:&-X
+U+3000:&IS
+U+3001:&,_
+U+3002:&._
+U+3003:&+"
+U+3004:&+_
+U+3005:&*_
+U+3006:&;_
+U+3007:&0_
+U+300a:&<+
+U+300b:&>+
+U+300c:&<'
+U+300d:&>'
+U+300e:&<"
+U+300f:&>"
+U+3010:&("
+U+3011:&)"
+U+3012:&=T
+U+3013:&=_
+U+3014:&('
+U+3015:&)'
+U+3016:&(I
+U+3017:&)I
+U+301c:&-?
+U+3020:&_=T:)_
+U+3041:&A5
+U+3042:&a5
+U+3043:&I5
+U+3044:&i5
+U+3045:&U5
+U+3046:&u5
+U+3047:&E5
+U+3048:&e5
+U+3049:&O5
+U+304a:&o5
+U+304b:&ka
+U+304c:&ga
+U+304d:&ki
+U+304e:&gi
+U+304f:&ku
+U+3050:&gu
+U+3051:&ke
+U+3052:&ge
+U+3053:&ko
+U+3054:&go
+U+3055:&sa
+U+3056:&za
+U+3057:&si
+U+3058:&zi
+U+3059:&su
+U+305a:&zu
+U+305b:&se
+U+305c:&ze
+U+305d:&so
+U+305e:&zo
+U+305f:&ta
+U+3060:&da
+U+3061:&ti
+U+3062:&di
+U+3063:&tU
+U+3064:&tu
+U+3065:&du
+U+3066:&te
+U+3067:&de
+U+3068:&to
+U+3069:&do
+U+306a:&na
+U+306b:&ni
+U+306c:&nu
+U+306d:&ne
+U+306e:&no
+U+306f:&ha
+U+3070:&ba
+U+3071:&pa
+U+3072:&hi
+U+3073:&bi
+U+3074:&pi
+U+3075:&hu
+U+3076:&bu
+U+3077:&pu
+U+3078:&he
+U+3079:&be
+U+307a:&pe
+U+307b:&ho
+U+307c:&bo
+U+307d:&po
+U+307e:&ma
+U+307f:&mi
+U+3080:&mu
+U+3081:&me
+U+3082:&mo
+U+3083:&yA
+U+3084:&ya
+U+3085:&yU
+U+3086:&yu
+U+3087:&yO
+U+3088:&yo
+U+3089:&ra
+U+308a:&ri
+U+308b:&ru
+U+308c:&re
+U+308d:&ro
+U+308e:&wA
+U+308f:&wa
+U+3090:&wi
+U+3091:&we
+U+3092:&wo
+U+3093:&n5
+U+3094:&vu
+U+309b:&"5
+U+309c:&05
+U+309d:&*5
+U+309e:&+5
+U+30a1:&a6
+U+30a2:&A6
+U+30a3:&i6
+U+30a4:&I6
+U+30a5:&u6
+U+30a6:&U6
+U+30a7:&e6
+U+30a8:&E6
+U+30a9:&o6
+U+30aa:&O6
+U+30ab:&Ka
+U+30ac:&Ga
+U+30ad:&Ki
+U+30ae:&Gi
+U+30af:&Ku
+U+30b0:&Gu
+U+30b1:&Ke
+U+30b2:&Ge
+U+30b3:&Ko
+U+30b4:&Go
+U+30b5:&Sa
+U+30b6:&Za
+U+30b7:&Si
+U+30b8:&Zi
+U+30b9:&Su
+U+30ba:&Zu
+U+30bb:&Se
+U+30bc:&Ze
+U+30bd:&So
+U+30be:&Zo
+U+30bf:&Ta
+U+30c0:&Da
+U+30c1:&Ti
+U+30c2:&Di
+U+30c3:&TU
+U+30c4:&Tu
+U+30c5:&Du
+U+30c6:&Te
+U+30c7:&De
+U+30c8:&To
+U+30c9:&Do
+U+30ca:&Na
+U+30cb:&Ni
+U+30cc:&Nu
+U+30cd:&Ne
+U+30ce:&No
+U+30cf:&Ha
+U+30d0:&Ba
+U+30d1:&Pa
+U+30d2:&Hi
+U+30d3:&Bi
+U+30d4:&Pi
+U+30d5:&Hu
+U+30d6:&Bu
+U+30d7:&Pu
+U+30d8:&He
+U+30d9:&Be
+U+30da:&Pe
+U+30db:&Ho
+U+30dc:&Bo
+U+30dd:&Po
+U+30de:&Ma
+U+30df:&Mi
+U+30e0:&Mu
+U+30e1:&Me
+U+30e2:&Mo
+U+30e3:&YA
+U+30e4:&Ya
+U+30e5:&YU
+U+30e6:&Yu
+U+30e7:&YO
+U+30e8:&Yo
+U+30e9:&Ra
+U+30ea:&Ri
+U+30eb:&Ru
+U+30ec:&Re
+U+30ed:&Ro
+U+30ee:&WA
+U+30ef:&Wa
+U+30f0:&Wi
+U+30f1:&We
+U+30f2:&Wo
+U+30f3:&N6
+U+30f4:&Vu
+U+30f5:&KA
+U+30f6:&KE
+U+30f7:&Va
+U+30f8:&Vi
+U+30f9:&Ve
+U+30fa:&Vo
+U+30fb:&.6
+U+30fc:&-6
+U+30fd:&*6
+U+30fe:&+6
+U+3105:&b4
+U+3106:&p4
+U+3107:&m4
+U+3108:&f4
+U+3109:&d4
+U+310a:&t4
+U+310b:&n4
+U+310c:&l4
+U+310d:&g4
+U+310e:&k4
+U+310f:&h4
+U+3110:&j4
+U+3111:&q4
+U+3112:&x4
+U+3113:&zh
+U+3114:&ch
+U+3115:&sh
+U+3116:&r4
+U+3117:&z4
+U+3118:&c4
+U+3119:&s4
+U+311a:&a4
+U+311b:&o4
+U+311c:&e4
+U+311d:&_eh4_
+U+311e:&ai
+U+311f:&ei
+U+3120:&au
+U+3121:&ou
+U+3122:&an
+U+3123:&en
+U+3124:&aN
+U+3125:&eN
+U+3126:&er
+U+3127:&i4
+U+3128:&u4
+U+3129:&iu
+U+312a:&v4
+U+312b:&nG
+U+312c:&gn
+U+321c:&_(JU)_
+U+3220:&1c
+U+3221:&2c
+U+3222:&3c
+U+3223:&4c
+U+3224:&5c
+U+3225:&6c
+U+3226:&7c
+U+3227:&8c
+U+3228:&9c
+U+3229:&_10c_
+U+327f:&_KSC_
+U+fb00:&ff
+U+fb01:&fi
+U+fb02:&fl
+U+fb03:&_ffi_
+U+fb04:&_ffl_
+U+fb05:&ft
+U+fb06:&st
+U+fe7d:&_3+;_
+U+fe82:&_aM._
+U+fe84:&_aH._
+U+fe8d:&_a+-_
+U+fe8e:&_a+._
+U+fe8f:&_b+-_
+U+fe90:&_b+,_
+U+fe91:&_b+;_
+U+fe92:&_b+._
+U+fe93:&_tm-_
+U+fe94:&_tm._
+U+fe95:&_t+-_
+U+fe96:&_t+,_
+U+fe97:&_t+;_
+U+fe98:&_t+._
+U+fe99:&_tk-_
+U+fe9a:&_tk,_
+U+fe9b:&_tk;_
+U+fe9c:&_tk._
+U+fe9d:&_g+-_
+U+fe9e:&_g+,_
+U+fe9f:&_g+;_
+U+fea0:&_g+._
+U+fea1:&_hk-_
+U+fea2:&_hk,_
+U+fea3:&_hk;_
+U+fea4:&_hk._
+U+fea5:&_x+-_
+U+fea6:&_x+,_
+U+fea7:&_x+;_
+U+fea8:&_x+._
+U+fea9:&_d+-_
+U+feaa:&_d+._
+U+feab:&_dk-_
+U+feac:&_dk._
+U+fead:&_r+-_
+U+feae:&_r+._
+U+feaf:&_z+-_
+U+feb0:&_z+._
+U+feb1:&_s+-_
+U+feb2:&_s+,_
+U+feb3:&_s+;_
+U+feb4:&_s+._
+U+feb5:&_sn-_
+U+feb6:&_sn,_
+U+feb7:&_sn;_
+U+feb8:&_sn._
+U+feb9:&_c+-_
+U+feba:&_c+,_
+U+febb:&_c+;_
+U+febc:&_c+._
+U+febd:&_dd-_
+U+febe:&_dd,_
+U+febf:&_dd;_
+U+fec0:&_dd._
+U+fec1:&_tj-_
+U+fec2:&_tj,_
+U+fec3:&_tj;_
+U+fec4:&_tj._
+U+fec5:&_zH-_
+U+fec6:&_zH,_
+U+fec7:&_zH;_
+U+fec8:&_zH._
+U+fec9:&_e+-_
+U+feca:&_e+,_
+U+fecb:&_e+;_
+U+fecc:&_e+._
+U+fecd:&_i+-_
+U+fece:&_i+,_
+U+fecf:&_i+;_
+U+fed0:&_i+._
+U+fed1:&_f+-_
+U+fed2:&_f+,_
+U+fed3:&_f+;_
+U+fed4:&_f+._
+U+fed5:&_q+-_
+U+fed6:&_q+,_
+U+fed7:&_q+;_
+U+fed8:&_q+._
+U+fed9:&_k+-_
+U+feda:&_k+,_
+U+fedb:&_k+;_
+U+fedc:&_k+._
+U+fedd:&_l+-_
+U+fede:&_l+,_
+U+fedf:&_l+;_
+U+fee0:&_l+._
+U+fee1:&_m+-_
+U+fee2:&_m+,_
+U+fee3:&_m+;_
+U+fee4:&_m+._
+U+fee5:&_n+-_
+U+fee6:&_n+,_
+U+fee7:&_n+;_
+U+fee8:&_n+._
+U+fee9:&_h+-_
+U+feea:&_h+,_
+U+feeb:&_h+;_
+U+feec:&_h+._
+U+feed:&_w+-_
+U+feee:&_w+._
+U+feef:&_j+-_
+U+fef0:&_j+._
+U+fef1:&_y+-_
+U+fef2:&_y+,_
+U+fef3:&_y+;_
+U+fef4:&_y+._
+U+fef5:&_lM-_
+U+fef6:&_lM._
+U+fef7:&_lH-_
+U+fef8:&_lH._
+U+fef9:&_lh-_
+U+fefa:&_lh._
+U+fefb:&_la-_
+U+fefc:&_la._
+U+0000:&NU
+U+0001:&SH
+U+0002:&SX
+U+0003:&EX
+U+0004:&ET
+U+0005:&EQ
+U+0006:&AK
+U+0007:&BL
+U+0008:&BS
+U+0009:&HT
+# U+000a:&LF
+U+000b:&VT
+U+000c:&FF
+U+000d:&CR
+U+000e:&SO
+U+000f:&SI
+U+0010:&DL
+U+0011:&D1
+U+0012:&D2
+U+0013:&D3
+U+0014:&D4
+U+0015:&NK
+U+0016:&SY
+U+0017:&EB
+U+0018:&CN
+U+0019:&EM
+U+001a:&SB
+U+001b:&EC
+U+001c:&FS
+U+001d:&GS
+U+001e:&RS
+U+001f:&US
+U+007f:&DT
+U+0080:&PA
+U+0081:&HO
+U+0082:&BH
+U+0083:&NH
+U+0084:&IN
+U+0085:&NL
+U+0086:&SA
+U+0087:&ES
+U+0088:&HS
+U+0089:&HJ
+U+008a:&VS
+U+008b:&PD
+U+008c:&PU
+U+008d:&RI
+U+008e:&S2
+U+008f:&S3
+U+0090:&DC
+U+0091:&P1
+U+0092:&P2
+U+0093:&TS
+U+0094:&CC
+U+0095:&MW
+U+0096:&SG
+U+0097:&EG
+U+0098:&SS
+U+0099:&GC
+U+009a:&SC
+U+009b:&CI
+U+009c:&ST
+U+009d:&OC
+U+009e:&PM
+U+009f:&AC
+U+e001:&/c
+U+e002:&UA
+U+e003:&UB
+U+e004:&"3
+U+e005:&"1
+U+e006:&"!
+U+e007:&"'
+U+e008:&">
+U+e009:&"?
+U+e00a:&"-
+U+e00b:&"(
+U+e00c:&".
+U+e00d:&":
+U+e00e:&"0
+U+e00f:&""
+U+e010:&"<
+U+e011:&",
+U+e012:&";
+U+e013:&"_
+U+e014:&"=
+U+e015:&"/
+U+e016:&"i
+U+e017:&"d
+U+e018:&"p
+U+e019:&;;
+U+e01a:&,,
+U+e01b:&b3
+U+e01c:&Ci
+U+e01d:&f(
+U+e01e:&ed
+U+e01f:&am
+U+e020:&pm
+U+e021:&_Tel_
+U+e022:&_a+:_
+U+e023:&Fl
+U+e024:&GF
+U+e025:&>V
+U+e026:&!*
+U+e027:&?*
+U+e028:&J<
diff --git a/src/chrtrans/rfc_suni.tbl b/src/chrtrans/rfc_suni.tbl
new file mode 100644
index 00000000..5df75265
--- /dev/null
+++ b/src/chrtrans/rfc_suni.tbl
@@ -0,0 +1,1981 @@
+# Generated from the mnemonic file found under ftp://dkuug.dk/i18n/
+# then hand-tweaked
+# perl -n -e \
+# 'if (s|<([^ \t]+)>\s+<U([\dA-Z]{4})>\s.*$|U+\L\2\E:\1|) {s|/?(.)|\1|g&&print}'\
+# mnemonic,ds
+
+#The MIME name of this charset. 
+Mmnemonic+ascii+0
+
+#Name as a Display Charset (used on Options screen)
+ORFC 1345 w/o Intro
+ 
+U+0020:SP
+U+0021:!
+U+0022:"
+U+0023:Nb
+U+0024:DO
+U+0025:%
+U+0026:&
+U+0027:'
+U+0028:(
+U+0029:)
+U+002a:*
+U+002b:+
+U+002c:,
+U+002d:-
+U+002e:.
+U+002f:/
+U+0030:0
+U+0031:1
+U+0032:2
+U+0033:3
+U+0034:4
+U+0035:5
+U+0036:6
+U+0037:7
+U+0038:8
+U+0039:9
+U+003a::
+U+003b:;
+U+003c:<
+U+003d:=
+U+003e:>
+U+003f:?
+U+0040:At
+U+0041:A
+U+0042:B
+U+0043:C
+U+0044:D
+U+0045:E
+U+0046:F
+U+0047:G
+U+0048:H
+U+0049:I
+U+004a:J
+U+004b:K
+U+004c:L
+U+004d:M
+U+004e:N
+U+004f:O
+U+0050:P
+U+0051:Q
+U+0052:R
+U+0053:S
+U+0054:T
+U+0055:U
+U+0056:V
+U+0057:W
+U+0058:X
+U+0059:Y
+U+005a:Z
+U+005b:<(
+U+005c://
+U+005d:)>
+U+005e:'>
+U+005f:_
+U+0060:'!
+U+0061:a
+U+0062:b
+U+0063:c
+U+0064:d
+U+0065:e
+U+0066:f
+U+0067:g
+U+0068:h
+U+0069:i
+U+006a:j
+U+006b:k
+U+006c:l
+U+006d:m
+U+006e:n
+U+006f:o
+U+0070:p
+U+0071:q
+U+0072:r
+U+0073:s
+U+0074:t
+U+0075:u
+U+0076:v
+U+0077:w
+U+0078:x
+U+0079:y
+U+007a:z
+U+007b:(!
+U+007c:!!
+U+007d:!)
+U+007e:'?
+U+00a0:NS
+U+00a1:!I
+U+00a2:Ct
+U+00a3:Pd
+U+00a4:Cu
+U+00a5:Ye
+U+00a6:BB
+U+00a7:SE
+U+00a8:':
+U+00a9:Co
+U+00aa:-a
+U+00ab:<<
+U+00ac:NO
+U+00ad:--
+U+00ae:Rg
+U+00af:'m
+U+00b0:DG
+U+00b1:+-
+U+00b2:2S
+U+00b3:3S
+U+00b4:''
+U+00b5:My
+U+00b6:PI
+U+00b7:.M
+U+00b8:',
+U+00b9:1S
+U+00ba:-o
+U+00bb:>>
+U+00bc:14
+U+00bd:12
+U+00be:34
+U+00bf:?I
+U+00c0:A!
+U+00c1:A'
+U+00c2:A>
+U+00c3:A?
+U+00c4:A:
+U+00c5:AA
+U+00c6:AE
+U+00c7:C,
+U+00c8:E!
+U+00c9:E'
+U+00ca:E>
+U+00cb:E:
+U+00cc:I!
+U+00cd:I'
+U+00ce:I>
+U+00cf:I:
+U+00d0:D-
+U+00d1:N?
+U+00d2:O!
+U+00d3:O'
+U+00d4:O>
+U+00d5:O?
+U+00d6:O:
+U+00d7:*X
+U+00d8:O/
+U+00d9:U!
+U+00da:U'
+U+00db:U>
+U+00dc:U:
+U+00dd:Y'
+U+00de:TH
+U+00df:ss
+U+00e0:a!
+U+00e1:a'
+U+00e2:a>
+U+00e3:a?
+U+00e4:a:
+U+00e5:aa
+U+00e6:ae
+U+00e7:c,
+U+00e8:e!
+U+00e9:e'
+U+00ea:e>
+U+00eb:e:
+U+00ec:i!
+U+00ed:i'
+U+00ee:i>
+U+00ef:i:
+U+00f0:d-
+U+00f1:n?
+U+00f2:o!
+U+00f3:o'
+U+00f4:o>
+U+00f5:o?
+U+00f6:o:
+U+00f7:-:
+U+00f8:o/
+U+00f9:u!
+U+00fa:u'
+U+00fb:u>
+U+00fc:u:
+U+00fd:y'
+U+00fe:th
+U+00ff:y:
+U+0100:A-
+U+0101:a-
+U+0102:A(
+U+0103:a(
+U+0104:A;
+U+0105:a;
+U+0106:C'
+U+0107:c'
+U+0108:C>
+U+0109:c>
+U+010a:C.
+U+010b:c.
+U+010c:C<
+U+010d:c<
+U+010e:D<
+U+010f:d<
+U+0110:D/
+U+0111:d/
+U+0112:E-
+U+0113:e-
+U+0114:E(
+U+0115:e(
+U+0116:E.
+U+0117:e.
+U+0118:E;
+U+0119:e;
+U+011a:E<
+U+011b:e<
+U+011c:G>
+U+011d:g>
+U+011e:G(
+U+011f:g(
+U+0120:G.
+U+0121:g.
+U+0122:G,
+U+0123:g,
+U+0124:H>
+U+0125:h>
+U+0126:H/
+U+0127:h/
+U+0128:I?
+U+0129:i?
+U+012a:I-
+U+012b:i-
+U+012c:I(
+U+012d:i(
+U+012e:I;
+U+012f:i;
+U+0130:I.
+U+0131:i.
+U+0132:IJ
+U+0133:ij
+U+0134:J>
+U+0135:j>
+U+0136:K,
+U+0137:k,
+U+0138:kk
+U+0139:L'
+U+013a:l'
+U+013b:L,
+U+013c:l,
+U+013d:L<
+U+013e:l<
+U+013f:L.
+U+0140:l.
+U+0141:L/
+U+0142:l/
+U+0143:N'
+U+0144:n'
+U+0145:N,
+U+0146:n,
+U+0147:N<
+U+0148:n<
+U+0149:'n
+U+014a:NG
+U+014b:ng
+U+014c:O-
+U+014d:o-
+U+014e:O(
+U+014f:o(
+U+0150:O"
+U+0151:o"
+U+0152:OE
+U+0153:oe
+U+0154:R'
+U+0155:r'
+U+0156:R,
+U+0157:r,
+U+0158:R<
+U+0159:r<
+U+015a:S'
+U+015b:s'
+U+015c:S>
+U+015d:s>
+U+015e:S,
+U+015f:s,
+U+0160:S<
+U+0161:s<
+U+0162:T,
+U+0163:t,
+U+0164:T<
+U+0165:t<
+U+0166:T/
+U+0167:t/
+U+0168:U?
+U+0169:u?
+U+016a:U-
+U+016b:u-
+U+016c:U(
+U+016d:u(
+U+016e:U0
+U+016f:u0
+U+0170:U"
+U+0171:u"
+U+0172:U;
+U+0173:u;
+U+0174:W>
+U+0175:w>
+U+0176:Y>
+U+0177:y>
+U+0178:Y:
+U+0179:Z'
+U+017a:z'
+U+017b:Z.
+U+017c:z.
+U+017d:Z<
+U+017e:z<
+U+017f:s1
+U+0187:C2
+U+0188:c2
+U+0191:F2
+U+0192:f2
+U+0198:K2
+U+0199:k2
+U+01a0:O9
+U+01a1:o9
+U+01a2:OI
+U+01a3:oi
+U+01a6:yr
+U+01af:U9
+U+01b0:u9
+U+01b5:Z/
+U+01b6:z/
+U+01b7:ED
+U+01cd:A<
+U+01ce:a<
+U+01cf:I<
+U+01d0:i<
+U+01d1:O<
+U+01d2:o<
+U+01d3:U<
+U+01d4:u<
+U+01d5:U:-
+U+01d6:u:-
+U+01d7:U:'
+U+01d8:u:'
+U+01d9:U:<
+U+01da:u:<
+U+01db:U:!
+U+01dc:u:!
+U+01de:A1
+U+01df:a1
+U+01e0:A7
+U+01e1:a7
+U+01e2:A3
+U+01e3:a3
+U+01e4:G/
+U+01e5:g/
+U+01e6:G<
+U+01e7:g<
+U+01e8:K<
+U+01e9:k<
+U+01ea:O;
+U+01eb:o;
+U+01ec:O1
+U+01ed:o1
+U+01ee:EZ
+U+01ef:ez
+U+01f0:j<
+U+01f4:G'
+U+01f5:g'
+U+01fa:AA'
+U+01fb:aa'
+U+01fc:AE'
+U+01fd:ae'
+U+01fe:O/'
+U+01ff:o/'
+U+0200:A!!
+U+0201:a!!
+U+0202:A)
+U+0203:a)
+U+0204:E!!
+U+0205:e!!
+U+0206:E)
+U+0207:e)
+U+0208:I!!
+U+0209:i!!
+U+020a:I)
+U+020b:i)
+U+020c:O!!
+U+020d:o!!
+U+020e:O)
+U+020f:o)
+U+0210:R!!
+U+0211:r!!
+U+0212:R)
+U+0213:r)
+U+0214:U!!
+U+0215:u!!
+U+0216:U)
+U+0217:u)
+U+0292:ed
+U+02bb:;S
+U+02c6:1>
+U+02c7:'<
+U+02c9:1-
+U+02cb:1!
+U+02d8:'(
+U+02d9:'.
+U+02da:'0
+U+02db:';
+U+02dc:1?
+U+02dd:'"
+U+0374:'G
+U+0375:,G
+U+037a:j3
+U+037e:?%
+U+0384:'*
+U+0385:'%
+U+0386:A%
+U+0387:.*
+U+0388:E%
+U+0389:Y%
+U+038a:I%
+U+038c:O%
+U+038e:U%
+U+038f:W%
+U+0390:i3
+U+0391:A*
+U+0392:B*
+U+0393:G*
+U+0394:D*
+U+0395:E*
+U+0396:Z*
+U+0397:Y*
+U+0398:H*
+U+0399:I*
+U+039a:K*
+U+039b:L*
+U+039c:M*
+U+039d:N*
+U+039e:C*
+U+039f:O*
+U+03a0:P*
+U+03a1:R*
+U+03a3:S*
+U+03a4:T*
+U+03a5:U*
+U+03a6:F*
+U+03a7:X*
+U+03a8:Q*
+U+03a9:W*
+U+03aa:J*
+U+03ab:V*
+U+03ac:a%
+U+03ad:e%
+U+03ae:y%
+U+03af:i%
+U+03b0:u3
+U+03b1:a*
+U+03b2:b*
+U+03b3:g*
+U+03b4:d*
+U+03b5:e*
+U+03b6:z*
+U+03b7:y*
+U+03b8:h*
+U+03b9:i*
+U+03ba:k*
+U+03bb:l*
+U+03bc:m*
+U+03bd:n*
+U+03be:c*
+U+03bf:o*
+U+03c0:p*
+U+03c1:r*
+U+03c2:*s
+U+03c3:s*
+U+03c4:t*
+U+03c5:u*
+U+03c6:f*
+U+03c7:x*
+U+03c8:q*
+U+03c9:w*
+U+03ca:j*
+U+03cb:v*
+U+03cc:o%
+U+03cd:u%
+U+03ce:w%
+U+03d0:b3
+U+03da:T3
+U+03db:t3
+U+03dc:M3
+U+03dd:m3
+U+03de:K3
+U+03df:k3
+U+03e0:P3
+U+03e1:p3
+U+0401:IO
+U+0402:D%
+U+0403:G%
+U+0404:IE
+U+0405:DS
+U+0406:II
+U+0407:YI
+U+0408:J%
+U+0409:LJ
+U+040a:NJ
+U+040b:Ts
+U+040c:KJ
+U+040e:V%
+U+040f:DZ
+U+0410:A=
+U+0411:B=
+U+0412:V=
+U+0413:G=
+U+0414:D=
+U+0415:E=
+U+0416:Z%
+U+0417:Z=
+U+0418:I=
+U+0419:J=
+U+041a:K=
+U+041b:L=
+U+041c:M=
+U+041d:N=
+U+041e:O=
+U+041f:P=
+U+0420:R=
+U+0421:S=
+U+0422:T=
+U+0423:U=
+U+0424:F=
+U+0425:H=
+U+0426:C=
+U+0427:C%
+U+0428:S%
+U+0429:Sc
+U+042a:="
+U+042b:Y=
+U+042c:%"
+U+042d:JE
+U+042e:JU
+U+042f:JA
+U+0430:a=
+U+0431:b=
+U+0432:v=
+U+0433:g=
+U+0434:d=
+U+0435:e=
+U+0436:z%
+U+0437:z=
+U+0438:i=
+U+0439:j=
+U+043a:k=
+U+043b:l=
+U+043c:m=
+U+043d:n=
+U+043e:o=
+U+043f:p=
+U+0440:r=
+U+0441:s=
+U+0442:t=
+U+0443:u=
+U+0444:f=
+U+0445:h=
+U+0446:c=
+U+0447:c%
+U+0448:s%
+U+0449:sc
+U+044a:='
+U+044b:y=
+U+044c:%'
+U+044d:je
+U+044e:ju
+U+044f:ja
+U+0451:io
+U+0452:d%
+U+0453:g%
+U+0454:ie
+U+0455:ds
+U+0456:ii
+U+0457:yi
+U+0458:j%
+U+0459:lj
+U+045a:nj
+U+045b:ts
+U+045c:kj
+U+045e:v%
+U+045f:dz
+U+0462:Y3
+U+0463:y3
+U+046a:O3
+U+046b:o3
+U+0472:F3
+U+0473:f3
+U+0474:V3
+U+0475:v3
+U+0480:C3
+U+0481:c3
+U+0490:G3
+U+0491:g3
+U+05d0:A+
+U+05d1:B+
+U+05d2:G+
+U+05d3:D+
+U+05d4:H+
+U+05d5:W+
+U+05d6:Z+
+U+05d7:X+
+U+05d8:Tj
+U+05d9:J+
+U+05da:K%
+U+05db:K+
+U+05dc:L+
+U+05dd:M%
+U+05de:M+
+U+05df:N%
+U+05e0:N+
+U+05e1:S+
+U+05e2:E+
+U+05e3:P%
+U+05e4:P+
+U+05e5:Zj
+U+05e6:ZJ
+U+05e7:Q+
+U+05e8:R+
+U+05e9:Sh
+U+05ea:T+
+U+060c:,+
+U+061b:;+
+U+061f:?+
+U+0621:H'
+U+0622:aM
+U+0623:aH
+U+0624:wH
+U+0625:ah
+U+0626:yH
+U+0627:a+
+U+0628:b+
+U+0629:tm
+U+062a:t+
+U+062b:tk
+U+062c:g+
+U+062d:hk
+U+062e:x+
+U+062f:d+
+U+0630:dk
+U+0631:r+
+U+0632:z+
+U+0633:s+
+U+0634:sn
+U+0635:c+
+U+0636:dd
+U+0637:tj
+U+0638:zH
+U+0639:e+
+U+063a:i+
+U+0640:++
+U+0641:f+
+U+0642:q+
+U+0643:k+
+U+0644:l+
+U+0645:m+
+U+0646:n+
+U+0647:h+
+U+0648:w+
+U+0649:j+
+U+064a:y+
+U+064b::+
+U+064c:"+
+U+064d:=+
+U+064e:/+
+U+064f:'+
+U+0650:1+
+U+0651:3+
+U+0652:0+
+U+0660:0a
+U+0661:1a
+U+0662:2a
+U+0663:3a
+U+0664:4a
+U+0665:5a
+U+0666:6a
+U+0667:7a
+U+0668:8a
+U+0669:9a
+U+0670:aS
+U+067e:p+
+U+0681:hH
+U+0686:tc
+U+0698:zj
+U+06a4:v+
+U+06af:gf
+U+1e00:A-0
+U+1e01:a-0
+U+1e02:B.
+U+1e03:b.
+U+1e04:B-.
+U+1e05:b-.
+U+1e06:B_
+U+1e07:b_
+U+1e08:C,'
+U+1e09:c,'
+U+1e0a:D.
+U+1e0b:d.
+U+1e0c:D-.
+U+1e0d:d-.
+U+1e0e:D_
+U+1e0f:d_
+U+1e10:D,
+U+1e11:d,
+U+1e12:D->
+U+1e13:d->
+U+1e14:E-!
+U+1e15:e-!
+U+1e16:E-'
+U+1e17:e-'
+U+1e18:E->
+U+1e19:e->
+U+1e1a:E-?
+U+1e1b:e-?
+U+1e1c:E,(
+U+1e1d:e,(
+U+1e1e:F.
+U+1e1f:f.
+U+1e20:G-
+U+1e21:g-
+U+1e22:H.
+U+1e23:h.
+U+1e24:H-.
+U+1e25:h-.
+U+1e26:H:
+U+1e27:h:
+U+1e28:H,
+U+1e29:h,
+U+1e2a:H-(
+U+1e2b:h-(
+U+1e2c:I-?
+U+1e2d:i-?
+U+1e2e:I:'
+U+1e2f:i:'
+U+1e30:K'
+U+1e31:k'
+U+1e32:K-.
+U+1e33:k-.
+U+1e34:K_
+U+1e35:k_
+U+1e36:L-.
+U+1e37:l-.
+U+1e38:L--.
+U+1e39:l--.
+U+1e3a:L_
+U+1e3b:l_
+U+1e3c:L->
+U+1e3d:l->
+U+1e3e:M'
+U+1e3f:m'
+U+1e40:M.
+U+1e41:m.
+U+1e42:M-.
+U+1e43:m-.
+U+1e44:N.
+U+1e45:n.
+U+1e46:N-.
+U+1e47:n-.
+U+1e48:N_
+U+1e49:n_
+U+1e4a:N->
+U+1e4b:n->
+U+1e4c:O?'
+U+1e4d:o?'
+U+1e4e:O?:
+U+1e4f:o?:
+U+1e50:O-!
+U+1e51:o-!
+U+1e52:O-'
+U+1e53:o-'
+U+1e54:P'
+U+1e55:p'
+U+1e56:P.
+U+1e57:p.
+U+1e58:R.
+U+1e59:r.
+U+1e5a:R-.
+U+1e5b:r-.
+U+1e5c:R--.
+U+1e5d:r--.
+U+1e5e:R_
+U+1e5f:r_
+U+1e60:S.
+U+1e61:s.
+U+1e62:S-.
+U+1e63:s-.
+U+1e64:S'.
+U+1e65:s'.
+U+1e66:S<.
+U+1e67:s<.
+U+1e68:S.-.
+U+1e69:s.-.
+U+1e6a:T.
+U+1e6b:t.
+U+1e6c:T-.
+U+1e6d:t-.
+U+1e6e:T_
+U+1e6f:t_
+U+1e70:T->
+U+1e71:t->
+U+1e72:U--:
+U+1e73:u--:
+U+1e74:U-?
+U+1e75:u-?
+U+1e76:U->
+U+1e77:u->
+U+1e78:U?'
+U+1e79:u?'
+U+1e7a:U-:
+U+1e7b:u-:
+U+1e7c:V?
+U+1e7d:v?
+U+1e7e:V-.
+U+1e7f:v-.
+U+1e80:W!
+U+1e81:w!
+U+1e82:W'
+U+1e83:w'
+U+1e84:W:
+U+1e85:w:
+U+1e86:W.
+U+1e87:w.
+U+1e88:W-.
+U+1e89:w-.
+U+1e8a:X.
+U+1e8b:x.
+U+1e8c:X:
+U+1e8d:x:
+U+1e8e:Y.
+U+1e8f:y.
+U+1e90:Z>
+U+1e91:z>
+U+1e92:Z-.
+U+1e93:z-.
+U+1e94:Z_
+U+1e95:z_
+U+1e96:h_
+U+1e97:t:
+U+1e98:w0
+U+1e99:y0
+U+1ea0:A-.
+U+1ea1:a-.
+U+1ea2:A2
+U+1ea3:a2
+U+1ea4:A>'
+U+1ea5:a>'
+U+1ea6:A>!
+U+1ea7:a>!
+U+1ea8:A>2
+U+1ea9:a>2
+U+1eaa:A>?
+U+1eab:a>?
+U+1eac:A>-.
+U+1ead:a>-.
+U+1eae:A('
+U+1eaf:a('
+U+1eb0:A(!
+U+1eb1:a(!
+U+1eb2:A(2
+U+1eb3:a(2
+U+1eb4:A(?
+U+1eb5:a(?
+U+1eb6:A(-.
+U+1eb7:a(-.
+U+1eb8:E-.
+U+1eb9:e-.
+U+1eba:E2
+U+1ebb:e2
+U+1ebc:E?
+U+1ebd:e?
+U+1ebe:E>'
+U+1ebf:e>'
+U+1ec0:E>!
+U+1ec1:e>!
+U+1ec2:E>2
+U+1ec3:e>2
+U+1ec4:E>?
+U+1ec5:e>?
+U+1ec6:E>-.
+U+1ec7:e>-.
+U+1ec8:I2
+U+1ec9:i2
+U+1eca:I-.
+U+1ecb:i-.
+U+1ecc:O-.
+U+1ecd:o-.
+U+1ece:O2
+U+1ecf:o2
+U+1ed0:O>'
+U+1ed1:o>'
+U+1ed2:O>!
+U+1ed3:o>!
+U+1ed4:O>2
+U+1ed5:o>2
+U+1ed6:O>?
+U+1ed7:o>?
+U+1ed8:O>-.
+U+1ed9:o>-.
+U+1eda:O9'
+U+1edb:o9'
+U+1edc:O9!
+U+1edd:o9!
+U+1ede:O92
+U+1edf:o92
+U+1ee0:O9?
+U+1ee1:o9?
+U+1ee2:O9-.
+U+1ee3:o9-.
+U+1ee4:U-.
+U+1ee5:u-.
+U+1ee6:U2
+U+1ee7:u2
+U+1ee8:U9'
+U+1ee9:u9'
+U+1eea:U9!
+U+1eeb:u9!
+U+1eec:U92
+U+1eed:u92
+U+1eee:U9?
+U+1eef:u9?
+U+1ef0:U9-.
+U+1ef1:u9-.
+U+1ef2:Y!
+U+1ef3:y!
+U+1ef4:Y-.
+U+1ef5:y-.
+U+1ef6:Y2
+U+1ef7:y2
+U+1ef8:Y?
+U+1ef9:y?
+U+1fbf:,,
+U+1fc0:?*
+U+1fc1:?:
+U+1fcd:,!
+U+1fce:,'
+U+1fcf:?,
+U+1fdd:;!
+U+1fde:;'
+U+1fdf:?;
+U+1fed:!:
+U+1fef:!*
+U+1ffe:;;
+U+2002:1N
+U+2003:1M
+U+2004:3M
+U+2005:4M
+U+2006:6M
+U+200e:LR
+U+200f:RL
+U+2009:1T
+U+200a:1H
+U+2010:-1
+U+2013:-N
+U+2014:-M
+U+2015:-3
+U+2016:!2
+U+2017:=2
+U+2018:'6
+U+2019:'9
+U+201a:.9
+U+201b:9'
+U+201c:"6
+U+201d:"9
+U+201e::9
+U+201f:9"
+U+2020:/-
+U+2021:/=
+U+2022:Sb
+U+2025:..
+U+2026:.3
+U+2030:%0
+U+2032:1'
+U+2033:2'
+U+2034:3'
+U+2035:1"
+U+2036:2"
+U+2037:3"
+U+2038:Ca
+U+2039:<1
+U+203a:>1
+U+203b::X
+U+203c:!*2
+U+203e:'-
+U+2044:/f
+U+2070:0S
+U+2074:4S
+U+2075:5S
+U+2076:6S
+U+2077:7S
+U+2078:8S
+U+2079:9S
+U+207a:+S
+U+207b:-S
+U+207c:=S
+U+207d:(S
+U+207e:)S
+U+207f:nS
+U+2080:0s
+U+2081:1s
+U+2082:2s
+U+2083:3s
+U+2084:4s
+U+2085:5s
+U+2086:6s
+U+2087:7s
+U+2088:8s
+U+2089:9s
+U+208a:+s
+U+208b:-s
+U+208c:=s
+U+208d:(s
+U+208e:)s
+U+20a3:Ff
+U+20a4:Li
+U+20a7:Pt
+U+20a9:W=
+U+2103:oC
+U+2105:co
+U+2109:oF
+U+2116:N0
+U+2117:PO
+U+211e:Rx
+U+2120:SM
+U+2122:TM
+U+2126:Om
+U+212b:AO
+U+2153:13
+U+2154:23
+U+2155:15
+U+2156:25
+U+2157:35
+U+2158:45
+U+2159:16
+U+215a:56
+U+215b:18
+U+215c:38
+U+215d:58
+U+215e:78
+U+2160:1R
+U+2161:2R
+U+2162:3R
+U+2163:4R
+U+2164:5R
+U+2165:6R
+U+2166:7R
+U+2167:8R
+U+2168:9R
+U+2169:aR
+U+216a:bR
+U+216b:cR
+U+216c:50R
+U+216d:100R
+U+216e:500R
+U+216f:1000R
+U+2170:1r
+U+2171:2r
+U+2172:3r
+U+2173:4r
+U+2174:5r
+U+2175:6r
+U+2176:7r
+U+2177:8r
+U+2178:9r
+U+2179:ar
+U+217a:br
+U+217b:cr
+U+217c:50r
+U+217d:100r
+U+217e:500r
+U+217f:1000r
+U+2180:1000RCD
+U+2181:5000R
+U+2182:10000R
+U+2190:<-
+U+2191:-!
+U+2192:->
+U+2193:-v
+U+2194:<>
+U+2195:UD
+U+2196:<!!
+U+2197://>
+U+2198:!!>
+U+2199:<//
+U+21a8:UD-
+U+21c0:>V
+U+21d0:<=
+U+21d2:=>
+U+21d4:==
+U+2200:FA
+U+2202:dP
+U+2203:TE
+U+2205:/0
+U+2206:DE
+U+2207:NB
+U+2208:(-
+U+220b:-)
+U+220f:*P
+U+2211:+Z
+U+2212:-2
+U+2213:-+
+U+2214:.+
+U+2217:*-
+U+2218:Ob
+U+2219:sb
+U+221a:RT
+U+221d:0(
+U+221e:00
+U+221f:-L
+U+2220:-V
+U+2225:PP
+U+2227:AN
+U+2228:OR
+U+2229:(U
+U+222a:)U
+U+222b:In
+U+222c:DI
+U+222e:Io
+U+2234:.:
+U+2235::.
+U+2236::R
+U+2237:::
+U+223c:?1
+U+223e:CG
+U+2243:?-
+U+2245:?=
+U+2248:?2
+U+224c:=?
+U+2253:HI
+U+2260:!=
+U+2261:=3
+U+2264:=<
+U+2265:>=
+U+226a:<*
+U+226b:*>
+U+226e:!<
+U+226f:!>
+U+2282:(C
+U+2283:)C
+U+2286:(_
+U+2287:)_
+U+2299:0.
+U+229a:02
+U+22a5:-T
+U+22c5:.P
+U+22ee::3
+U+2302:Eh
+U+2308:<7
+U+2309:>7
+U+230a:7<
+U+230b:7>
+U+2310:NI
+U+2312:(A
+U+2315:TR
+U+2318:88
+U+2320:Iu
+U+2321:Il
+U+2329:</
+U+232a:/>
+U+2423:Vs
+U+2440:1h
+U+2441:3h
+U+2442:2h
+U+2443:4h
+U+2446:1j
+U+2447:2j
+U+2448:3j
+U+2449:4j
+U+2460:1-o
+U+2461:2-o
+U+2462:3-o
+U+2463:4-o
+U+2464:5-o
+U+2465:6-o
+U+2466:7-o
+U+2467:8-o
+U+2468:9-o
+U+2469:10-o
+U+246a:11-o
+U+246b:12-o
+U+246c:13-o
+U+246d:14-o
+U+246e:15-o
+U+246f:16-o
+U+2470:17-o
+U+2471:18-o
+U+2472:19-o
+U+2473:20-o
+U+2474:(1)
+U+2475:(2)
+U+2476:(3)
+U+2477:(4)
+U+2478:(5)
+U+2479:(6)
+U+247a:(7)
+U+247b:(8)
+U+247c:(9)
+U+247d:(10)
+U+247e:(11)
+U+247f:(12)
+U+2480:(13)
+U+2481:(14)
+U+2482:(15)
+U+2483:(16)
+U+2484:(17)
+U+2485:(18)
+U+2486:(19)
+U+2487:(20)
+U+2488:1.
+U+2489:2.
+U+248a:3.
+U+248b:4.
+U+248c:5.
+U+248d:6.
+U+248e:7.
+U+248f:8.
+U+2490:9.
+U+2491:10.
+U+2492:11.
+U+2493:12.
+U+2494:13.
+U+2495:14.
+U+2496:15.
+U+2497:16.
+U+2498:17.
+U+2499:18.
+U+249a:19.
+U+249b:20.
+U+249c:(a)
+U+249d:(b)
+U+249e:(c)
+U+249f:(d)
+U+24a0:(e)
+U+24a1:(f)
+U+24a2:(g)
+U+24a3:(h)
+U+24a4:(i)
+U+24a5:(j)
+U+24a6:(k)
+U+24a7:(l)
+U+24a8:(m)
+U+24a9:(n)
+U+24aa:(o)
+U+24ab:(p)
+U+24ac:(q)
+U+24ad:(r)
+U+24ae:(s)
+U+24af:(t)
+U+24b0:(u)
+U+24b1:(v)
+U+24b2:(w)
+U+24b3:(x)
+U+24b4:(y)
+U+24b5:(z)
+U+24b6:A-o
+U+24b7:B-o
+U+24b8:C-o
+U+24b9:D-o
+U+24ba:E-o
+U+24bb:F-o
+U+24bc:G-o
+U+24bd:H-o
+U+24be:I-o
+U+24bf:J-o
+U+24c0:K-o
+U+24c1:L-o
+U+24c2:M-o
+U+24c3:N-o
+U+24c4:O-o
+U+24c5:P-o
+U+24c6:Q-o
+U+24c7:R-o
+U+24c8:S-o
+U+24c9:T-o
+U+24ca:U-o
+U+24cb:V-o
+U+24cc:W-o
+U+24cd:X-o
+U+24ce:Y-o
+U+24cf:Z-o
+U+24d0:a-o
+U+24d1:b-o
+U+24d2:c-o
+U+24d3:d-o
+U+24d4:e-o
+U+24d5:f-o
+U+24d6:g-o
+U+24d7:h-o
+U+24d8:i-o
+U+24d9:j-o
+U+24da:k-o
+U+24db:l-o
+U+24dc:m-o
+U+24dd:n-o
+U+24de:o-o
+U+24df:p-o
+U+24e0:q-o
+U+24e1:r-o
+U+24e2:s-o
+U+24e3:t-o
+U+24e4:u-o
+U+24e5:v-o
+U+24e6:w-o
+U+24e7:x-o
+U+24e8:y-o
+U+24e9:z-o
+U+24ea:0-o
+U+2500:hh
+U+2501:HH-
+U+2502:vv
+U+2503:VV-
+U+2504:3-
+U+2505:3_
+U+2506:3!
+U+2507:3/
+U+2508:4-
+U+2509:4_
+U+250a:4!
+U+250b:4/
+U+250c:dr
+U+250d:dR-
+U+250e:Dr-
+U+250f:DR-
+U+2510:dl
+U+2511:dL-
+U+2512:Dl-
+U+2513:LD-
+U+2514:ur
+U+2515:uR-
+U+2516:Ur-
+U+2517:UR-
+U+2518:ul
+U+2519:uL-
+U+251a:Ul-
+U+251b:UL-
+U+251c:vr
+U+251d:vR-
+U+251e:Udr
+U+251f:uDr
+U+2520:Vr-
+U+2521:UdR
+U+2522:uDR
+U+2523:VR-
+U+2524:vl
+U+2525:vL-
+U+2526:Udl
+U+2527:uDl
+U+2528:Vl-
+U+2529:UdL
+U+252a:uDL
+U+252b:VL-
+U+252c:dh
+U+252d:dLr
+U+252e:dlR
+U+252f:dH-
+U+2530:Dh-
+U+2531:DLr
+U+2532:DlR
+U+2533:DH-
+U+2534:uh
+U+2535:uLr
+U+2536:ulR
+U+2537:uH-
+U+2538:Uh-
+U+2539:ULr
+U+253a:UlR
+U+253b:UH-
+U+253c:vh
+U+253d:vLr
+U+253e:vlR
+U+253f:vH-
+U+2540:Udh
+U+2541:uDh
+U+2542:Vh-
+U+2543:UdLr
+U+2544:UdlR
+U+2545:uDLr
+U+2546:uDlR
+U+2547:UdH
+U+2548:uDH
+U+2549:VLr
+U+254a:VlR
+U+254b:VH-
+U+2550:HH
+U+2551:VV
+U+2552:dR
+U+2553:Dr
+U+2554:DR
+U+2555:dL
+U+2556:Dl
+U+2557:LD
+U+2558:uR
+U+2559:Ur
+U+255a:UR
+U+255b:uL
+U+255c:Ul
+U+255d:UL
+U+255e:vR
+U+255f:Vr
+U+2560:VR
+U+2561:vL
+U+2562:Vl
+U+2563:VL
+U+2564:dH
+U+2565:Dh
+U+2566:DH
+U+2567:uH
+U+2568:Uh
+U+2569:UH
+U+256a:vH
+U+256b:Vh
+U+256c:VH
+U+2571:FD
+U+2572:BD
+U+2580:TB
+U+2584:LB
+U+2588:FB
+U+258c:lB
+U+2590:RB
+U+2591:.S
+U+2592::S
+U+2593:?S
+U+25a0:fS
+U+25a1:OS
+U+25a2:RO
+U+25a3:Rr
+U+25a4:RF
+U+25a5:RY
+U+25a6:RH
+U+25a7:RZ
+U+25a8:RK
+U+25a9:RX
+U+25aa:sB
+U+25ac:SR
+U+25ad:Or
+U+25b2:UT
+U+25b3:uT
+U+25b7:Tr
+U+25ba:PR
+U+25bc:Dt
+U+25bd:dT
+U+25c1:Tl
+U+25c4:PL
+U+25c6:Db
+U+25c7:Dw
+U+25ca:LZ
+U+25cb:0m
+U+25ce:0o
+U+25cf:0M
+U+25d0:0L
+U+25d1:0R
+U+25d8:Sn
+U+25d9:Ic
+U+25e2:Fd
+U+25e3:Bd
+U+25ef:Ci
+U+2605:*2
+U+2606:*1
+U+260e:TEL
+U+260f:tel
+U+261c:<H
+U+261e:>H
+U+263a:0u
+U+263b:0U
+U+263c:SU
+U+2640:Fm
+U+2642:Ml
+U+2660:cS
+U+2661:cH
+U+2662:cD
+U+2663:cC
+U+2664:cS-
+U+2665:cH-
+U+2666:cD-
+U+2667:cC-
+U+2669:Md
+U+266a:M8
+U+266b:M2
+U+266c:M16
+U+266d:Mb
+U+266e:Mx
+U+266f:MX
+U+2713:OK
+U+2717:XX
+U+2720:-X
+U+3000:IS
+U+3001:,_
+U+3002:._
+U+3003:+"
+U+3004:JIS
+U+3005:*_
+U+3006:;_
+U+3007:0_
+U+300a:<+
+U+300b:>+
+U+300c:<'
+U+300d:>'
+U+300e:<"
+U+300f:>"
+U+3010:("
+U+3011:)"
+U+3012:=T
+U+3013:=_
+U+3014:('
+U+3015:)'
+U+3016:(I
+U+3017:)I
+U+301c:-?
+U+3020:=T:)
+U+3041:A5
+U+3042:a5
+U+3043:I5
+U+3044:i5
+U+3045:U5
+U+3046:u5
+U+3047:E5
+U+3048:e5
+U+3049:O5
+U+304a:o5
+U+304b:ka
+U+304c:ga
+U+304d:ki
+U+304e:gi
+U+304f:ku
+U+3050:gu
+U+3051:ke
+U+3052:ge
+U+3053:ko
+U+3054:go
+U+3055:sa
+U+3056:za
+U+3057:si
+U+3058:zi
+U+3059:su
+U+305a:zu
+U+305b:se
+U+305c:ze
+U+305d:so
+U+305e:zo
+U+305f:ta
+U+3060:da
+U+3061:ti
+U+3062:di
+U+3063:tU
+U+3064:tu
+U+3065:du
+U+3066:te
+U+3067:de
+U+3068:to
+U+3069:do
+U+306a:na
+U+306b:ni
+U+306c:nu
+U+306d:ne
+U+306e:no
+U+306f:ha
+U+3070:ba
+U+3071:pa
+U+3072:hi
+U+3073:bi
+U+3074:pi
+U+3075:hu
+U+3076:bu
+U+3077:pu
+U+3078:he
+U+3079:be
+U+307a:pe
+U+307b:ho
+U+307c:bo
+U+307d:po
+U+307e:ma
+U+307f:mi
+U+3080:mu
+U+3081:me
+U+3082:mo
+U+3083:yA
+U+3084:ya
+U+3085:yU
+U+3086:yu
+U+3087:yO
+U+3088:yo
+U+3089:ra
+U+308a:ri
+U+308b:ru
+U+308c:re
+U+308d:ro
+U+308e:wA
+U+308f:wa
+U+3090:wi
+U+3091:we
+U+3092:wo
+U+3093:n5
+U+3094:vu
+U+309b:"5
+U+309c:05
+U+309d:*5
+U+309e:+5
+U+30a1:a6
+U+30a2:A6
+U+30a3:i6
+U+30a4:I6
+U+30a5:u6
+U+30a6:U6
+U+30a7:e6
+U+30a8:E6
+U+30a9:o6
+U+30aa:O6
+U+30ab:Ka
+U+30ac:Ga
+U+30ad:Ki
+U+30ae:Gi
+U+30af:Ku
+U+30b0:Gu
+U+30b1:Ke
+U+30b2:Ge
+U+30b3:Ko
+U+30b4:Go
+U+30b5:Sa
+U+30b6:Za
+U+30b7:Si
+U+30b8:Zi
+U+30b9:Su
+U+30ba:Zu
+U+30bb:Se
+U+30bc:Ze
+U+30bd:So
+U+30be:Zo
+U+30bf:Ta
+U+30c0:Da
+U+30c1:Ti
+U+30c2:Di
+U+30c3:TU
+U+30c4:Tu
+U+30c5:Du
+U+30c6:Te
+U+30c7:De
+U+30c8:To
+U+30c9:Do
+U+30ca:Na
+U+30cb:Ni
+U+30cc:Nu
+U+30cd:Ne
+U+30ce:No
+U+30cf:Ha
+U+30d0:Ba
+U+30d1:Pa
+U+30d2:Hi
+U+30d3:Bi
+U+30d4:Pi
+U+30d5:Hu
+U+30d6:Bu
+U+30d7:Pu
+U+30d8:He
+U+30d9:Be
+U+30da:Pe
+U+30db:Ho
+U+30dc:Bo
+U+30dd:Po
+U+30de:Ma
+U+30df:Mi
+U+30e0:Mu
+U+30e1:Me
+U+30e2:Mo
+U+30e3:YA
+U+30e4:Ya
+U+30e5:YU
+U+30e6:Yu
+U+30e7:YO
+U+30e8:Yo
+U+30e9:Ra
+U+30ea:Ri
+U+30eb:Ru
+U+30ec:Re
+U+30ed:Ro
+U+30ee:WA
+U+30ef:Wa
+U+30f0:Wi
+U+30f1:We
+U+30f2:Wo
+U+30f3:N6
+U+30f4:Vu
+U+30f5:KA
+U+30f6:KE
+U+30f7:Va
+U+30f8:Vi
+U+30f9:Ve
+U+30fa:Vo
+U+30fb:.6
+U+30fc:-6
+U+30fd:*6
+U+30fe:+6
+U+3105:b4
+U+3106:p4
+U+3107:m4
+U+3108:f4
+U+3109:d4
+U+310a:t4
+U+310b:n4
+U+310c:l4
+U+310d:g4
+U+310e:k4
+U+310f:h4
+U+3110:j4
+U+3111:q4
+U+3112:x4
+U+3113:zh
+U+3114:ch
+U+3115:sh
+U+3116:r4
+U+3117:z4
+U+3118:c4
+U+3119:s4
+U+311a:a4
+U+311b:o4
+U+311c:e4
+U+311d:eh4
+U+311e:ai
+U+311f:ei
+U+3120:au
+U+3121:ou
+U+3122:an
+U+3123:en
+U+3124:aN
+U+3125:eN
+U+3126:er
+U+3127:i4
+U+3128:u4
+U+3129:iu
+U+312a:v4
+U+312b:nG
+U+312c:gn
+U+321c:(JU)
+U+3220:1c
+U+3221:2c
+U+3222:3c
+U+3223:4c
+U+3224:5c
+U+3225:6c
+U+3226:7c
+U+3227:8c
+U+3228:9c
+U+3229:10c
+U+327f:KSC
+U+33c2:am
+U+33d8:pm
+U+fb00:ff
+U+fb01:fi
+U+fb02:fl
+U+fb03:ffi
+U+fb04:ffl
+U+fb05:St
+U+fb06:st
+U+fe7d:3+;
+U+fe82:aM.
+U+fe84:aH.
+U+fe88:ah.
+U+fe8d:a+-
+U+fe8e:a+.
+U+fe8f:b+-
+U+fe90:b+.
+U+fe91:b+,
+U+fe92:b+;
+U+fe93:tm-
+U+fe94:tm.
+U+fe95:t+-
+U+fe96:t+.
+U+fe97:t+,
+U+fe98:t+;
+U+fe99:tk-
+U+fe9a:tk.
+U+fe9b:tk,
+U+fe9c:tk;
+U+fe9d:g+-
+U+fe9e:g+.
+U+fe9f:g+,
+U+fea0:g+;
+U+fea1:hk-
+U+fea2:hk.
+U+fea3:hk,
+U+fea4:hk;
+U+fea5:x+-
+U+fea6:x+.
+U+fea7:x+,
+U+fea8:x+;
+U+fea9:d+-
+U+feaa:d+.
+U+feab:dk-
+U+feac:dk.
+U+fead:r+-
+U+feae:r+.
+U+feaf:z+-
+U+feb0:z+.
+U+feb1:s+-
+U+feb2:s+.
+U+feb3:s+,
+U+feb4:s+;
+U+feb5:sn-
+U+feb6:sn.
+U+feb7:sn,
+U+feb8:sn;
+U+feb9:c+-
+U+feba:c+.
+U+febb:c+,
+U+febc:c+;
+U+febd:dd-
+U+febe:dd.
+U+febf:dd,
+U+fec0:dd;
+U+fec1:tj-
+U+fec2:tj.
+U+fec3:tj,
+U+fec4:tj;
+U+fec5:zH-
+U+fec6:zH.
+U+fec7:zH,
+U+fec8:zH;
+U+fec9:e+-
+U+feca:e+.
+U+fecb:e+,
+U+fecc:e+;
+U+fecd:i+-
+U+fece:i+.
+U+fecf:i+,
+U+fed0:i+;
+U+fed1:f+-
+U+fed2:f+.
+U+fed3:f+,
+U+fed4:f+;
+U+fed5:q+-
+U+fed6:q+.
+U+fed7:q+,
+U+fed8:q+;
+U+fed9:k+-
+U+feda:k+.
+U+fedb:k+,
+U+fedc:k+;
+U+fedd:l+-
+U+fede:l+.
+U+fedf:l+,
+U+fee0:l+;
+U+fee1:m+-
+U+fee2:m+.
+U+fee3:m+,
+U+fee4:m+;
+U+fee5:n+-
+U+fee6:n+.
+U+fee7:n+,
+U+fee8:n+;
+U+fee9:h+-
+U+feea:h+.
+U+feeb:h+,
+U+feec:h+;
+U+feed:w+-
+U+feee:w+.
+U+feef:j+-
+U+fef0:j+.
+U+fef1:y+-
+U+fef2:y+.
+U+fef3:y+,
+U+fef4:y+;
+U+fef5:lM-
+U+fef6:lM.
+U+fef7:lH-
+U+fef8:lH.
+U+fef9:lh-
+U+fefa:lh.
+U+fefb:la-
+U+fefc:la.
+U+0000:NU
+U+0001:SH
+U+0002:SX
+U+0003:EX
+U+0004:ET
+U+0005:EQ
+U+0006:AK
+U+0007:BL
+U+0008:BS
+U+0009:HT
+U+000a:LF
+U+000b:VT
+U+000c:FF
+U+000d:CR
+U+000e:SO
+U+000f:SI
+U+0010:DL
+U+0011:D1
+U+0012:D2
+U+0013:D3
+U+0014:D4
+U+0015:NK
+U+0016:SY
+U+0017:EB
+U+0018:CN
+U+0019:EM
+U+001a:SB
+U+001b:EC
+U+001c:FS
+U+001d:GS
+U+001e:RS
+U+001f:US
+U+007f:DT
+U+0080:PA
+U+0081:HO
+U+0082:BH
+U+0083:NH
+U+0084:IN
+U+0085:NL
+U+0086:SA
+U+0087:ES
+U+0088:HS
+U+0089:HJ
+U+008a:VS
+U+008b:PD
+U+008c:PU
+U+008d:RI
+U+008e:S2
+U+008f:S3
+U+0090:DC
+U+0091:P1
+U+0092:P2
+U+0093:TS
+U+0094:CC
+U+0095:MW
+U+0096:SG
+U+0097:EG
+U+0098:SS
+U+0099:GC
+U+009a:SC
+U+009b:CI
+U+009c:ST
+U+009d:OC
+U+009e:PM
+U+009f:AC
+U+e000:"3
+U+e001:"1
+U+e002:"!
+U+e003:"'
+U+e004:">
+U+e005:"?
+U+e006:"-
+U+e007:"(
+U+e008:".
+U+e009:":
+U+e00a:"0
+U+e00b:",
+U+e00c:"_
+U+e00d:""
+U+e00e:";
+U+e00f:"<
+U+e010:"=
+U+e011:"/
+U+e012:"p
+U+e013:"d
+U+e014:"i
+U+e015:+_
+U+e016:a+:
+U+e017:Tel
+U+e018:UA
+U+e019:UB
+U+e01e:Mc
+U+e01f:Fl
diff --git a/src/chrtrans/utf8_uni.tbl b/src/chrtrans/utf8_uni.tbl
new file mode 100644
index 00000000..02e153a5
--- /dev/null
+++ b/src/chrtrans/utf8_uni.tbl
@@ -0,0 +1,33 @@
+#
+# This one is not really much of a "translation table", it mostly just
+# tells Lynx that "unicode-1-1-utf-8" is Unicode/UCS2 encoded in UTF8...
+#
+#Shall this become the "default" translation?
+#Meaning of that is currently unclear...  It's different
+#from the default input or defualt output charset...
+#but there has to be exactly one table marked as "default".
+D0
+#
+#The MIME name of this charset. 
+Municode-1-1-utf-8
+
+#Name as a Display Charset (used on Options screen)
+O UNICODE UTF 8
+
+# Some kind of raw Unicode?
+# Use 6 for for really "raw" 16bit UCS-2, 7 for UTF-8, ...
+
+# most of these codes currently don't make much sense in a *.uni file,
+# but for completeness (from UCDefs.h):
+#  #define UCT_ENC_7BIT 0
+#  #define UCT_ENC_8BIT 1
+#  #define UCT_ENC_8859 2		/* ??? */
+#  #define UCT_ENC_2022 3
+#  #define UCT_ENC_MAYBE2022 4
+#  #define UCT_ENC_CJK 5
+#  #define UCT_ENC_16BIT 6
+#  #define UCT_ENC_UTF8 7
+
+R 7
+ 
+0x20-0x7f	idem
diff --git a/src/makefile.dos b/src/makefile.dos
new file mode 100644
index 00000000..8a820ab8
--- /dev/null
+++ b/src/makefile.dos
@@ -0,0 +1,54 @@
+OBJS=  LYClean.o LYShowInfo.o LYEdit.o LYStrings.o \
+LYMail.o HTAlert.o GridText.o LYGetFile.o \
+LYMain.o LYMainLoop.o LYCurses.o LYBookmark.o LYUtils.o \
+LYOptions.o LYReadCFG.o LYSearch.o LYHistory.o \
+LYForms.o LYPrint.o LYrcFile.o LYDownload.o LYNews.o LYKeymap.o \
+HTFWriter.o HTInit.o DefaultStyle.o LYLocal.o LYUpload.o \
+LYLeaks.o LYexit.o LYJump.o LYList.o LYCgi.o LYTraversal.o \
+LYEditmap.o LYCharSets.o LYCharUtils.o LYMap.o LYCookie.o HTML.o \
+UCAUTO.o UCAUX.o UCDOMAP.o
+
+CFLAGS= $(MCFLAGS) -I.. $(SLANGINC)
+
+CC = gcc
+#MCFLAGS = -O -DNCURSES -DFANCY_CURSES -DACCESS_AUTH -DNO_CUSERID -DNOUSERS -DDOSPATH -DNO_TTYTYPE -DNO_UTMP -I../WWW/library/implementation -I../djgpp/tcplib/include -I../djgpp/tcplib/include/tcp -I../djgpp/pdcurses/include
+MCFLAGS = -DEXP_CHARTRANS -DCOLOR_CURSES -DNCURSES -DFANCY_CURSES -DACCESS_AUTH -DNO_CUSERID -DNOUSERS -DDOSPATH -DNO_TTYTYPE -DNO_UTMP -I../WWW/library/implementation -I../djgpp/tcplib/include -I../djgpp/tcplib/include/tcp -I../djgpp/pdcurses/include
+WWWLIB = ../WWW/library/djgpp/libwww.a ../djgpp/pdcurses/lib/libcurso.a ../djgpp/tcplib/obj/libtcp.a
+
+all: lynx
+
+lynx:   message $(OBJS) $(WWWLIB)
+	@echo "Linking and creating Lynx executable"
+	$(CC) $(CFLAGS) -o lynx  $(OBJS) $(WWWLIB) $(SLANGLIB) $(LIBS)
+	@echo "Welcome to Lynx!"
+
+message:
+	@echo "Compiling Lynx sources"
+
+dbg:	$(OBJS) $(WWWLIB)
+	@echo "Making Lynx code"
+	$(CC) -g $(OBJS) $(CFLAGS) $(WWWLIB) $(SLANGLIB) $(LIBS)
+
+lint:
+	lint *.c  > ../lint.out
+
+clean:
+	rm -f lynx core *.[ob]
+
+LYMain.o: ../userdefs.h
+LYMainLoop.o: LYMainLoop.c ../userdefs.h
+LYReadCFG.o: LYReadCFG.c ../userdefs.h
+HTFWriter.o: HTFWriter.c ../userdefs.h
+LYGetFile.o: LYGetFile.c ../userdefs.h
+LYOptions.o: LYOptions.c ../userdefs.h
+LYReadCFG.o: LYReadCFG.c ../userdefs.h
+LYTraversal.o: LYTraversal.c ../userdefs.h
+LYCharSets.o: LYCharSets.c ../userdefs.h
+LYShowInfo.o: LYShowInfo.c ../userdefs.h
+LYStrings.o: LYStrings.c ../userdefs.h
+LYBookmark.o: LYBookmark.c ../userdefs.h
+LYHistory.o: LYHistory.c ../userdefs.h
+LYDownload.o: LYDownload.c ../userdefs.h
+DefaultStyle.o: DefaultStyle.c ../userdefs.h
+LYEditmap.o: LYEditmap.c ../userdefs.h
+LYCharUtils.o: LYCharUtils.c ../userdefs.h
diff --git a/src/makefile.in b/src/makefile.in
new file mode 100644
index 00000000..92977d01
--- /dev/null
+++ b/src/makefile.in
@@ -0,0 +1,111 @@
+# template-makefile for Lynx src directory
+
+SHELL = /bin/sh
+
+@SET_MAKE@
+prefix		= @prefix@
+exec_prefix	= @exec_prefix@
+srcdir		= @srcdir@
+VPATH		= $(srcdir)
+
+WWWINC		= WWW/Library/Implementation
+SITE_DEFS	= # FIXME: set in parent makefile
+MCFLAGS		= # FIXME: set in parent makefile
+
+CC		= @CC@
+CPPOPTS		= @DEFS@ @CPPFLAGS@ -I.. -I../$(WWWINC) $(MCFLAGS) $(SITE_DEFS)
+CFLAGS		= $(CPPOPTS) @CFLAGS@
+
+CHARTRANS_OBJS=UCdomap.o UCAux.o UCAuto.o
+OBJS=  LYClean.o LYShowInfo.o LYEdit.o LYStrings.o \
+LYMail.o HTAlert.o GridText.o LYGetFile.o \
+LYMain.o LYMainLoop.o LYCurses.o LYBookmark.o LYUtils.o \
+LYOptions.o LYReadCFG.o LYSearch.o LYHistory.o \
+LYForms.o LYPrint.o LYrcFile.o LYDownload.o LYNews.o LYKeymap.o \
+HTML.o HTFWriter.o HTInit.o DefaultStyle.o LYLocal.o LYUpload.o \
+LYLeaks.o LYexit.o LYJump.o LYList.o LYCgi.o LYTraversal.o \
+LYEditmap.o LYCharSets.o LYCharUtils.o LYMap.o LYCookie.o \
+ $(CHARTRANS_OBJS)
+
+all: lynx
+
+.SUFFIXES : .i
+
+.c.o:
+@SHOW_CC@
+	@ECHO_CC@$(CC) $(CPPOPTS) $(CFLAGS) -c $(srcdir)/$*.c
+
+.c.i:
+@SHOW_CC@
+	@ECHO_CC@$(CPP) -C $(CPPOPTS) $*.c >$@
+
+lynx:   message do_chartrans_stuff $(OBJS) $(WWWLIB)
+	@echo "Linking and creating Lynx executable"
+	$(CC) $(CFLAGS) -o lynx  $(OBJS) $(WWWLIB) $(SLANGLIB) $(LIBS)
+	@echo "Copying Lynx executable into this directory"
+	cp lynx ..
+	@echo "Welcome to Lynx!"
+
+message:
+	@echo "Compiling Lynx sources"
+
+do_chartrans_stuff:
+	-cd chrtrans && $(MAKE) \
+		MCFLAGS="$(MCFLAGS)" \
+		SITE_DEFS="$(SITE_DEFS)" \
+		CC="$(CC)" tables
+
+lint:
+	lint $(CPPFLAGS) *.c  > ../lint.out
+
+clean:
+	rm -f lynx core *.[ob]
+	cd chrtrans && $(MAKE) clean
+
+LYMain.o: ../userdefs.h
+LYMainLoop.o: ../userdefs.h
+LYReadCFG.o: ../userdefs.h
+HTFWriter.o: ../userdefs.h
+LYGetFile.o: ../userdefs.h
+LYOptions.o: ../userdefs.h
+LYReadCFG.o: ../userdefs.h
+LYrcFile.o: ../userdefs.h
+LYMail.o: ../userdefs.h
+LYUtils.o: ../userdefs.h
+HTInit.o: ../userdefs.h
+LYTraversal.o: ../userdefs.h
+LYMail.o: ../userdefs.h
+LYCharSets.o: ../userdefs.h
+
+CHRTR= chrtrans/
+
+TABLES= $(CHRTR)iso02_uni.h \
+ $(CHRTR)iso01_uni.h \
+ $(CHRTR)def7_uni.h \
+ $(CHRTR)iso03_uni.h \
+ $(CHRTR)iso04_uni.h \
+ $(CHRTR)iso05_uni.h \
+ $(CHRTR)iso07_uni.h \
+ $(CHRTR)iso09_uni.h \
+ $(CHRTR)iso10_uni.h \
+ $(CHRTR)koi8r_uni.h \
+ $(CHRTR)cp437_uni.h \
+ $(CHRTR)cp850_uni.h \
+ $(CHRTR)cp852_uni.h \
+ $(CHRTR)cp1250_uni.h \
+ $(CHRTR)cp1252_uni.h \
+ $(CHRTR)utf8_uni.h \
+ $(CHRTR)rfc_suni.h \
+ $(CHRTR)mnemonic_suni.h \
+ $(CHRTR)mnem_suni.h
+
+CMN=../WWW/Library/Implementation/
+
+$(TABLES):
+	-cd chrtrans && $(MAKE) tables
+
+UCdomap.o: UCdomap.c chrtrans/UCkd.h chrtrans/makeuctb chrtrans/makeuctb.c \
+                 UCdomap.h $(CMN)UCMap.h $(TABLES) ../userdefs.h
+
+UCAux.o : UCAux.c $(CMN)UCAux.h $(CMN)UCDefs.h
+LYCookie.o: ../userdefs.h
diff --git a/userdefs.h b/userdefs.h
index 32fa89fe..336aab4e 100644
--- a/userdefs.h
+++ b/userdefs.h
@@ -216,7 +216,11 @@
  * mailcap files (see the examples in the samples directory).
  */
 #ifndef LYNX_CFG_FILE
+#ifdef DOSPATH
+#define LYNX_CFG_FILE "./lynx.cfg"
+#else
 #define LYNX_CFG_FILE "/usr/local/lib/lynx.cfg"
+#endif /* DOSPATH */
 #endif /* LYNX_CFG_FILE */
 
 /**************************
@@ -283,15 +287,18 @@
  * the mailmsg() and reply_by_mail() functions in LYMail.c, or
  * interposition of a script, may be required.
  */
+#ifndef HAVE_CONFIG_H
 #ifdef MMDF
 #define SYSTEM_MAIL "/usr/mmdf/bin/submit" 
 #else
 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__bsdi__)
 #define SYSTEM_MAIL "/usr/sbin/sendmail"
-#else /* everthing else: */
+#else /* everything else: */
 #define SYSTEM_MAIL "/usr/lib/sendmail" 
 #endif /* __FreeBSD || __NetBSD__ || __bsdi__ */
 #endif /* MMDF */
+#define SYSTEM_MAIL_FLAGS ""
+#endif	/* !HAVE_CONFIG_H */
 
 /**************************
  * A place to put temporary files, it's almost always "/tmp/" on
@@ -302,7 +309,7 @@
 #define TEMP_SPACE "/tmp/"
 
 /********************************
- * Don't let the user enter his/hers email address when sending a message.
+ * Don't let the user enter his/her email address when sending a message.
  * Anonymous mail makes it far too easy for a user to spoof someone elses
  * email address.
  * This requires that your mailer agent put in the From: field for you.
@@ -751,10 +758,17 @@
  * curses supports line-drawing characters, set to '*' or any other character
  * to not use line-drawing (e.g., '|' for vertical and '-' for horizontal).
  */
+#ifndef HAVE_CONFIG_H
+#ifdef DOSPATH
+#define BOXVERT 0
+#define BOXHORI 0
+#else
 #define BOXVERT '*'
 /* #define BOXVERT 0 */
 #define BOXHORI '*'
 /* #define BOXHORI 0 */
+#endif /* DOSPATH */
+#endif	/* !HAVE_CONFIG_H */
 
 /******************************
  * LY_UMLAUT controls the 7-bit expansion of characters with dieresis or
@@ -1155,7 +1169,11 @@
  */
 
 #define LYNX_NAME "Lynx"
-#define LYNX_VERSION "2.7.1"
+/* The strange-looking comment on the next line tells PRCS to replace
+ * the version definition with the Project Version on checkout. Just
+ * ignore it. - kw */
+/* $Format: "#define LYNX_VERSION \"$ProjectVersion$\""$ */
+#define LYNX_VERSION "2.7.1ac-0.5"
 
 /****************************************************************
  * The LYMessages_en.h header defines default, English strings
@@ -1179,17 +1197,53 @@
 #define MAXHIST  1024		/* max links we remember in history */
 #define MAXLINKS 1024		/* max links on one screen */
 
+#ifdef EXP_CHARTRANS
+#define MAX_CHARSETS 40
+#define MAX_CHARSETSP 41	/* always one more */
+#endif
+
 #ifdef VMS
 /*
 **  Use the VMS port of gzip for uncompressing both .Z and .gz files.
 */
 #define UNCOMPRESS_PATH  "gzip -d"
 #define GZIP_PATH "gzip"
+
 #else
+
+#ifdef DOSPATH
+/*
+**    WINDOWS
+**  ===========
+*/
+#define COMPRESS_PATH   "compress"
+#define UNCOMPRESS_PATH "uncompress"
+#define UUDECODE_PATH   "uudecode"
+#define ZCAT_PATH       "zcat"
+#define GZIP_PATH       "gzip"
+#define INSTALL_PATH    "install"
+#define TAR_PATH        "tar"
+#define TOUCH_PATH      "touch"
+
+/*
+**    WINDOWS/DOS
+**  ===========
+*/
+#define ZIP_PATH        "zip"
+#define UNZIP_PATH      "unzip"
+#define MKDIR_PATH      "mkdir"
+#define MV_PATH         "mv"
+#define RM_PATH         "rm"
+#define COPY_PATH       "cp"
+#define CHMOD_PATH      "chmod"
+
+#else	/* Unix */
+
 /*
 **  Check these paths on Unix!
 **  ==========================
 */
+#ifndef HAVE_CONFIG_H
 #if defined(__FreeBSD__)||defined(__NetBSD__)||defined(__bsdi__)||defined(LINUX)
 /*
 **  FreeBSD, NetBSD, BSDI, or Linux:
@@ -1216,7 +1270,9 @@
 #define	INSTALL_PATH	"/bin/install"
 #define	TAR_PATH	"/bin/tar"
 #define	TOUCH_PATH	"/bin/touch"
+
 #endif /* __FreeBSD__ || __NetBSD__ || __bsdi__ || LINUX */
+
 /*
 **  All Unix:
 **  =========
@@ -1228,6 +1284,9 @@
 #define	RM_PATH		"/bin/rm"
 #define COPY_PATH	"/bin/cp"
 #define CHMOD_PATH	"/bin/chmod"
+
+#endif /* HAVE_CONFIG_H */
+#endif /* DOSPATH */
 #endif /* VMS */
 
 #endif /* USERDEFS_H */